1# Copyright (C) 1997-2016 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with GCC; see the file COPYING3. If not see 15# <http://www.gnu.org/licenses/>. 16 17# GCC testsuite that uses the `dg.exp' driver. 18 19# Load support procs. 20load_lib gcc-dg.exp 21load_lib clearcap.exp 22 23# Set up flags used for tests that don't specify options. 24global DEFAULT_VECTCFLAGS 25set DEFAULT_VECTCFLAGS "" 26 27# If the target system supports vector instructions, the default action 28# for a test is 'run', otherwise it's 'compile'. Save current default. 29# Executing vector instructions on a system without hardware vector support 30# is also disabled by a call to check_vect, but disabling execution here is 31# more efficient. 32global dg-do-what-default 33set save-dg-do-what-default ${dg-do-what-default} 34 35# Skip these tests for targets that do not support generating vector 36# code. Set additional target-dependent vector flags, which can be 37# overridden by using dg-options in individual tests. 38if ![check_vect_support_and_set_flags] { 39 return 40} 41 42# These flags are used for all targets. 43lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" "-fno-vect-cost-model" "-fno-common" 44 45# Initialize `dg'. 46dg-init 47clearcap-init 48 49global VEC_FLAGS 50set VEC_FLAGS $DEFAULT_VECTCFLAGS 51 52global O1_VECTCFLAGS 53set O1_VECTCFLAGS $DEFAULT_VECTCFLAGS 54lappend O1_VECTCFLAGS "-O1" 55lappend O1_VECTCFLAGS "-fdump-tree-vect-details" 56 57global O_VECTCFLAGS 58set O_VECTCFLAGS $DEFAULT_VECTCFLAGS 59lappend O_VECTCFLAGS "-O" 60lappend O_VECTCFLAGS "-fdump-tree-vect-details" 61 62lappend DEFAULT_VECTCFLAGS "-O2" 63 64# Tests that should be run without generating dump info 65dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/nodump-*.\[cS\]]] \ 66 "" $DEFAULT_VECTCFLAGS 67 68# "-O -fdump-tree-veclower2" 69lappend VEC_FLAGS "-O" "-fdump-tree-veclower2" 70dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vec-scal-*.\[cS\]]] \ 71 "" $VEC_FLAGS 72 73set VECT_SLP_CFLAGS $DEFAULT_VECTCFLAGS 74 75lappend DEFAULT_VECTCFLAGS "-fdump-tree-vect-details" 76lappend VECT_SLP_CFLAGS "-fdump-tree-slp-details" 77 78# Main loop. 79set VECT_ADDITIONAL_FLAGS [list ""] 80if { [check_effective_target_lto] } { 81 lappend VECT_ADDITIONAL_FLAGS "-flto -ffat-lto-objects" 82} 83foreach flags $VECT_ADDITIONAL_FLAGS { 84 dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/pr*.\[cS\]]] \ 85 $flags $DEFAULT_VECTCFLAGS 86 dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vect-*.\[cS\]]] \ 87 $flags $DEFAULT_VECTCFLAGS 88 dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/slp-*.\[cS\]]] \ 89 $flags $DEFAULT_VECTCFLAGS 90 dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/bb-slp*.\[cS\]]] \ 91 $flags $VECT_SLP_CFLAGS 92} 93 94#### Tests with special options 95global SAVED_DEFAULT_VECTCFLAGS 96set SAVED_DEFAULT_VECTCFLAGS $DEFAULT_VECTCFLAGS 97set SAVED_VECT_SLP_CFLAGS $VECT_SLP_CFLAGS 98 99# --param vect-max-version-for-alias-checks=0 tests 100set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 101lappend DEFAULT_VECTCFLAGS "--param" "vect-max-version-for-alias-checks=0" 102dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-vfa-*.\[cS\]]] \ 103 "" $DEFAULT_VECTCFLAGS 104 105# -ffast-math tests 106set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 107lappend DEFAULT_VECTCFLAGS "-ffast-math" 108dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/fast-math-\[ipsv\]*.\[cS\]]] \ 109 "" $DEFAULT_VECTCFLAGS 110 111# -ffast-math SLP tests 112set VECT_SLP_CFLAGS $SAVED_VECT_SLP_CFLAGS 113lappend VECT_SLP_CFLAGS "-ffast-math" 114dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/fast-math-bb-slp-*.\[cS\]]] \ 115 "" $VECT_SLP_CFLAGS 116 117# -fno-fast-math tests 118set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 119lappend DEFAULT_VECTCFLAGS "-fno-fast-math" 120dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-fast-math-*.\[cS\]]] \ 121 "" $DEFAULT_VECTCFLAGS 122 123# -fno-math-errno tests 124set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 125lappend DEFAULT_VECTCFLAGS "-fno-math-errno" 126dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-math-errno-*.\[cS\]]] \ 127 "" $DEFAULT_VECTCFLAGS 128 129# -fwrapv tests 130set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 131lappend DEFAULT_VECTCFLAGS "-fwrapv" 132dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/wrapv-*.\[cS\]]] \ 133 "" $DEFAULT_VECTCFLAGS 134 135# -ftrapv tests 136set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 137lappend DEFAULT_VECTCFLAGS "-ftrapv" 138dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/trapv-*.\[cS\]]] \ 139 "" $DEFAULT_VECTCFLAGS 140 141# -fno-tree-dce tests 142set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 143lappend DEFAULT_VECTCFLAGS "-fno-tree-dce" 144dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-dce-*.\[cS\]]] \ 145 "" $DEFAULT_VECTCFLAGS 146 147# -fsection-anchors tests 148set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 149lappend DEFAULT_VECTCFLAGS "-fsection-anchors" 150dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/section-anchors-*.\[cS\]]] \ 151 "" $DEFAULT_VECTCFLAGS 152 153# alignment-sensitive -fsection-anchors tests 154set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 155lappend DEFAULT_VECTCFLAGS "-fsection-anchors" \ 156 "-fdump-ipa-increase_alignment-details" 157dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/aligned-section-anchors-*.\[cS\]]] \ 158 "" $DEFAULT_VECTCFLAGS 159 160# -fno-section-anchors tests 161set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 162lappend DEFAULT_VECTCFLAGS "-fno-section-anchors" 163dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-section-anchors-*.\[cS\]]] \ 164 "" $DEFAULT_VECTCFLAGS 165 166# -funswitch-loops tests 167set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 168lappend DEFAULT_VECTCFLAGS "-funswitch-loops" 169dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/unswitch-loops-*.\[cS\]]] \ 170 "" $DEFAULT_VECTCFLAGS 171 172# -fno-trapping-math tests 173set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 174lappend DEFAULT_VECTCFLAGS "-fno-trapping-math" 175dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-trapping-math-*.\[cS\]]] \ 176 "" $DEFAULT_VECTCFLAGS 177 178# -fno-tree-scev-cprop 179set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 180lappend DEFAULT_VECTCFLAGS "-fno-tree-scev-cprop" 181dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-scevccp-vect-*.\[cS\]]] \ 182 "" $DEFAULT_VECTCFLAGS 183 184# -fno-tree-scev-cprop 185set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 186lappend DEFAULT_VECTCFLAGS "-fno-tree-scev-cprop" 187dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-scevccp-pr*.\[cS\]]] \ 188 "" $DEFAULT_VECTCFLAGS 189 190# -fno-tree-scev-cprop 191set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 192lappend DEFAULT_VECTCFLAGS "-fno-tree-scev-cprop" 193dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-scevccp-outer-*.\[cS\]]] \ 194 "" $DEFAULT_VECTCFLAGS 195 196# -fno-tree-scev-cprop -fno-tree-reassoc 197set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 198lappend DEFAULT_VECTCFLAGS "-fno-tree-scev-cprop" "-fno-tree-reassoc" 199dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-scevccp-noreassoc-*.\[cS\]]] \ 200 "" $DEFAULT_VECTCFLAGS 201 202# -fno-tree-scev-cprop 203set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 204lappend DEFAULT_VECTCFLAGS "-fno-tree-scev-cprop" 205dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-scevccp-slp-*.\[cS\]]] \ 206 "" $DEFAULT_VECTCFLAGS 207 208# -fno-tree-dominator-opts 209set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 210lappend DEFAULT_VECTCFLAGS "-fno-tree-dominator-opts" 211dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-dom-*.\[cS\]]] \ 212 "" $DEFAULT_VECTCFLAGS 213 214# -fno-tree-pre 215set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 216lappend DEFAULT_VECTCFLAGS "-fno-tree-pre" 217dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-pre-*.\[cS\]]] \ 218 "" $DEFAULT_VECTCFLAGS 219 220# With -Os 221set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 222lappend DEFAULT_VECTCFLAGS "-Os" 223dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/Os-vect-*.\[cS\]]] \ 224 "" $DEFAULT_VECTCFLAGS 225 226# With --param ggc-min-expand=0 --param ggc-min-heapsize=0 227set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 228lappend DEFAULT_VECTCFLAGS "--param" "ggc-min-expand=0" "--param" "ggc-min-heapsize=0" 229dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/ggc-*.\[cS\]]] \ 230 "" $DEFAULT_VECTCFLAGS 231 232# -ftree-loop-if-convert-stores 233set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 234lappend DEFAULT_VECTCFLAGS "-ftree-loop-if-convert-stores" 235dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/if-cvt-stores-vect-*.\[cS\]]] \ 236 "" $DEFAULT_VECTCFLAGS 237 238# With -O3. 239# Don't allow IPA cloning, because it throws our counts out of whack. 240set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 241lappend DEFAULT_VECTCFLAGS "-O3" "-fno-ipa-cp-clone" 242if [istarget "spu-*-*"] { 243 lappend DEFAULT_VECTCFLAGS "-funroll-loops" 244} 245dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/O3-*.\[cS\]]] \ 246 "" $DEFAULT_VECTCFLAGS 247 248# With -O1 249dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/O1-*.\[cS\]]] \ 250 "" $O1_VECTCFLAGS 251 252# With -O 253dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/O-*.\[cS\]]] \ 254 "" $O_VECTCFLAGS 255 256# -fno-tree-reassoc 257set VECT_SLP_CFLAGS $SAVED_VECT_SLP_CFLAGS 258lappend VECT_SLP_CFLAGS "-fno-tree-reassoc" 259dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-reassoc-bb-slp-*.\[cS\]]] \ 260 "" $VECT_SLP_CFLAGS 261 262# -fno-tree-fre 263set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 264lappend DEFAULT_VECTCFLAGS "-fno-tree-fre" 265dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-fre-*.\[cS\]]] \ 266 "" $DEFAULT_VECTCFLAGS 267 268# -fno-tree-fre -fno-tree-pre 269set DEFAULT_VECTCFLAGS $SAVED_DEFAULT_VECTCFLAGS 270lappend DEFAULT_VECTCFLAGS "-fno-tree-fre" "-fno-tree-pre" 271dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-fre-pre*.\[cS\]]] \ 272 "" $DEFAULT_VECTCFLAGS 273 274# -fno-tree-sra 275set VECT_SLP_CFLAGS $SAVED_VECT_SLP_CFLAGS 276lappend VECT_SLP_CFLAGS "-fno-tree-sra" 277dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/no-tree-sra-bb-slp-*.\[cS\]]] \ 278 "" $VECT_SLP_CFLAGS 279 280 281# Clean up. 282set dg-do-what-default ${save-dg-do-what-default} 283 284# All done. 285clearcap-finish 286dg-finish 287