Add parloops-exit-first-loop-alt-{5,6,7}.c
authorTom de Vries <tom@codesourcery.com>
Tue, 30 Jun 2015 11:00:32 +0000 (11:00 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Tue, 30 Jun 2015 11:00:32 +0000 (11:00 +0000)
2015-06-30  Tom de Vries  <tom@codesourcery.com>

* gcc.dg/parloops-exit-first-loop-alt-5.c: New test.
* gcc.dg/parloops-exit-first-loop-alt-6.c: New test.
* gcc.dg/parloops-exit-first-loop-alt-7.c: New test.
* gcc.dg/parloops-exit-first-loop-alt.c: Update comment.

* testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c: New test.
* testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c: New test.
* testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c: New test.
* testsuite/libgomp.c/parloops-exit-first-loop-alt.c: Update comment.

From-SVN: r225172

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-7.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c [new file with mode: 0644]
libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt.c

index b006b4c021bff23c561af1ab6d3a00d515878497..8716cd3b9f6e789eb7c2cde3d936e03e4fd20406 100644 (file)
@@ -1,3 +1,10 @@
+2015-06-30  Tom de Vries  <tom@codesourcery.com>
+
+       * gcc.dg/parloops-exit-first-loop-alt-5.c: New test.
+       * gcc.dg/parloops-exit-first-loop-alt-6.c: New test.
+       * gcc.dg/parloops-exit-first-loop-alt-7.c: New test.
+       * gcc.dg/parloops-exit-first-loop-alt.c: Update comment.
+
 2015-06-30  Marek Polacek  <polacek@redhat.com>
 
        * gcc.dg/fold-ior-2.c: New test.
diff --git a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-5.c b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-5.c
new file mode 100644 (file)
index 0000000..3f799cf
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target pthread } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */
+
+/* Variable bound, vector addition, unsigned loop counter, unsigned bound.  */
+
+void
+f (unsigned int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b,
+   unsigned int *__restrict__ c)
+{
+  unsigned int i;
+
+  for (i = 0; i < n; ++i)
+    c[i] = a[i] + b[i];
+}
+
+/* Three times a store:
+   - one in f._loopfn.0
+   - one in the parallel
+   - one in the low iteration count loop
+   Crucially, none for a peeled off last iteration following the parallel.  */
+/* { dg-final { scan-tree-dump-times "(?n)^  \\*_\[0-9\]*" 3 "parloops" } } */
diff --git a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-6.c b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-6.c
new file mode 100644 (file)
index 0000000..ee19a55
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target pthread } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */
+
+/* Variable bound, vector addition, unsigned loop counter, signed bound.  */
+
+void
+f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b,
+   unsigned int *__restrict__ c)
+{
+  unsigned int i;
+
+  for (i = 0; i < n; ++i)
+    c[i] = a[i] + b[i];
+}
+
+/* Three times a store:
+   - one in f._loopfn.0
+   - one in the parallel
+   - one in the low iteration count loop
+   Crucially, none for a peeled off last iteration following the parallel.  */
+/* { dg-final { scan-tree-dump-times "(?n)^  \\*_\[0-9\]*" 3 "parloops" } } */
diff --git a/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-7.c b/gcc/testsuite/gcc.dg/parloops-exit-first-loop-alt-7.c
new file mode 100644 (file)
index 0000000..c337342
--- /dev/null
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target pthread } */
+/* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */
+
+/* Variable bound, vector addition, signed loop counter, signed bound.  */
+
+void
+f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b,
+   unsigned int *__restrict__ c)
+{
+  int i;
+
+  for (i = 0; i < n; ++i)
+    c[i] = a[i] + b[i];
+}
+
+/* Three times a store:
+   - one in f._loopfn.0
+   - one in the parallel
+   - one in the low iteration count loop
+   Crucially, none for a peeled off last iteration following the parallel.  */
+/* { dg-final { scan-tree-dump-times "(?n)^  \\*_\[0-9\]*" 3 "parloops" } } */
index e088fa110b398942b3e3871fd1dc606c453af495..0b6916507f41dbf202c84165a5539bf26653f72f 100644 (file)
@@ -2,7 +2,7 @@
 /* { dg-require-effective-target pthread } */
 /* { dg-options "-O2 -ftree-parallelize-loops=2 -fdump-tree-parloops" } */
 
