[Testsuite] Add tests of reductions using whole-vector-shifts (ior)
authorAlan Lawrence <alan.lawrence@arm.com>
Mon, 22 Sep 2014 16:36:06 +0000 (16:36 +0000)
committerAlan Lawrence <alalaw01@gcc.gnu.org>
Mon, 22 Sep 2014 16:36:06 +0000 (16:36 +0000)
* gcc.dg/vect/vect-reduc-or_1.c: New test.
* gcc.dg/vect/vect-reduc-or_2.c: New test.

From-SVN: r215475

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/vect-reduc-or_1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-reduc-or_2.c [new file with mode: 0644]

index 92efa6e..efbb084 100644 (file)
@@ -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 (file)
index 0000000..4e1a857
--- /dev/null
@@ -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 (file)
index 0000000..e25467e
--- /dev/null
@@ -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" } } */
+