xref: /llvm-project/clang/test/AST/ast-print-openacc-compute-construct.cpp (revision a15b685c2d868eaf408d05baa50baa3c9f5cc740)
101e91a2dSerichkeane // RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -ast-print %s -o - | FileCheck %s
2cc6113daSerichkeane 
foo()3cc6113daSerichkeane void foo() {
4cc6113daSerichkeane   int i;
548c8a579Serichkeane   int *iPtr;
6cc6113daSerichkeane   float array[5];
748c8a579Serichkeane   float *arrayPtr[5];
8cc6113daSerichkeane // CHECK: #pragma acc parallel default(none)
9cc6113daSerichkeane // CHECK-NEXT: while (true)
10cc6113daSerichkeane #pragma acc parallel default(none)
11cc6113daSerichkeane   while(true);
12cc6113daSerichkeane // CHECK: #pragma acc serial default(present)
13cc6113daSerichkeane // CHECK-NEXT: while (true)
14cc6113daSerichkeane #pragma acc serial default(present)
15cc6113daSerichkeane   while(true);
16cc6113daSerichkeane // CHECK: #pragma acc kernels if(i == array[1])
17cc6113daSerichkeane // CHECK-NEXT: while (true)
18cc6113daSerichkeane #pragma acc kernels if(i == array[1])
19cc6113daSerichkeane   while(true);
20cc6113daSerichkeane // CHECK: #pragma acc parallel self(i == 3)
21cc6113daSerichkeane // CHECK-NEXT: while (true)
22cc6113daSerichkeane #pragma acc parallel self(i == 3)
23cc6113daSerichkeane   while(true);
24cc6113daSerichkeane 
25cc6113daSerichkeane // CHECK: #pragma acc parallel num_gangs(i, (int)array[2])
26cc6113daSerichkeane // CHECK-NEXT: while (true)
27cc6113daSerichkeane #pragma acc parallel num_gangs(i, (int)array[2])
28cc6113daSerichkeane   while(true);
29cc6113daSerichkeane 
30cc6113daSerichkeane // CHECK: #pragma acc parallel num_workers(i)
31cc6113daSerichkeane // CHECK-NEXT: while (true)
32cc6113daSerichkeane #pragma acc parallel num_workers(i)
33cc6113daSerichkeane   while(true);
34cc6113daSerichkeane 
35cc6113daSerichkeane // CHECK: #pragma acc parallel vector_length((int)array[1])
36cc6113daSerichkeane // CHECK-NEXT: while (true)
37cc6113daSerichkeane #pragma acc parallel vector_length((int)array[1])
38cc6113daSerichkeane   while(true);
39cc6113daSerichkeane 
40fa67986dSErich Keane // CHECK: #pragma acc parallel private(i, array[1], array, array[1:2])
41fa67986dSErich Keane #pragma acc parallel private(i, array[1], array, array[1:2])
42fa67986dSErich Keane   while(true);
43a13c5140Serichkeane 
44a13c5140Serichkeane // CHECK: #pragma acc parallel firstprivate(i, array[1], array, array[1:2])
45a13c5140Serichkeane #pragma acc parallel firstprivate(i, array[1], array, array[1:2])
46a13c5140Serichkeane   while(true);
47bd909d2eSerichkeane 
48bd909d2eSerichkeane // CHECK: #pragma acc parallel no_create(i, array[1], array, array[1:2])
49bd909d2eSerichkeane #pragma acc parallel no_create(i, array[1], array, array[1:2])
50bd909d2eSerichkeane   while(true);
51bd909d2eSerichkeane 
52bd909d2eSerichkeane // CHECK: #pragma acc parallel present(i, array[1], array, array[1:2])
53bd909d2eSerichkeane #pragma acc parallel present(i, array[1], array, array[1:2])
54bd909d2eSerichkeane   while(true);
55bd909d2eSerichkeane // CHECK: #pragma acc parallel no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2])
56bd909d2eSerichkeane #pragma acc parallel no_create(i, array[1], array, array[1:2]) present(i, array[1], array, array[1:2])
57bd909d2eSerichkeane   while(true);
5801e91a2dSerichkeane 
5901e91a2dSerichkeane // CHECK: #pragma acc parallel copyin(i, array[1], array, array[1:2]) pcopyin(readonly: i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2])
6001e91a2dSerichkeane #pragma acc parallel copyin(i, array[1], array, array[1:2]) pcopyin(readonly:i, array[1], array, array[1:2]) present_or_copyin(i, array[1], array, array[1:2])
6101e91a2dSerichkeane   while(true);
6201e91a2dSerichkeane 
6301e91a2dSerichkeane // CHECK: #pragma acc parallel copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2])
6401e91a2dSerichkeane #pragma acc parallel copyout(i, array[1], array, array[1:2]) pcopyout(zero: i, array[1], array, array[1:2]) present_or_copyout(i, array[1], array, array[1:2])
6501e91a2dSerichkeane   while(true);
6601e91a2dSerichkeane 
6701e91a2dSerichkeane // CHECK: #pragma acc parallel create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2])
6801e91a2dSerichkeane #pragma acc parallel create(i, array[1], array, array[1:2]) pcreate(zero: i, array[1], array, array[1:2]) present_or_create(i, array[1], array, array[1:2])
6901e91a2dSerichkeane   while(true);
7048c8a579Serichkeane 
7148c8a579Serichkeane   // CHECK: #pragma acc serial attach(iPtr, arrayPtr[0])
7248c8a579Serichkeane #pragma acc serial attach(iPtr, arrayPtr[0])
7348c8a579Serichkeane   while(true);
7448c8a579Serichkeane 
7548c8a579Serichkeane   // CHECK: #pragma acc kernels deviceptr(iPtr, arrayPtr[0])
7648c8a579Serichkeane #pragma acc kernels deviceptr(iPtr, arrayPtr[0])
7748c8a579Serichkeane   while(true);
7830cfe2b2Serichkeane 
7930cfe2b2Serichkeane   // CHECK: #pragma acc kernels async(*iPtr)
8030cfe2b2Serichkeane #pragma acc kernels async(*iPtr)
8130cfe2b2Serichkeane   while(true);
8230cfe2b2Serichkeane 
8330cfe2b2Serichkeane   // CHECK: #pragma acc kernels async
8430cfe2b2Serichkeane #pragma acc kernels async
8530cfe2b2Serichkeane   while(true);
86b1b46521Serichkeane 
87b1b46521Serichkeane // CHECK: #pragma acc parallel wait
88b1b46521Serichkeane #pragma acc parallel wait
89b1b46521Serichkeane   while(true);
90b1b46521Serichkeane 
91b1b46521Serichkeane // CHECK: #pragma acc parallel wait()
92b1b46521Serichkeane #pragma acc parallel wait()
93b1b46521Serichkeane   while(true);
94b1b46521Serichkeane 
95b1b46521Serichkeane // CHECK: #pragma acc parallel wait(*iPtr, i)
96b1b46521Serichkeane #pragma acc parallel wait(*iPtr, i)
97b1b46521Serichkeane   while(true);
98b1b46521Serichkeane 
99b1b46521Serichkeane // CHECK: #pragma acc parallel wait(queues: *iPtr, i)
100b1b46521Serichkeane #pragma acc parallel wait(queues:*iPtr, i)
101b1b46521Serichkeane   while(true);
102b1b46521Serichkeane 
103b1b46521Serichkeane // CHECK: #pragma acc parallel wait(devnum: i : *iPtr, i)
104b1b46521Serichkeane #pragma acc parallel wait(devnum:i:*iPtr, i)
105b1b46521Serichkeane   while(true);
106b1b46521Serichkeane 
107b1b46521Serichkeane // CHECK: #pragma acc parallel wait(devnum: i : queues: *iPtr, i)
108b1b46521Serichkeane #pragma acc parallel wait(devnum:i:queues:*iPtr, i)
109b1b46521Serichkeane   while(true);
1108ef2011bSerichkeane 
1118ef2011bSerichkeane   bool SomeB;
1128ef2011bSerichkeane   struct SomeStruct{} SomeStructImpl;
1138ef2011bSerichkeane 
11403eba209Serichkeane //CHECK: #pragma acc parallel dtype(SomeB)
1158ef2011bSerichkeane #pragma acc parallel dtype(SomeB)
1168ef2011bSerichkeane   while(true);
1178ef2011bSerichkeane 
11803eba209Serichkeane //CHECK: #pragma acc parallel device_type(SomeStruct)
1198ef2011bSerichkeane #pragma acc parallel device_type(SomeStruct)
1208ef2011bSerichkeane   while(true);
1218ef2011bSerichkeane 
12203eba209Serichkeane //CHECK: #pragma acc parallel device_type(int)
1238ef2011bSerichkeane #pragma acc parallel device_type(int)
1248ef2011bSerichkeane   while(true);
1258ef2011bSerichkeane 
12603eba209Serichkeane //CHECK: #pragma acc parallel dtype(bool)
1278ef2011bSerichkeane #pragma acc parallel dtype(bool)
1288ef2011bSerichkeane   while(true);
1298ef2011bSerichkeane 
13003eba209Serichkeane //CHECK: #pragma acc parallel device_type(SomeStructImpl)
1318ef2011bSerichkeane #pragma acc parallel device_type (SomeStructImpl)
1328ef2011bSerichkeane   while(true);
133*a15b685cSErich Keane 
134*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(+: iPtr)
135*a15b685cSErich Keane #pragma acc parallel reduction(+: iPtr)
136*a15b685cSErich Keane   while(true);
137*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(*: i)
138*a15b685cSErich Keane #pragma acc parallel reduction(*: i)
139*a15b685cSErich Keane   while(true);
140*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(max: SomeB)
141*a15b685cSErich Keane #pragma acc parallel reduction(max: SomeB)
142*a15b685cSErich Keane   while(true);
143*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(min: iPtr)
144*a15b685cSErich Keane #pragma acc parallel reduction(min: iPtr)
145*a15b685cSErich Keane   while(true);
146*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(&: i)
147*a15b685cSErich Keane #pragma acc parallel reduction(&: i)
148*a15b685cSErich Keane   while(true);
149*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(|: SomeB)
150*a15b685cSErich Keane #pragma acc parallel reduction(|: SomeB)
151*a15b685cSErich Keane   while(true);
152*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(^: iPtr)
153*a15b685cSErich Keane #pragma acc parallel reduction(^: iPtr)
154*a15b685cSErich Keane   while(true);
155*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(&&: i)
156*a15b685cSErich Keane #pragma acc parallel reduction(&&: i)
157*a15b685cSErich Keane   while(true);
158*a15b685cSErich Keane //CHECK: #pragma acc parallel reduction(||: SomeB)
159*a15b685cSErich Keane #pragma acc parallel reduction(||: SomeB)
160*a15b685cSErich Keane   while(true);
161cc6113daSerichkeane }
162cc6113daSerichkeane 
163