1 /* { dg-additional-options "-fopt-info-note-omp" }
2 { dg-additional-options "--param=openacc-privatization=noisy" }
3 { dg-additional-options "-foffload=-fopt-info-note-omp" }
4 { dg-additional-options "-foffload=--param=openacc-privatization=noisy" }
5 for testing/documenting aspects of that functionality. */
6
7 #include <stdlib.h>
8 #include <stdio.h>
9
10 #define M 8
11 #define N 32
12
13 #pragma acc routine vector
14 void
15 vector (int *a)
16 {
17 int i;
18
19 #pragma acc loop vector
20 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
21 for (i = 0; i < N; i++)
22 a[i] -= a[i];
23 }
24
25 #pragma acc routine worker
26 void
27 worker (int *b)
28 {
29 int i, j;
30
31 #pragma acc loop worker
32 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
33 for (i = 0; i < N; i++)
34 {
35 #pragma acc loop vector
36 /* { dg-note {variable 'j' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
37 for (j = 0; j < M; j++)
38 b[i * M + j] += b[i * M + j];
39 }
40 }
41
42 #pragma acc routine gang
43 void
44 gang (int *a)
45 {
46 int i;
47
48 #pragma acc loop gang worker vector
49 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
50 for (i = 0; i < N; i++)
51 a[i] -= i;
52 }
53
54 #pragma acc routine seq
55 void
56 seq (int *a)
57 {
58 int i;
59
60 for (i = 0; i < N; i++)
61 a[i] += 1;
62 }
63
64 int
65 main(int argc, char **argv)
66 {
67 int i;
68 int a[N];
69 int b[M * N];
70
71 i = 0;
72
73 for (i = 0; i < N; i++)
74 a[i] = 0;
75
76 #pragma acc parallel copy (a[0:N])
77 {
78 #pragma acc loop seq
79 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
80 for (i = 0; i < N; i++)
81 seq (&a[0]);
82 }
83
84 for (i = 0; i < N; i++)
85 {
86 if (a[i] != N)
87 abort ();
88 }
89
90 #pragma acc parallel copy (a[0:N])
91 {
92 #pragma acc loop seq
93 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
94 for (i = 0; i < N; i++)
95 gang (&a[0]);
96 }
97
98 for (i = 0; i < N; i++)
99 {
100 if (a[i] != N + (N * (-1 * i)))
101 abort ();
102 }
103
104 for (i = 0; i < N; i++)
105 a[i] = i;
106
107 #pragma acc parallel copy (b[0:M*N])
108 {
109 worker (&b[0]);
110 }
111
112 for (i = 0; i < N; i++)
113 {
114 if (a[i] != i)
115 abort ();
116 }
117
118 for (i = 0; i < N; i++)
119 a[i] = i;
120
121 #pragma acc parallel copy (a[0:N])
122 {
123 #pragma acc loop
124 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
125 for (i = 0; i < N; i++)
126 vector (&a[0]);
127 }
128
129 for (i = 0; i < N; i++)
130 {
131 if (a[i] != 0)
132 abort ();
133 }
134
135 return 0;
136 }