summaryrefslogtreecommitdiff
path: root/offload/test/api/omp_target_memcpy_async1.c
diff options
context:
space:
mode:
Diffstat (limited to 'offload/test/api/omp_target_memcpy_async1.c')
-rw-r--r--offload/test/api/omp_target_memcpy_async1.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/offload/test/api/omp_target_memcpy_async1.c b/offload/test/api/omp_target_memcpy_async1.c
new file mode 100644
index 000000000000..1abcfde83dbd
--- /dev/null
+++ b/offload/test/api/omp_target_memcpy_async1.c
@@ -0,0 +1,48 @@
+// RUN: %libomptarget-compile-and-run-generic
+
+// Test case for omp_target_memcpy_async, oringally from GCC
+
+#include "stdio.h"
+#include <omp.h>
+#include <stdlib.h>
+
+int main() {
+ int d = omp_get_default_device();
+ int id = omp_get_initial_device();
+ int q[128], i;
+ void *p;
+
+ if (d < 0 || d >= omp_get_num_devices())
+ d = id;
+
+ p = omp_target_alloc(130 * sizeof(int), d);
+ if (p == NULL)
+ return 0;
+
+ for (i = 0; i < 128; i++)
+ q[i] = i;
+
+ if (omp_target_memcpy_async(p, q, 128 * sizeof(int), sizeof(int), 0, d, id, 0,
+ NULL)) {
+ abort();
+ }
+
+#pragma omp taskwait
+
+ int q2[128];
+ for (i = 0; i < 128; ++i)
+ q2[i] = 0;
+ if (omp_target_memcpy_async(q2, p, 128 * sizeof(int), 0, sizeof(int), id, d,
+ 0, NULL))
+ abort();
+
+#pragma omp taskwait
+
+ for (i = 0; i < 128; ++i)
+ if (q2[i] != q[i])
+ abort();
+
+ omp_target_free(p, d);
+
+ return 0;
+}