2010-08-05 Andrew Stubbs gcc/testsuite/ * gcc.dg/vect/vect-shift-2.c: Revert all previous changes. * gcc.dg/vect/vect-shift-4.c: New file. 2010-07-20 Yao Qi Merge from Sourcery G++ 4.4: 2009-06-16 Daniel Jacobowitz Merge from Sourcery G++ 4.3: 2008-12-03 Daniel Jacobowitz gcc/testsuite/ * gcc.dg/vect/vect-shift-2.c, gcc.dg/vect/vect-shift-3.c: New. * lib/target-supports.exp (check_effective_target_vect_shift_char): New function. 2010-07-24 Sandra Loosemore Backport from mainline: === added file 'gcc/testsuite/gcc.dg/vect/vect-shift-3.c' --- old/gcc/testsuite/gcc.dg/vect/vect-shift-3.c 1970-01-01 00:00:00 +0000 +++ new/gcc/testsuite/gcc.dg/vect/vect-shift-3.c 2010-08-05 14:13:43 +0000 @@ -0,0 +1,37 @@ +/* { dg-require-effective-target vect_shift } */ +/* { dg-require-effective-target vect_int } */ + +#include "tree-vect.h" + +#define N 32 + +unsigned short dst[N] __attribute__((aligned(N))); +unsigned short src[N] __attribute__((aligned(N))); + +__attribute__ ((noinline)) +void array_shift(void) +{ + int i; + for (i = 0; i < N; i++) + dst[i] = src[i] >> 3; +} + +int main() +{ + volatile int i; + check_vect (); + + for (i = 0; i < N; i++) + src[i] = i << 3; + + array_shift (); + + for (i = 0; i < N; i++) + if (dst[i] != i) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ === added file 'gcc/testsuite/gcc.dg/vect/vect-shift-4.c' --- old/gcc/testsuite/gcc.dg/vect/vect-shift-4.c 1970-01-01 00:00:00 +0000 +++ new/gcc/testsuite/gcc.dg/vect/vect-shift-4.c 2010-08-05 14:13:43 +0000 @@ -0,0 +1,37 @@ +/* { dg-require-effective-target vect_shift_char } */ +/* { dg-require-effective-target vect_int } */ + +#include "tree-vect.h" + +#define N 32 + +unsigned char dst[N] __attribute__((aligned(N))); +unsigned char src[N] __attribute__((aligned(N))); + +__attribute__ ((noinline)) +void array_shift(void) +{ + int i; + for (i = 0; i < N; i++) + dst[i] = src[i] >> 3; +} + +int main() +{ + volatile int i; + check_vect (); + + for (i = 0; i < N; i++) + src[i] = i << 3; + + array_shift (); + + for (i = 0; i < N; i++) + if (dst[i] != i) + abort (); + + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ === modified file 'gcc/testsuite/lib/target-supports.exp' --- old/gcc/testsuite/lib/target-supports.exp 2010-07-29 15:38:15 +0000 +++ new/gcc/testsuite/lib/target-supports.exp 2010-08-05 14:13:43 +0000 @@ -2001,6 +2001,26 @@ return $et_vect_shift_saved } +# Return 1 if the target supports hardware vector shift operation for char. + +proc check_effective_target_vect_shift_char { } { + global et_vect_shift_char_saved + + if [info exists et_vect_shift_char_saved] { + verbose "check_effective_target_vect_shift_char: using cached result" 2 + } else { + set et_vect_shift_char_saved 0 + if { ([istarget powerpc*-*-*] + && ![istarget powerpc-*-linux*paired*]) + || [check_effective_target_arm32] } { + set et_vect_shift_char_saved 1 + } + } + + verbose "check_effective_target_vect_shift_char: returning $et_vect_shift_char_saved" 2 + return $et_vect_shift_char_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.