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