diff gcc/testsuite/c-c++-common/gomp/ordered-1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/c-c++-common/gomp/ordered-1.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,91 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fopenmp-simd" } */
+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
+/* { dg-additional-options "-mavx" { target avx_runtime } } */
+
+#define N 1024
+extern
+#ifdef __cplusplus
+"C"
+#endif
+void abort (void);
+
+int last;
+
+void
+bar (unsigned char *a, int i, int safelen)
+{
+  int j, k;
+  if (i != last++)
+    abort ();
+  for (j = i - safelen - 32; j < i; j++)
+    if (j >= 0 && a[j] != 2)
+      break;
+  if (j <= i - safelen || a[j] != 1)
+    abort ();
+  for (k = j; k < i + safelen + 32; k++)
+    if (k >= N || a[k] != 1)
+      break;
+  if (k <= i || k > j + safelen)
+    abort ();
+  if (k < N && a[k] != 0)
+    abort ();
+  for (; k < i + safelen + 32; k++)
+    if (k < N && a[k] != 0)
+      abort ();
+}
+
+static inline void
+foo (unsigned char *a, int i)
+{
+  #pragma omp ordered simd
+  bar (a, i, 64);
+}
+
+int
+main ()
+{
+  unsigned char a[N], b[N];
+  int i;
+  #pragma omp simd
+  for (i = 0; i < N; i++)
+    a[i] = 0;
+  #pragma omp simd safelen (64)
+  for (i = 0; i < N; i++)
+    {
+      a[i]++;
+      foo (a, i);
+      a[i]++;
+    }
+  #pragma omp simd
+  for (i = 0; i < N; i++)
+    {
+      a[i] = 0;
+      b[i] = 0;
+    }
+  last = 0;
+  #pragma omp simd safelen (32)
+  for (i = 0; i < N; i++)
+    {
+      a[i]++;
+      #pragma omp ordered simd
+      bar (a, i, 32);
+      a[i]++;
+    }
+  for (i = 0; i < N; i++)
+    if (a[i] != 2)
+      abort ();
+  #pragma omp simd safelen (32)
+  for (i = 1; i < N; i++)
+    {
+      #pragma omp ordered simd
+      b[i] = b[i - 1] + 1;
+      a[i]++;
+      #pragma omp ordered simd
+      a[i] += a[i - 1];
+    }
+  for (i = 0; i < N; i++)
+    if (a[i] != (unsigned char) (2 + 3 * i) || b[i] != (unsigned char) i)
+      abort ();
+  return 0;
+}