Clang Project

clang_source_code/test/OpenMP/teams_distribute_parallel_for_simd_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 simd
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 simd 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 simd 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 simd 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 simd 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  // CK1: !{!"llvm.loop.vectorize.enable", i1 true}
143
144    return a[0];
145  }
146};
147
148int teams_template_struct(void) {
149  SS<int, 123, 456> V;
150  return V.foo();
151
152}
153#endif // CK1
154
155// Test host codegen.
156// 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
157// 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
158// 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
159// 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
160// 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
161// 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
162
163// 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
164// 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
165// 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
166// 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
167// 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
168// 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
169// SIMD-ONLY1-NOT: {{__kmpc|__tgt}}
170#ifdef CK2
171
172template <typename T, int n>
173int tmain(T argc) {
174  T a[n];
175  int m = 10;
176#pragma omp target
177#pragma omp teams distribute parallel for simd
178  for(int i = 0; i < n; i++) {
179    a[i] = (T)0;
180  }
181#pragma omp target
182#pragma omp teams distribute parallel for simd schedule(static)
183  for(int i = 0; i < n; i++) {
184    a[i] = (T)0;
185  }
186#pragma omp target
187#pragma omp teams distribute parallel for simd schedule(static, m)
188  for(int i = 0; i < n; i++) {
189    a[i] = (T)0;
190  }
191#pragma omp target
192#pragma omp teams distribute parallel for simd schedule(dynamic)
193  for(int i = 0; i < n; i++) {
194    a[i] = (T)0;
195  }
196#pragma omp target
197#pragma omp teams distribute parallel for simd schedule(dynamic, m)
198  for(int i = 0; i < n; i++) {
199    a[i] = (T)0;
200  }
201  return 0;
202}
203
204int main (int argc, char **argv) {
205  int n = 100;
206  int a[n];
207  int m = 10;
208#pragma omp target
209#pragma omp teams distribute parallel for simd
210  for(int i = 0; i < n; i++) {
211    a[i] = 0;
212  }
213#pragma omp target
214#pragma omp teams distribute parallel for simd dist_schedule(static)
215  for(int i = 0; i < n; i++) {
216    a[i] = 0;
217  }
218#pragma omp target
219#pragma omp teams distribute parallel for simd dist_schedule(static, m)
220  for(int i = 0; i < n; i++) {
221    a[i] = 0;
222  }
223#pragma omp target
224#pragma omp teams distribute parallel for simd schedule(dynamic)
225  for(int i = 0; i < n; i++) {
226    a[i] = 0;
227  }
228#pragma omp target
229#pragma omp teams distribute parallel for simd schedule(dynamic, m)
230  for(int i = 0; i < n; i++) {
231    a[i] = 0;
232  }
233  return tmain<int, 10>(argc);
234}
235
236// CK2: define {{.*}}i32 @{{[^,]+}}(i{{.+}}{{.+}} %[[ARGC:.+]], {{.+}})
237// CK2: call i32 @__tgt_target_teams(
238// CK2: call void @[[OFFL1:.+]]({{.+}})
239// CK2: call i32 @__tgt_target_teams(
240// CK2: call void @[[OFFL2:.+]]({{.+}})
241// CK2: call i32 @__tgt_target_teams(
242// CK2: call void @[[OFFL3:.+]]({{.+}})
243// CK2: call i32 @__tgt_target_teams(
244// CK2: call void @[[OFFL4:.+]]({{.+}})
245// CK2: call i32 @__tgt_target_teams(
246// CK2: call void @[[OFFL5:.+]]({{.+}})
247// CK2: {{%.+}} = call{{.*}} i32 @[[TMAIN:.+]]({{.+}})
248// CK2: ret
249
250// CK2:  define {{.*}}void @[[OFFL1]]({{.+}})
251// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 3, {{.+}} @[[OUTL1:.+]] to {{.+}},
252// CK2: ret void
253
254// CK2: define internal void @[[OUTL1]]({{.+}})
255// CK2: call void @__kmpc_for_static_init_4(
256// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL1:.+]] to
257// CK2: call void @__kmpc_for_static_fini(
258// CK2: ret void
259
260// CK2: define internal void @[[PAR_OUTL1]]({{.+}})
261// CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
262// CK2: call void @__kmpc_for_static_fini(
263// CK2: ret void
264
265// CK2: define {{.*}}void @[[OFFL2]]({{.+}})
266// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 3, {{.+}} @[[OUTL2:.+]] to {{.+}},
267// CK2: ret void
268
269// CK2: define internal void @[[OUTL2]]({{.+}})
270// CK2: call void @__kmpc_for_static_init_4(
271// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL2:.+]] to
272// CK2: call void @__kmpc_for_static_fini(
273// CK2: ret void
274
275// CK2: define internal void @[[PAR_OUTL2]]({{.+}})
276// CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
277// CK2: call void @__kmpc_for_static_fini(
278// CK2: ret void
279
280// CK2:  define {{.*}}void @[[OFFL3]]({{.+}})
281// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 4, {{.+}} @[[OUTL3:.+]] to {{.+}},
282// CK2: ret void
283
284// CK2: define internal void @[[OUTL3]]({{.+}})
285// CK2: call void @__kmpc_for_static_init_4(
286// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL3:.+]] to
287// CK2: call void @__kmpc_for_static_fini(
288// CK2: ret void
289
290// CK2: define internal void @[[PAR_OUTL3]]({{.+}})
291// CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34
292// CK2: call void @__kmpc_for_static_fini(
293// CK2: ret void
294
295// CK2:  define {{.*}}void @[[OFFL4]]({{.+}})
296// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTL4:.+]] to {{.+}},
297// CK2: ret void
298
299// CK2: define internal void @[[OUTL4]]({{.+}})
300// CK2: call void @__kmpc_for_static_init_4(
301// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL4:.+]] to
302// CK2: call void @__kmpc_for_static_fini(
303// CK2: ret void
304
305// CK2: define internal void @[[PAR_OUTL4]]({{.+}})
306// CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
307// CK2: call {{.+}} @__kmpc_dispatch_next_4(
308// CK2: ret void
309
310
311// CK2: define {{.*}}void @[[OFFL5]]({{.+}})
312// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTL5:.+]] to {{.+}},
313// CK2: ret void
314
315// CK2: define internal void @[[OUTL5]]({{.+}})
316// CK2: call void @__kmpc_for_static_init_4(
317// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTL5:.+]] to
318// CK2: call void @__kmpc_for_static_fini(
319// CK2: ret void
320
321// CK2: define internal void @[[PAR_OUTL5]]({{.+}})
322// CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
323// CK2: call {{.+}} @__kmpc_dispatch_next_4(
324// CK2: ret void
325
326// CK2: define {{.*}}i32 @[[TMAIN]]({{.+}})
327// CK2: call i32 @__tgt_target_teams(
328// CK2: call void @[[OFFLT1:.+]]({{.+}})
329// CK2: call i32 @__tgt_target_teams(
330// CK2: call void @[[OFFLT2:.+]]({{.+}})
331// CK2: call i32 @__tgt_target_teams(
332// CK2: call void @[[OFFLT3:.+]]({{.+}})
333// CK2: call i32 @__tgt_target_teams(
334// CK2: call void @[[OFFLT4:.+]]({{.+}})
335// CK2: call i32 @__tgt_target_teams(
336// CK2: call void @[[OFFLT5:.+]]({{.+}})
337// CK2:  ret
338// CK2-NEXT: }
339
340// CK2:  define {{.*}}void @[[OFFLT1]]({{.+}})
341// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT1:.+]] to {{.+}},
342// CK2: ret void
343
344// CK2: define internal void @[[OUTLT1]]({{.+}})
345// CK2: call void @__kmpc_for_static_init_4(
346// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT1:.+]] to
347// CK2: call void @__kmpc_for_static_fini(
348// CK2: ret void
349
350// CK2: define internal void @[[PAR_OUTLT1]]({{.+}})
351// CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
352// CK2: call void @__kmpc_for_static_fini(
353// CK2: ret void
354
355// CK2:  define {{.*}}void @[[OFFLT2]]({{.+}})
356// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 1, {{.+}} @[[OUTLT2:.+]] to {{.+}},
357// CK2: ret void
358
359// CK2: define internal void @[[OUTLT2]]({{.+}})
360// CK2: call void @__kmpc_for_static_init_4(
361// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT2:.+]] to
362// CK2: call void @__kmpc_for_static_fini(
363// CK2: ret void
364
365// CK2: define internal void @[[PAR_OUTLT2]]({{.+}})
366// CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 34,
367// CK2: call void @__kmpc_for_static_fini(
368// CK2: ret void
369
370// CK2:  define {{.*}}void @[[OFFLT3]]({{.+}})
371// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTLT3:.+]] to {{.+}},
372// CK2: ret void
373
374// CK2: define internal void @[[OUTLT3]]({{.+}})
375// CK2: call void @__kmpc_for_static_init_4(
376// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT3:.+]] to
377// CK2: call void @__kmpc_for_static_fini(
378// CK2: ret void
379
380// CK2: define internal void @[[PAR_OUTLT3]]({{.+}})
381// CK2: call void @__kmpc_for_static_init_4({{.+}}, {{.+}}, i32 33,
382// CK2: call void @__kmpc_for_static_fini(
383// CK2: ret void
384
385// CK2:  define {{.*}}void @[[OFFLT4]]({{.+}})
386// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTLT4:.+]] to {{.+}},
387// CK2: ret void
388
389// CK2: define internal void @[[OUTLT4]]({{.+}})
390// CK2: call void @__kmpc_for_static_init_4(
391// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT4:.+]] to
392// CK2: call void @__kmpc_for_static_fini(
393// CK2: ret void
394
395// CK2: define internal void @[[PAR_OUTLT4]]({{.+}})
396// CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
397// CK2: call {{.+}} @__kmpc_dispatch_next_4(
398// CK2: ret void
399
400// CK2:  define {{.*}}void @[[OFFLT5]]({{.+}})
401// CK2: call void {{.+}} @__kmpc_fork_teams({{.+}}, i32 {{.+}}, {{.+}} @[[OUTLT5:.+]] to {{.+}},
402// CK2: ret void
403
404// CK2: define internal void @[[OUTLT5]]({{.+}})
405// CK2: call void @__kmpc_for_static_init_4(
406// CK2: call void {{.*}} @__kmpc_fork_call({{.+}}, {{.+}}, {{.+}} @[[PAR_OUTLT5:.+]] to
407// CK2: call void @__kmpc_for_static_fini(
408// CK2: ret void
409
410// CK2: define internal void @[[PAR_OUTLT5]]({{.+}})
411// CK2: call void @__kmpc_dispatch_init_4({{.+}}, {{.+}}, i32 35,
412// CK2: call {{.+}} @__kmpc_dispatch_next_4(
413// CK2: ret void
414
415// CK2: !{!"llvm.loop.vectorize.enable", i1 true}
416
417#endif // CK2
418#endif // #ifndef HEADER
419