111
|
1 /* OpenACC cache directive: valid usage. */
|
|
2 /* For execution testing, this file is "#include"d from
|
|
3 libgomp/testsuite/libgomp.oacc-c-c++-common/cache-1.c. */
|
|
4
|
|
5 int
|
|
6 main (int argc, char **argv)
|
|
7 {
|
|
8 #define N 2
|
|
9 int a[N], b[N];
|
|
10 int i;
|
|
11
|
|
12 for (i = 0; i < N; i++)
|
|
13 {
|
|
14 a[i] = 3;
|
|
15 b[i] = 0;
|
|
16 }
|
|
17
|
|
18 #pragma acc parallel copyin (a[0:N]) copyout (b[0:N])
|
|
19 {
|
|
20 int ii;
|
|
21
|
|
22 for (ii = 0; ii < N; ii++)
|
|
23 {
|
|
24 const int idx = ii;
|
|
25 int n = 1;
|
|
26 const int len = n;
|
|
27
|
|
28 /* Have at it, GCC! */
|
|
29 #pragma acc cache (a[0:N])
|
|
30 #pragma acc cache (a[0:N], a[0:N])
|
|
31 #pragma acc cache (a[0:N], b[0:N])
|
|
32 #pragma acc cache (a[0])
|
|
33 #pragma acc cache (a[0], a[1], b[0:N])
|
|
34 #pragma acc cache (a[i - 5])
|
|
35 #pragma acc cache (a[i + 5:len])
|
|
36 #pragma acc cache (a[i + 5:len - 1])
|
|
37 #pragma acc cache (b[i])
|
|
38 #pragma acc cache (b[i:len])
|
|
39 #pragma acc cache (a[ii])
|
|
40 #pragma acc cache (a[ii:len])
|
|
41 #pragma acc cache (b[ii - 1])
|
|
42 #pragma acc cache (b[ii - 1:len])
|
|
43 #pragma acc cache (b[i - ii + 1])
|
|
44 #pragma acc cache (b[i + ii - 1:len])
|
|
45 #pragma acc cache (b[i * ii - 1:len + 1])
|
|
46 #pragma acc cache (a[idx + 2])
|
|
47 #pragma acc cache (a[idx:len + 2])
|
|
48 #pragma acc cache (a[idx])
|
|
49 #pragma acc cache (a[idx:len])
|
|
50 #pragma acc cache (a[idx + 2:len])
|
|
51 #pragma acc cache (a[idx + 2 + i:len])
|
|
52 #pragma acc cache (a[idx + 2 + i + ii:len])
|
|
53
|
|
54 b[ii] = a[ii];
|
|
55 }
|
|
56 }
|
|
57
|
|
58
|
|
59 for (i = 0; i < N; i++)
|
|
60 {
|
|
61 if (a[i] != b[i])
|
|
62 __builtin_abort ();
|
|
63 }
|
|
64
|
|
65 return 0;
|
|
66 }
|