-/* Variable bound, vector addition.  */
+/* Variable bound, vector addition, signed loop counter, unsigned bound.  */
 
 void
 f (unsigned int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b,
index 2c539b821aca606670eaae7cb0c58e1a8c463918..a5c51f5639d2e071bbe6a89023c2fb9eb3c5c21b 100644 (file)
@@ -1,3 +1,10 @@
+2015-06-30  Tom de Vries  <tom@codesourcery.com>
+
+       * testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c: New test.
+       * testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c: New test.
+       * testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c: New test.
+       * testsuite/libgomp.c/parloops-exit-first-loop-alt.c: Update comment.
+
 2015-06-30  Tom de Vries  <tom@codesourcery.com>
 
        PR tree-optimization/66652
diff --git a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-5.c
new file mode 100644 (file)
index 0000000..d8d49b4
--- /dev/null
@@ -0,0 +1,75 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=2" } */
+
+/* Variable bound, vector addition, unsigned loop counter, unsigned bound.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define N 1000
+
+unsigned int a[N];
+unsigned int b[N];
+unsigned int c[N];
+
+void __attribute__((noclone,noinline))
+f (unsigned int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b,
+   unsigned int *__restrict__ c)
+{
+  unsigned int i;
+
+  for (i = 0; i < n; ++i)
+    c[i] = a[i] + b[i];
+}
+
+static void __attribute__((noclone,noinline))
+init (void)
+{
+  int i, j;
+
+  /* Complexify loop to inhibit parloops.  */
+  for (j = 0; j < 100; ++j)
+    for (i = 0; i < 10; i++)
+      {
+       int k = i + (10 * j);
+       a[k] = k;
+       b[k] = (k * 3) % 7;
+       c[k] = k * 2;
+      }
+}
+
+int
+main (void)
+{
+  int i;
+
+  init ();
+
+  f (N, a, b, c);
+
+  for (i = 0; i < N; i++)
+    {
+      unsigned int actual = c[i];
+      unsigned int expected = i + ((i * 3) % 7);
+      if (actual != expected)
+       abort ();
+    }
+
+  /* Test low iteration count case.  */
+
+  init ();
+
+  f (10, a, b, c);
+
+  for (i = 0; i < N; i++)
+    {
+      unsigned int actual = c[i];
+      unsigned int expected = (i < 10
+                              ? i + ((i * 3) % 7)
+                              : i * 2);
+      if (actual != expected)
+       abort ();
+    }
+
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-6.c
new file mode 100644 (file)
index 0000000..99c61c0
--- /dev/null
@@ -0,0 +1,75 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=2" } */
+
+/* Variable bound, vector addition, unsigned loop counter, signed bound.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define N 1000
+
+unsigned int a[N];
+unsigned int b[N];
+unsigned int c[N];
+
+void __attribute__((noclone,noinline))
+f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b,
+   unsigned int *__restrict__ c)
+{
+  unsigned int i;
+
+  for (i = 0; i < n; ++i)
+    c[i] = a[i] + b[i];
+}
+
+static void __attribute__((noclone,noinline))
+init (void)
+{
+  int i, j;
+
+  /* Complexify loop to inhibit parloops.  */
+  for (j = 0; j < 100; ++j)
+    for (i = 0; i < 10; i++)
+      {
+       int k = i + (10 * j);
+       a[k] = k;
+       b[k] = (k * 3) % 7;
+       c[k] = k * 2;
+      }
+}
+
+int
+main (void)
+{
+  int i;
+
+  init ();
+
+  f (N, a, b, c);
+
+  for (i = 0; i < N; i++)
+    {
+      unsigned int actual = c[i];
+      unsigned int expected = i + ((i * 3) % 7);
+      if (actual != expected)
+       abort ();
+    }
+
+  /* Test low iteration count case.  */
+
+  init ();
+
+  f (10, a, b, c);
+
+  for (i = 0; i < N; i++)
+    {
+      unsigned int actual = c[i];
+      unsigned int expected = (i < 10
+                              ? i + ((i * 3) % 7)
+                              : i * 2);
+      if (actual != expected)
+       abort ();
+    }
+
+  return 0;
+}
diff --git a/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c b/libgomp/testsuite/libgomp.c/parloops-exit-first-loop-alt-7.c
new file mode 100644 (file)
index 0000000..1f6e5e4
--- /dev/null
@@ -0,0 +1,75 @@
+/* { dg-do run } */
+/* { dg-additional-options "-ftree-parallelize-loops=2" } */
+
+/* Variable bound, vector addition, signed loop counter, signed bound.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define N 1000
+
+unsigned int a[N];
+unsigned int b[N];
+unsigned int c[N];
+
+void __attribute__((noclone,noinline))
+f (int n, unsigned int *__restrict__ a, unsigned int *__restrict__ b,
+   unsigned int *__restrict__ c)
+{
+  int i;
+
+  for (i = 0; i < n; ++i)
+    c[i] = a[i] + b[i];
+}
+
+static void __attribute__((noclone,noinline))
+init (void)
+{
+  int i, j;
+
+  /* Complexify loop to inhibit parloops.  */
+  for (j = 0; j < 100; ++j)
+    for (i = 0; i < 10; i++)
+      {
+       int k = i + (10 * j);
+       a[k] = k;
+       b[k] = (k * 3) % 7;
+       c[k] = k * 2;
+      }
+}
+
+int
+main (void)
+{
+  int i;
+
+  init ();
+
+  f (N, a, b, c);
+
+  for (i = 0; i < N; i++)
+    {
+      unsigned int actual = c[i];
+      unsigned int expected = i + ((i * 3) % 7);
+      if (actual != expected)
+       abort ();
+    }
+
+  /* Test low iteration count case.  */
+
+  init ();
+
+  f (10, a, b, c);
+
+  for (i = 0; i < N; i++)
+    {
+      unsigned int actual = c[i];
+      unsigned int expected = (i < 10
+                              ? i + ((i * 3) % 7)
+                              : i * 2);
+      if (actual != expected)
+       abort ();
+    }
+
+  return 0;
+}
index 07468a9ab9e75a5685992b6187e462b2dafcae3a..d67a4f67ece531177c9e6056fa6a04a47fe6ad7b 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do run } */
 /* { dg-additional-options "-ftree-parallelize-loops=2" } */
 
-/* Variable bound, vector addition.  */
+/* Variable bound, vector addition, signed loop counter, unsigned bound.  */
 
 #include <stdio.h>
 #include <stdlib.h>