1 // Test target codegen - host bc file has to be created first.
2 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple powerpc64le-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm-bc %s -o %t-ppc-host.bc
3 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx64-unknown-unknown -fopenmp-targets=nvptx64-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-ppc-host.bc -o - | FileCheck %s
4 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple i386-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm-bc %s -o %t-x86-host.bc
5 // RUN: %clang_cc1 -verify -fopenmp -x c++ -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s
6 // RUN: %clang_cc1 -verify -fopenmp -fexceptions -fcxx-exceptions -x c++ -triple nvptx-unknown-unknown -fopenmp-targets=nvptx-nvidia-cuda -emit-llvm %s -fopenmp-is-device -fopenmp-host-ir-file-path %t-x86-host.bc -o - | FileCheck %s
7 // expected-no-diagnostics
8 #ifndef HEADER
9 #define HEADER
10 
11 int a;
12 
13 // CHECK-NOT: @__omp_offloading_{{.+}}_exec_mode = weak constant i8 1
14 // CHECK-DAG: [[DISTR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2050, i32 3, i32 0, i8* getelementptr inbounds
15 // CHECK-DAG: [[FOR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 514, i32 3, i32 0, i8* getelementptr inbounds
16 // CHECK-DAG: [[LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 3, i32 0, i8* getelementptr inbounds
17 // CHECK-DAG: [[DISTR_FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2050, i32 1, i32 0, i8* getelementptr inbounds
18 // CHECK-DAG: [[FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 1, i32 0, i8* getelementptr inbounds
19 // CHECK-DAG: [[BAR_LIGHT:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 66, i32 3, i32 0, i8* getelementptr inbounds
20 // CHECK-DAG: [[BAR_FULL:@.+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 66, i32 1, i32 0, i8* getelementptr inbounds
21 // CHECK-NOT: @__omp_offloading_{{.+}}_exec_mode = weak constant i8 1
22 
foo()23 void foo() {
24 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
25 // CHECK-DAG: [[DISTR_LIGHT]]
26 // CHECK-DAG: [[FOR_LIGHT]]
27 // CHECK-DAG: [[LIGHT]]
28 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
29 // CHECK-DAG: [[DISTR_LIGHT]]
30 // CHECK-DAG: [[FOR_LIGHT]]
31 // CHECK-DAG: [[LIGHT]]
32 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
33 // CHECK-DAG: [[DISTR_LIGHT]]
34 // CHECK-DAG: [[FOR_LIGHT]]
35 // CHECK-DAG: [[LIGHT]]
36 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
37 // CHECK-DAG: [[DISTR_FULL]]
38 // CHECK-DAG: [[FULL]]
39 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
40 // CHECK-DAG: [[DISTR_FULL]]
41 // CHECK-DAG: [[FULL]]
42 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
43 // CHECK-DAG: [[DISTR_FULL]]
44 // CHECK-DAG: [[FULL]]
45 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
46 // CHECK-DAG: [[DISTR_FULL]]
47 // CHECK-DAG: [[FULL]]
48 #pragma omp target teams distribute parallel for simd if(a)
49   for (int i = 0; i < 10; ++i)
50     ;
51 #pragma omp target teams distribute parallel for simd schedule(static)
52   for (int i = 0; i < 10; ++i)
53     ;
54 #pragma omp target teams distribute parallel for simd schedule(static, 1)
55   for (int i = 0; i < 10; ++i)
56     ;
57 #pragma omp target teams distribute parallel for simd schedule(auto)
58   for (int i = 0; i < 10; ++i)
59     ;
60 #pragma omp target teams distribute parallel for simd schedule(runtime)
61   for (int i = 0; i < 10; ++i)
62     ;
63 #pragma omp target teams distribute parallel for simd schedule(dynamic)
64   for (int i = 0; i < 10; ++i)
65     ;
66 #pragma omp target teams distribute parallel for simd schedule(guided)
67   for (int i = 0; i < 10; ++i)
68     ;
69 int a;
70 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
71 // CHECK-DAG: [[DISTR_LIGHT]]
72 // CHECK-DAG: [[FOR_LIGHT]]
73 // CHECK-DAG: [[LIGHT]]
74 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
75 // CHECK-DAG: [[DISTR_LIGHT]]
76 // CHECK-DAG: [[FOR_LIGHT]]
77 // CHECK-DAG: [[LIGHT]]
78 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
79 // CHECK-DAG: [[DISTR_LIGHT]]
80 // CHECK-DAG: [[FOR_LIGHT]]
81 // CHECK-DAG: [[LIGHT]]
82 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
83 // CHECK-DAG: [[DISTR_FULL]]
84 // CHECK-DAG: [[FULL]]
85 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
86 // CHECK-DAG: [[DISTR_FULL]]
87 // CHECK-DAG: [[FULL]]
88 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
89 // CHECK-DAG: [[DISTR_FULL]]
90 // CHECK-DAG: [[FULL]]
91 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
92 // CHECK-DAG: [[DISTR_FULL]]
93 // CHECK-DAG: [[FULL]]
94 #pragma omp target teams distribute parallel for lastprivate(a)
95   for (int i = 0; i < 10; ++i)
96     a = i;
97 #pragma omp target teams distribute parallel for schedule(static)
98   for (int i = 0; i < 10; ++i)
99     ;
100 #pragma omp target teams distribute parallel for schedule(static, 1)
101   for (int i = 0; i < 10; ++i)
102     ;
103 #pragma omp target teams distribute parallel for schedule(auto)
104   for (int i = 0; i < 10; ++i)
105     ;
106 #pragma omp target teams distribute parallel for schedule(runtime)
107   for (int i = 0; i < 10; ++i)
108     ;
109 #pragma omp target teams distribute parallel for schedule(dynamic)
110   for (int i = 0; i < 10; ++i)
111     ;
112 #pragma omp target teams distribute parallel for schedule(guided)
113   for (int i = 0; i < 10; ++i)
114     ;
115 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
116 // CHECK-DAG: [[DISTR_LIGHT]]
117 // CHECK-DAG: [[FOR_LIGHT]]
118 // CHECK-DAG: [[LIGHT]]
119 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
120 // CHECK-DAG: [[DISTR_LIGHT]]
121 // CHECK-DAG: [[FOR_LIGHT]]
122 // CHECK-DAG: [[LIGHT]]
123 // CHECK: call i32 @__kmpc_target_init(
124 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
125 // CHECK-DAG: [[DISTR_FULL]]
126 // CHECK-DAG: [[FULL]]
127 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
128 // CHECK-DAG: [[DISTR_FULL]]
129 // CHECK-DAG: [[FULL]]
130 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
131 // CHECK-DAG: [[DISTR_FULL]]
132 // CHECK-DAG: [[FULL]]
133 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
134 // CHECK-DAG: [[DISTR_FULL]]
135 // CHECK-DAG: [[FULL]]
136 #pragma omp target teams
137    {
138      int b;
139 #pragma omp distribute parallel for simd
140   for (int i = 0; i < 10; ++i)
141     ;
142   ;
143    }
144 #pragma omp target teams
145    {
146      int b[] = {2, 3, sizeof(int)};
147 #pragma omp distribute parallel for simd schedule(static)
148   for (int i = 0; i < 10; ++i)
149     ;
150    }
151 #pragma omp target teams
152    {
153      int b;
154 #pragma omp distribute parallel for simd schedule(static, 1)
155   for (int i = 0; i < 10; ++i)
156     ;
157   int &c = b;
158    }
159 #pragma omp target teams
160 #pragma omp distribute parallel for simd schedule(auto)
161   for (int i = 0; i < 10; ++i)
162     ;
163 #pragma omp target teams
164 #pragma omp distribute parallel for simd schedule(runtime)
165   for (int i = 0; i < 10; ++i)
166     ;
167 #pragma omp target teams
168 #pragma omp distribute parallel for simd schedule(dynamic)
169   for (int i = 0; i < 10; ++i)
170     ;
171 #pragma omp target teams
172 #pragma omp distribute parallel for simd schedule(guided)
173   for (int i = 0; i < 10; ++i)
174     ;
175 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
176 // CHECK-DAG: [[DISTR_LIGHT]]
177 // CHECK-DAG: [[FOR_LIGHT]]
178 // CHECK-DAG: [[LIGHT]]
179 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
180 // CHECK-DAG: [[DISTR_LIGHT]]
181 // CHECK-DAG: [[FOR_LIGHT]]
182 // CHECK-DAG: [[LIGHT]]
183 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
184 // CHECK-DAG: [[DISTR_LIGHT]]
185 // CHECK-DAG: [[FOR_LIGHT]]
186 // CHECK-DAG: [[LIGHT]]
187 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
188 // CHECK-DAG: [[DISTR_FULL]]
189 // CHECK-DAG: [[FULL]]
190 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
191 // CHECK-DAG: [[DISTR_FULL]]
192 // CHECK-DAG: [[FULL]]
193 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
194 // CHECK-DAG: [[DISTR_FULL]]
195 // CHECK-DAG: [[FULL]]
196 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
197 // CHECK-DAG: [[DISTR_FULL]]
198 // CHECK-DAG: [[FULL]]
199 #pragma omp target teams
200 #pragma omp distribute parallel for
201   for (int i = 0; i < 10; ++i)
202     ;
203 #pragma omp target teams
204 #pragma omp distribute parallel for schedule(static)
205   for (int i = 0; i < 10; ++i)
206     ;
207 #pragma omp target teams
208 #pragma omp distribute parallel for schedule(static, 1)
209   for (int i = 0; i < 10; ++i)
210     ;
211 #pragma omp target teams
212 #pragma omp distribute parallel for schedule(auto)
213   for (int i = 0; i < 10; ++i)
214     ;
215 #pragma omp target teams
216 #pragma omp distribute parallel for schedule(runtime)
217   for (int i = 0; i < 10; ++i)
218     ;
219 #pragma omp target teams
220 #pragma omp distribute parallel for schedule(dynamic)
221   for (int i = 0; i < 10; ++i)
222     ;
223 #pragma omp target teams
224 #pragma omp distribute parallel for schedule(guided)
225   for (int i = 0; i < 10; ++i)
226     ;
227 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
228 // CHECK-DAG: [[DISTR_LIGHT]]
229 // CHECK-DAG: [[FOR_LIGHT]]
230 // CHECK-DAG: [[LIGHT]]
231 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
232 // CHECK-DAG: [[DISTR_LIGHT]]
233 // CHECK-DAG: [[FOR_LIGHT]]
234 // CHECK-DAG: [[LIGHT]]
235 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
236 // CHECK-DAG: [[DISTR_LIGHT]]
237 // CHECK-DAG: [[FOR_LIGHT]]
238 // CHECK-DAG: [[LIGHT]]
239 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
240 // CHECK-DAG: [[DISTR_FULL]]
241 // CHECK-DAG: [[FULL]]
242 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
243 // CHECK-DAG: [[DISTR_FULL]]
244 // CHECK-DAG: [[FULL]]
245 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
246 // CHECK-DAG: [[DISTR_FULL]]
247 // CHECK-DAG: [[FULL]]
248 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
249 // CHECK-DAG: [[DISTR_FULL]]
250 // CHECK-DAG: [[FULL]]
251 #pragma omp target
252 #pragma omp teams
253 #pragma omp distribute parallel for
254   for (int i = 0; i < 10; ++i)
255     ;
256 #pragma omp target
257 #pragma omp teams
258 #pragma omp distribute parallel for schedule(static)
259   for (int i = 0; i < 10; ++i)
260     ;
261 #pragma omp target
262 #pragma omp teams
263 #pragma omp distribute parallel for schedule(static, 1)
264   for (int i = 0; i < 10; ++i)
265     ;
266 #pragma omp target
267 #pragma omp teams
268 #pragma omp distribute parallel for schedule(auto)
269   for (int i = 0; i < 10; ++i)
270     ;
271 #pragma omp target
272 #pragma omp teams
273 #pragma omp distribute parallel for schedule(runtime)
274   for (int i = 0; i < 10; ++i)
275     ;
276 #pragma omp target
277 #pragma omp teams
278 #pragma omp distribute parallel for schedule(dynamic)
279   for (int i = 0; i < 10; ++i)
280     ;
281 #pragma omp target
282 #pragma omp teams
283 #pragma omp distribute parallel for schedule(guided)
284   for (int i = 0; i < 10; ++i)
285     ;
286 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
287 // CHECK-DAG: [[FOR_LIGHT]]
288 // CHECK-DAG: [[LIGHT]]
289 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
290 // CHECK-DAG: [[FOR_LIGHT]]
291 // CHECK-DAG: [[LIGHT]]
292 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
293 // CHECK-DAG: [[FOR_LIGHT]]
294 // CHECK-DAG: [[LIGHT]]
295 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
296 // CHECK-DAG: [[FULL]]
297 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
298 // CHECK-DAG: [[FULL]]
299 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
300 // CHECK-DAG: [[FULL]]
301 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
302 // CHECK-DAG: [[FULL]]
303 #pragma omp target parallel for if(a)
304   for (int i = 0; i < 10; ++i)
305     ;
306 #pragma omp target parallel for schedule(static)
307   for (int i = 0; i < 10; ++i)
308     ;
309 #pragma omp target parallel for schedule(static, 1)
310   for (int i = 0; i < 10; ++i)
311     ;
312 #pragma omp target parallel for schedule(auto)
313   for (int i = 0; i < 10; ++i)
314     ;
315 #pragma omp target parallel for schedule(runtime)
316   for (int i = 0; i < 10; ++i)
317     ;
318 #pragma omp target parallel for schedule(dynamic)
319   for (int i = 0; i < 10; ++i)
320     ;
321 #pragma omp target parallel for schedule(guided)
322   for (int i = 0; i < 10; ++i)
323     ;
324 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
325 // CHECK-DAG: [[FOR_LIGHT]]
326 // CHECK-DAG: [[LIGHT]]
327 // CHECK-DAG: [[BAR_LIGHT]]
328 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
329 // CHECK-DAG: [[FOR_LIGHT]]
330 // CHECK-DAG: [[LIGHT]]
331 // CHECK-DAG: [[BAR_LIGHT]]
332 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
333 // CHECK-DAG: [[FOR_LIGHT]]
334 // CHECK-DAG: [[LIGHT]]
335 // CHECK-DAG: [[BAR_LIGHT]]
336 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
337 // CHECK-DAG: [[FULL]]
338 // CHECK-DAG: [[BAR_FULL]]
339 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
340 // CHECK-DAG: [[FULL]]
341 // CHECK-DAG: [[BAR_FULL]]
342 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
343 // CHECK-DAG: [[FULL]]
344 // CHECK-DAG: [[BAR_FULL]]
345 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
346 // CHECK-DAG: [[FULL]]
347 // CHECK-DAG: [[BAR_FULL]]
348 #pragma omp target parallel if(a)
349 #pragma omp for simd
350   for (int i = 0; i < 10; ++i)
351     ;
352 #pragma omp target parallel
353 #pragma omp for simd schedule(static)
354   for (int i = 0; i < 10; ++i)
355     ;
356 #pragma omp target parallel
357 #pragma omp for simd schedule(static, 1)
358   for (int i = 0; i < 10; ++i)
359     ;
360 #pragma omp target parallel
361 #pragma omp for simd schedule(auto)
362   for (int i = 0; i < 10; ++i)
363     ;
364 #pragma omp target parallel
365 #pragma omp for simd schedule(runtime)
366   for (int i = 0; i < 10; ++i)
367     ;
368 #pragma omp target parallel
369 #pragma omp for simd schedule(dynamic)
370   for (int i = 0; i < 10; ++i)
371     ;
372 #pragma omp target parallel
373 #pragma omp for simd schedule(guided)
374   for (int i = 0; i < 10; ++i)
375     ;
376 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
377 // CHECK-DAG: [[FULL]]
378 // CHECK-DAG: [[BAR_FULL]]
379 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
380 // CHECK-DAG: [[FOR_LIGHT]]
381 // CHECK-DAG: [[LIGHT]]
382 // CHECK-DAG: [[BAR_LIGHT]]
383 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
384 // CHECK-DAG: [[FOR_LIGHT]]
385 // CHECK-DAG: [[LIGHT]]
386 // CHECK-DAG: [[BAR_LIGHT]]
387 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
388 // CHECK-DAG: [[FULL]]
389 // CHECK-DAG: [[BAR_FULL]]
390 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
391 // CHECK-DAG: [[FULL]]
392 // CHECK-DAG: [[BAR_FULL]]
393 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
394 // CHECK-DAG: [[FULL]]
395 // CHECK-DAG: [[BAR_FULL]]
396 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
397 // CHECK-DAG: [[FULL]]
398 // CHECK-DAG: [[BAR_FULL]]
399 #pragma omp target
400 #pragma omp parallel
401 #pragma omp for simd ordered
402   for (int i = 0; i < 10; ++i)
403     ;
404 #pragma omp target
405 #pragma omp parallel
406 #pragma omp for simd schedule(static)
407   for (int i = 0; i < 10; ++i)
408     ;
409 #pragma omp target
410 #pragma omp parallel
411 #pragma omp for simd schedule(static, 1)
412   for (int i = 0; i < 10; ++i)
413     ;
414 #pragma omp target
415 #pragma omp parallel
416 #pragma omp for simd schedule(auto)
417   for (int i = 0; i < 10; ++i)
418     ;
419 #pragma omp target
420 #pragma omp parallel
421 #pragma omp for simd schedule(runtime)
422   for (int i = 0; i < 10; ++i)
423     ;
424 #pragma omp target
425 #pragma omp parallel
426 #pragma omp for simd schedule(dynamic)
427   for (int i = 0; i < 10; ++i)
428     ;
429 #pragma omp target
430 #pragma omp parallel
431 #pragma omp for simd schedule(guided)
432   for (int i = 0; i < 10; ++i)
433     ;
434 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
435 // CHECK-DAG: [[FOR_LIGHT]]
436 // CHECK-DAG: [[LIGHT]]
437 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
438 // CHECK-DAG: [[FOR_LIGHT]]
439 // CHECK-DAG: [[LIGHT]]
440 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 false)
441 // CHECK-DAG: [[FOR_LIGHT]]
442 // CHECK-DAG: [[LIGHT]]
443 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
444 // CHECK-DAG: [[FULL]]
445 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
446 // CHECK-DAG: [[FULL]]
447 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
448 // CHECK-DAG: [[FULL]]
449 // CHECK: call i32 @__kmpc_target_init({{.*}}, i1 true, i1 false, i1 true)
450 // CHECK-DAG: [[FULL]]
451 #pragma omp target
452 #pragma omp parallel for
453   for (int i = 0; i < 10; ++i)
454     ;
455 #pragma omp target
456 #pragma omp parallel for schedule(static)
457   for (int i = 0; i < 10; ++i)
458     ;
459 #pragma omp target
460 #pragma omp parallel for schedule(static, 1)
461   for (int i = 0; i < 10; ++i)
462     ;
463 #pragma omp target
464 #pragma omp parallel for schedule(auto)
465   for (int i = 0; i < 10; ++i)
466     ;
467 #pragma omp target
468 #pragma omp parallel for schedule(runtime)
469   for (int i = 0; i < 10; ++i)
470     ;
471 #pragma omp target
472 #pragma omp parallel for schedule(dynamic)
473   for (int i = 0; i < 10; ++i)
474     ;
475 #pragma omp target
476 #pragma omp parallel for schedule(guided)
477   for (int i = 0; i < 10; ++i)
478     ;
479 }
480 
481 #endif
482 
483