1 // expected-no-diagnostics
2 #ifndef HEADER
3 #define HEADER
4 
5 // Test host codegen.
6 // RUN: %clang_cc1 -DCK1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-64
7 // RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s
8 // RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-64
9 // RUN: %clang_cc1 -DCK1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-32
10 // RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s
11 // RUN: %clang_cc1 -DCK1 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK1 --check-prefix CK1-32
12 
13 // RUN: %clang_cc1 -DCK1 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
14 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s
15 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s
16 // RUN: %clang_cc1 -DCK1 -verify -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
17 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s
18 // RUN: %clang_cc1 -DCK1 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s
19 // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
20 #ifdef CK1
21 
22 template <typename T, int X, long long Y>
23 struct SS{
24   T a[X];
25   float b;
26   // CK1: define {{.*}}i32 @{{.+}}foo{{.+}}(
27   int foo(void) {
28 
29   // CK1: call i32 @__tgt_target_teams(
30   // CK1: call void @[[OFFL1:.+]](
31     #pragma omp target
32     #pragma omp teams distribute parallel for
33     for(int i = 0; i < X; i++) {
34       a[i] = (T)0;
35     }
36   // CK1: call i32 @__tgt_target_teams(
37   // CK1: call void @[[OFFL2:.+]](
38     #pragma omp target
39     #pragma omp teams distribute parallel for schedule(static)
40     for(int i = 0; i < X; i++) {
41       a[i] = (T)0;
42     }
43   // CK1: call i32 @__tgt_target_teams(
44   // CK1: call void @[[OFFL3:.+]](
45     #pragma omp target
46     #pragma omp teams distribute parallel for schedule(static, X/2)
47     for(int i = 0; i < X; i++) {
48       a[i] = (T)0;
49     }
50 
51   // CK1: call i32 @__tgt_target_teams(
52   // CK1: call void @[[OFFL4:.+]](
53     #pragma omp target
54     #pragma omp teams distribute parallel for schedule(dynamic)
55     for(int i = 0; i < X; i++) {
56       a[i] = (T)0;
57     }
58 
59   // CK1: call i32 @__tgt_target_teams(
60   // CK1: call void @[[OFFL5:.+]](
61     #pragma omp target
62     #pragma omp teams distribute parallel for schedule(dynamic, X/2)
63     for(int i = 0; i < X; i++) {
64       a[i] = (T)0;
65     }
66 
67   // CK1: define internal void @[[OFFL1]](
68   // CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTL1:.+]] to {{.+}},
69   // CK1: ret void
70 
71   // CK1: define internal void @[[OUTL1]]({{.+}})
72   // CK1: call void @__kmpc_for_static_init_4(
73   // CK1: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL1:.+]] to
74   // CK1: call void @__kmpc_for_static_fini(
75   // CK1: ret void
76 
77   // CK1: define internal void @[[PAR_OUTL1]]({{.+}})
78   // CK1: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
79   // CK1: call void @__kmpc_for_static_fini(
80   // CK1: ret void
81 
82   // CK1: define internal void @[[OFFL2]](
83   // CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTL2:.+]] to {{.+}},
84   // CK1: ret void
85 
86   // CK1: define internal void @[[OUTL2]]({{.+}})
87   // CK1: call void @__kmpc_for_static_init_4(
88   // CK1: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL2:.+]] to
89   // CK1: call void @__kmpc_for_static_fini(
90   // CK1: ret void
91 
92   // CK1: define internal void @[[PAR_OUTL2]]({{.+}})
93   // CK1: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
94   // CK1: call void @__kmpc_for_static_fini(
95   // CK1: ret void
96 
97   // CK1: define internal void @[[OFFL3]](
98   // CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTL3:.+]] to {{.+}},
99   // CK1: ret void
100 
101   // CK1: define internal void @[[OUTL3]]({{.+}})
102   // CK1: call void @__kmpc_for_static_init_4(
103   // CK1: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL3:.+]] to
104   // CK1: call void @__kmpc_for_static_fini(
105   // CK1: ret void
106 
107   // CK1: define internal void @[[PAR_OUTL3]]({{.+}})
108   // CK1: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 33,
109   // CK1: call void @__kmpc_for_static_fini(
110   // CK1: ret void
111 
112   // CK1: define internal void @[[OFFL4]](
113   // CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTL4:.+]] to {{.+}},
114   // CK1: ret void
115 
116   // CK1: define internal void @[[OUTL4]]({{.+}})
117   // CK1: call void @__kmpc_for_static_init_4(
118   // CK1: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL4:.+]] to
119   // CK1: call void @__kmpc_for_static_fini(
120   // CK1: ret void
121 
122   // CK1: define internal void @[[PAR_OUTL4]]({{.+}})
123   // CK1: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
124   // CK1: call {{.+}} @__kmpc_dispatch_next_4(
125   // CK1: ret void
126 
127   // CK1: define internal void @[[OFFL5]](
128   // CK1: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTL5:.+]] to {{.+}},
129   // CK1: ret void
130 
131   // CK1: define internal void @[[OUTL5]]({{.+}})
132   // CK1: call void @__kmpc_for_static_init_4(
133   // CK1: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL5:.+]] to
134   // CK1: call void @__kmpc_for_static_fini(
135   // CK1: ret void
136 
137   // CK1: define internal void @[[PAR_OUTL5]]({{.+}})
138   // CK1: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
139   // CK1: call {{.+}} @__kmpc_dispatch_next_4(
140   // CK1: ret void
141 
142     return a[0];
143   }
144 };
145 
146 int teams_template_struct(void) {
147   SS<int, 123, 456> V;
148   return V.foo();
149 
150 }
151 #endif // CK1
152 
153 // Test host codegen.
154 // RUN: %clang_cc1 -DCK2 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-64
155 // RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s
156 // RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-64
157 // RUN: %clang_cc1 -DCK2 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-32
158 // RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s
159 // RUN: %clang_cc1 -DCK2 -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix CK2 --check-prefix CK2-32
160 
161 // RUN: %clang_cc1 -DCK2 -verify -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s
162 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -std=c++11 -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-pch -o %t %s
163 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s
164 // RUN: %clang_cc1 -DCK2 -verify -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY1 %s
165 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -std=c++11 -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -emit-pch -o %t %s
166 // RUN: %clang_cc1 -DCK2 -fopenmp-simd -x c++ -triple i386-unknown-unknown -fopenmp-targets=i386-pc-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY1 %s
167 // SIMD-ONLY1-NOT: {{__kmpc|__tgt}}
168 #ifdef CK2
169 
170 template <typename T, int n>
171 int tmain(T argc) {
172   T a[n];
173   int m = 10;
174 #pragma omp target
175 #pragma omp teams distribute parallel for
176   for(int i = 0; i < n; i++) {
177     a[i] = (T)0;
178   }
179 #pragma omp target
180 #pragma omp teams distribute parallel for schedule(static)
181   for(int i = 0; i < n; i++) {
182     a[i] = (T)0;
183   }
184 #pragma omp target
185 #pragma omp teams distribute parallel for schedule(static, m)
186   for(int i = 0; i < n; i++) {
187     a[i] = (T)0;
188   }
189 #pragma omp target
190 #pragma omp teams distribute parallel for schedule(dynamic)
191   for(int i = 0; i < n; i++) {
192     a[i] = (T)0;
193   }
194 #pragma omp target
195 #pragma omp teams distribute parallel for schedule(dynamic, m)
196   for(int i = 0; i < n; i++) {
197     a[i] = (T)0;
198   }
199   return 0;
200 }
201 
202 int main (int argc, char **argv) {
203   int n = 100;
204   int a[n];
205   int m = 10;
206 #pragma omp target
207 #pragma omp teams distribute parallel for
208   for(int i = 0; i < n; i++) {
209     a[i] = 0;
210   }
211 #pragma omp target
212 #pragma omp teams distribute parallel for dist_schedule(static)
213   for(int i = 0; i < n; i++) {
214     a[i] = 0;
215   }
216 #pragma omp target
217 #pragma omp teams distribute parallel for dist_schedule(static, m)
218   for(int i = 0; i < n; i++) {
219     a[i] = 0;
220   }
221 #pragma omp target
222 #pragma omp teams distribute parallel for schedule(dynamic)
223   for(int i = 0; i < n; i++) {
224     a[i] = 0;
225   }
226 #pragma omp target
227 #pragma omp teams distribute parallel for schedule(dynamic, m)
228   for(int i = 0; i < n; i++) {
229     a[i] = 0;
230   }
231   return tmain<int, 10>(argc);
232 }
233 
234 // CK2: define {{.*}}i32 @{{[^,]+}}(i{{.+}}{{.+}} %[[ARGC:.+]], {{.+}})
235 // CK2: call i32 @__tgt_target_teams(
236 // CK2: call void @[[OFFL1:.+]]({{.+}})
237 // CK2: call i32 @__tgt_target_teams(
238 // CK2: call void @[[OFFL2:.+]]({{.+}})
239 // CK2: call i32 @__tgt_target_teams(
240 // CK2: call void @[[OFFL3:.+]]({{.+}})
241 // CK2: call i32 @__tgt_target_teams(
242 // CK2: call void @[[OFFL4:.+]]({{.+}})
243 // CK2: call i32 @__tgt_target_teams(
244 // CK2: call void @[[OFFL5:.+]]({{.+}})
245 // CK2: {{%.+}} = call{{.*}} i32 @[[TMAIN:.+]]({{.+}})
246 // CK2: ret
247 
248 // CK2:  define {{.*}}void @[[OFFL1]]({{.+}})
249 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 3, {{.+}} @[[OUTL1:.+]] to {{.+}},
250 // CK2: ret void
251 
252 // CK2: define internal void @[[OUTL1]]({{.+}})
253 // CK2: call void @__kmpc_for_static_init_4(
254 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL1:.+]] to
255 // CK2: call void @__kmpc_for_static_fini(
256 // CK2: ret void
257 
258 // CK2: define internal void @[[PAR_OUTL1]]({{.+}})
259 // CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
260 // CK2: call void @__kmpc_for_static_fini(
261 // CK2: ret void
262 
263 // CK2: define {{.*}}void @[[OFFL2]]({{.+}})
264 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 3, {{.+}} @[[OUTL2:.+]] to {{.+}},
265 // CK2: ret void
266 
267 // CK2: define internal void @[[OUTL2]]({{.+}})
268 // CK2: call void @__kmpc_for_static_init_4(
269 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL2:.+]] to
270 // CK2: call void @__kmpc_for_static_fini(
271 // CK2: ret void
272 
273 // CK2: define internal void @[[PAR_OUTL2]]({{.+}})
274 // CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
275 // CK2: call void @__kmpc_for_static_fini(
276 // CK2: ret void
277 
278 // CK2:  define {{.*}}void @[[OFFL3]]({{.+}})
279 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 4, {{.+}} @[[OUTL3:.+]] to {{.+}},
280 // CK2: ret void
281 
282 // CK2: define internal void @[[OUTL3]]({{.+}})
283 // CK2: call void @__kmpc_for_static_init_4(
284 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL3:.+]] to
285 // CK2: call void @__kmpc_for_static_fini(
286 // CK2: ret void
287 
288 // CK2: define internal void @[[PAR_OUTL3]]({{.+}})
289 // CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34
290 // CK2: call void @__kmpc_for_static_fini(
291 // CK2: ret void
292 
293 // CK2:  define {{.*}}void @[[OFFL4]]({{.+}})
294 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTL4:.+]] to {{.+}},
295 // CK2: ret void
296 
297 // CK2: define internal void @[[OUTL4]]({{.+}})
298 // CK2: call void @__kmpc_for_static_init_4(
299 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL4:.+]] to
300 // CK2: call void @__kmpc_for_static_fini(
301 // CK2: ret void
302 
303 // CK2: define internal void @[[PAR_OUTL4]]({{.+}})
304 // CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
305 // CK2: call {{.+}} @__kmpc_dispatch_next_4(
306 // CK2: ret void
307 
308 
309 // CK2: define {{.*}}void @[[OFFL5]]({{.+}})
310 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTL5:.+]] to {{.+}},
311 // CK2: ret void
312 
313 // CK2: define internal void @[[OUTL5]]({{.+}})
314 // CK2: call void @__kmpc_for_static_init_4(
315 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL5:.+]] to
316 // CK2: call void @__kmpc_for_static_fini(
317 // CK2: ret void
318 
319 // CK2: define internal void @[[PAR_OUTL5]]({{.+}})
320 // CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
321 // CK2: call {{.+}} @__kmpc_dispatch_next_4(
322 // CK2: ret void
323 
324 // CK2: define {{.*}}i32 @[[TMAIN]]({{.+}})
325 // CK2: call i32 @__tgt_target_teams(
326 // CK2: call void @[[OFFLT1:.+]]({{.+}})
327 // CK2: call i32 @__tgt_target_teams(
328 // CK2: call void @[[OFFLT2:.+]]({{.+}})
329 // CK2: call i32 @__tgt_target_teams(
330 // CK2: call void @[[OFFLT3:.+]]({{.+}})
331 // CK2: call i32 @__tgt_target_teams(
332 // CK2: call void @[[OFFLT4:.+]]({{.+}})
333 // CK2: call i32 @__tgt_target_teams(
334 // CK2: call void @[[OFFLT5:.+]]({{.+}})
335 // CK2:  ret
336 // CK2-NEXT: }
337 
338 // CK2:  define {{.*}}void @[[OFFLT1]]({{.+}})
339 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT1:.+]] to {{.+}},
340 // CK2: ret void
341 
342 // CK2: define internal void @[[OUTLT1]]({{.+}})
343 // CK2: call void @__kmpc_for_static_init_4(
344 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT1:.+]] to
345 // CK2: call void @__kmpc_for_static_fini(
346 // CK2: ret void
347 
348 // CK2: define internal void @[[PAR_OUTLT1]]({{.+}})
349 // CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
350 // CK2: call void @__kmpc_for_static_fini(
351 // CK2: ret void
352 
353 // CK2:  define {{.*}}void @[[OFFLT2]]({{.+}})
354 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT2:.+]] to {{.+}},
355 // CK2: ret void
356 
357 // CK2: define internal void @[[OUTLT2]]({{.+}})
358 // CK2: call void @__kmpc_for_static_init_4(
359 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT2:.+]] to
360 // CK2: call void @__kmpc_for_static_fini(
361 // CK2: ret void
362 
363 // CK2: define internal void @[[PAR_OUTLT2]]({{.+}})
364 // CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
365 // CK2: call void @__kmpc_for_static_fini(
366 // CK2: ret void
367 
368 // CK2:  define {{.*}}void @[[OFFLT3]]({{.+}})
369 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTLT3:.+]] to {{.+}},
370 // CK2: ret void
371 
372 // CK2: define internal void @[[OUTLT3]]({{.+}})
373 // CK2: call void @__kmpc_for_static_init_4(
374 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT3:.+]] to
375 // CK2: call void @__kmpc_for_static_fini(
376 // CK2: ret void
377 
378 // CK2: define internal void @[[PAR_OUTLT3]]({{.+}})
379 // CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 33,
380 // CK2: call void @__kmpc_for_static_fini(
381 // CK2: ret void
382 
383 // CK2:  define {{.*}}void @[[OFFLT4]]({{.+}})
384 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTLT4:.+]] to {{.+}},
385 // CK2: ret void
386 
387 // CK2: define internal void @[[OUTLT4]]({{.+}})
388 // CK2: call void @__kmpc_for_static_init_4(
389 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT4:.+]] to
390 // CK2: call void @__kmpc_for_static_fini(
391 // CK2: ret void
392 
393 // CK2: define internal void @[[PAR_OUTLT4]]({{.+}})
394 // CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
395 // CK2: call {{.+}} @__kmpc_dispatch_next_4(
396 // CK2: ret void
397 
398 // CK2:  define {{.*}}void @[[OFFLT5]]({{.+}})
399 // CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTLT5:.+]] to {{.+}},
400 // CK2: ret void
401 
402 // CK2: define internal void @[[OUTLT5]]({{.+}})
403 // CK2: call void @__kmpc_for_static_init_4(
404 // CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT5:.+]] to
405 // CK2: call void @__kmpc_for_static_fini(
406 // CK2: ret void
407 
408 // CK2: define internal void @[[PAR_OUTLT5]]({{.+}})
409 // CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
410 // CK2: call {{.+}} @__kmpc_dispatch_next_4(
411 // CK2: ret void
412 
413 #endif // CK2
414 #endif // #ifndef HEADER
415