xref: /llvm-project/clang/test/AST/ast-print-openacc-loop-construct.cpp (revision 5b25c31351ad1b10a3819411379b3258869c1e1b)
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 (;;)
9 // CHECK-NEXT: ;
10 #pragma acc loop
11   for(;;);
12 
13 // CHECK: #pragma acc loop device_type(SomeStruct)
14 // CHECK-NEXT: for (;;)
15 // CHECK-NEXT: ;
16 #pragma acc loop device_type(SomeStruct)
17   for(;;);
18 
19 // CHECK: #pragma acc loop device_type(int)
20 // CHECK-NEXT: for (;;)
21 // CHECK-NEXT: ;
22 #pragma acc loop device_type(int)
23   for(;;);
24 
25 // CHECK: #pragma acc loop dtype(bool)
26 // CHECK-NEXT: for (;;)
27 // CHECK-NEXT: ;
28 #pragma acc loop dtype(bool)
29   for(;;);
30 
31 // CHECK: #pragma acc loop dtype(AnotherIdent)
32 // CHECK-NEXT: for (;;)
33 // CHECK-NEXT: ;
34 #pragma acc loop dtype(AnotherIdent)
35   for(;;);
36 
37 // CHECK: #pragma acc loop independent
38 // CHECK-NEXT: for (;;)
39 // CHECK-NEXT: ;
40 #pragma acc loop independent
41   for(;;);
42 // CHECK: #pragma acc loop seq
43 // CHECK-NEXT: for (;;)
44 // CHECK-NEXT: ;
45 #pragma acc loop seq
46   for(;;);
47 // CHECK: #pragma acc loop auto
48 // CHECK-NEXT: for (;;)
49 // CHECK-NEXT: ;
50 #pragma acc loop auto
51   for(;;);
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 (;;)
58 // CHECK-NEXT: ;
59 #pragma acc loop private(i, array[1], array, array[1:2])
60   for(;;);
61 
62 // CHECK: #pragma acc loop collapse(1)
63 // CHECK-NEXT: for (;;)
64 // CHECK-NEXT: ;
65 #pragma acc loop collapse(1)
66   for(;;);
67 // CHECK: #pragma acc loop collapse(force:1)
68 // CHECK-NEXT: for (;;)
69 // CHECK-NEXT: ;
70 #pragma acc loop collapse(force:1)
71   for(;;);
72 // CHECK: #pragma acc loop collapse(2)
73 // CHECK-NEXT: for (;;)
74 // CHECK-NEXT: for (;;)
75 // CHECK-NEXT: ;
76 #pragma acc loop collapse(2)
77   for(;;)
78     for(;;);
79 // CHECK: #pragma acc loop collapse(force:2)
80 // CHECK-NEXT: for (;;)
81 // CHECK-NEXT: for (;;)
82 // CHECK-NEXT: ;
83 #pragma acc loop collapse(force:2)
84   for(;;)
85     for(;;);
86 
87 // CHECK: #pragma acc loop tile(1, 3, *, get_value())
88 // CHECK-NEXT: for (;;)
89 // CHECK-NEXT: for (;;)
90 // CHECK-NEXT: for (;;)
91 // CHECK-NEXT: for (;;)
92 // CHECK-NEXT: ;
93 #pragma acc loop tile(1, 3, *, get_value())
94   for(;;)
95     for(;;)
96       for(;;)
97         for(;;);
98 
99 // CHECK: #pragma acc loop gang(dim: 2)
100 // CHECK-NEXT: for (;;)
101 // CHECK-NEXT: ;
102 #pragma acc loop gang(dim:2)
103   for(;;);
104 
105 // CHECK: #pragma acc loop gang(static: i)
106 // CHECK-NEXT: for (;;)
107 // CHECK-NEXT: ;
108 #pragma acc loop gang(static:i)
109   for(;;);
110 
111 // CHECK: #pragma acc loop gang(static: i) gang(dim: 2)
112 // CHECK-NEXT: for (;;)
113 // CHECK-NEXT: ;
114 #pragma acc loop gang(static:i) gang(dim:2)
115   for(;;);
116 
117 // CHECK: #pragma acc parallel
118 // CHECK-NEXT: #pragma acc loop gang(dim: 2)
119 // CHECK-NEXT: for (;;)
120 // CHECK-NEXT: ;
121 #pragma acc parallel
122 #pragma acc loop gang(dim:2)
123   for(;;);
124 
125 // CHECK: #pragma acc parallel
126 // CHECK-NEXT: #pragma acc loop gang(static: i)
127 // CHECK-NEXT: for (;;)
128 // CHECK-NEXT: ;
129 #pragma acc parallel
130 #pragma acc loop gang(static:i)
131   for(;;);
132 
133 // CHECK: #pragma acc parallel
134 // CHECK-NEXT: #pragma acc loop gang(static: i) gang(dim: 2)
135 // CHECK-NEXT: for (;;)
136 // CHECK-NEXT: ;
137 #pragma acc parallel
138 #pragma acc loop gang(static:i) gang(dim:2)
139   for(;;);
140 
141 // CHECK: #pragma acc kernels
142 // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)
143 // CHECK-NEXT: for (;;)
144 // CHECK-NEXT: ;
145 #pragma acc kernels
146 #pragma acc loop gang(i) gang(static:i)
147   for(;;);
148 
149 // CHECK: #pragma acc kernels
150 // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i)
151 // CHECK-NEXT: for (;;)
152 // CHECK-NEXT: ;
153 #pragma acc kernels
154 #pragma acc loop gang(num:i) gang(static:i)
155   for(;;);
156 
157 // CHECK: #pragma acc serial
158 // CHECK-NEXT: #pragma acc loop gang(static: i)
159 // CHECK-NEXT: for (;;)
160 // CHECK-NEXT: ;
161 #pragma acc serial
162 #pragma acc loop gang(static:i)
163   for(;;);
164 
165 // CHECK: #pragma acc serial
166 // CHECK-NEXT: #pragma acc loop gang(static: *)
167 // CHECK-NEXT: for (;;)
168 // CHECK-NEXT: ;
169 #pragma acc serial
170 #pragma acc loop gang(static:*)
171   for(;;);
172 
173 // CHECK: #pragma acc serial
174 // CHECK-NEXT: #pragma acc loop
175 // CHECK-NEXT: for (;;)
176 // CHECK-NEXT: ;
177 #pragma acc serial
178 #pragma acc loop gang
179   for(;;);
180 }
181