diff options
author | Alan Lawrence <alan.lawrence@arm.com> | 2014-09-22 16:33:05 +0000 |
---|---|---|
committer | Alan Lawrence <alalaw01@gcc.gnu.org> | 2014-09-22 16:33:05 +0000 |
commit | c50c91a9a33d9ade766a509c1fd3d6f9b66d19e7 (patch) | |
tree | 4ee5f2da68a407c3de45598cb5d56cc18c943536 /gcc | |
parent | aed67566921b2153c5af392ad095e04602aa036f (diff) | |
download | gcc-c50c91a9a33d9ade766a509c1fd3d6f9b66d19e7.zip gcc-c50c91a9a33d9ade766a509c1fd3d6f9b66d19e7.tar.gz gcc-c50c91a9a33d9ade766a509c1fd3d6f9b66d19e7.tar.bz2 |
[Testsuite] Add tests of reductions using whole-vector-shifts (multiplication)
* lib/target-supports.exp (check_effective_target_whole_vector_shift):
New.
* gcc.dg/vect/vect-reduc-mul_1.c: New test.
* gcc.dg/vect/vect-reduc-mul_2.c: New test.
From-SVN: r215473
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-reduc-mul_1.c | 36 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/vect-reduc-mul_2.c | 32 | ||||
-rw-r--r-- | gcc/testsuite/lib/target-supports.exp | 16 |
4 files changed, 92 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9e7330b..92efa6ef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2014-09-22 Alan Lawrence <alan.lawrence@arm.com> + + * lib/target-supports.exp (check_effective_target_whole_vector_shift): + New. + + * gcc.dg/vect/vect-reduc-mul_1.c: New test. + * gcc.dg/vect/vect-reduc-mul_2.c: New test. + 2014-09-22 Jakub Jelinek <jakub@redhat.com> PR debug/63328 diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-mul_1.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-mul_1.c new file mode 100644 index 0000000..44f026f --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-mul_1.c @@ -0,0 +1,36 @@ +/* { dg-require-effective-target vect_int_mult } */ +/* { dg-require-effective-target whole_vector_shift } */ + +/* Write a reduction loop to be reduced using vector shifts. */ + +extern void abort(void); + +unsigned char in[16]; + +int +main (unsigned char argc, char **argv) +{ + unsigned char i = 0; + unsigned char sum = 1; + + for (i = 0; i < 16; i++) + in[i] = i + i + 1; + + /* Prevent constant propagation of the entire loop below. */ + asm volatile ("" : : : "memory"); + + for (i = 0; i < 16; i++) + sum *= in[i]; + + if (sum != 33) + { + __builtin_printf("Failed %d\n", sum); + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump "Reduce using vector shifts" "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-mul_2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-mul_2.c new file mode 100644 index 0000000..414fba7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-mul_2.c @@ -0,0 +1,32 @@ +/* { dg-require-effective-target vect_int_mult } */ +/* { dg-require-effective-target whole_vector_shift } */ + +/* Write a reduction loop to be reduced using vector shifts and folded. */ + +extern void abort(void); + +int +main (unsigned char argc, char **argv) +{ + unsigned char in[16]; + unsigned char i = 0; + unsigned char sum = 1; + + for (i = 0; i < 16; i++) + in[i] = i + i + 1; + + for (i = 0; i < 16; i++) + sum *= in[i]; + + if (sum != 33) + { + __builtin_printf("Failed %d\n", sum); + abort(); + } + + return 0; +} + +/* { dg-final { scan-tree-dump "Reduce using vector shifts" "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 52929b9..a916ca5 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -3324,6 +3324,22 @@ proc check_effective_target_vect_shift { } { return $et_vect_shift_saved } +proc check_effective_target_whole_vector_shift { } { + if { [istarget x86_64-*-*] + || [istarget ia64-*-*] + || ([check_effective_target_arm32] + && [check_effective_target_arm_little_endian]) + || ([istarget mips*-*-*] + && [check_effective_target_mips_loongson]) } { + set answer 1 + } else { + set answer 0 + } + + verbose "check_effective_target_vect_long: returning $answer" 2 + return $answer +} + # Return 1 if the target supports vector bswap operations. proc check_effective_target_vect_bswap { } { |