libgomp: Split testcase in order to XFAIL __sync_val_compare_and_swap_16 On PowerPC, only, __sync_val_compare_and_swap_16 is generated for the testcase – which nvptx currently does not support. libgomp/ChangeLog: * testsuite/libgomp.c-c++-common/reduction-16.c: Move int128 test to ... * testsuite/libgomp.c-c++-common/reduction-17.c: ... this new test. * testsuite/libgomp.c-c++-common/reduction-17a.c: New test. .../testsuite/libgomp.c-c++-common/reduction-16.c | 8 +---- .../testsuite/libgomp.c-c++-common/reduction-17.c | 41 ++++++++++++++++++++++ .../testsuite/libgomp.c-c++-common/reduction-17a.c | 11 ++++++ 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c b/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c index d0e82b04790..02ec4cd36b8 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c +++ b/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c @@ -1,4 +1,5 @@ /* { dg-do run } */ +/* See also reduction-17.c for an int128 testcase. */ #include @@ -32,9 +33,6 @@ GENERATE_TEST(char) GENERATE_TEST(short) GENERATE_TEST(int) GENERATE_TEST(long) -#ifdef __SIZEOF_INT128__ -GENERATE_TEST(__int128) -#endif int main(void) { @@ -46,8 +44,4 @@ int main(void) abort (); if (test_long ()) abort (); -#ifdef __SIZEOF_INT128__ - if (test___int128 ()) - abort (); -#endif } diff --git a/libgomp/testsuite/libgomp.c-c++-common/reduction-17.c b/libgomp/testsuite/libgomp.c-c++-common/reduction-17.c new file mode 100644 index 00000000000..44dabf6e139 --- /dev/null +++ b/libgomp/testsuite/libgomp.c-c++-common/reduction-17.c @@ -0,0 +1,41 @@ +/* { dg-do run { target { ! powerpc*-*-linux* } || { ! offload_target_nvptx } } } */ +/* { dg-require-effective-target int128 } */ + +/* See also reduction-17a.c for powerpc*-*-linux* + offload_target_nvptx. */ +/* See also reduction-16.c for a char/short/int/long testcase. */ + +#include + +#define N 512 + +#define GENERATE_TEST(T) \ +int test_##T (void) \ +{ \ + T a[N], res = 0; \ + \ + for (int i = 0; i < N; ++i) \ + a[i] = i & 1; \ + \ +_Pragma("omp target teams distribute reduction(||:res) defaultmap(tofrom:scalar)") \ + for (int i = 0; i < N; ++i) \ + res = res || a[i]; \ + \ + /* res should be non-zero. */\ + if (!res) \ + return 1; \ + \ +_Pragma("omp target teams distribute reduction(&&:res) defaultmap(tofrom:scalar)") \ + for (int i = 0; i < N; ++i) \ + res = res && a[i]; \ + \ + /* res should be zero. */ \ + return res; \ +} + +GENERATE_TEST(__int128) + +int main(void) +{ + if (test___int128 ()) + abort (); +} diff --git a/libgomp/testsuite/libgomp.c-c++-common/reduction-17a.c b/libgomp/testsuite/libgomp.c-c++-common/reduction-17a.c new file mode 100644 index 00000000000..1e6a7bc990f --- /dev/null +++ b/libgomp/testsuite/libgomp.c-c++-common/reduction-17a.c @@ -0,0 +1,11 @@ +/* Duplicates reduction-17.c as it fails on PowerPC with nvptx offload + due to 'unresolved symbol __sync_val_compare_and_swap_16' on the nvptx side. */ + +/* { dg-do link { target { powerpc*-*-linux* } && { offload_target_nvptx } } } */ +/* { dg-require-effective-target int128 } */ +/* { dg-xfail-if "__sync_val_compare_and_swap_16" { *-*-* } } */ + +/* See also reduction-17a.c for either not powerpc*-*-linux* or not offload_target_nvptx. */ +/* See also reduction-16.c for a char/short/int/long testcase. */ + +#include "reduction-17.c"