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