aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlan Lawrence <alan.lawrence@arm.com>2014-09-22 16:36:06 +0000
committerAlan Lawrence <alalaw01@gcc.gnu.org>2014-09-22 16:36:06 +0000
commit69e69c01e715cf576c55d03214cd1f85d7e9c598 (patch)
tree3bf46b55bc0f7ac109daeae984ea585783036a61 /gcc
parent2eac08538adf450dafec3b4b092362a7b60d8b44 (diff)
downloadgcc-69e69c01e715cf576c55d03214cd1f85d7e9c598.zip
gcc-69e69c01e715cf576c55d03214cd1f85d7e9c598.tar.gz
gcc-69e69c01e715cf576c55d03214cd1f85d7e9c598.tar.bz2
[Testsuite] Add tests of reductions using whole-vector-shifts (ior)
* gcc.dg/vect/vect-reduc-or_1.c: New test. * gcc.dg/vect/vect-reduc-or_2.c: New test. From-SVN: r215475
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c35
-rw-r--r--gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c31
3 files changed, 71 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 92efa6ef..efbb084 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2014-09-22 Alan Lawrence <alan.lawrence@arm.com>
+ * gcc.dg/vect/vect-reduc-or_1.c: New test.
+ * gcc.dg/vect/vect-reduc-or_2.c: Likewise.
+
+2014-09-22 Alan Lawrence <alan.lawrence@arm.com>
+
* lib/target-supports.exp (check_effective_target_whole_vector_shift):
New.
diff --git a/gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c
new file mode 100644
index 0000000..4e1a857
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c
@@ -0,0 +1,35 @@
+/* { 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] __attribute__((__aligned__(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) & 0xfd;
+
+ /* Prevent constant propagation of the entire loop below. */
+ asm volatile ("" : : : "memory");
+
+ for (i = 0; i < 16; i++)
+ sum |= in[i];
+
+ if (sum != 29)
+ {
+ __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-or_2.c b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c
new file mode 100644
index 0000000..e25467e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c
@@ -0,0 +1,31 @@
+/* { 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] __attribute__((aligned(16)));
+ unsigned char i = 0;
+ unsigned char sum = 1;
+
+ for (i = 0; i < 16; i++)
+ in[i] = (i + i + 1) & 0xfd;
+
+ for (i = 0; i < 16; i++)
+ sum |= in[i];
+
+ if (sum != 29)
+ {
+ __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" } } */
+