aboutsummaryrefslogtreecommitdiff
path: root/final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2019-03-18 12:53:32 +0000
committerHans Wennborg <hans@hanshq.net>2019-03-18 12:53:32 +0000
commitabdd46b7db373cb68b58d543400ceb178347b056 (patch)
tree04720549cebf68f6bd10f0009d01c340d7a65c9f /final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c
parent001d07557b8ffbecdb4f51536c1115f9bcba5ef1 (diff)
Creating release candidate final from release_800 branchsvn-tags/RELEASE_800
git-svn-id: https://llvm.org/svn/llvm-project/openmp/tags/RELEASE_800@356365 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c')
-rw-r--r--final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c b/final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c
new file mode 100644
index 0000000..dd17ae7
--- /dev/null
+++ b/final/libomptarget/deviceRTLs/nvptx/test/data_sharing/alignment.c
@@ -0,0 +1,55 @@
+// RUN: %compile-run-and-check
+
+#include <omp.h>
+#include <stdio.h>
+
+#pragma omp declare target
+static void putValueInParallel(int *ptr, int value) {
+ #pragma omp parallel
+ {
+ *ptr = value;
+ }
+}
+
+static int getId() {
+ int id;
+ putValueInParallel(&id, omp_get_thread_num());
+ return id;
+}
+#pragma omp end declare target
+
+const int MaxThreads = 1024;
+const int Threads = 64;
+
+int main(int argc, char *argv[]) {
+ int master;
+ int check[MaxThreads];
+ for (int i = 0; i < MaxThreads; i++) {
+ check[i] = 0;
+ }
+
+ #pragma omp target map(master, check[:])
+ {
+ master = getId();
+
+ #pragma omp parallel num_threads(Threads)
+ {
+ check[omp_get_thread_num()] = getId();
+ }
+ }
+
+ // CHECK: master = 0.
+ printf("master = %d.\n", master);
+ // CHECK-NOT: invalid
+ for (int i = 0; i < MaxThreads; i++) {
+ if (i < Threads) {
+ if (check[i] != i) {
+ printf("invalid: check[%d] should be %d, is %d\n", i, i, check[i]);
+ }
+ } else if (check[i] != 0) {
+ printf("invalid: check[%d] should be 0, is %d\n", i, check[i]);
+ }
+ }
+
+ return 0;
+}