This patch adds a test to test depend clause and its various dependency variations with SVE type objects.
libgomp/ChangeLog: * testsuite/libgomp.target/aarch64/depend-1.c: New. --- .../libgomp.target/aarch64/depend-1.c | 223 ++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 libgomp/testsuite/libgomp.target/aarch64/depend-1.c diff --git a/libgomp/testsuite/libgomp.target/aarch64/depend-1.c b/libgomp/testsuite/libgomp.target/aarch64/depend-1.c new file mode 100644 index 00000000000..8ac97685727 --- /dev/null +++ b/libgomp/testsuite/libgomp.target/aarch64/depend-1.c @@ -0,0 +1,223 @@ +/* { dg-do run { target aarch64_sve256_hw } } */ +/* { dg-options "-msve-vector-bits=256 -std=gnu99 -fopenmp -O2" } */ + +#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; +} -- 2.25.1