xref: /llvm-project/clang/test/AST/ast-print-openacc-loop-construct.cpp (revision b0cfbfd74bfd9d077f7c1854a1b38dcbe9d402e4)
142f4e505SErich Keane // RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -ast-print %s -o - | FileCheck %s
242f4e505SErich Keane 
3f10e71f6Serichkeane struct SomeStruct{};
4f10e71f6Serichkeane 
5d412cea8SErich Keane constexpr int get_value() { return 1; }
642f4e505SErich Keane void foo() {
742f4e505SErich Keane // CHECK: #pragma acc loop
8*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
942f4e505SErich Keane // CHECK-NEXT: ;
1042f4e505SErich Keane #pragma acc loop
11*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
12f10e71f6Serichkeane 
13f10e71f6Serichkeane // CHECK: #pragma acc loop device_type(SomeStruct)
14*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
15f10e71f6Serichkeane // CHECK-NEXT: ;
16f10e71f6Serichkeane #pragma acc loop device_type(SomeStruct)
17*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
18f10e71f6Serichkeane 
19f10e71f6Serichkeane // CHECK: #pragma acc loop device_type(int)
20*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
21f10e71f6Serichkeane // CHECK-NEXT: ;
22f10e71f6Serichkeane #pragma acc loop device_type(int)
23*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
24f10e71f6Serichkeane 
25f10e71f6Serichkeane // CHECK: #pragma acc loop dtype(bool)
26*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
27f10e71f6Serichkeane // CHECK-NEXT: ;
28f10e71f6Serichkeane #pragma acc loop dtype(bool)
29*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
30f10e71f6Serichkeane 
31f10e71f6Serichkeane // CHECK: #pragma acc loop dtype(AnotherIdent)
32*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
33f10e71f6Serichkeane // CHECK-NEXT: ;
34f10e71f6Serichkeane #pragma acc loop dtype(AnotherIdent)
35*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
362b939e18Serichkeane 
372b939e18Serichkeane // CHECK: #pragma acc loop independent
38*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
392b939e18Serichkeane // CHECK-NEXT: ;
402b939e18Serichkeane #pragma acc loop independent
41*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
422b939e18Serichkeane // CHECK: #pragma acc loop seq
43*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
442b939e18Serichkeane // CHECK-NEXT: ;
452b939e18Serichkeane #pragma acc loop seq
46*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
472b939e18Serichkeane // CHECK: #pragma acc loop auto
48*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
492b939e18Serichkeane // CHECK-NEXT: ;
502b939e18Serichkeane #pragma acc loop auto
51*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
527dcff591Serichkeane 
537dcff591Serichkeane   int i;
547dcff591Serichkeane   float array[5];
557dcff591Serichkeane 
567dcff591Serichkeane // CHECK: #pragma acc loop private(i, array[1], array, array[1:2])
57*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
587dcff591Serichkeane // CHECK-NEXT: ;
597dcff591Serichkeane #pragma acc loop private(i, array[1], array, array[1:2])
60*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
6197da34e0SErich Keane 
6297da34e0SErich Keane // CHECK: #pragma acc loop collapse(1)
63*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
6497da34e0SErich Keane // CHECK-NEXT: ;
6597da34e0SErich Keane #pragma acc loop collapse(1)
66*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
6797da34e0SErich Keane // CHECK: #pragma acc loop collapse(force:1)
68*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
6997da34e0SErich Keane // CHECK-NEXT: ;
7097da34e0SErich Keane #pragma acc loop collapse(force:1)
71*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
7297da34e0SErich Keane // CHECK: #pragma acc loop collapse(2)
73*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
74*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
7597da34e0SErich Keane // CHECK-NEXT: ;
7697da34e0SErich Keane #pragma acc loop collapse(2)
77*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i)
78*b0cfbfd7SErich Keane     for(int i = 0;i<5;++i);
7997da34e0SErich Keane // CHECK: #pragma acc loop collapse(force:2)
80*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
81*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
8297da34e0SErich Keane // CHECK-NEXT: ;
8397da34e0SErich Keane #pragma acc loop collapse(force:2)
84*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i)
85*b0cfbfd7SErich Keane     for(int i = 0;i<5;++i);
86d412cea8SErich Keane 
87d412cea8SErich Keane // CHECK: #pragma acc loop tile(1, 3, *, get_value())
88*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
89*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
90*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
91*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
92d412cea8SErich Keane // CHECK-NEXT: ;
93d412cea8SErich Keane #pragma acc loop tile(1, 3, *, get_value())
94*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i)
95*b0cfbfd7SErich Keane     for(int i = 0;i<5;++i)
96*b0cfbfd7SErich Keane       for(int i = 0;i<5;++i)
97*b0cfbfd7SErich Keane         for(int i = 0;i<5;++i);
985b25c313SErich Keane 
995b25c313SErich Keane // CHECK: #pragma acc loop gang(dim: 2)
100*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1015b25c313SErich Keane // CHECK-NEXT: ;
1025b25c313SErich Keane #pragma acc loop gang(dim:2)
103*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1045b25c313SErich Keane 
1055b25c313SErich Keane // CHECK: #pragma acc loop gang(static: i)
106*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1075b25c313SErich Keane // CHECK-NEXT: ;
1085b25c313SErich Keane #pragma acc loop gang(static:i)
109*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1105b25c313SErich Keane 
1115b25c313SErich Keane // CHECK: #pragma acc loop gang(static: i) gang(dim: 2)
112*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1135b25c313SErich Keane // CHECK-NEXT: ;
1145b25c313SErich Keane #pragma acc loop gang(static:i) gang(dim:2)
115*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1165b25c313SErich Keane 
1175b25c313SErich Keane // CHECK: #pragma acc parallel
1185b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(dim: 2)
119*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1205b25c313SErich Keane // CHECK-NEXT: ;
1215b25c313SErich Keane #pragma acc parallel
1225b25c313SErich Keane #pragma acc loop gang(dim:2)
123*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1245b25c313SErich Keane 
1255b25c313SErich Keane // CHECK: #pragma acc parallel
1265b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: i)
127*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1285b25c313SErich Keane // CHECK-NEXT: ;
1295b25c313SErich Keane #pragma acc parallel
1305b25c313SErich Keane #pragma acc loop gang(static:i)
131*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1325b25c313SErich Keane 
1335b25c313SErich Keane // CHECK: #pragma acc parallel
1345b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: i) gang(dim: 2)
135*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1365b25c313SErich Keane // CHECK-NEXT: ;
1375b25c313SErich Keane #pragma acc parallel
1385b25c313SErich Keane #pragma acc loop gang(static:i) gang(dim:2)
139*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1405b25c313SErich Keane 
1415b25c313SErich Keane // CHECK: #pragma acc kernels
1425b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)
143*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1445b25c313SErich Keane // CHECK-NEXT: ;
1455b25c313SErich Keane #pragma acc kernels
1465b25c313SErich Keane #pragma acc loop gang(i) gang(static:i)
147*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1485b25c313SErich Keane 
1495b25c313SErich Keane // CHECK: #pragma acc kernels
1505b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)
151*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1525b25c313SErich Keane // CHECK-NEXT: ;
1535b25c313SErich Keane #pragma acc kernels
1545b25c313SErich Keane #pragma acc loop gang(num:i) gang(static:i)
155*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1565b25c313SErich Keane 
1575b25c313SErich Keane // CHECK: #pragma acc serial
1585b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: i)
159*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1605b25c313SErich Keane // CHECK-NEXT: ;
1615b25c313SErich Keane #pragma acc serial
1625b25c313SErich Keane #pragma acc loop gang(static:i)
163*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1645b25c313SErich Keane 
1655b25c313SErich Keane // CHECK: #pragma acc serial
1665b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: *)
167*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1685b25c313SErich Keane // CHECK-NEXT: ;
1695b25c313SErich Keane #pragma acc serial
1705b25c313SErich Keane #pragma acc loop gang(static:*)
171*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
1725b25c313SErich Keane 
1735b25c313SErich Keane // CHECK: #pragma acc serial
1745b25c313SErich Keane // CHECK-NEXT: #pragma acc loop
175*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
1765b25c313SErich Keane // CHECK-NEXT: ;
1775b25c313SErich Keane #pragma acc serial
1785b25c313SErich Keane #pragma acc loop gang
179*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
180cf456ed2SErich Keane 
181cf456ed2SErich Keane // CHECK: #pragma acc loop worker
182*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
183cf456ed2SErich Keane // CHECK-NEXT: ;
184cf456ed2SErich Keane #pragma acc parallel
185cf456ed2SErich Keane #pragma acc loop worker
186*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
187cf456ed2SErich Keane 
188cf456ed2SErich Keane // CHECK: #pragma acc parallel
189cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker
190*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
191cf456ed2SErich Keane // CHECK-NEXT: ;
192cf456ed2SErich Keane #pragma acc parallel
193cf456ed2SErich Keane #pragma acc loop worker
194*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
195cf456ed2SErich Keane 
196cf456ed2SErich Keane // CHECK: #pragma acc serial
197cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker
198*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
199cf456ed2SErich Keane // CHECK-NEXT: ;
200cf456ed2SErich Keane #pragma acc serial
201cf456ed2SErich Keane #pragma acc loop worker
202*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
203cf456ed2SErich Keane 
204cf456ed2SErich Keane // CHECK: #pragma acc kernels
205cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker(num: 5)
206*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
207cf456ed2SErich Keane // CHECK-NEXT: ;
208cf456ed2SErich Keane #pragma acc kernels
209cf456ed2SErich Keane #pragma acc loop worker(5)
210*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
211cf456ed2SErich Keane 
212cf456ed2SErich Keane // CHECK: #pragma acc kernels
213cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker(num: 5)
214*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
215cf456ed2SErich Keane // CHECK-NEXT: ;
216cf456ed2SErich Keane #pragma acc kernels
217cf456ed2SErich Keane #pragma acc loop worker(num:5)
218*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
219c8cbdc65SErich Keane 
220c8cbdc65SErich Keane   // CHECK: #pragma acc loop vector
221*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
222c8cbdc65SErich Keane // CHECK-NEXT: ;
223c8cbdc65SErich Keane #pragma acc loop vector
224*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
225c8cbdc65SErich Keane 
226c8cbdc65SErich Keane // CHECK: #pragma acc loop vector(length: 5)
227*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
228c8cbdc65SErich Keane // CHECK-NEXT: ;
229c8cbdc65SErich Keane #pragma acc loop vector(5)
230*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
231c8cbdc65SErich Keane 
232c8cbdc65SErich Keane // CHECK: #pragma acc loop vector(length: 5)
233*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
234c8cbdc65SErich Keane // CHECK-NEXT: ;
235c8cbdc65SErich Keane #pragma acc loop vector(length:5)
236*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
237c8cbdc65SErich Keane 
238c8cbdc65SErich Keane // CHECK: #pragma acc parallel
239c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector
240*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
241c8cbdc65SErich Keane // CHECK-NEXT: ;
242c8cbdc65SErich Keane #pragma acc parallel
243c8cbdc65SErich Keane #pragma acc loop vector
244*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
245c8cbdc65SErich Keane 
246c8cbdc65SErich Keane // CHECK: #pragma acc parallel
247c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5)
248*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
249c8cbdc65SErich Keane // CHECK-NEXT: ;
250c8cbdc65SErich Keane #pragma acc parallel
251c8cbdc65SErich Keane #pragma acc loop vector(5)
252*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
253c8cbdc65SErich Keane 
254c8cbdc65SErich Keane // CHECK: #pragma acc parallel
255c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5)
256*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
257c8cbdc65SErich Keane // CHECK-NEXT: ;
258c8cbdc65SErich Keane #pragma acc parallel
259c8cbdc65SErich Keane #pragma acc loop vector(length:5)
260*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
261c8cbdc65SErich Keane 
262c8cbdc65SErich Keane // CHECK: #pragma acc kernels
263c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector
264*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
265c8cbdc65SErich Keane // CHECK-NEXT: ;
266c8cbdc65SErich Keane #pragma acc kernels
267c8cbdc65SErich Keane #pragma acc loop vector
268*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
269c8cbdc65SErich Keane 
270c8cbdc65SErich Keane // CHECK: #pragma acc kernels
271c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5)
272*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
273c8cbdc65SErich Keane // CHECK-NEXT: ;
274c8cbdc65SErich Keane #pragma acc kernels
275c8cbdc65SErich Keane #pragma acc loop vector(5)
276*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
277c8cbdc65SErich Keane 
278c8cbdc65SErich Keane // CHECK: #pragma acc kernels
279c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5)
280*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
281c8cbdc65SErich Keane // CHECK-NEXT: ;
282c8cbdc65SErich Keane #pragma acc kernels
283c8cbdc65SErich Keane #pragma acc loop vector(length:5)
284*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
285c8cbdc65SErich Keane 
286c8cbdc65SErich Keane // CHECK: #pragma acc serial
287c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector
288*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i)
289c8cbdc65SErich Keane // CHECK-NEXT: ;
290c8cbdc65SErich Keane #pragma acc serial
291c8cbdc65SErich Keane #pragma acc loop vector
292*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
293c8cbdc65SErich Keane 
2940b0b1530Serichkeane   int *iPtr;
2950b0b1530Serichkeane   bool SomeB;
2960b0b1530Serichkeane 
2970b0b1530Serichkeane //CHECK: #pragma acc loop reduction(+: iPtr)
2980b0b1530Serichkeane #pragma acc loop reduction(+: iPtr)
299*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3000b0b1530Serichkeane //CHECK: #pragma acc loop reduction(*: i)
3010b0b1530Serichkeane #pragma acc loop reduction(*: i)
302*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3030b0b1530Serichkeane //CHECK: #pragma acc loop reduction(max: SomeB)
3040b0b1530Serichkeane #pragma acc loop reduction(max: SomeB)
305*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3060b0b1530Serichkeane //CHECK: #pragma acc loop reduction(min: iPtr)
3070b0b1530Serichkeane #pragma acc loop reduction(min: iPtr)
308*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3090b0b1530Serichkeane //CHECK: #pragma acc loop reduction(&: i)
3100b0b1530Serichkeane #pragma acc loop reduction(&: i)
311*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3120b0b1530Serichkeane //CHECK: #pragma acc loop reduction(|: SomeB)
3130b0b1530Serichkeane #pragma acc loop reduction(|: SomeB)
314*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3150b0b1530Serichkeane //CHECK: #pragma acc loop reduction(^: iPtr)
3160b0b1530Serichkeane #pragma acc loop reduction(^: iPtr)
317*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3180b0b1530Serichkeane //CHECK: #pragma acc loop reduction(&&: i)
3190b0b1530Serichkeane #pragma acc loop reduction(&&: i)
320*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
3210b0b1530Serichkeane //CHECK: #pragma acc loop reduction(||: SomeB)
3220b0b1530Serichkeane #pragma acc loop reduction(||: SomeB)
323*b0cfbfd7SErich Keane   for(int i = 0;i<5;++i);
32442f4e505SErich Keane }
325