1 /* Exercise the auto, independent, seq and tile loop clauses inside
2    kernels regions.  */
3 
4 #include <assert.h>
5 
6 #define N 100
7 
8 void
check(int * a,int * b)9 check (int *a, int *b)
10 {
11   int i;
12 
13   for (i = 0; i < N; i++)
14     assert (a[i] == b[i]);
15 }
16 
17 int
main()18 main ()
19 {
20   int i, a[N], b[N];
21 
22 #pragma acc kernels copy(a)
23   {
24 #pragma acc loop auto
25     for (i = 0; i < N; i++)
26       a[i] = i;
27   }
28 
29   for (i = 0; i < N; i++)
30     b[i] = i;
31 
32   check (a, b);
33 
34 #pragma acc kernels copyout(a)
35   {
36 #pragma acc loop independent
37     for (i = 0; i < N; i++)
38       a[i] = i;
39   }
40 
41   check (a, b);
42 
43 #pragma acc kernels present_or_copy(a)
44   {
45 #pragma acc loop seq
46     for (i = 0; i < N; i++)
47       a[i] = i;
48   }
49 
50   check (a, b);
51 
52 #pragma acc kernels pcopyout(a) present_or_copyin(b)
53   {
54 #pragma acc loop seq
55     for (i = 0; i < N; i++)
56       a[i] = b[i];
57   }
58 
59   check (a, b);
60 
61   return 0;
62 }
63