aboutsummaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c')
-rw-r--r--libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c
new file mode 100644
index 00000000000..2c424973eb1
--- /dev/null
+++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-loop-clauses.c
@@ -0,0 +1,62 @@
+/* Exercise the auto, independent, seq and tile loop clauses inside
+ kernels regions. */
+
+#include <assert.h>
+
+#define N 100
+
+void
+check (int *a, int *b)
+{
+ int i;
+
+ for (i = 0; i < N; i++)
+ assert (a[i] == b[i]);
+}
+
+int
+main ()
+{
+ int i, a[N], b[N];
+
+#pragma acc kernels copy(a)
+ {
+#pragma acc loop auto
+ for (i = 0; i < N; i++)
+ a[i] = i;
+ }
+
+ for (i = 0; i < N; i++)
+ b[i] = i;
+
+ check (a, b);
+
+#pragma acc kernels copyout(a)
+ {
+#pragma acc loop independent
+ for (i = 0; i < N; i++)
+ a[i] = i;
+ }
+
+ check (a, b);
+
+#pragma acc kernels present_or_copy(a)
+ {
+#pragma acc loop seq
+ for (i = 0; i < N; i++)
+ a[i] = i;
+ }
+
+ check (a, b);
+
+#pragma acc kernels pcopyout(a) present_or_copyin(b)
+ {
+#pragma acc loop seq
+ for (i = 0; i < N; i++)
+ a[i] = b[i];
+ }
+
+ check (a, b);
+
+ return 0;
+}