Clang Project

clang_source_code/test/OpenMP/teams_distribute_parallel_for_schedule_codegen.cpp
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
22template <typename T, int X, long long Y>
23struct 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
146int 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
170template <typename T, int n>
171int 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
202int 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