diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c664f95af5597c9e66a61848dc3f17ee7ba977a6..d2718dc5bcc9cadb3b74ebcddebf3cebab82d6b1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,22 @@ +2010-11-17 Ira Rosen <irar@il.ibm.com> + + PR tree-optimization/46312 + * gcc.dg/vect/vect-scal-opt2.c: Rename to... + * gcc.dg/vect/vec-scal-opt2.c: ... this. Expect to pass only + on targets that support vector shifts with scalar shift argument. + Remove dg-options. + * gcc.dg/vect/vect-scal-opt.c: Rename to... + * gcc.dg/vect/vec-scal-opt.c: ... this, and change likewise. + * gcc.dg/vect/vect-scal-opt1.c: Rename to... + * gcc.dg/vect/vec-scal-opt1.c: ... this, and change likewise. + * gcc.dg/vect/vect.exp: Run vec-scal-* tests with relevant flags. + * gcc.dg/vect/vect-114.c: Expect to pass only on targets that + support misaligned data accesses. + * gcc.dg/vect/pr43432.c, gcc.dg/vect/vect-15.c: Likewise. + * gcc.dg/vect/pr43430-2.c: Remove dg-options. + * lib/target-supports.exp + (check_effective_target_vect_shift_scalar): New. + 2010-11-17 Jakub Jelinek <jakub@redhat.com> * gcc.dg/guality/nop.h: New file. diff --git a/gcc/testsuite/gcc.dg/vect/pr43430-2.c b/gcc/testsuite/gcc.dg/vect/pr43430-2.c index 631dadea021110f35ee1bf1e6bc72220781cfded..16f53dacc66cd71e16e2a78045b52ae8c25029c4 100644 --- a/gcc/testsuite/gcc.dg/vect/pr43430-2.c +++ b/gcc/testsuite/gcc.dg/vect/pr43430-2.c @@ -1,6 +1,5 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_int } */ -/* { dg-options "-O3 -fno-vect-cost-model -fdump-tree-vect-details" } */ typedef unsigned char uint8_t; vsad16_c (void *c, uint8_t * s1, uint8_t * s2, int stride, int h) { diff --git a/gcc/testsuite/gcc.dg/vect/pr43432.c b/gcc/testsuite/gcc.dg/vect/pr43432.c index 18c0dba56f69f9fff2bb0fa1c6d1e07bc3ba7028..5f3db7d8235d230fff2b3856f7921bde13dbeb38 100644 --- a/gcc/testsuite/gcc.dg/vect/pr43432.c +++ b/gcc/testsuite/gcc.dg/vect/pr43432.c @@ -10,5 +10,5 @@ int len){ dst[i] = src0[i] * src1[-i]; } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-scal-opt.c b/gcc/testsuite/gcc.dg/vect/vec-scal-opt.c similarity index 91% rename from gcc/testsuite/gcc.dg/vect/vect-scal-opt.c rename to gcc/testsuite/gcc.dg/vect/vec-scal-opt.c index 93c17a86c018bb70c910a7da7fb12252e078b6a2..f5e54e71aa023d5ad29a54640bb96d6d73c90dd7 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-scal-opt.c +++ b/gcc/testsuite/gcc.dg/vect/vec-scal-opt.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_shift } */ /* { dg-require-effective-target vect_int } */ -/* { dg-options "-O -fdump-tree-veclower" } */ #define vidx(type, vec, idx) (*((type *) &(vec) + idx)) #define vector(elcount, type) \ @@ -20,5 +19,5 @@ int main (int argc, char *argv[]) { return vidx(short, r1, 0); } -/* { dg-final { scan-tree-dump-times ">> k.\[0-9_\]*" 1 "veclower" } } */ +/* { dg-final { scan-tree-dump-times ">> k.\[0-9_\]*" 1 "veclower" { target vect_shift_scalar } } } */ /* { dg-final { cleanup-tree-dump "veclower" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-scal-opt1.c b/gcc/testsuite/gcc.dg/vect/vec-scal-opt1.c similarity index 82% rename from gcc/testsuite/gcc.dg/vect/vect-scal-opt1.c rename to gcc/testsuite/gcc.dg/vect/vec-scal-opt1.c index d8a891f67f66bdd675ca3879aec8c319bba2a0ca..0c00c718ef45276c84048c321b6b4b1d7024b309 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-scal-opt1.c +++ b/gcc/testsuite/gcc.dg/vect/vec-scal-opt1.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_shift } */ /* { dg-require-effective-target vect_int } */ -/* { dg-options "-O -fdump-tree-veclower" } */ #define vidx(type, vec, idx) (*((type *) &(vec) + idx)) #define vector(elcount, type) \ @@ -18,5 +17,5 @@ int main (int argc, char *argv[]) { return vidx(short, r1, 0); } -/* { dg-final { scan-tree-dump-times ">> 2" 1 "veclower" } } */ +/* { dg-final { scan-tree-dump-times ">> 2" 1 "veclower" { target vect_shift_scalar } } } */ /* { dg-final { cleanup-tree-dump "veclower" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-scal-opt2.c b/gcc/testsuite/gcc.dg/vect/vec-scal-opt2.c similarity index 82% rename from gcc/testsuite/gcc.dg/vect/vect-scal-opt2.c rename to gcc/testsuite/gcc.dg/vect/vec-scal-opt2.c index 2676e94f9dccab5f1b69282d0d5abada78b51052..5e79fb5869921e11407d73af766b498d3a6a20c4 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-scal-opt2.c +++ b/gcc/testsuite/gcc.dg/vect/vec-scal-opt2.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target vect_shift } */ /* { dg-require-effective-target vect_int } */ -/* { dg-options "-O -fdump-tree-veclower" } */ #define vidx(type, vec, idx) (*((type *) &(vec) + idx)) #define vector(elcount, type) \ @@ -17,5 +16,5 @@ int main (int argc, char *argv[]) { return vidx(short, r1, 0); } -/* { dg-final { scan-tree-dump-times ">> 2" 1 "veclower" } } */ +/* { dg-final { scan-tree-dump-times ">> 2" 1 "veclower" { target vect_shift_scalar } } } */ /* { dg-final { cleanup-tree-dump "veclower" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-114.c b/gcc/testsuite/gcc.dg/vect/vect-114.c index f9132acd06d1c6cb2eb6ca6ab88851030849df27..4bc786278155bae07c5d6e7c5d62836bb241de20 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-114.c +++ b/gcc/testsuite/gcc.dg/vect/vect-114.c @@ -34,7 +34,7 @@ int main (void) return main1 (); } -/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! vect_perm } } } } */ -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_perm } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { target { ! { vect_perm && vect_hw_misalign } } } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-15.c b/gcc/testsuite/gcc.dg/vect/vect-15.c index 87853c1248e5c8202d35c96445b8ca1b45fa9e0d..ba7599162dba1a614f738d2a41a1a729280e20fc 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-15.c +++ b/gcc/testsuite/gcc.dg/vect/vect-15.c @@ -35,5 +35,5 @@ int main (void) return main1 (); } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_perm } } } */ +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { vect_perm && vect_hw_misalign } } } } */ /* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp index 748234849ca8d57e57388da045537642d737b221..5160020917b330d3c957c2878796cfccd144e67b 100644 --- a/gcc/testsuite/gcc.dg/vect/vect.exp +++ b/gcc/testsuite/gcc.dg/vect/vect.exp @@ -23,9 +23,6 @@ load_lib gcc-dg.exp # Set up flags used for tests that don't specify options. set DEFAULT_VECTCFLAGS "" -# These flags are used for all targets. -lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" "-fno-vect-cost-model" - # If the target system supports vector instructions, the default action # for a test is 'run', otherwise it's 'compile'. Save current default. # Executing vector instructions on a system without hardware vector support @@ -118,6 +115,12 @@ if [istarget "powerpc-*paired*"] { return } +global VEC_FLAGS +set VEC_FLAGS $DEFAULT_VECTCFLAGS + +# These flags are used for all targets. +lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" "-fno-vect-cost-model" + # Initialize `dg'. dg-init @@ -137,6 +140,11 @@ lappend DEFAULT_VECTCFLAGS "-O2" dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/nodump-*.\[cS\]]] \ "" $DEFAULT_VECTCFLAGS +# "-O -fdump-tree-veclower" +lappend VEC_FLAGS "-O" "-fdump-tree-veclower" +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/vec-scal-*.\[cS\]]] \ + "" $VEC_FLAGS + set VECT_SLP_CFLAGS $DEFAULT_VECTCFLAGS lappend DEFAULT_VECTCFLAGS "-fdump-tree-vect-details" diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 751c1c51577e4a97f10b07abf26d3fe39a9cffbc..50039e08f4cf3ec2198a8d317f5307c674a7d500 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2258,6 +2258,27 @@ proc check_effective_target_vect_shift { } { return $et_vect_shift_saved } +# Return 1 if the target supports hardware vector shift operation with +# scalar shift argument. + +proc check_effective_target_vect_shift_scalar { } { + global et_vect_shift_scalar_saved + + if [info exists et_vect_shift_scalar_saved] { + verbose "check_effective_target_vect_shift_scalar: using cached result" 2 + } else { + set et_vect_shift_scalar_saved 0 + if { [istarget x86_64-*-*] + || [istarget i?86-*-*] } { + set et_vect_shift_scalar_saved 1 + } + } + + verbose "check_effective_target_vect_shift_scalar: returning $et_vect_shift_scalar_saved" 2 + return $et_vect_shift_scalar_saved +} + + # Return 1 if the target supports hardware vectors of long, 0 otherwise. # # This can change for different subtargets so do not cache the result.