diff options
author | Daniel Jacobowitz <dan@codesourcery.com> | 2011-04-20 16:39:37 +0000 |
---|---|---|
committer | Andrew Stubbs <ams@gcc.gnu.org> | 2011-04-20 16:39:37 +0000 |
commit | cfc99488e79bb04cc76d8742f22e36404ecdd8b5 (patch) | |
tree | a81b045747c8f685da18bfbcaea94d70cbbf9a09 | |
parent | bc2c1a606a4f77bcf6f883d3d20e7b6278ffcdbc (diff) | |
download | gcc-cfc99488e79bb04cc76d8742f22e36404ecdd8b5.zip gcc-cfc99488e79bb04cc76d8742f22e36404ecdd8b5.tar.gz gcc-cfc99488e79bb04cc76d8742f22e36404ecdd8b5.tar.bz2 |
vect-shift-3.c, [...]: New.
2011-04-20 Daniel Jacobowitz <dan@codesourcery.com>
gcc/testsuite/
* gcc.dg/vect/vect-shift-3.c, gcc.dg/vect/vect-shift-4.c: New.
* lib/target-supports.exp (check_effective_target_vect_shift_char): New
function.
From-SVN: r172778
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-shift-3.c | 37 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-shift-4.c | 37 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 20 |
4 files changed, 100 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 95646de..3528f3e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-04-20 Daniel Jacobowitz <dan@codesourcery.com> + + * gcc.dg/vect/vect-shift-3.c, gcc.dg/vect/vect-shift-4.c: New. + * lib/target-supports.exp (check_effective_target_vect_shift_char): New + function. + 2011-04-20 Kai Tietz <ktietz@redhat.com> * gcc.dg/binio-xor1.c: New test. diff --git a/gcc/testsuite/gcc.dg/vect/vect-shift-3.c b/gcc/testsuite/gcc.dg/vect/vect-shift-3.c new file mode 100644 index 0000000..78ed935 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-shift-3.c @@ -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" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-shift-4.c b/gcc/testsuite/gcc.dg/vect/vect-shift-4.c new file mode 100644 index 0000000..e705fea --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-shift-4.c @@ -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" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 3df2a5c..c7e1280 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2310,6 +2310,26 @@ proc check_effective_target_vect_shift_scalar { } { } +# 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. |