xref: /llvm-project/clang/test/AST/ast-print-openacc-loop-construct.cpp (revision b0cfbfd74bfd9d077f7c1854a1b38dcbe9d402e4)
1 // RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -ast-print %s -o - | FileCheck %s
2 
3 struct SomeStruct{};
4 
5 constexpr int get_value() { return 1; }
6 void foo() {
7 // CHECK: #pragma acc loop
8 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
9 // CHECK-NEXT: ;
10 #pragma acc loop
11   for(int i = 0;i<5;++i);
12 
13 // CHECK: #pragma acc loop device_type(SomeStruct)
14 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
15 // CHECK-NEXT: ;
16 #pragma acc loop device_type(SomeStruct)
17   for(int i = 0;i<5;++i);
18 
19 // CHECK: #pragma acc loop device_type(int)
20 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
21 // CHECK-NEXT: ;
22 #pragma acc loop device_type(int)
23   for(int i = 0;i<5;++i);
24 
25 // CHECK: #pragma acc loop dtype(bool)
26 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
27 // CHECK-NEXT: ;
28 #pragma acc loop dtype(bool)
29   for(int i = 0;i<5;++i);
30 
31 // CHECK: #pragma acc loop dtype(AnotherIdent)
32 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
33 // CHECK-NEXT: ;
34 #pragma acc loop dtype(AnotherIdent)
35   for(int i = 0;i<5;++i);
36 
37 // CHECK: #pragma acc loop independent
38 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
39 // CHECK-NEXT: ;
40 #pragma acc loop independent
41   for(int i = 0;i<5;++i);
42 // CHECK: #pragma acc loop seq
43 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
44 // CHECK-NEXT: ;
45 #pragma acc loop seq
46   for(int i = 0;i<5;++i);
47 // CHECK: #pragma acc loop auto
48 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
49 // CHECK-NEXT: ;
50 #pragma acc loop auto
51   for(int i = 0;i<5;++i);
52 
53   int i;
54   float array[5];
55 
56 // CHECK: #pragma acc loop private(i, array[1], array, array[1:2])
57 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
58 // CHECK-NEXT: ;
59 #pragma acc loop private(i, array[1], array, array[1:2])
60   for(int i = 0;i<5;++i);
61 
62 // CHECK: #pragma acc loop collapse(1)
63 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
64 // CHECK-NEXT: ;
65 #pragma acc loop collapse(1)
66   for(int i = 0;i<5;++i);
67 // CHECK: #pragma acc loop collapse(force:1)
68 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
69 // CHECK-NEXT: ;
70 #pragma acc loop collapse(force:1)
71   for(int i = 0;i<5;++i);
72 // CHECK: #pragma acc loop collapse(2)
73 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
74 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
75 // CHECK-NEXT: ;
76 #pragma acc loop collapse(2)
77   for(int i = 0;i<5;++i)
78     for(int i = 0;i<5;++i);
79 // CHECK: #pragma acc loop collapse(force:2)
80 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
81 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
82 // CHECK-NEXT: ;
83 #pragma acc loop collapse(force:2)
84   for(int i = 0;i<5;++i)
85     for(int i = 0;i<5;++i);
86 
87 // CHECK: #pragma acc loop tile(1, 3, *, get_value())
88 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
89 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
90 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
91 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
92 // CHECK-NEXT: ;
93 #pragma acc loop tile(1, 3, *, get_value())
94   for(int i = 0;i<5;++i)
95     for(int i = 0;i<5;++i)
96       for(int i = 0;i<5;++i)
97         for(int i = 0;i<5;++i);
98 
99 // CHECK: #pragma acc loop gang(dim: 2)
100 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
101 // CHECK-NEXT: ;
102 #pragma acc loop gang(dim:2)
103   for(int i = 0;i<5;++i);
104 
105 // CHECK: #pragma acc loop gang(static: i)
106 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
107 // CHECK-NEXT: ;
108 #pragma acc loop gang(static:i)
109   for(int i = 0;i<5;++i);
110 
111 // CHECK: #pragma acc loop gang(static: i) gang(dim: 2)
112 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
113 // CHECK-NEXT: ;
114 #pragma acc loop gang(static:i) gang(dim:2)
115   for(int i = 0;i<5;++i);
116 
117 // CHECK: #pragma acc parallel
118 // CHECK-NEXT: #pragma acc loop gang(dim: 2)
119 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
120 // CHECK-NEXT: ;
121 #pragma acc parallel
122 #pragma acc loop gang(dim:2)
123   for(int i = 0;i<5;++i);
124 
125 // CHECK: #pragma acc parallel
126 // CHECK-NEXT: #pragma acc loop gang(static: i)
127 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
128 // CHECK-NEXT: ;
129 #pragma acc parallel
130 #pragma acc loop gang(static:i)
131   for(int i = 0;i<5;++i);
132 
133 // CHECK: #pragma acc parallel
134 // CHECK-NEXT: #pragma acc loop gang(static: i) gang(dim: 2)
135 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
136 // CHECK-NEXT: ;
137 #pragma acc parallel
138 #pragma acc loop gang(static:i) gang(dim:2)
139   for(int i = 0;i<5;++i);
140 
141 // CHECK: #pragma acc kernels
142 // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)
143 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
144 // CHECK-NEXT: ;
145 #pragma acc kernels
146 #pragma acc loop gang(i) gang(static:i)
147   for(int i = 0;i<5;++i);
148 
149 // CHECK: #pragma acc kernels
150 // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)
151 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
152 // CHECK-NEXT: ;
153 #pragma acc kernels
154 #pragma acc loop gang(num:i) gang(static:i)
155   for(int i = 0;i<5;++i);
156 
157 // CHECK: #pragma acc serial
158 // CHECK-NEXT: #pragma acc loop gang(static: i)
159 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
160 // CHECK-NEXT: ;
161 #pragma acc serial
162 #pragma acc loop gang(static:i)
163   for(int i = 0;i<5;++i);
164 
165 // CHECK: #pragma acc serial
166 // CHECK-NEXT: #pragma acc loop gang(static: *)
167 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
168 // CHECK-NEXT: ;
169 #pragma acc serial
170 #pragma acc loop gang(static:*)
171   for(int i = 0;i<5;++i);
172 
173 // CHECK: #pragma acc serial
174 // CHECK-NEXT: #pragma acc loop
175 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
176 // CHECK-NEXT: ;
177 #pragma acc serial
178 #pragma acc loop gang
179   for(int i = 0;i<5;++i);
180 
181 // CHECK: #pragma acc loop worker
182 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
183 // CHECK-NEXT: ;
184 #pragma acc parallel
185 #pragma acc loop worker
186   for(int i = 0;i<5;++i);
187 
188 // CHECK: #pragma acc parallel
189 // CHECK-NEXT: #pragma acc loop worker
190 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
191 // CHECK-NEXT: ;
192 #pragma acc parallel
193 #pragma acc loop worker
194   for(int i = 0;i<5;++i);
195 
196 // CHECK: #pragma acc serial
197 // CHECK-NEXT: #pragma acc loop worker
198 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
199 // CHECK-NEXT: ;
200 #pragma acc serial
201 #pragma acc loop worker
202   for(int i = 0;i<5;++i);
203 
204 // CHECK: #pragma acc kernels
205 // CHECK-NEXT: #pragma acc loop worker(num: 5)
206 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
207 // CHECK-NEXT: ;
208 #pragma acc kernels
209 #pragma acc loop worker(5)
210   for(int i = 0;i<5;++i);
211 
212 // CHECK: #pragma acc kernels
213 // CHECK-NEXT: #pragma acc loop worker(num: 5)
214 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
215 // CHECK-NEXT: ;
216 #pragma acc kernels
217 #pragma acc loop worker(num:5)
218   for(int i = 0;i<5;++i);
219 
220   // CHECK: #pragma acc loop vector
221 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
222 // CHECK-NEXT: ;
223 #pragma acc loop vector
224   for(int i = 0;i<5;++i);
225 
226 // CHECK: #pragma acc loop vector(length: 5)
227 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
228 // CHECK-NEXT: ;
229 #pragma acc loop vector(5)
230   for(int i = 0;i<5;++i);
231 
232 // CHECK: #pragma acc loop vector(length: 5)
233 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
234 // CHECK-NEXT: ;
235 #pragma acc loop vector(length:5)
236   for(int i = 0;i<5;++i);
237 
238 // CHECK: #pragma acc parallel
239 // CHECK-NEXT: #pragma acc loop vector
240 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
241 // CHECK-NEXT: ;
242 #pragma acc parallel
243 #pragma acc loop vector
244   for(int i = 0;i<5;++i);
245 
246 // CHECK: #pragma acc parallel
247 // CHECK-NEXT: #pragma acc loop vector(length: 5)
248 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
249 // CHECK-NEXT: ;
250 #pragma acc parallel
251 #pragma acc loop vector(5)
252   for(int i = 0;i<5;++i);
253 
254 // CHECK: #pragma acc parallel
255 // CHECK-NEXT: #pragma acc loop vector(length: 5)
256 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
257 // CHECK-NEXT: ;
258 #pragma acc parallel
259 #pragma acc loop vector(length:5)
260   for(int i = 0;i<5;++i);
261 
262 // CHECK: #pragma acc kernels
263 // CHECK-NEXT: #pragma acc loop vector
264 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
265 // CHECK-NEXT: ;
266 #pragma acc kernels
267 #pragma acc loop vector
268   for(int i = 0;i<5;++i);
269 
270 // CHECK: #pragma acc kernels
271 // CHECK-NEXT: #pragma acc loop vector(length: 5)
272 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
273 // CHECK-NEXT: ;
274 #pragma acc kernels
275 #pragma acc loop vector(5)
276   for(int i = 0;i<5;++i);
277 
278 // CHECK: #pragma acc kernels
279 // CHECK-NEXT: #pragma acc loop vector(length: 5)
280 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
281 // CHECK-NEXT: ;
282 #pragma acc kernels
283 #pragma acc loop vector(length:5)
284   for(int i = 0;i<5;++i);
285 
286 // CHECK: #pragma acc serial
287 // CHECK-NEXT: #pragma acc loop vector
288 // CHECK-NEXT: for (int i = 0; i < 5; ++i)
289 // CHECK-NEXT: ;
290 #pragma acc serial
291 #pragma acc loop vector
292   for(int i = 0;i<5;++i);
293 
294   int *iPtr;
295   bool SomeB;
296 
297 //CHECK: #pragma acc loop reduction(+: iPtr)
298 #pragma acc loop reduction(+: iPtr)
299   for(int i = 0;i<5;++i);
300 //CHECK: #pragma acc loop reduction(*: i)
301 #pragma acc loop reduction(*: i)
302   for(int i = 0;i<5;++i);
303 //CHECK: #pragma acc loop reduction(max: SomeB)
304 #pragma acc loop reduction(max: SomeB)
305   for(int i = 0;i<5;++i);
306 //CHECK: #pragma acc loop reduction(min: iPtr)
307 #pragma acc loop reduction(min: iPtr)
308   for(int i = 0;i<5;++i);
309 //CHECK: #pragma acc loop reduction(&: i)
310 #pragma acc loop reduction(&: i)
311   for(int i = 0;i<5;++i);
312 //CHECK: #pragma acc loop reduction(|: SomeB)
313 #pragma acc loop reduction(|: SomeB)
314   for(int i = 0;i<5;++i);
315 //CHECK: #pragma acc loop reduction(^: iPtr)
316 #pragma acc loop reduction(^: iPtr)
317   for(int i = 0;i<5;++i);
318 //CHECK: #pragma acc loop reduction(&&: i)
319 #pragma acc loop reduction(&&: i)
320   for(int i = 0;i<5;++i);
321 //CHECK: #pragma acc loop reduction(||: SomeB)
322 #pragma acc loop reduction(||: SomeB)
323   for(int i = 0;i<5;++i);
324 }
325