aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
diff options
context:
space:
mode:
authorKwok Cheung Yeung <kcy@codesourcery.com>2020-08-03 17:38:13 +0200
committerTom de Vries <tdevries@suse.de>2020-08-13 11:11:55 +0200
commit17dc08edc28f4fc25f6cd7b71f0d0a0d1ec2f833 (patch)
treea495d89e7e4224e222589aa3860869dac48711de /libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
parentf91770216eade83f068528c1e4f00e2ac3b23044 (diff)
downloadgcc-17dc08edc28f4fc25f6cd7b71f0d0a0d1ec2f833.zip
gcc-17dc08edc28f4fc25f6cd7b71f0d0a0d1ec2f833.tar.gz
gcc-17dc08edc28f4fc25f6cd7b71f0d0a0d1ec2f833.tar.bz2
nvptx: Add support for subword compare-and-swap
This adds support for __sync_val_compare_and_swap and __sync_bool_compare_and_swap for 1-byte and 2-byte long values, which are not natively supported on nvptx. Build and reg-tested on nvptx. Build and reg-tested libgomp on x86_64 with nvptx accelerator. 2020-07-16 Kwok Cheung Yeung <kcy@codesourcery.com> libgcc/ * config/nvptx/atomic.c: New. * config/nvptx/t-nvptx (LIB2ADD): Add atomic.c. gcc/testsuite/ * gcc.target/nvptx/ia64-sync-5.c: New. libgomp/ * testsuite/libgomp.c-c++-common/reduction-16.c: New.
Diffstat (limited to 'libgomp/testsuite/libgomp.c-c++-common/reduction-16.c')
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/reduction-16.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c b/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
new file mode 100644
index 0000000..d0e82b0
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/reduction-16.c
@@ -0,0 +1,53 @@
+/* { dg-do run } */
+
+#include <stdlib.h>
+
+#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(char)
+GENERATE_TEST(short)
+GENERATE_TEST(int)
+GENERATE_TEST(long)
+#ifdef __SIZEOF_INT128__
+GENERATE_TEST(__int128)
+#endif
+
+int main(void)
+{
+ if (test_char ())
+ abort ();
+ if (test_short ())
+ abort ();
+ if (test_int ())
+ abort ();
+ if (test_long ())
+ abort ();
+#ifdef __SIZEOF_INT128__
+ if (test___int128 ())
+ abort ();
+#endif
+}