diff mbox series

[10/11] AArch64: Test OpenMP depend clause and its variations on SVE types

Message ID 20240527050626.3769230-11-tejas.belagod@arm.com
State New
Headers show
Series AArch64/OpenMP: Test SVE ACLE types with various OpenMP constructs. | expand

Commit Message

Tejas Belagod May 27, 2024, 5:06 a.m. UTC
This patch adds a test to test depend clause and its various dependency
variations with SVE type objects.

gcc/testsuite/ChangeLog

	* gcc.target/aarch64/sve/omp/depend-1.c: New test.
---
 .../gcc.target/aarch64/sve/omp/depend-1.c     | 223 ++++++++++++++++++
 1 file changed, 223 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/omp/depend-1.c
diff mbox series

Patch

diff --git a/gcc/testsuite/gcc.target/aarch64/sve/omp/depend-1.c b/gcc/testsuite/gcc.target/aarch64/sve/omp/depend-1.c
new file mode 100644
index 00000000000..734c20fb9ae
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/sve/omp/depend-1.c
@@ -0,0 +1,223 @@ 
+/* { dg-do run { target aarch64_sve256_hw } } */
+/* { dg-options "-msve-vector-bits=256 -std=gnu99 -fopenmp -O2 -fdump-tree-ompexp" } */
+
+#include <arm_sve.h>
+
+int zeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
+int ones[8] = { 1, 1, 1, 1, 1, 1, 1, 1 };
+int twos[8] = { 2, 2, 2, 2, 2, 2, 2, 2 };
+
+void
+dep (void)
+{
+  svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+
+  #pragma omp parallel
+  #pragma omp single
+  {
+    #pragma omp task shared (x) depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), twos);
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+  }
+}
+
+void
+dep2 (void)
+{
+  #pragma omp parallel
+  #pragma omp single
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp task shared (x) depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), twos);
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+    #pragma omp taskwait
+  }
+}
+
+void
+dep3 (void)
+{
+  #pragma omp parallel
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp single
+    {
+      #pragma omp task shared (x) depend(out: x)
+      x = svld1_s32 (svptrue_b32 (), twos);
+      #pragma omp task shared (x) depend(in: x)
+      if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+	__builtin_abort  ();
+    }
+  }
+}
+
+void
+firstpriv (void)
+{
+  #pragma omp parallel
+  #pragma omp single
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp task depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), twos);
+    #pragma omp task depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 1)))
+      __builtin_abort  ();
+  }
+}
+
+void
+antidep (void)
+{
+  svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+  #pragma omp parallel
+  #pragma omp single
+  {
+    #pragma omp task shared(x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 1)))
+      __builtin_abort  ();
+    #pragma omp task shared(x) depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), twos);
+  }
+}
+
+void
+antidep2 (void)
+{
+  #pragma omp parallel
+  #pragma omp single
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp taskgroup
+    {
+      #pragma omp task shared(x) depend(in: x)
+      if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 1)))
+	__builtin_abort  ();
+      #pragma omp task shared(x) depend(out: x)
+      x = svld1_s32 (svptrue_b32 (), twos);
+    }
+  }
+}
+
+void
+antidep3 (void)
+{
+  #pragma omp parallel
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp single
+    {
+      #pragma omp task shared(x) depend(in: x)
+      if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 1)))
+	__builtin_abort  ();
+      #pragma omp task shared(x) depend(out: x)
+      x = svld1_s32 (svptrue_b32 (), twos);
+    }
+  }
+}
+
+
+void
+outdep (void)
+{
+  #pragma omp parallel
+  #pragma omp single
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), zeros);
+    #pragma omp task shared(x) depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp task shared(x) depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), twos);
+    #pragma omp taskwait
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+  }
+}
+
+void
+concurrent (void)
+{
+  svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+  #pragma omp parallel
+  #pragma omp single
+  {
+    #pragma omp task shared (x) depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), twos);
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+  }
+}
+
+void
+concurrent2 (void)
+{
+  #pragma omp parallel
+  #pragma omp single
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp task shared (x) depend(out: x)
+    x = svld1_s32 (svptrue_b32 (), twos);
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+    #pragma omp task shared (x) depend(in: x)
+    if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+      __builtin_abort  ();
+    #pragma omp taskwait
+  }
+}
+
+void
+concurrent3 (void)
+{
+  #pragma omp parallel
+  {
+    svint32_t x = svld1_s32 (svptrue_b32 (), ones);
+    #pragma omp single
+    {
+      #pragma omp task shared (x) depend(out: x)
+      x = svld1_s32 (svptrue_b32 (), twos);
+      #pragma omp task shared (x) depend(in: x)
+      if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+	__builtin_abort  ();
+      #pragma omp task shared (x) depend(in: x)
+      if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+	__builtin_abort  ();
+      #pragma omp task shared (x) depend(in: x)
+      if (svptest_any (svptrue_b32(), svcmpne_n_s32 (svptrue_b32 (), x, 2)))
+	__builtin_abort  ();
+    }
+  }
+}
+
+int
+main ()
+{
+  dep ();
+  dep2 ();
+  dep3 ();
+  firstpriv ();
+  antidep ();
+  antidep2 ();
+  antidep3 ();
+  outdep ();
+  concurrent ();
+  concurrent2 ();
+  concurrent3 ();
+  return 0;
+}