[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Transforms / OpenMP / custom_state_machines.ll
blob47a580e13b9181f5248a7c161899d3c44548360a
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals --include-generated-funcs
2 ; RUN: opt --mtriple=amdgcn-amd-amdhsa --data-layout=A5 -S -passes=openmp-opt < %s | FileCheck %s --check-prefixes=AMDGPU
3 ; RUN: opt --mtriple=nvptx64--         -S -passes=openmp-opt < %s | FileCheck %s --check-prefixes=NVPTX
4 ; RUN: opt --mtriple=amdgcn-amd-amdhsa --data-layout=A5 -openmp-opt-disable-state-machine-rewrite -S -passes=openmp-opt < %s | FileCheck %s --check-prefixes=AMDGPU-DISABLED
5 ; RUN: opt --mtriple=nvptx64--         -openmp-opt-disable-state-machine-rewrite -S -passes=openmp-opt < %s | FileCheck %s --check-prefixes=NVPTX-DISABLED
7 ;; void p0(void);
8 ;; void p1(void);
9 ;; int unknown(void);
10 ;; void unknown_pure(void) __attribute__((pure));
11 ;; void unknown_no_openmp(void) __attribute__((assume("omp_no_openmp")));
13 ;; int G;
14 ;; void no_parallel_region_in_here(void) {
15 ;; #pragma omp single
16 ;;   G = 0;
17 ;; }
19 ;; void no_state_machine_needed() {
20 ;; #pragma omp target teams
21 ;;   {
22 ;;     no_parallel_region_in_here();
23 ;;     unknown_no_openmp();
24 ;;   }
25 ;; }
27 ;; void simple_state_machine() {
28 ;; #pragma omp target teams
29 ;;   {
30 ;;     unknown_no_openmp();
31 ;; #pragma omp parallel
32 ;;     { p0(); }
33 ;;     no_parallel_region_in_here();
34 ;; #pragma omp parallel
35 ;;     { p1(); }
36 ;;   }
37 ;; }
39 ;; void simple_state_machine_interprocedural_after(void);
40 ;; void simple_state_machine_interprocedural_before(void) {
41 ;; #pragma omp parallel
42 ;;   { p0(); }
43 ;; }
44 ;; void simple_state_machine_interprocedural() {
45 ;; #pragma omp target teams
46 ;;   {
47 ;;     unknown_no_openmp();
48 ;;     simple_state_machine_interprocedural_before();
49 ;;     no_parallel_region_in_here();
50 ;; #pragma omp parallel
51 ;;     { p1(); }
52 ;;     simple_state_machine_interprocedural_after();
53 ;;   }
54 ;; }
55 ;; void simple_state_machine_interprocedural_after(void) {
56 ;; #pragma omp parallel
57 ;;   { p0(); }
58 ;; }
60 ;; void simple_state_machine_with_fallback() {
61 ;; #pragma omp target teams
62 ;;   {
63 ;; #pragma omp parallel
64 ;;     { p0(); }
65 ;;     unknown();
66 ;; #pragma omp parallel
67 ;;     { p1(); }
68 ;;   }
69 ;; }
71 ;; void simple_state_machine_no_openmp_attr() {
72 ;; #pragma omp target teams
73 ;;   {
74 ;; #pragma omp parallel
75 ;;     { p0(); }
76 ;;     unknown_no_openmp();
77 ;; #pragma omp parallel
78 ;;     { p1(); }
79 ;;   }
80 ;; }
82 ;; void simple_state_machine_pure() {
83 ;; #pragma omp target teams
84 ;;   {
85 ;;     unknown_no_openmp();
86 ;; #pragma omp parallel
87 ;;     { p0(); }
88 ;;     unknown_pure();
89 ;; #pragma omp parallel
90 ;;     { p1(); }
91 ;;   }
92 ;; }
94 ;; int omp_get_thread_num();
95 ;; void simple_state_machine_interprocedural_nested_recursive_after(int);
96 ;; void simple_state_machine_interprocedural_nested_recursive_after_after(void);
97 ;; void simple_state_machine_interprocedural_nested_recursive() {
98 ;; #pragma omp target teams
99 ;;   {
100 ;;     simple_state_machine_interprocedural_nested_recursive_after(
101 ;;         omp_get_thread_num());
102 ;;   }
103 ;; }
105 ;; void simple_state_machine_interprocedural_nested_recursive_after(int a) {
106 ;;   if (a == 0)
107 ;;     return;
108 ;;   simple_state_machine_interprocedural_nested_recursive_after(a - 1);
109 ;;   simple_state_machine_interprocedural_nested_recursive_after_after();
110 ;; }
111 ;; void simple_state_machine_interprocedural_nested_recursive_after_after(void) {
112 ;; #pragma omp parallel
113 ;;   { p0(); }
114 ;; }
116 ;; __attribute__((weak)) void weak_callee_empty(void) {}
117 ;; void no_state_machine_weak_callee() {
118 ;; #pragma omp target teams
119 ;;   { weak_callee_empty(); }
120 ;; }
122 %struct.ident_t = type { i32, i32, i32, i32, ptr }
123 %struct.KernelEnvironmentTy = type { %struct.ConfigurationEnvironmentTy, ptr, ptr }
124 %struct.ConfigurationEnvironmentTy = type { i8, i8, i8, i32, i32, i32, i32 }
126 @0 = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
127 @1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 0, ptr @0 }, align 8
128 @2 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 2, i32 0, ptr @0 }, align 8
129 @G = external global i32, align 4
130 @3 = private unnamed_addr constant %struct.ident_t { i32 0, i32 322, i32 2, i32 0, ptr @0 }, align 8
132 @__omp_offloading_14_a36502b_no_state_machine_needed_l14_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
133 @__omp_offloading_14_a36502b_simple_state_machine_l22_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
134 @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
135 @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
136 @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
137 @__omp_offloading_14_a36502b_simple_state_machine_pure_l77_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
138 @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
139 @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
141 define weak void @__omp_offloading_14_a36502b_no_state_machine_needed_l14(ptr %dyn) #0 {
142 entry:
143   %.zero.addr = alloca i32, align 4
144   %.threadid_temp. = alloca i32, align 4
145   store i32 0, ptr %.zero.addr, align 4
146   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14_kernel_environment, ptr %dyn)
147   %exec_user_code = icmp eq i32 %0, -1
148   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
150 user_code.entry:                                  ; preds = %entry
151   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
152   store i32 %1, ptr %.threadid_temp., align 4
153   call void @__omp_outlined__(ptr %.threadid_temp., ptr %.zero.addr) #3
154   call void @__kmpc_target_deinit()
155   ret void
157 worker.exit:                                      ; preds = %entry
158   ret void
161 ; Make it a weak definition so we will apply custom state machine rewriting but can't use the body in the reasoning.
162 define weak i32 @__kmpc_target_init(ptr, ptr) {
163   ret i32 0
166 define internal void @__omp_outlined__(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
167 entry:
168   %.global_tid..addr = alloca ptr, align 8
169   %.bound_tid..addr = alloca ptr, align 8
170   store ptr %.global_tid., ptr %.global_tid..addr, align 8
171   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
172   call void @no_parallel_region_in_here() #7
173   call void @unknown_no_openmp() #8
174   ret void
177 define hidden void @no_parallel_region_in_here() #1 {
178 entry:
179   %0 = call i32 @__kmpc_global_thread_num(ptr @2)
180   %1 = call i32 @__kmpc_single(ptr @2, i32 %0)
181   %2 = icmp ne i32 %1, 0
182   br i1 %2, label %omp_if.then, label %omp_if.end
184 omp_if.then:                                      ; preds = %entry
185   store i32 0, ptr @G, align 4
186   call void @__kmpc_end_single(ptr @2, i32 %0)
187   br label %omp_if.end
189 omp_if.end:                                       ; preds = %omp_if.then, %entry
190   call void @__kmpc_barrier(ptr @3, i32 %0)
191   ret void
194 declare void @unknown_no_openmp() #2
196 declare i32 @__kmpc_global_thread_num(ptr) #3
198 declare void @__kmpc_target_deinit()
200 define weak void @__omp_offloading_14_a36502b_simple_state_machine_l22(ptr %dyn) #0 {
201 entry:
202   %.zero.addr = alloca i32, align 4
203   %.threadid_temp. = alloca i32, align 4
204   store i32 0, ptr %.zero.addr, align 4
205   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_l22_kernel_environment, ptr %dyn)
206   %exec_user_code = icmp eq i32 %0, -1
207   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
209 user_code.entry:                                  ; preds = %entry
210   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
211   store i32 %1, ptr %.threadid_temp., align 4
212   call void @__omp_outlined__1(ptr %.threadid_temp., ptr %.zero.addr) #3
213   call void @__kmpc_target_deinit()
214   ret void
216 worker.exit:                                      ; preds = %entry
217   ret void
220 define internal void @__omp_outlined__1(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
221 entry:
222   %.global_tid..addr = alloca ptr, align 8
223   %.bound_tid..addr = alloca ptr, align 8
224   %captured_vars_addrs = alloca [0 x ptr], align 8
225   %captured_vars_addrs1 = alloca [0 x ptr], align 8
226   store ptr %.global_tid., ptr %.global_tid..addr, align 8
227   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
228   call void @unknown_no_openmp() #8
229   %0 = load ptr, ptr %.global_tid..addr, align 8
230   %1 = load i32, ptr %0, align 4
231   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper, ptr %captured_vars_addrs, i64 0)
232   call void @no_parallel_region_in_here() #7
233   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__3, ptr @__omp_outlined__3_wrapper, ptr %captured_vars_addrs1, i64 0)
234   ret void
237 define internal void @__omp_outlined__2(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
238 entry:
239   %.global_tid..addr = alloca ptr, align 8
240   %.bound_tid..addr = alloca ptr, align 8
241   store ptr %.global_tid., ptr %.global_tid..addr, align 8
242   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
243   call void @p0() #7
244   ret void
247 declare void @p0() #4
249 define internal void @__omp_outlined__2_wrapper(i16 zeroext %0, i32 %1) #0 {
250 entry:
251   %.addr = alloca i16, align 2
252   %.addr1 = alloca i32, align 4
253   %.zero.addr = alloca i32, align 4
254   %global_args = alloca ptr, align 8
255   store i32 0, ptr %.zero.addr, align 4
256   store i16 %0, ptr %.addr, align 2
257   store i32 %1, ptr %.addr1, align 4
258   call void @__kmpc_get_shared_variables(ptr %global_args)
259   call void @__omp_outlined__2(ptr %.addr1, ptr %.zero.addr) #3
260   ret void
263 declare void @__kmpc_get_shared_variables(ptr)
265 declare void @__kmpc_parallel_51(ptr, i32, i32, i32, i32, ptr, ptr, ptr, i64)
267 define internal void @__omp_outlined__3(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
268 entry:
269   %.global_tid..addr = alloca ptr, align 8
270   %.bound_tid..addr = alloca ptr, align 8
271   store ptr %.global_tid., ptr %.global_tid..addr, align 8
272   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
273   call void @p1() #7
274   ret void
277 declare void @p1() #4
279 define internal void @__omp_outlined__3_wrapper(i16 zeroext %0, i32 %1) #0 {
280 entry:
281   %.addr = alloca i16, align 2
282   %.addr1 = alloca i32, align 4
283   %.zero.addr = alloca i32, align 4
284   %global_args = alloca ptr, align 8
285   store i32 0, ptr %.zero.addr, align 4
286   store i16 %0, ptr %.addr, align 2
287   store i32 %1, ptr %.addr1, align 4
288   call void @__kmpc_get_shared_variables(ptr %global_args)
289   call void @__omp_outlined__3(ptr %.addr1, ptr %.zero.addr) #3
290   ret void
293 define weak void @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39(ptr %dyn) #0 {
294 entry:
295   %.zero.addr = alloca i32, align 4
296   %.threadid_temp. = alloca i32, align 4
297   store i32 0, ptr %.zero.addr, align 4
298   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39_kernel_environment, ptr %dyn)
299   %exec_user_code = icmp eq i32 %0, -1
300   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
302 user_code.entry:                                  ; preds = %entry
303   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
304   store i32 %1, ptr %.threadid_temp., align 4
305   call void @__omp_outlined__4(ptr %.threadid_temp., ptr %.zero.addr) #3
306   call void @__kmpc_target_deinit()
307   ret void
309 worker.exit:                                      ; preds = %entry
310   ret void
313 define internal void @__omp_outlined__4(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
314 entry:
315   %.global_tid..addr = alloca ptr, align 8
316   %.bound_tid..addr = alloca ptr, align 8
317   %captured_vars_addrs = alloca [0 x ptr], align 8
318   store ptr %.global_tid., ptr %.global_tid..addr, align 8
319   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
320   call void @unknown_no_openmp() #8
321   call void @simple_state_machine_interprocedural_before() #7
322   call void @no_parallel_region_in_here() #7
323   %0 = load ptr, ptr %.global_tid..addr, align 8
324   %1 = load i32, ptr %0, align 4
325   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__5, ptr @__omp_outlined__5_wrapper, ptr %captured_vars_addrs, i64 0)
326   call void @simple_state_machine_interprocedural_after() #7
327   ret void
330 define hidden void @simple_state_machine_interprocedural_before() #1 {
331 entry:
332   %captured_vars_addrs = alloca [0 x ptr], align 8
333   %0 = call i32 @__kmpc_global_thread_num(ptr @2)
334   call void @__kmpc_parallel_51(ptr @2, i32 %0, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr %captured_vars_addrs, i64 0)
335   ret void
338 define internal void @__omp_outlined__5(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
339 entry:
340   %.global_tid..addr = alloca ptr, align 8
341   %.bound_tid..addr = alloca ptr, align 8
342   store ptr %.global_tid., ptr %.global_tid..addr, align 8
343   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
344   call void @p1() #7
345   ret void
348 define internal void @__omp_outlined__5_wrapper(i16 zeroext %0, i32 %1) #0 {
349 entry:
350   %.addr = alloca i16, align 2
351   %.addr1 = alloca i32, align 4
352   %.zero.addr = alloca i32, align 4
353   %global_args = alloca ptr, align 8
354   store i32 0, ptr %.zero.addr, align 4
355   store i16 %0, ptr %.addr, align 2
356   store i32 %1, ptr %.addr1, align 4
357   call void @__kmpc_get_shared_variables(ptr %global_args)
358   call void @__omp_outlined__5(ptr %.addr1, ptr %.zero.addr) #3
359   ret void
362 define hidden void @simple_state_machine_interprocedural_after() #1 {
363 entry:
364   %captured_vars_addrs = alloca [0 x ptr], align 8
365   %0 = call i32 @__kmpc_global_thread_num(ptr @2)
366   call void @__kmpc_parallel_51(ptr @2, i32 %0, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr %captured_vars_addrs, i64 0)
367   ret void
370 define weak void @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55(ptr %dyn) #0 {
371 entry:
372   %.zero.addr = alloca i32, align 4
373   %.threadid_temp. = alloca i32, align 4
374   store i32 0, ptr %.zero.addr, align 4
375   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55_kernel_environment, ptr %dyn)
376   %exec_user_code = icmp eq i32 %0, -1
377   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
379 user_code.entry:                                  ; preds = %entry
380   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
381   store i32 %1, ptr %.threadid_temp., align 4
382   call void @__omp_outlined__6(ptr %.threadid_temp., ptr %.zero.addr) #3
383   call void @__kmpc_target_deinit()
384   ret void
386 worker.exit:                                      ; preds = %entry
387   ret void
390 define internal void @__omp_outlined__6(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
391 entry:
392   %.global_tid..addr = alloca ptr, align 8
393   %.bound_tid..addr = alloca ptr, align 8
394   %captured_vars_addrs = alloca [0 x ptr], align 8
395   %captured_vars_addrs1 = alloca [0 x ptr], align 8
396   store ptr %.global_tid., ptr %.global_tid..addr, align 8
397   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
398   %0 = load ptr, ptr %.global_tid..addr, align 8
399   %1 = load i32, ptr %0, align 4
400   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__7, ptr @__omp_outlined__7_wrapper, ptr %captured_vars_addrs, i64 0)
401   %call = call i32 @unknown() #7
402   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__8, ptr @__omp_outlined__8_wrapper, ptr %captured_vars_addrs1, i64 0)
403   ret void
406 define internal void @__omp_outlined__7(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
407 entry:
408   %.global_tid..addr = alloca ptr, align 8
409   %.bound_tid..addr = alloca ptr, align 8
410   store ptr %.global_tid., ptr %.global_tid..addr, align 8
411   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
412   call void @p0() #7
413   ret void
416 define internal void @__omp_outlined__7_wrapper(i16 zeroext %0, i32 %1) #0 {
417 entry:
418   %.addr = alloca i16, align 2
419   %.addr1 = alloca i32, align 4
420   %.zero.addr = alloca i32, align 4
421   %global_args = alloca ptr, align 8
422   store i32 0, ptr %.zero.addr, align 4
423   store i16 %0, ptr %.addr, align 2
424   store i32 %1, ptr %.addr1, align 4
425   call void @__kmpc_get_shared_variables(ptr %global_args)
426   call void @__omp_outlined__7(ptr %.addr1, ptr %.zero.addr) #3
427   ret void
430 declare i32 @unknown() #4
432 define internal void @__omp_outlined__8(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
433 entry:
434   %.global_tid..addr = alloca ptr, align 8
435   %.bound_tid..addr = alloca ptr, align 8
436   store ptr %.global_tid., ptr %.global_tid..addr, align 8
437   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
438   call void @p1() #7
439   ret void
442 define internal void @__omp_outlined__8_wrapper(i16 zeroext %0, i32 %1) #0 {
443 entry:
444   %.addr = alloca i16, align 2
445   %.addr1 = alloca i32, align 4
446   %.zero.addr = alloca i32, align 4
447   %global_args = alloca ptr, align 8
448   store i32 0, ptr %.zero.addr, align 4
449   store i16 %0, ptr %.addr, align 2
450   store i32 %1, ptr %.addr1, align 4
451   call void @__kmpc_get_shared_variables(ptr %global_args)
452   call void @__omp_outlined__8(ptr %.addr1, ptr %.zero.addr) #3
453   ret void
456 define weak void @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66(ptr %dyn) #0 {
457 entry:
458   %.zero.addr = alloca i32, align 4
459   %.threadid_temp. = alloca i32, align 4
460   store i32 0, ptr %.zero.addr, align 4
461   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66_kernel_environment, ptr %dyn)
462   %exec_user_code = icmp eq i32 %0, -1
463   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
465 user_code.entry:                                  ; preds = %entry
466   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
467   store i32 %1, ptr %.threadid_temp., align 4
468   call void @__omp_outlined__9(ptr %.threadid_temp., ptr %.zero.addr) #3
469   call void @__kmpc_target_deinit()
470   ret void
472 worker.exit:                                      ; preds = %entry
473   ret void
476 define internal void @__omp_outlined__9(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
477 entry:
478   %.global_tid..addr = alloca ptr, align 8
479   %.bound_tid..addr = alloca ptr, align 8
480   %captured_vars_addrs = alloca [0 x ptr], align 8
481   %captured_vars_addrs1 = alloca [0 x ptr], align 8
482   store ptr %.global_tid., ptr %.global_tid..addr, align 8
483   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
484   %0 = load ptr, ptr %.global_tid..addr, align 8
485   %1 = load i32, ptr %0, align 4
486   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__10, ptr @__omp_outlined__10_wrapper, ptr %captured_vars_addrs, i64 0)
487   call void @unknown_no_openmp() #8
488   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__11, ptr @__omp_outlined__11_wrapper, ptr %captured_vars_addrs1, i64 0)
489   ret void
492 define internal void @__omp_outlined__10(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
493 entry:
494   %.global_tid..addr = alloca ptr, align 8
495   %.bound_tid..addr = alloca ptr, align 8
496   store ptr %.global_tid., ptr %.global_tid..addr, align 8
497   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
498   call void @p0() #7
499   ret void
502 define internal void @__omp_outlined__10_wrapper(i16 zeroext %0, i32 %1) #0 {
503 entry:
504   %.addr = alloca i16, align 2
505   %.addr1 = alloca i32, align 4
506   %.zero.addr = alloca i32, align 4
507   %global_args = alloca ptr, align 8
508   store i32 0, ptr %.zero.addr, align 4
509   store i16 %0, ptr %.addr, align 2
510   store i32 %1, ptr %.addr1, align 4
511   call void @__kmpc_get_shared_variables(ptr %global_args)
512   call void @__omp_outlined__10(ptr %.addr1, ptr %.zero.addr) #3
513   ret void
516 define internal void @__omp_outlined__11(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
517 entry:
518   %.global_tid..addr = alloca ptr, align 8
519   %.bound_tid..addr = alloca ptr, align 8
520   store ptr %.global_tid., ptr %.global_tid..addr, align 8
521   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
522   call void @p1() #7
523   ret void
526 define internal void @__omp_outlined__11_wrapper(i16 zeroext %0, i32 %1) #0 {
527 entry:
528   %.addr = alloca i16, align 2
529   %.addr1 = alloca i32, align 4
530   %.zero.addr = alloca i32, align 4
531   %global_args = alloca ptr, align 8
532   store i32 0, ptr %.zero.addr, align 4
533   store i16 %0, ptr %.addr, align 2
534   store i32 %1, ptr %.addr1, align 4
535   call void @__kmpc_get_shared_variables(ptr %global_args)
536   call void @__omp_outlined__11(ptr %.addr1, ptr %.zero.addr) #3
537   ret void
540 define weak void @__omp_offloading_14_a36502b_simple_state_machine_pure_l77(ptr %dyn) #0 {
541 entry:
542   %.zero.addr = alloca i32, align 4
543   %.threadid_temp. = alloca i32, align 4
544   store i32 0, ptr %.zero.addr, align 4
545   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77_kernel_environment, ptr %dyn)
546   %exec_user_code = icmp eq i32 %0, -1
547   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
549 user_code.entry:                                  ; preds = %entry
550   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
551   store i32 %1, ptr %.threadid_temp., align 4
552   call void @__omp_outlined__12(ptr %.threadid_temp., ptr %.zero.addr) #3
553   call void @__kmpc_target_deinit()
554   ret void
556 worker.exit:                                      ; preds = %entry
557   ret void
560 define internal void @__omp_outlined__12(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
561 entry:
562   %.global_tid..addr = alloca ptr, align 8
563   %.bound_tid..addr = alloca ptr, align 8
564   %captured_vars_addrs = alloca [0 x ptr], align 8
565   %captured_vars_addrs1 = alloca [0 x ptr], align 8
566   store ptr %.global_tid., ptr %.global_tid..addr, align 8
567   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
568   call void @unknown_no_openmp() #8
569   %0 = load ptr, ptr %.global_tid..addr, align 8
570   %1 = load i32, ptr %0, align 4
571   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__13, ptr @__omp_outlined__13_wrapper, ptr %captured_vars_addrs, i64 0)
572   call void @unknown_pure() #9
573   call void @__kmpc_parallel_51(ptr @1, i32 %1, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__14, ptr @__omp_outlined__14_wrapper, ptr %captured_vars_addrs1, i64 0)
574   ret void
577 define internal void @__omp_outlined__13(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
578 entry:
579   %.global_tid..addr = alloca ptr, align 8
580   %.bound_tid..addr = alloca ptr, align 8
581   store ptr %.global_tid., ptr %.global_tid..addr, align 8
582   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
583   call void @p0() #7
584   ret void
587 define internal void @__omp_outlined__13_wrapper(i16 zeroext %0, i32 %1) #0 {
588 entry:
589   %.addr = alloca i16, align 2
590   %.addr1 = alloca i32, align 4
591   %.zero.addr = alloca i32, align 4
592   %global_args = alloca ptr, align 8
593   store i32 0, ptr %.zero.addr, align 4
594   store i16 %0, ptr %.addr, align 2
595   store i32 %1, ptr %.addr1, align 4
596   call void @__kmpc_get_shared_variables(ptr %global_args)
597   call void @__omp_outlined__13(ptr %.addr1, ptr %.zero.addr) #3
598   ret void
601 declare void @unknown_pure() #5
603 define internal void @__omp_outlined__14(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
604 entry:
605   %.global_tid..addr = alloca ptr, align 8
606   %.bound_tid..addr = alloca ptr, align 8
607   store ptr %.global_tid., ptr %.global_tid..addr, align 8
608   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
609   call void @p1() #7
610   ret void
613 define internal void @__omp_outlined__14_wrapper(i16 zeroext %0, i32 %1) #0 {
614 entry:
615   %.addr = alloca i16, align 2
616   %.addr1 = alloca i32, align 4
617   %.zero.addr = alloca i32, align 4
618   %global_args = alloca ptr, align 8
619   store i32 0, ptr %.zero.addr, align 4
620   store i16 %0, ptr %.addr, align 2
621   store i32 %1, ptr %.addr1, align 4
622   call void @__kmpc_get_shared_variables(ptr %global_args)
623   call void @__omp_outlined__14(ptr %.addr1, ptr %.zero.addr) #3
624   ret void
627 define weak void @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92(ptr %dyn) #0 {
628 entry:
629   %.zero.addr = alloca i32, align 4
630   %.threadid_temp. = alloca i32, align 4
631   store i32 0, ptr %.zero.addr, align 4
632   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92_kernel_environment, ptr %dyn)
633   %exec_user_code = icmp eq i32 %0, -1
634   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
636 user_code.entry:                                  ; preds = %entry
637   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
638   store i32 %1, ptr %.threadid_temp., align 4
639   call void @__omp_outlined__15(ptr %.threadid_temp., ptr %.zero.addr) #3
640   call void @__kmpc_target_deinit()
641   ret void
643 worker.exit:                                      ; preds = %entry
644   ret void
647 define internal void @__omp_outlined__15(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
648 entry:
649   %.global_tid..addr = alloca ptr, align 8
650   %.bound_tid..addr = alloca ptr, align 8
651   store ptr %.global_tid., ptr %.global_tid..addr, align 8
652   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
653   %call = call i32 @omp_get_thread_num() #7
654   call void @simple_state_machine_interprocedural_nested_recursive_after(i32 %call) #7
655   ret void
658 define hidden void @simple_state_machine_interprocedural_nested_recursive_after(i32 %a) #1 {
659 entry:
660   %a.addr = alloca i32, align 4
661   store i32 %a, ptr %a.addr, align 4
662   %0 = load i32, ptr %a.addr, align 4
663   %cmp = icmp eq i32 %0, 0
664   br i1 %cmp, label %if.then, label %if.end
666 if.then:                                          ; preds = %entry
667   br label %return
669 if.end:                                           ; preds = %entry
670   %1 = load i32, ptr %a.addr, align 4
671   %sub = sub nsw i32 %1, 1
672   call void @simple_state_machine_interprocedural_nested_recursive_after(i32 %sub) #7
673   call void @simple_state_machine_interprocedural_nested_recursive_after_after() #7
674   br label %return
676 return:                                           ; preds = %if.end, %if.then
677   ret void
680 declare i32 @omp_get_thread_num(...) #4
682 define weak void @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112(ptr %dyn) #0 {
683 entry:
684   %.zero.addr = alloca i32, align 4
685   %.threadid_temp. = alloca i32, align 4
686   store i32 0, ptr %.zero.addr, align 4
687   %0 = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112_kernel_environment, ptr %dyn)
688   %exec_user_code = icmp eq i32 %0, -1
689   br i1 %exec_user_code, label %user_code.entry, label %worker.exit
691 user_code.entry:                                  ; preds = %entry
692   %1 = call i32 @__kmpc_global_thread_num(ptr @1)
693   store i32 %1, ptr %.threadid_temp., align 4
694   call void @__omp_outlined__16(ptr %.threadid_temp., ptr %.zero.addr) #3
695   call void @__kmpc_target_deinit()
696   ret void
698 worker.exit:                                      ; preds = %entry
699   ret void
702 define internal void @__omp_outlined__16(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
703 entry:
704   %.global_tid..addr = alloca ptr, align 8
705   %.bound_tid..addr = alloca ptr, align 8
706   store ptr %.global_tid., ptr %.global_tid..addr, align 8
707   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
708   call void @weak_callee_empty() #7
709   ret void
712 define weak hidden void @weak_callee_empty() #1 {
713 entry:
714   ret void
717 declare i32 @__kmpc_single(ptr, i32) #6
719 declare void @__kmpc_end_single(ptr, i32) #6
721 declare void @__kmpc_barrier(ptr, i32) #6
723 define internal void @__omp_outlined__17(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
724 entry:
725   %.global_tid..addr = alloca ptr, align 8
726   %.bound_tid..addr = alloca ptr, align 8
727   store ptr %.global_tid., ptr %.global_tid..addr, align 8
728   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
729   call void @p0() #7
730   ret void
733 define internal void @__omp_outlined__17_wrapper(i16 zeroext %0, i32 %1) #0 {
734 entry:
735   %.addr = alloca i16, align 2
736   %.addr1 = alloca i32, align 4
737   %.zero.addr = alloca i32, align 4
738   %global_args = alloca ptr, align 8
739   store i32 0, ptr %.zero.addr, align 4
740   store i16 %0, ptr %.addr, align 2
741   store i32 %1, ptr %.addr1, align 4
742   call void @__kmpc_get_shared_variables(ptr %global_args)
743   call void @__omp_outlined__17(ptr %.addr1, ptr %.zero.addr) #3
744   ret void
747 define internal void @__omp_outlined__18(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
748 entry:
749   %.global_tid..addr = alloca ptr, align 8
750   %.bound_tid..addr = alloca ptr, align 8
751   store ptr %.global_tid., ptr %.global_tid..addr, align 8
752   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
753   call void @p0() #7
754   ret void
757 define internal void @__omp_outlined__18_wrapper(i16 zeroext %0, i32 %1) #0 {
758 entry:
759   %.addr = alloca i16, align 2
760   %.addr1 = alloca i32, align 4
761   %.zero.addr = alloca i32, align 4
762   %global_args = alloca ptr, align 8
763   store i32 0, ptr %.zero.addr, align 4
764   store i16 %0, ptr %.addr, align 2
765   store i32 %1, ptr %.addr1, align 4
766   call void @__kmpc_get_shared_variables(ptr %global_args)
767   call void @__omp_outlined__18(ptr %.addr1, ptr %.zero.addr) #3
768   ret void
771 define hidden void @simple_state_machine_interprocedural_nested_recursive_after_after() #1 {
772 entry:
773   %captured_vars_addrs = alloca [0 x ptr], align 8
774   %0 = call i32 @__kmpc_global_thread_num(ptr @2)
775   call void @__kmpc_parallel_51(ptr @2, i32 %0, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr %captured_vars_addrs, i64 0)
776   ret void
779 define internal void @__omp_outlined__19(ptr noalias %.global_tid., ptr noalias %.bound_tid.) #0 {
780 entry:
781   %.global_tid..addr = alloca ptr, align 8
782   %.bound_tid..addr = alloca ptr, align 8
783   store ptr %.global_tid., ptr %.global_tid..addr, align 8
784   store ptr %.bound_tid., ptr %.bound_tid..addr, align 8
785   call void @p0() #7
786   ret void
789 define internal void @__omp_outlined__19_wrapper(i16 zeroext %0, i32 %1) #0 {
790 entry:
791   %.addr = alloca i16, align 2
792   %.addr1 = alloca i32, align 4
793   %.zero.addr = alloca i32, align 4
794   %global_args = alloca ptr, align 8
795   store i32 0, ptr %.zero.addr, align 4
796   store i16 %0, ptr %.addr, align 2
797   store i32 %1, ptr %.addr1, align 4
798   call void @__kmpc_get_shared_variables(ptr %global_args)
799   call void @__omp_outlined__19(ptr %.addr1, ptr %.zero.addr) #3
800   ret void
803 attributes #0 = { convergent noinline norecurse nounwind "kernel" "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
804 attributes #1 = { convergent noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
805 attributes #2 = { convergent "frame-pointer"="none" "llvm.assume"="omp_no_openmp" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
806 attributes #3 = { nounwind }
807 attributes #4 = { convergent "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
808 attributes #5 = { convergent nounwind readonly willreturn "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
809 attributes #6 = { convergent nounwind }
810 attributes #7 = { convergent }
811 attributes #8 = { convergent "llvm.assume"="omp_no_openmp" }
812 attributes #9 = { convergent nounwind readonly willreturn }
814 !omp_offload.info = !{!0, !1, !2, !3, !4, !5, !6, !7}
815 !nvvm.annotations = !{!8, !9, !10, !11, !12, !13, !14, !15}
816 !llvm.module.flags = !{!16, !17, !18}
818 !0 = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural", i32 39, i32 2}
819 !1 = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_no_openmp_attr", i32 66, i32 4}
820 !2 = !{i32 0, i32 20, i32 171331627, !"no_state_machine_needed", i32 14, i32 0}
821 !3 = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_with_fallback", i32 55, i32 3}
822 !4 = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_pure", i32 77, i32 5}
823 !5 = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural_nested_recursive", i32 92, i32 6}
824 !6 = !{i32 0, i32 20, i32 171331627, !"no_state_machine_weak_callee", i32 112, i32 7}
825 !7 = !{i32 0, i32 20, i32 171331627, !"simple_state_machine", i32 22, i32 1}
826 !8 = !{ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14, !"kernel", i32 1}
827 !9 = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_l22, !"kernel", i32 1}
828 !10 = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39, !"kernel", i32 1}
829 !11 = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55, !"kernel", i32 1}
830 !12 = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66, !"kernel", i32 1}
831 !13 = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77, !"kernel", i32 1}
832 !14 = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92, !"kernel", i32 1}
833 !15 = !{ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112, !"kernel", i32 1}
834 !16 = !{i32 1, !"wchar_size", i32 4}
835 !17 = !{i32 7, !"openmp", i32 50}
836 !18 = !{i32 7, !"openmp-device", i32 50}
838 ; AMDGPU: @[[GLOB0:[0-9]+]] = private unnamed_addr constant [23 x i8] c"
839 ; AMDGPU: @[[GLOB1:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, ptr @[[GLOB0]] }, align 8
840 ; AMDGPU: @[[GLOB2:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
841 ; AMDGPU: @[[G:[a-zA-Z0-9_$"\\.-]+]] = external global i32, align 4
842 ; AMDGPU: @[[GLOB3:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 322, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
843 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_NEEDED_L14_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
844 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_L22_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
845 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_L39_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
846 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_WITH_FALLBACK_L55_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
847 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_NO_OPENMP_ATTR_L66_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
848 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_PURE_L77_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
849 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_NESTED_RECURSIVE_L92_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 3, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
850 ; AMDGPU: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_WEAK_CALLEE_L112_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
851 ; AMDGPU: @[[__OMP_OUTLINED__2_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
852 ; AMDGPU: @[[__OMP_OUTLINED__3_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
853 ; AMDGPU: @[[__OMP_OUTLINED__5_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
854 ; AMDGPU: @[[__OMP_OUTLINED__7_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
855 ; AMDGPU: @[[__OMP_OUTLINED__8_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
856 ; AMDGPU: @[[__OMP_OUTLINED__10_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
857 ; AMDGPU: @[[__OMP_OUTLINED__11_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
858 ; AMDGPU: @[[__OMP_OUTLINED__13_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
859 ; AMDGPU: @[[__OMP_OUTLINED__14_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
861 ; NVPTX: @[[GLOB0:[0-9]+]] = private unnamed_addr constant [23 x i8] c"
862 ; NVPTX: @[[GLOB1:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, ptr @[[GLOB0]] }, align 8
863 ; NVPTX: @[[GLOB2:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
864 ; NVPTX: @[[G:[a-zA-Z0-9_$"\\.-]+]] = external global i32, align 4
865 ; NVPTX: @[[GLOB3:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 322, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
866 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_NEEDED_L14_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
867 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_L22_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
868 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_L39_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
869 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_WITH_FALLBACK_L55_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
870 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_NO_OPENMP_ATTR_L66_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
871 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_PURE_L77_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
872 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_NESTED_RECURSIVE_L92_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 1, i8 3, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
873 ; NVPTX: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_WEAK_CALLEE_L112_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
874 ; NVPTX: @[[__OMP_OUTLINED__2_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
875 ; NVPTX: @[[__OMP_OUTLINED__3_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
876 ; NVPTX: @[[__OMP_OUTLINED__5_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
877 ; NVPTX: @[[__OMP_OUTLINED__7_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
878 ; NVPTX: @[[__OMP_OUTLINED__8_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
879 ; NVPTX: @[[__OMP_OUTLINED__10_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
880 ; NVPTX: @[[__OMP_OUTLINED__11_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
881 ; NVPTX: @[[__OMP_OUTLINED__13_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
882 ; NVPTX: @[[__OMP_OUTLINED__14_WRAPPER_ID:[a-zA-Z0-9_$"\\.-]+]] = private constant i8 undef
884 ; AMDGPU-DISABLED: @[[GLOB0:[0-9]+]] = private unnamed_addr constant [23 x i8] c"
885 ; AMDGPU-DISABLED: @[[GLOB1:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, ptr @[[GLOB0]] }, align 8
886 ; AMDGPU-DISABLED: @[[GLOB2:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
887 ; AMDGPU-DISABLED: @[[G:[a-zA-Z0-9_$"\\.-]+]] = external global i32, align 4
888 ; AMDGPU-DISABLED: @[[GLOB3:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 322, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
889 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_NEEDED_L14_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
890 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_L22_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
891 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_L39_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
892 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_WITH_FALLBACK_L55_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
893 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_NO_OPENMP_ATTR_L66_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
894 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_PURE_L77_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
895 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_NESTED_RECURSIVE_L92_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 3, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
896 ; AMDGPU-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_WEAK_CALLEE_L112_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
898 ; NVPTX-DISABLED: @[[GLOB0:[0-9]+]] = private unnamed_addr constant [23 x i8] c"
899 ; NVPTX-DISABLED: @[[GLOB1:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 0, i32 0, ptr @[[GLOB0]] }, align 8
900 ; NVPTX-DISABLED: @[[GLOB2:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 2, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
901 ; NVPTX-DISABLED: @[[G:[a-zA-Z0-9_$"\\.-]+]] = external global i32, align 4
902 ; NVPTX-DISABLED: @[[GLOB3:[0-9]+]] = private unnamed_addr constant [[STRUCT_IDENT_T:%.*]] { i32 0, i32 322, i32 2, i32 0, ptr @[[GLOB0]] }, align 8
903 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_NEEDED_L14_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
904 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_L22_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
905 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_L39_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
906 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_WITH_FALLBACK_L55_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
907 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_NO_OPENMP_ATTR_L66_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
908 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_PURE_L77_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
909 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_SIMPLE_STATE_MACHINE_INTERPROCEDURAL_NESTED_RECURSIVE_L92_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 1, i8 3, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
910 ; NVPTX-DISABLED: @[[__OMP_OFFLOADING_14_A36502B_NO_STATE_MACHINE_WEAK_CALLEE_L112_KERNEL_ENVIRONMENT:[a-zA-Z0-9_$"\\.-]+]] = local_unnamed_addr constant [[STRUCT_KERNELENVIRONMENTTY:%.*]] { [[STRUCT_CONFIGURATIONENVIRONMENTTY:%.*]] { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
912 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
913 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_needed_l14
914 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] {
915 ; AMDGPU-NEXT:  entry:
916 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
917 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
918 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14_kernel_environment, ptr [[DYN]])
919 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
920 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
921 ; AMDGPU:       user_code.entry:
922 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3:[0-9]+]]
923 ; AMDGPU-NEXT:    call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
924 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
925 ; AMDGPU-NEXT:    ret void
926 ; AMDGPU:       worker.exit:
927 ; AMDGPU-NEXT:    ret void
930 ; AMDGPU-LABEL: define {{[^@]+}}@__kmpc_target_init
931 ; AMDGPU-SAME: (ptr [[TMP0:%.*]], ptr [[TMP1:%.*]]) {
932 ; AMDGPU-NEXT:    ret i32 0
935 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
936 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__
937 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
938 ; AMDGPU-NEXT:  entry:
939 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
940 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
941 ; AMDGPU-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9:[0-9]+]]
942 ; AMDGPU-NEXT:    call void @unknown_no_openmp() #[[ATTR10:[0-9]+]]
943 ; AMDGPU-NEXT:    ret void
946 ; AMDGPU: Function Attrs: convergent noinline nounwind
947 ; AMDGPU-LABEL: define {{[^@]+}}@no_parallel_region_in_here.internalized
948 ; AMDGPU-SAME: () #[[ATTR1:[0-9]+]] {
949 ; AMDGPU-NEXT:  entry:
950 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
951 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
952 ; AMDGPU-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
953 ; AMDGPU-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
954 ; AMDGPU:       omp_if.then:
955 ; AMDGPU-NEXT:    store i32 0, ptr @G, align 4
956 ; AMDGPU-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
957 ; AMDGPU-NEXT:    br label [[OMP_IF_END]]
958 ; AMDGPU:       omp_if.end:
959 ; AMDGPU-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]]) #[[ATTR3]]
960 ; AMDGPU-NEXT:    ret void
963 ; AMDGPU: Function Attrs: convergent noinline nounwind
964 ; AMDGPU-LABEL: define {{[^@]+}}@no_parallel_region_in_here
965 ; AMDGPU-SAME: () #[[ATTR1]] {
966 ; AMDGPU-NEXT:  entry:
967 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
968 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]])
969 ; AMDGPU-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
970 ; AMDGPU-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
971 ; AMDGPU:       omp_if.then:
972 ; AMDGPU-NEXT:    store i32 0, ptr @G, align 4
973 ; AMDGPU-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]])
974 ; AMDGPU-NEXT:    br label [[OMP_IF_END]]
975 ; AMDGPU:       omp_if.end:
976 ; AMDGPU-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]])
977 ; AMDGPU-NEXT:    ret void
980 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
981 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_l22
982 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
983 ; AMDGPU-NEXT:  entry:
984 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
985 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
986 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
987 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_l22_kernel_environment, ptr [[DYN]])
988 ; AMDGPU-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
989 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
990 ; AMDGPU:       is_worker_check:
991 ; AMDGPU-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
992 ; AMDGPU-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
993 ; AMDGPU-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
994 ; AMDGPU-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
995 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
996 ; AMDGPU:       worker_state_machine.begin:
997 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
998 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_GENERIC:%.*]] = addrspacecast ptr addrspace(5) [[WORKER_WORK_FN_ADDR]] to ptr
999 ; AMDGPU-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR_GENERIC]])
1000 ; AMDGPU-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR_GENERIC]], align 8
1001 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
1002 ; AMDGPU-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
1003 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
1004 ; AMDGPU:       worker_state_machine.finished:
1005 ; AMDGPU-NEXT:    ret void
1006 ; AMDGPU:       worker_state_machine.is_active.check:
1007 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
1008 ; AMDGPU:       worker_state_machine.parallel_region.check:
1009 ; AMDGPU-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__2_wrapper.ID
1010 ; AMDGPU-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
1011 ; AMDGPU:       worker_state_machine.parallel_region.execute:
1012 ; AMDGPU-NEXT:    call void @__omp_outlined__2_wrapper(i16 0, i32 [[TMP0]])
1013 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
1014 ; AMDGPU:       worker_state_machine.parallel_region.check1:
1015 ; AMDGPU-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
1016 ; AMDGPU:       worker_state_machine.parallel_region.execute2:
1017 ; AMDGPU-NEXT:    call void @__omp_outlined__3_wrapper(i16 0, i32 [[TMP0]])
1018 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1019 ; AMDGPU:       worker_state_machine.parallel_region.check3:
1020 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1021 ; AMDGPU:       worker_state_machine.parallel_region.end:
1022 ; AMDGPU-NEXT:    call void @__kmpc_kernel_end_parallel()
1023 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
1024 ; AMDGPU:       worker_state_machine.done.barrier:
1025 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1026 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
1027 ; AMDGPU:       thread.user_code.check:
1028 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1029 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1030 ; AMDGPU:       user_code.entry:
1031 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1032 ; AMDGPU-NEXT:    call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1033 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
1034 ; AMDGPU-NEXT:    ret void
1035 ; AMDGPU:       worker.exit:
1036 ; AMDGPU-NEXT:    ret void
1039 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1040 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__1
1041 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1042 ; AMDGPU-NEXT:  entry:
1043 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1044 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1045 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
1046 ; AMDGPU-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
1047 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1048 ; AMDGPU-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
1049 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__3, ptr @__omp_outlined__3_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
1050 ; AMDGPU-NEXT:    ret void
1053 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1054 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__2
1055 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1056 ; AMDGPU-NEXT:  entry:
1057 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1058 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1059 ; AMDGPU-NEXT:    call void @p0() #[[ATTR11:[0-9]+]]
1060 ; AMDGPU-NEXT:    ret void
1063 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1064 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__2_wrapper
1065 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1066 ; AMDGPU-NEXT:  entry:
1067 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1068 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1069 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1070 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1071 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1072 ; AMDGPU-NEXT:    call void @__omp_outlined__2(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1073 ; AMDGPU-NEXT:    ret void
1076 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1077 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__3
1078 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1079 ; AMDGPU-NEXT:  entry:
1080 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1081 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1082 ; AMDGPU-NEXT:    call void @p1() #[[ATTR11]]
1083 ; AMDGPU-NEXT:    ret void
1086 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1087 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__3_wrapper
1088 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1089 ; AMDGPU-NEXT:  entry:
1090 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1091 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1092 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1093 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1094 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1095 ; AMDGPU-NEXT:    call void @__omp_outlined__3(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1096 ; AMDGPU-NEXT:    ret void
1099 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1100 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39
1101 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
1102 ; AMDGPU-NEXT:  entry:
1103 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
1104 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1105 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1106 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39_kernel_environment, ptr [[DYN]])
1107 ; AMDGPU-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
1108 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
1109 ; AMDGPU:       is_worker_check:
1110 ; AMDGPU-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
1111 ; AMDGPU-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
1112 ; AMDGPU-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
1113 ; AMDGPU-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
1114 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
1115 ; AMDGPU:       worker_state_machine.begin:
1116 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1117 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_GENERIC:%.*]] = addrspacecast ptr addrspace(5) [[WORKER_WORK_FN_ADDR]] to ptr
1118 ; AMDGPU-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR_GENERIC]])
1119 ; AMDGPU-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR_GENERIC]], align 8
1120 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
1121 ; AMDGPU-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
1122 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
1123 ; AMDGPU:       worker_state_machine.finished:
1124 ; AMDGPU-NEXT:    ret void
1125 ; AMDGPU:       worker_state_machine.is_active.check:
1126 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
1127 ; AMDGPU:       worker_state_machine.parallel_region.check:
1128 ; AMDGPU-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__17_wrapper
1129 ; AMDGPU-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
1130 ; AMDGPU:       worker_state_machine.parallel_region.execute:
1131 ; AMDGPU-NEXT:    call void @__omp_outlined__17_wrapper(i16 0, i32 [[TMP0]])
1132 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
1133 ; AMDGPU:       worker_state_machine.parallel_region.check1:
1134 ; AMDGPU-NEXT:    [[WORKER_CHECK_PARALLEL_REGION4:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__5_wrapper.ID
1135 ; AMDGPU-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION4]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
1136 ; AMDGPU:       worker_state_machine.parallel_region.execute2:
1137 ; AMDGPU-NEXT:    call void @__omp_outlined__5_wrapper(i16 0, i32 [[TMP0]])
1138 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1139 ; AMDGPU:       worker_state_machine.parallel_region.check3:
1140 ; AMDGPU-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE5:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK6:%.*]]
1141 ; AMDGPU:       worker_state_machine.parallel_region.execute5:
1142 ; AMDGPU-NEXT:    call void @__omp_outlined__18_wrapper(i16 0, i32 [[TMP0]])
1143 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1144 ; AMDGPU:       worker_state_machine.parallel_region.check6:
1145 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1146 ; AMDGPU:       worker_state_machine.parallel_region.end:
1147 ; AMDGPU-NEXT:    call void @__kmpc_kernel_end_parallel()
1148 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
1149 ; AMDGPU:       worker_state_machine.done.barrier:
1150 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1151 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
1152 ; AMDGPU:       thread.user_code.check:
1153 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1154 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1155 ; AMDGPU:       user_code.entry:
1156 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1157 ; AMDGPU-NEXT:    call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1158 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
1159 ; AMDGPU-NEXT:    ret void
1160 ; AMDGPU:       worker.exit:
1161 ; AMDGPU-NEXT:    ret void
1164 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1165 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__4
1166 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1167 ; AMDGPU-NEXT:  entry:
1168 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1169 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1170 ; AMDGPU-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
1171 ; AMDGPU-NEXT:    call void @simple_state_machine_interprocedural_before.internalized() #[[ATTR9]]
1172 ; AMDGPU-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
1173 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__5, ptr @__omp_outlined__5_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1174 ; AMDGPU-NEXT:    call void @simple_state_machine_interprocedural_after.internalized() #[[ATTR9]]
1175 ; AMDGPU-NEXT:    ret void
1178 ; AMDGPU: Function Attrs: noinline nounwind
1179 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before.internalized
1180 ; AMDGPU-SAME: () #[[ATTR6:[0-9]+]] {
1181 ; AMDGPU-NEXT:  entry:
1182 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1183 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
1184 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1185 ; AMDGPU-NEXT:    ret void
1188 ; AMDGPU: Function Attrs: convergent noinline nounwind
1189 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before
1190 ; AMDGPU-SAME: () #[[ATTR1]] {
1191 ; AMDGPU-NEXT:  entry:
1192 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1193 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
1194 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1195 ; AMDGPU-NEXT:    ret void
1198 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1199 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__5
1200 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1201 ; AMDGPU-NEXT:  entry:
1202 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1203 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1204 ; AMDGPU-NEXT:    call void @p1() #[[ATTR11]]
1205 ; AMDGPU-NEXT:    ret void
1208 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1209 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__5_wrapper
1210 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1211 ; AMDGPU-NEXT:  entry:
1212 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1213 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1214 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1215 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1216 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1217 ; AMDGPU-NEXT:    call void @__omp_outlined__5(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1218 ; AMDGPU-NEXT:    ret void
1221 ; AMDGPU: Function Attrs: noinline nounwind
1222 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after.internalized
1223 ; AMDGPU-SAME: () #[[ATTR6]] {
1224 ; AMDGPU-NEXT:  entry:
1225 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1226 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
1227 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1228 ; AMDGPU-NEXT:    ret void
1231 ; AMDGPU: Function Attrs: convergent noinline nounwind
1232 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after
1233 ; AMDGPU-SAME: () #[[ATTR1]] {
1234 ; AMDGPU-NEXT:  entry:
1235 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1236 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
1237 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1238 ; AMDGPU-NEXT:    ret void
1241 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1242 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55
1243 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
1244 ; AMDGPU-NEXT:  entry:
1245 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
1246 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1247 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1248 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55_kernel_environment, ptr [[DYN]])
1249 ; AMDGPU-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
1250 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
1251 ; AMDGPU:       is_worker_check:
1252 ; AMDGPU-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
1253 ; AMDGPU-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
1254 ; AMDGPU-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
1255 ; AMDGPU-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
1256 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
1257 ; AMDGPU:       worker_state_machine.begin:
1258 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1259 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_GENERIC:%.*]] = addrspacecast ptr addrspace(5) [[WORKER_WORK_FN_ADDR]] to ptr
1260 ; AMDGPU-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR_GENERIC]])
1261 ; AMDGPU-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR_GENERIC]], align 8
1262 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
1263 ; AMDGPU-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
1264 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
1265 ; AMDGPU:       worker_state_machine.finished:
1266 ; AMDGPU-NEXT:    ret void
1267 ; AMDGPU:       worker_state_machine.is_active.check:
1268 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
1269 ; AMDGPU:       worker_state_machine.parallel_region.check:
1270 ; AMDGPU-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__7_wrapper.ID
1271 ; AMDGPU-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
1272 ; AMDGPU:       worker_state_machine.parallel_region.execute:
1273 ; AMDGPU-NEXT:    call void @__omp_outlined__7_wrapper(i16 0, i32 [[TMP0]])
1274 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
1275 ; AMDGPU:       worker_state_machine.parallel_region.check1:
1276 ; AMDGPU-NEXT:    [[WORKER_CHECK_PARALLEL_REGION4:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__8_wrapper.ID
1277 ; AMDGPU-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION4]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_FALLBACK_EXECUTE:%.*]]
1278 ; AMDGPU:       worker_state_machine.parallel_region.execute2:
1279 ; AMDGPU-NEXT:    call void @__omp_outlined__8_wrapper(i16 0, i32 [[TMP0]])
1280 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1281 ; AMDGPU:       worker_state_machine.parallel_region.fallback.execute:
1282 ; AMDGPU-NEXT:    call void [[WORKER_WORK_FN_ADDR_CAST]](i16 0, i32 [[TMP0]])
1283 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1284 ; AMDGPU:       worker_state_machine.parallel_region.end:
1285 ; AMDGPU-NEXT:    call void @__kmpc_kernel_end_parallel()
1286 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
1287 ; AMDGPU:       worker_state_machine.done.barrier:
1288 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1289 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
1290 ; AMDGPU:       thread.user_code.check:
1291 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1292 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1293 ; AMDGPU:       user_code.entry:
1294 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1295 ; AMDGPU-NEXT:    call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1296 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
1297 ; AMDGPU-NEXT:    ret void
1298 ; AMDGPU:       worker.exit:
1299 ; AMDGPU-NEXT:    ret void
1302 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1303 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__6
1304 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1305 ; AMDGPU-NEXT:  entry:
1306 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1307 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1308 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
1309 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__7, ptr @__omp_outlined__7_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1310 ; AMDGPU-NEXT:    [[CALL:%.*]] = call i32 @unknown() #[[ATTR11]]
1311 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__8, ptr @__omp_outlined__8_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
1312 ; AMDGPU-NEXT:    ret void
1315 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1316 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__7
1317 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1318 ; AMDGPU-NEXT:  entry:
1319 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1320 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1321 ; AMDGPU-NEXT:    call void @p0() #[[ATTR11]]
1322 ; AMDGPU-NEXT:    ret void
1325 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1326 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__7_wrapper
1327 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1328 ; AMDGPU-NEXT:  entry:
1329 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1330 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1331 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1332 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1333 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1334 ; AMDGPU-NEXT:    call void @__omp_outlined__7(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1335 ; AMDGPU-NEXT:    ret void
1338 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1339 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__8
1340 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1341 ; AMDGPU-NEXT:  entry:
1342 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1343 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1344 ; AMDGPU-NEXT:    call void @p1() #[[ATTR11]]
1345 ; AMDGPU-NEXT:    ret void
1348 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1349 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__8_wrapper
1350 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1351 ; AMDGPU-NEXT:  entry:
1352 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1353 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1354 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1355 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1356 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1357 ; AMDGPU-NEXT:    call void @__omp_outlined__8(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1358 ; AMDGPU-NEXT:    ret void
1361 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1362 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66
1363 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
1364 ; AMDGPU-NEXT:  entry:
1365 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
1366 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1367 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1368 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66_kernel_environment, ptr [[DYN]])
1369 ; AMDGPU-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
1370 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
1371 ; AMDGPU:       is_worker_check:
1372 ; AMDGPU-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
1373 ; AMDGPU-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
1374 ; AMDGPU-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
1375 ; AMDGPU-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
1376 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
1377 ; AMDGPU:       worker_state_machine.begin:
1378 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1379 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_GENERIC:%.*]] = addrspacecast ptr addrspace(5) [[WORKER_WORK_FN_ADDR]] to ptr
1380 ; AMDGPU-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR_GENERIC]])
1381 ; AMDGPU-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR_GENERIC]], align 8
1382 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
1383 ; AMDGPU-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
1384 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
1385 ; AMDGPU:       worker_state_machine.finished:
1386 ; AMDGPU-NEXT:    ret void
1387 ; AMDGPU:       worker_state_machine.is_active.check:
1388 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
1389 ; AMDGPU:       worker_state_machine.parallel_region.check:
1390 ; AMDGPU-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__10_wrapper.ID
1391 ; AMDGPU-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
1392 ; AMDGPU:       worker_state_machine.parallel_region.execute:
1393 ; AMDGPU-NEXT:    call void @__omp_outlined__10_wrapper(i16 0, i32 [[TMP0]])
1394 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
1395 ; AMDGPU:       worker_state_machine.parallel_region.check1:
1396 ; AMDGPU-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
1397 ; AMDGPU:       worker_state_machine.parallel_region.execute2:
1398 ; AMDGPU-NEXT:    call void @__omp_outlined__11_wrapper(i16 0, i32 [[TMP0]])
1399 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1400 ; AMDGPU:       worker_state_machine.parallel_region.check3:
1401 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1402 ; AMDGPU:       worker_state_machine.parallel_region.end:
1403 ; AMDGPU-NEXT:    call void @__kmpc_kernel_end_parallel()
1404 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
1405 ; AMDGPU:       worker_state_machine.done.barrier:
1406 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1407 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
1408 ; AMDGPU:       thread.user_code.check:
1409 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1410 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1411 ; AMDGPU:       user_code.entry:
1412 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1413 ; AMDGPU-NEXT:    call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1414 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
1415 ; AMDGPU-NEXT:    ret void
1416 ; AMDGPU:       worker.exit:
1417 ; AMDGPU-NEXT:    ret void
1420 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1421 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__9
1422 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1423 ; AMDGPU-NEXT:  entry:
1424 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1425 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1426 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
1427 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__10, ptr @__omp_outlined__10_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1428 ; AMDGPU-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
1429 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__11, ptr @__omp_outlined__11_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
1430 ; AMDGPU-NEXT:    ret void
1433 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1434 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__10
1435 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1436 ; AMDGPU-NEXT:  entry:
1437 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1438 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1439 ; AMDGPU-NEXT:    call void @p0() #[[ATTR11]]
1440 ; AMDGPU-NEXT:    ret void
1443 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1444 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__10_wrapper
1445 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1446 ; AMDGPU-NEXT:  entry:
1447 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1448 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1449 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1450 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1451 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1452 ; AMDGPU-NEXT:    call void @__omp_outlined__10(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1453 ; AMDGPU-NEXT:    ret void
1456 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1457 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__11
1458 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1459 ; AMDGPU-NEXT:  entry:
1460 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1461 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1462 ; AMDGPU-NEXT:    call void @p1() #[[ATTR11]]
1463 ; AMDGPU-NEXT:    ret void
1466 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1467 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__11_wrapper
1468 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1469 ; AMDGPU-NEXT:  entry:
1470 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1471 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1472 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1473 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1474 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1475 ; AMDGPU-NEXT:    call void @__omp_outlined__11(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1476 ; AMDGPU-NEXT:    ret void
1479 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1480 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_pure_l77
1481 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
1482 ; AMDGPU-NEXT:  entry:
1483 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
1484 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1485 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1486 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77_kernel_environment, ptr [[DYN]])
1487 ; AMDGPU-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
1488 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
1489 ; AMDGPU:       is_worker_check:
1490 ; AMDGPU-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
1491 ; AMDGPU-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
1492 ; AMDGPU-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
1493 ; AMDGPU-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
1494 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
1495 ; AMDGPU:       worker_state_machine.begin:
1496 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1497 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_GENERIC:%.*]] = addrspacecast ptr addrspace(5) [[WORKER_WORK_FN_ADDR]] to ptr
1498 ; AMDGPU-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR_GENERIC]])
1499 ; AMDGPU-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR_GENERIC]], align 8
1500 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
1501 ; AMDGPU-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
1502 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
1503 ; AMDGPU:       worker_state_machine.finished:
1504 ; AMDGPU-NEXT:    ret void
1505 ; AMDGPU:       worker_state_machine.is_active.check:
1506 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
1507 ; AMDGPU:       worker_state_machine.parallel_region.check:
1508 ; AMDGPU-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__13_wrapper.ID
1509 ; AMDGPU-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
1510 ; AMDGPU:       worker_state_machine.parallel_region.execute:
1511 ; AMDGPU-NEXT:    call void @__omp_outlined__13_wrapper(i16 0, i32 [[TMP0]])
1512 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
1513 ; AMDGPU:       worker_state_machine.parallel_region.check1:
1514 ; AMDGPU-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
1515 ; AMDGPU:       worker_state_machine.parallel_region.execute2:
1516 ; AMDGPU-NEXT:    call void @__omp_outlined__14_wrapper(i16 0, i32 [[TMP0]])
1517 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1518 ; AMDGPU:       worker_state_machine.parallel_region.check3:
1519 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1520 ; AMDGPU:       worker_state_machine.parallel_region.end:
1521 ; AMDGPU-NEXT:    call void @__kmpc_kernel_end_parallel()
1522 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
1523 ; AMDGPU:       worker_state_machine.done.barrier:
1524 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1525 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
1526 ; AMDGPU:       thread.user_code.check:
1527 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1528 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1529 ; AMDGPU:       user_code.entry:
1530 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1531 ; AMDGPU-NEXT:    call void @__omp_outlined__12(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1532 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
1533 ; AMDGPU-NEXT:    ret void
1534 ; AMDGPU:       worker.exit:
1535 ; AMDGPU-NEXT:    ret void
1538 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1539 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__12
1540 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1541 ; AMDGPU-NEXT:  entry:
1542 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1543 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1544 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
1545 ; AMDGPU-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
1546 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__13, ptr @__omp_outlined__13_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1547 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__14, ptr @__omp_outlined__14_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
1548 ; AMDGPU-NEXT:    ret void
1551 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1552 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__13
1553 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1554 ; AMDGPU-NEXT:  entry:
1555 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1556 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1557 ; AMDGPU-NEXT:    call void @p0() #[[ATTR11]]
1558 ; AMDGPU-NEXT:    ret void
1561 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1562 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__13_wrapper
1563 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1564 ; AMDGPU-NEXT:  entry:
1565 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1566 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1567 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1568 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1569 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1570 ; AMDGPU-NEXT:    call void @__omp_outlined__13(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1571 ; AMDGPU-NEXT:    ret void
1574 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1575 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__14
1576 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1577 ; AMDGPU-NEXT:  entry:
1578 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1579 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1580 ; AMDGPU-NEXT:    call void @p1() #[[ATTR11]]
1581 ; AMDGPU-NEXT:    ret void
1584 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1585 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__14_wrapper
1586 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1587 ; AMDGPU-NEXT:  entry:
1588 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1589 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1590 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1591 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1592 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1593 ; AMDGPU-NEXT:    call void @__omp_outlined__14(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1594 ; AMDGPU-NEXT:    ret void
1597 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1598 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92
1599 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
1600 ; AMDGPU-NEXT:  entry:
1601 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1602 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1603 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92_kernel_environment, ptr [[DYN]])
1604 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1605 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1606 ; AMDGPU:       user_code.entry:
1607 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1608 ; AMDGPU-NEXT:    call void @__omp_outlined__15(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1609 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
1610 ; AMDGPU-NEXT:    ret void
1611 ; AMDGPU:       worker.exit:
1612 ; AMDGPU-NEXT:    ret void
1615 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1616 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__15
1617 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1618 ; AMDGPU-NEXT:  entry:
1619 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1620 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1621 ; AMDGPU-NEXT:    [[CALL:%.*]] = call i32 @omp_get_thread_num() #[[ATTR9]]
1622 ; AMDGPU-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[CALL]]) #[[ATTR9]]
1623 ; AMDGPU-NEXT:    ret void
1626 ; AMDGPU: Function Attrs: noinline nounwind
1627 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after.internalized
1628 ; AMDGPU-SAME: (i32 [[A:%.*]]) #[[ATTR6]] {
1629 ; AMDGPU-NEXT:  entry:
1630 ; AMDGPU-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
1631 ; AMDGPU-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
1632 ; AMDGPU-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
1633 ; AMDGPU-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
1634 ; AMDGPU-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1635 ; AMDGPU:       if.then:
1636 ; AMDGPU-NEXT:    br label [[RETURN:%.*]]
1637 ; AMDGPU:       if.end:
1638 ; AMDGPU-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
1639 ; AMDGPU-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
1640 ; AMDGPU-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[SUB]]) #[[ATTR9]]
1641 ; AMDGPU-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after.internalized() #[[ATTR9]]
1642 ; AMDGPU-NEXT:    br label [[RETURN]]
1643 ; AMDGPU:       return:
1644 ; AMDGPU-NEXT:    ret void
1647 ; AMDGPU: Function Attrs: convergent noinline nounwind
1648 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after
1649 ; AMDGPU-SAME: (i32 [[A:%.*]]) #[[ATTR1]] {
1650 ; AMDGPU-NEXT:  entry:
1651 ; AMDGPU-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
1652 ; AMDGPU-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
1653 ; AMDGPU-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
1654 ; AMDGPU-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
1655 ; AMDGPU-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
1656 ; AMDGPU:       if.then:
1657 ; AMDGPU-NEXT:    br label [[RETURN:%.*]]
1658 ; AMDGPU:       if.end:
1659 ; AMDGPU-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
1660 ; AMDGPU-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
1661 ; AMDGPU-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after(i32 [[SUB]]) #[[ATTR11]]
1662 ; AMDGPU-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after() #[[ATTR11]]
1663 ; AMDGPU-NEXT:    br label [[RETURN]]
1664 ; AMDGPU:       return:
1665 ; AMDGPU-NEXT:    ret void
1668 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1669 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112
1670 ; AMDGPU-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
1671 ; AMDGPU-NEXT:  entry:
1672 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8, addrspace(5)
1673 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1674 ; AMDGPU-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1675 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112_kernel_environment, ptr [[DYN]])
1676 ; AMDGPU-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
1677 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
1678 ; AMDGPU:       is_worker_check:
1679 ; AMDGPU-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
1680 ; AMDGPU-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
1681 ; AMDGPU-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
1682 ; AMDGPU-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
1683 ; AMDGPU-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
1684 ; AMDGPU:       worker_state_machine.begin:
1685 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1686 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_GENERIC:%.*]] = addrspacecast ptr addrspace(5) [[WORKER_WORK_FN_ADDR]] to ptr
1687 ; AMDGPU-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR_GENERIC]])
1688 ; AMDGPU-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR_GENERIC]], align 8
1689 ; AMDGPU-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
1690 ; AMDGPU-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
1691 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
1692 ; AMDGPU:       worker_state_machine.finished:
1693 ; AMDGPU-NEXT:    ret void
1694 ; AMDGPU:       worker_state_machine.is_active.check:
1695 ; AMDGPU-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_FALLBACK_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
1696 ; AMDGPU:       worker_state_machine.parallel_region.fallback.execute:
1697 ; AMDGPU-NEXT:    call void [[WORKER_WORK_FN_ADDR_CAST]](i16 0, i32 [[TMP0]])
1698 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
1699 ; AMDGPU:       worker_state_machine.parallel_region.end:
1700 ; AMDGPU-NEXT:    call void @__kmpc_kernel_end_parallel()
1701 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
1702 ; AMDGPU:       worker_state_machine.done.barrier:
1703 ; AMDGPU-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1704 ; AMDGPU-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
1705 ; AMDGPU:       thread.user_code.check:
1706 ; AMDGPU-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1707 ; AMDGPU-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1708 ; AMDGPU:       user_code.entry:
1709 ; AMDGPU-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1710 ; AMDGPU-NEXT:    call void @__omp_outlined__16(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1711 ; AMDGPU-NEXT:    call void @__kmpc_target_deinit()
1712 ; AMDGPU-NEXT:    ret void
1713 ; AMDGPU:       worker.exit:
1714 ; AMDGPU-NEXT:    ret void
1717 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1718 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__16
1719 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1720 ; AMDGPU-NEXT:  entry:
1721 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1722 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1723 ; AMDGPU-NEXT:    call void @weak_callee_empty() #[[ATTR9]]
1724 ; AMDGPU-NEXT:    ret void
1727 ; AMDGPU: Function Attrs: convergent noinline nounwind
1728 ; AMDGPU-LABEL: define {{[^@]+}}@weak_callee_empty
1729 ; AMDGPU-SAME: () #[[ATTR1]] {
1730 ; AMDGPU-NEXT:  entry:
1731 ; AMDGPU-NEXT:    ret void
1734 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1735 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__17
1736 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1737 ; AMDGPU-NEXT:  entry:
1738 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1739 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1740 ; AMDGPU-NEXT:    call void @p0() #[[ATTR11]]
1741 ; AMDGPU-NEXT:    ret void
1744 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1745 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__17_wrapper
1746 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1747 ; AMDGPU-NEXT:  entry:
1748 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1749 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1750 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1751 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1752 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1753 ; AMDGPU-NEXT:    call void @__omp_outlined__17(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1754 ; AMDGPU-NEXT:    ret void
1757 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1758 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__18
1759 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1760 ; AMDGPU-NEXT:  entry:
1761 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1762 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1763 ; AMDGPU-NEXT:    call void @p0() #[[ATTR11]]
1764 ; AMDGPU-NEXT:    ret void
1767 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1768 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__18_wrapper
1769 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1770 ; AMDGPU-NEXT:  entry:
1771 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1772 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1773 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1774 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1775 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1776 ; AMDGPU-NEXT:    call void @__omp_outlined__18(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1777 ; AMDGPU-NEXT:    ret void
1780 ; AMDGPU: Function Attrs: noinline nounwind
1781 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after.internalized
1782 ; AMDGPU-SAME: () #[[ATTR6]] {
1783 ; AMDGPU-NEXT:  entry:
1784 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1785 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
1786 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1787 ; AMDGPU-NEXT:    ret void
1790 ; AMDGPU: Function Attrs: convergent noinline nounwind
1791 ; AMDGPU-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after
1792 ; AMDGPU-SAME: () #[[ATTR1]] {
1793 ; AMDGPU-NEXT:  entry:
1794 ; AMDGPU-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1795 ; AMDGPU-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
1796 ; AMDGPU-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1797 ; AMDGPU-NEXT:    ret void
1800 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1801 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__19
1802 ; AMDGPU-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1803 ; AMDGPU-NEXT:  entry:
1804 ; AMDGPU-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1805 ; AMDGPU-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1806 ; AMDGPU-NEXT:    call void @p0() #[[ATTR11]]
1807 ; AMDGPU-NEXT:    ret void
1810 ; AMDGPU: Function Attrs: convergent noinline norecurse nounwind
1811 ; AMDGPU-LABEL: define {{[^@]+}}@__omp_outlined__19_wrapper
1812 ; AMDGPU-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1813 ; AMDGPU-NEXT:  entry:
1814 ; AMDGPU-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1815 ; AMDGPU-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1816 ; AMDGPU-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1817 ; AMDGPU-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1818 ; AMDGPU-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1819 ; AMDGPU-NEXT:    call void @__omp_outlined__19(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1820 ; AMDGPU-NEXT:    ret void
1823 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1824 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_needed_l14
1825 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] {
1826 ; NVPTX-NEXT:  entry:
1827 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1828 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1829 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14_kernel_environment, ptr [[DYN]])
1830 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1831 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1832 ; NVPTX:       user_code.entry:
1833 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3:[0-9]+]]
1834 ; NVPTX-NEXT:    call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1835 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
1836 ; NVPTX-NEXT:    ret void
1837 ; NVPTX:       worker.exit:
1838 ; NVPTX-NEXT:    ret void
1841 ; NVPTX-LABEL: define {{[^@]+}}@__kmpc_target_init
1842 ; NVPTX-SAME: (ptr [[TMP0:%.*]], ptr [[TMP1:%.*]]) {
1843 ; NVPTX-NEXT:    ret i32 0
1846 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1847 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__
1848 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1849 ; NVPTX-NEXT:  entry:
1850 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1851 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1852 ; NVPTX-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9:[0-9]+]]
1853 ; NVPTX-NEXT:    call void @unknown_no_openmp() #[[ATTR10:[0-9]+]]
1854 ; NVPTX-NEXT:    ret void
1857 ; NVPTX: Function Attrs: convergent noinline nounwind
1858 ; NVPTX-LABEL: define {{[^@]+}}@no_parallel_region_in_here.internalized
1859 ; NVPTX-SAME: () #[[ATTR1:[0-9]+]] {
1860 ; NVPTX-NEXT:  entry:
1861 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
1862 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
1863 ; NVPTX-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
1864 ; NVPTX-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
1865 ; NVPTX:       omp_if.then:
1866 ; NVPTX-NEXT:    store i32 0, ptr @G, align 4
1867 ; NVPTX-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
1868 ; NVPTX-NEXT:    br label [[OMP_IF_END]]
1869 ; NVPTX:       omp_if.end:
1870 ; NVPTX-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]]) #[[ATTR3]]
1871 ; NVPTX-NEXT:    ret void
1874 ; NVPTX: Function Attrs: convergent noinline nounwind
1875 ; NVPTX-LABEL: define {{[^@]+}}@no_parallel_region_in_here
1876 ; NVPTX-SAME: () #[[ATTR1]] {
1877 ; NVPTX-NEXT:  entry:
1878 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
1879 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]])
1880 ; NVPTX-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
1881 ; NVPTX-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
1882 ; NVPTX:       omp_if.then:
1883 ; NVPTX-NEXT:    store i32 0, ptr @G, align 4
1884 ; NVPTX-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]])
1885 ; NVPTX-NEXT:    br label [[OMP_IF_END]]
1886 ; NVPTX:       omp_if.end:
1887 ; NVPTX-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]])
1888 ; NVPTX-NEXT:    ret void
1891 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1892 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_l22
1893 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
1894 ; NVPTX-NEXT:  entry:
1895 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8
1896 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1897 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
1898 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_l22_kernel_environment, ptr [[DYN]])
1899 ; NVPTX-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
1900 ; NVPTX-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
1901 ; NVPTX:       is_worker_check:
1902 ; NVPTX-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
1903 ; NVPTX-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
1904 ; NVPTX-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
1905 ; NVPTX-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
1906 ; NVPTX-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
1907 ; NVPTX:       worker_state_machine.begin:
1908 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1909 ; NVPTX-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR]])
1910 ; NVPTX-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR]], align 8
1911 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
1912 ; NVPTX-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
1913 ; NVPTX-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
1914 ; NVPTX:       worker_state_machine.finished:
1915 ; NVPTX-NEXT:    ret void
1916 ; NVPTX:       worker_state_machine.is_active.check:
1917 ; NVPTX-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
1918 ; NVPTX:       worker_state_machine.parallel_region.check:
1919 ; NVPTX-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__2_wrapper.ID
1920 ; NVPTX-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
1921 ; NVPTX:       worker_state_machine.parallel_region.execute:
1922 ; NVPTX-NEXT:    call void @__omp_outlined__2_wrapper(i16 0, i32 [[TMP0]])
1923 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
1924 ; NVPTX:       worker_state_machine.parallel_region.check1:
1925 ; NVPTX-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
1926 ; NVPTX:       worker_state_machine.parallel_region.execute2:
1927 ; NVPTX-NEXT:    call void @__omp_outlined__3_wrapper(i16 0, i32 [[TMP0]])
1928 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1929 ; NVPTX:       worker_state_machine.parallel_region.check3:
1930 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
1931 ; NVPTX:       worker_state_machine.parallel_region.end:
1932 ; NVPTX-NEXT:    call void @__kmpc_kernel_end_parallel()
1933 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
1934 ; NVPTX:       worker_state_machine.done.barrier:
1935 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
1936 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
1937 ; NVPTX:       thread.user_code.check:
1938 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
1939 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
1940 ; NVPTX:       user_code.entry:
1941 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
1942 ; NVPTX-NEXT:    call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1943 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
1944 ; NVPTX-NEXT:    ret void
1945 ; NVPTX:       worker.exit:
1946 ; NVPTX-NEXT:    ret void
1949 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1950 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__1
1951 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1952 ; NVPTX-NEXT:  entry:
1953 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1954 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
1955 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
1956 ; NVPTX-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
1957 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
1958 ; NVPTX-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
1959 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__3, ptr @__omp_outlined__3_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
1960 ; NVPTX-NEXT:    ret void
1963 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1964 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__2
1965 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1966 ; NVPTX-NEXT:  entry:
1967 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1968 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1969 ; NVPTX-NEXT:    call void @p0() #[[ATTR11:[0-9]+]]
1970 ; NVPTX-NEXT:    ret void
1973 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1974 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__2_wrapper
1975 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1976 ; NVPTX-NEXT:  entry:
1977 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
1978 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
1979 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
1980 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
1981 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
1982 ; NVPTX-NEXT:    call void @__omp_outlined__2(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
1983 ; NVPTX-NEXT:    ret void
1986 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1987 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__3
1988 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
1989 ; NVPTX-NEXT:  entry:
1990 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
1991 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
1992 ; NVPTX-NEXT:    call void @p1() #[[ATTR11]]
1993 ; NVPTX-NEXT:    ret void
1996 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
1997 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__3_wrapper
1998 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
1999 ; NVPTX-NEXT:  entry:
2000 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2001 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2002 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2003 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2004 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2005 ; NVPTX-NEXT:    call void @__omp_outlined__3(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2006 ; NVPTX-NEXT:    ret void
2009 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2010 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39
2011 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2012 ; NVPTX-NEXT:  entry:
2013 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8
2014 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2015 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2016 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39_kernel_environment, ptr [[DYN]])
2017 ; NVPTX-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
2018 ; NVPTX-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
2019 ; NVPTX:       is_worker_check:
2020 ; NVPTX-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
2021 ; NVPTX-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
2022 ; NVPTX-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
2023 ; NVPTX-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
2024 ; NVPTX-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
2025 ; NVPTX:       worker_state_machine.begin:
2026 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2027 ; NVPTX-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR]])
2028 ; NVPTX-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR]], align 8
2029 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
2030 ; NVPTX-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
2031 ; NVPTX-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
2032 ; NVPTX:       worker_state_machine.finished:
2033 ; NVPTX-NEXT:    ret void
2034 ; NVPTX:       worker_state_machine.is_active.check:
2035 ; NVPTX-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
2036 ; NVPTX:       worker_state_machine.parallel_region.check:
2037 ; NVPTX-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__17_wrapper
2038 ; NVPTX-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
2039 ; NVPTX:       worker_state_machine.parallel_region.execute:
2040 ; NVPTX-NEXT:    call void @__omp_outlined__17_wrapper(i16 0, i32 [[TMP0]])
2041 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
2042 ; NVPTX:       worker_state_machine.parallel_region.check1:
2043 ; NVPTX-NEXT:    [[WORKER_CHECK_PARALLEL_REGION4:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__5_wrapper.ID
2044 ; NVPTX-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION4]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
2045 ; NVPTX:       worker_state_machine.parallel_region.execute2:
2046 ; NVPTX-NEXT:    call void @__omp_outlined__5_wrapper(i16 0, i32 [[TMP0]])
2047 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2048 ; NVPTX:       worker_state_machine.parallel_region.check3:
2049 ; NVPTX-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE5:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK6:%.*]]
2050 ; NVPTX:       worker_state_machine.parallel_region.execute5:
2051 ; NVPTX-NEXT:    call void @__omp_outlined__18_wrapper(i16 0, i32 [[TMP0]])
2052 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2053 ; NVPTX:       worker_state_machine.parallel_region.check6:
2054 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2055 ; NVPTX:       worker_state_machine.parallel_region.end:
2056 ; NVPTX-NEXT:    call void @__kmpc_kernel_end_parallel()
2057 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
2058 ; NVPTX:       worker_state_machine.done.barrier:
2059 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2060 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
2061 ; NVPTX:       thread.user_code.check:
2062 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2063 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2064 ; NVPTX:       user_code.entry:
2065 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2066 ; NVPTX-NEXT:    call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2067 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
2068 ; NVPTX-NEXT:    ret void
2069 ; NVPTX:       worker.exit:
2070 ; NVPTX-NEXT:    ret void
2073 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2074 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__4
2075 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2076 ; NVPTX-NEXT:  entry:
2077 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2078 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2079 ; NVPTX-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
2080 ; NVPTX-NEXT:    call void @simple_state_machine_interprocedural_before.internalized() #[[ATTR9]]
2081 ; NVPTX-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
2082 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__5, ptr @__omp_outlined__5_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2083 ; NVPTX-NEXT:    call void @simple_state_machine_interprocedural_after.internalized() #[[ATTR9]]
2084 ; NVPTX-NEXT:    ret void
2087 ; NVPTX: Function Attrs: noinline nounwind
2088 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before.internalized
2089 ; NVPTX-SAME: () #[[ATTR6:[0-9]+]] {
2090 ; NVPTX-NEXT:  entry:
2091 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2092 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
2093 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2094 ; NVPTX-NEXT:    ret void
2097 ; NVPTX: Function Attrs: convergent noinline nounwind
2098 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before
2099 ; NVPTX-SAME: () #[[ATTR1]] {
2100 ; NVPTX-NEXT:  entry:
2101 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2102 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
2103 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2104 ; NVPTX-NEXT:    ret void
2107 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2108 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__5
2109 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2110 ; NVPTX-NEXT:  entry:
2111 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2112 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2113 ; NVPTX-NEXT:    call void @p1() #[[ATTR11]]
2114 ; NVPTX-NEXT:    ret void
2117 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2118 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__5_wrapper
2119 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2120 ; NVPTX-NEXT:  entry:
2121 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2122 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2123 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2124 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2125 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2126 ; NVPTX-NEXT:    call void @__omp_outlined__5(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2127 ; NVPTX-NEXT:    ret void
2130 ; NVPTX: Function Attrs: noinline nounwind
2131 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after.internalized
2132 ; NVPTX-SAME: () #[[ATTR6]] {
2133 ; NVPTX-NEXT:  entry:
2134 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2135 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
2136 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2137 ; NVPTX-NEXT:    ret void
2140 ; NVPTX: Function Attrs: convergent noinline nounwind
2141 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after
2142 ; NVPTX-SAME: () #[[ATTR1]] {
2143 ; NVPTX-NEXT:  entry:
2144 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2145 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
2146 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2147 ; NVPTX-NEXT:    ret void
2150 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2151 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55
2152 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2153 ; NVPTX-NEXT:  entry:
2154 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8
2155 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2156 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2157 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55_kernel_environment, ptr [[DYN]])
2158 ; NVPTX-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
2159 ; NVPTX-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
2160 ; NVPTX:       is_worker_check:
2161 ; NVPTX-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
2162 ; NVPTX-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
2163 ; NVPTX-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
2164 ; NVPTX-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
2165 ; NVPTX-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
2166 ; NVPTX:       worker_state_machine.begin:
2167 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2168 ; NVPTX-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR]])
2169 ; NVPTX-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR]], align 8
2170 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
2171 ; NVPTX-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
2172 ; NVPTX-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
2173 ; NVPTX:       worker_state_machine.finished:
2174 ; NVPTX-NEXT:    ret void
2175 ; NVPTX:       worker_state_machine.is_active.check:
2176 ; NVPTX-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
2177 ; NVPTX:       worker_state_machine.parallel_region.check:
2178 ; NVPTX-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__7_wrapper.ID
2179 ; NVPTX-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
2180 ; NVPTX:       worker_state_machine.parallel_region.execute:
2181 ; NVPTX-NEXT:    call void @__omp_outlined__7_wrapper(i16 0, i32 [[TMP0]])
2182 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
2183 ; NVPTX:       worker_state_machine.parallel_region.check1:
2184 ; NVPTX-NEXT:    [[WORKER_CHECK_PARALLEL_REGION4:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__8_wrapper.ID
2185 ; NVPTX-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION4]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_FALLBACK_EXECUTE:%.*]]
2186 ; NVPTX:       worker_state_machine.parallel_region.execute2:
2187 ; NVPTX-NEXT:    call void @__omp_outlined__8_wrapper(i16 0, i32 [[TMP0]])
2188 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2189 ; NVPTX:       worker_state_machine.parallel_region.fallback.execute:
2190 ; NVPTX-NEXT:    call void [[WORKER_WORK_FN_ADDR_CAST]](i16 0, i32 [[TMP0]])
2191 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2192 ; NVPTX:       worker_state_machine.parallel_region.end:
2193 ; NVPTX-NEXT:    call void @__kmpc_kernel_end_parallel()
2194 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
2195 ; NVPTX:       worker_state_machine.done.barrier:
2196 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2197 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
2198 ; NVPTX:       thread.user_code.check:
2199 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2200 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2201 ; NVPTX:       user_code.entry:
2202 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2203 ; NVPTX-NEXT:    call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2204 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
2205 ; NVPTX-NEXT:    ret void
2206 ; NVPTX:       worker.exit:
2207 ; NVPTX-NEXT:    ret void
2210 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2211 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__6
2212 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2213 ; NVPTX-NEXT:  entry:
2214 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2215 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2216 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
2217 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__7, ptr @__omp_outlined__7_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2218 ; NVPTX-NEXT:    [[CALL:%.*]] = call i32 @unknown() #[[ATTR11]]
2219 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__8, ptr @__omp_outlined__8_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
2220 ; NVPTX-NEXT:    ret void
2223 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2224 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__7
2225 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2226 ; NVPTX-NEXT:  entry:
2227 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2228 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2229 ; NVPTX-NEXT:    call void @p0() #[[ATTR11]]
2230 ; NVPTX-NEXT:    ret void
2233 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2234 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__7_wrapper
2235 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2236 ; NVPTX-NEXT:  entry:
2237 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2238 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2239 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2240 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2241 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2242 ; NVPTX-NEXT:    call void @__omp_outlined__7(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2243 ; NVPTX-NEXT:    ret void
2246 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2247 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__8
2248 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2249 ; NVPTX-NEXT:  entry:
2250 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2251 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2252 ; NVPTX-NEXT:    call void @p1() #[[ATTR11]]
2253 ; NVPTX-NEXT:    ret void
2256 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2257 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__8_wrapper
2258 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2259 ; NVPTX-NEXT:  entry:
2260 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2261 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2262 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2263 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2264 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2265 ; NVPTX-NEXT:    call void @__omp_outlined__8(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2266 ; NVPTX-NEXT:    ret void
2269 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2270 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66
2271 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2272 ; NVPTX-NEXT:  entry:
2273 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8
2274 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2275 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2276 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66_kernel_environment, ptr [[DYN]])
2277 ; NVPTX-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
2278 ; NVPTX-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
2279 ; NVPTX:       is_worker_check:
2280 ; NVPTX-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
2281 ; NVPTX-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
2282 ; NVPTX-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
2283 ; NVPTX-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
2284 ; NVPTX-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
2285 ; NVPTX:       worker_state_machine.begin:
2286 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2287 ; NVPTX-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR]])
2288 ; NVPTX-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR]], align 8
2289 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
2290 ; NVPTX-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
2291 ; NVPTX-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
2292 ; NVPTX:       worker_state_machine.finished:
2293 ; NVPTX-NEXT:    ret void
2294 ; NVPTX:       worker_state_machine.is_active.check:
2295 ; NVPTX-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
2296 ; NVPTX:       worker_state_machine.parallel_region.check:
2297 ; NVPTX-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__10_wrapper.ID
2298 ; NVPTX-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
2299 ; NVPTX:       worker_state_machine.parallel_region.execute:
2300 ; NVPTX-NEXT:    call void @__omp_outlined__10_wrapper(i16 0, i32 [[TMP0]])
2301 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
2302 ; NVPTX:       worker_state_machine.parallel_region.check1:
2303 ; NVPTX-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
2304 ; NVPTX:       worker_state_machine.parallel_region.execute2:
2305 ; NVPTX-NEXT:    call void @__omp_outlined__11_wrapper(i16 0, i32 [[TMP0]])
2306 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2307 ; NVPTX:       worker_state_machine.parallel_region.check3:
2308 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2309 ; NVPTX:       worker_state_machine.parallel_region.end:
2310 ; NVPTX-NEXT:    call void @__kmpc_kernel_end_parallel()
2311 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
2312 ; NVPTX:       worker_state_machine.done.barrier:
2313 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2314 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
2315 ; NVPTX:       thread.user_code.check:
2316 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2317 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2318 ; NVPTX:       user_code.entry:
2319 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2320 ; NVPTX-NEXT:    call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2321 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
2322 ; NVPTX-NEXT:    ret void
2323 ; NVPTX:       worker.exit:
2324 ; NVPTX-NEXT:    ret void
2327 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2328 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__9
2329 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2330 ; NVPTX-NEXT:  entry:
2331 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2332 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2333 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
2334 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__10, ptr @__omp_outlined__10_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2335 ; NVPTX-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
2336 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__11, ptr @__omp_outlined__11_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
2337 ; NVPTX-NEXT:    ret void
2340 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2341 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__10
2342 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2343 ; NVPTX-NEXT:  entry:
2344 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2345 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2346 ; NVPTX-NEXT:    call void @p0() #[[ATTR11]]
2347 ; NVPTX-NEXT:    ret void
2350 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2351 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__10_wrapper
2352 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2353 ; NVPTX-NEXT:  entry:
2354 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2355 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2356 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2357 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2358 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2359 ; NVPTX-NEXT:    call void @__omp_outlined__10(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2360 ; NVPTX-NEXT:    ret void
2363 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2364 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__11
2365 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2366 ; NVPTX-NEXT:  entry:
2367 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2368 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2369 ; NVPTX-NEXT:    call void @p1() #[[ATTR11]]
2370 ; NVPTX-NEXT:    ret void
2373 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2374 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__11_wrapper
2375 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2376 ; NVPTX-NEXT:  entry:
2377 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2378 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2379 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2380 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2381 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2382 ; NVPTX-NEXT:    call void @__omp_outlined__11(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2383 ; NVPTX-NEXT:    ret void
2386 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2387 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_pure_l77
2388 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2389 ; NVPTX-NEXT:  entry:
2390 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8
2391 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2392 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2393 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77_kernel_environment, ptr [[DYN]])
2394 ; NVPTX-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
2395 ; NVPTX-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
2396 ; NVPTX:       is_worker_check:
2397 ; NVPTX-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
2398 ; NVPTX-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
2399 ; NVPTX-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
2400 ; NVPTX-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
2401 ; NVPTX-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
2402 ; NVPTX:       worker_state_machine.begin:
2403 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2404 ; NVPTX-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR]])
2405 ; NVPTX-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR]], align 8
2406 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
2407 ; NVPTX-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
2408 ; NVPTX-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
2409 ; NVPTX:       worker_state_machine.finished:
2410 ; NVPTX-NEXT:    ret void
2411 ; NVPTX:       worker_state_machine.is_active.check:
2412 ; NVPTX-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
2413 ; NVPTX:       worker_state_machine.parallel_region.check:
2414 ; NVPTX-NEXT:    [[WORKER_CHECK_PARALLEL_REGION:%.*]] = icmp eq ptr [[WORKER_WORK_FN_ADDR_CAST]], @__omp_outlined__13_wrapper.ID
2415 ; NVPTX-NEXT:    br i1 [[WORKER_CHECK_PARALLEL_REGION]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK1:%.*]]
2416 ; NVPTX:       worker_state_machine.parallel_region.execute:
2417 ; NVPTX-NEXT:    call void @__omp_outlined__13_wrapper(i16 0, i32 [[TMP0]])
2418 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
2419 ; NVPTX:       worker_state_machine.parallel_region.check1:
2420 ; NVPTX-NEXT:    br i1 true, label [[WORKER_STATE_MACHINE_PARALLEL_REGION_EXECUTE2:%.*]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_CHECK3:%.*]]
2421 ; NVPTX:       worker_state_machine.parallel_region.execute2:
2422 ; NVPTX-NEXT:    call void @__omp_outlined__14_wrapper(i16 0, i32 [[TMP0]])
2423 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2424 ; NVPTX:       worker_state_machine.parallel_region.check3:
2425 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END]]
2426 ; NVPTX:       worker_state_machine.parallel_region.end:
2427 ; NVPTX-NEXT:    call void @__kmpc_kernel_end_parallel()
2428 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
2429 ; NVPTX:       worker_state_machine.done.barrier:
2430 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2431 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
2432 ; NVPTX:       thread.user_code.check:
2433 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2434 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2435 ; NVPTX:       user_code.entry:
2436 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2437 ; NVPTX-NEXT:    call void @__omp_outlined__12(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2438 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
2439 ; NVPTX-NEXT:    ret void
2440 ; NVPTX:       worker.exit:
2441 ; NVPTX-NEXT:    ret void
2444 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2445 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__12
2446 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2447 ; NVPTX-NEXT:  entry:
2448 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2449 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2450 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
2451 ; NVPTX-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
2452 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__13, ptr @__omp_outlined__13_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2453 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__14, ptr @__omp_outlined__14_wrapper.ID, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
2454 ; NVPTX-NEXT:    ret void
2457 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2458 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__13
2459 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2460 ; NVPTX-NEXT:  entry:
2461 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2462 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2463 ; NVPTX-NEXT:    call void @p0() #[[ATTR11]]
2464 ; NVPTX-NEXT:    ret void
2467 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2468 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__13_wrapper
2469 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2470 ; NVPTX-NEXT:  entry:
2471 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2472 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2473 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2474 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2475 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2476 ; NVPTX-NEXT:    call void @__omp_outlined__13(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2477 ; NVPTX-NEXT:    ret void
2480 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2481 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__14
2482 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2483 ; NVPTX-NEXT:  entry:
2484 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2485 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2486 ; NVPTX-NEXT:    call void @p1() #[[ATTR11]]
2487 ; NVPTX-NEXT:    ret void
2490 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2491 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__14_wrapper
2492 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2493 ; NVPTX-NEXT:  entry:
2494 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2495 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2496 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2497 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2498 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2499 ; NVPTX-NEXT:    call void @__omp_outlined__14(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2500 ; NVPTX-NEXT:    ret void
2503 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2504 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92
2505 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2506 ; NVPTX-NEXT:  entry:
2507 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2508 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2509 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92_kernel_environment, ptr [[DYN]])
2510 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2511 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2512 ; NVPTX:       user_code.entry:
2513 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2514 ; NVPTX-NEXT:    call void @__omp_outlined__15(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2515 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
2516 ; NVPTX-NEXT:    ret void
2517 ; NVPTX:       worker.exit:
2518 ; NVPTX-NEXT:    ret void
2521 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2522 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__15
2523 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2524 ; NVPTX-NEXT:  entry:
2525 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2526 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2527 ; NVPTX-NEXT:    [[CALL:%.*]] = call i32 @omp_get_thread_num() #[[ATTR9]]
2528 ; NVPTX-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[CALL]]) #[[ATTR9]]
2529 ; NVPTX-NEXT:    ret void
2532 ; NVPTX: Function Attrs: noinline nounwind
2533 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after.internalized
2534 ; NVPTX-SAME: (i32 [[A:%.*]]) #[[ATTR6]] {
2535 ; NVPTX-NEXT:  entry:
2536 ; NVPTX-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
2537 ; NVPTX-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
2538 ; NVPTX-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
2539 ; NVPTX-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
2540 ; NVPTX-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
2541 ; NVPTX:       if.then:
2542 ; NVPTX-NEXT:    br label [[RETURN:%.*]]
2543 ; NVPTX:       if.end:
2544 ; NVPTX-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
2545 ; NVPTX-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
2546 ; NVPTX-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[SUB]]) #[[ATTR9]]
2547 ; NVPTX-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after.internalized() #[[ATTR9]]
2548 ; NVPTX-NEXT:    br label [[RETURN]]
2549 ; NVPTX:       return:
2550 ; NVPTX-NEXT:    ret void
2553 ; NVPTX: Function Attrs: convergent noinline nounwind
2554 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after
2555 ; NVPTX-SAME: (i32 [[A:%.*]]) #[[ATTR1]] {
2556 ; NVPTX-NEXT:  entry:
2557 ; NVPTX-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
2558 ; NVPTX-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
2559 ; NVPTX-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
2560 ; NVPTX-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
2561 ; NVPTX-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
2562 ; NVPTX:       if.then:
2563 ; NVPTX-NEXT:    br label [[RETURN:%.*]]
2564 ; NVPTX:       if.end:
2565 ; NVPTX-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
2566 ; NVPTX-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
2567 ; NVPTX-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after(i32 [[SUB]]) #[[ATTR11]]
2568 ; NVPTX-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after() #[[ATTR11]]
2569 ; NVPTX-NEXT:    br label [[RETURN]]
2570 ; NVPTX:       return:
2571 ; NVPTX-NEXT:    ret void
2574 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2575 ; NVPTX-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112
2576 ; NVPTX-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2577 ; NVPTX-NEXT:  entry:
2578 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR:%.*]] = alloca ptr, align 8
2579 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2580 ; NVPTX-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2581 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112_kernel_environment, ptr [[DYN]])
2582 ; NVPTX-NEXT:    [[THREAD_IS_WORKER:%.*]] = icmp ne i32 [[TMP0]], -1
2583 ; NVPTX-NEXT:    br i1 [[THREAD_IS_WORKER]], label [[IS_WORKER_CHECK:%.*]], label [[THREAD_USER_CODE_CHECK:%.*]]
2584 ; NVPTX:       is_worker_check:
2585 ; NVPTX-NEXT:    [[BLOCK_HW_SIZE:%.*]] = call i32 @__kmpc_get_hardware_num_threads_in_block()
2586 ; NVPTX-NEXT:    [[WARP_SIZE:%.*]] = call i32 @__kmpc_get_warp_size()
2587 ; NVPTX-NEXT:    [[BLOCK_SIZE:%.*]] = sub i32 [[BLOCK_HW_SIZE]], [[WARP_SIZE]]
2588 ; NVPTX-NEXT:    [[THREAD_IS_MAIN_OR_WORKER:%.*]] = icmp slt i32 [[TMP0]], [[BLOCK_SIZE]]
2589 ; NVPTX-NEXT:    br i1 [[THREAD_IS_MAIN_OR_WORKER]], label [[WORKER_STATE_MACHINE_BEGIN:%.*]], label [[WORKER_STATE_MACHINE_FINISHED:%.*]]
2590 ; NVPTX:       worker_state_machine.begin:
2591 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2592 ; NVPTX-NEXT:    [[WORKER_IS_ACTIVE:%.*]] = call i1 @__kmpc_kernel_parallel(ptr [[WORKER_WORK_FN_ADDR]])
2593 ; NVPTX-NEXT:    [[WORKER_WORK_FN:%.*]] = load ptr, ptr [[WORKER_WORK_FN_ADDR]], align 8
2594 ; NVPTX-NEXT:    [[WORKER_WORK_FN_ADDR_CAST:%.*]] = bitcast ptr [[WORKER_WORK_FN]] to ptr
2595 ; NVPTX-NEXT:    [[WORKER_IS_DONE:%.*]] = icmp eq ptr [[WORKER_WORK_FN]], null
2596 ; NVPTX-NEXT:    br i1 [[WORKER_IS_DONE]], label [[WORKER_STATE_MACHINE_FINISHED]], label [[WORKER_STATE_MACHINE_IS_ACTIVE_CHECK:%.*]]
2597 ; NVPTX:       worker_state_machine.finished:
2598 ; NVPTX-NEXT:    ret void
2599 ; NVPTX:       worker_state_machine.is_active.check:
2600 ; NVPTX-NEXT:    br i1 [[WORKER_IS_ACTIVE]], label [[WORKER_STATE_MACHINE_PARALLEL_REGION_FALLBACK_EXECUTE:%.*]], label [[WORKER_STATE_MACHINE_DONE_BARRIER:%.*]]
2601 ; NVPTX:       worker_state_machine.parallel_region.fallback.execute:
2602 ; NVPTX-NEXT:    call void [[WORKER_WORK_FN_ADDR_CAST]](i16 0, i32 [[TMP0]])
2603 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_PARALLEL_REGION_END:%.*]]
2604 ; NVPTX:       worker_state_machine.parallel_region.end:
2605 ; NVPTX-NEXT:    call void @__kmpc_kernel_end_parallel()
2606 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_DONE_BARRIER]]
2607 ; NVPTX:       worker_state_machine.done.barrier:
2608 ; NVPTX-NEXT:    call void @__kmpc_barrier_simple_generic(ptr @[[GLOB1]], i32 [[TMP0]])
2609 ; NVPTX-NEXT:    br label [[WORKER_STATE_MACHINE_BEGIN]]
2610 ; NVPTX:       thread.user_code.check:
2611 ; NVPTX-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2612 ; NVPTX-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2613 ; NVPTX:       user_code.entry:
2614 ; NVPTX-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2615 ; NVPTX-NEXT:    call void @__omp_outlined__16(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2616 ; NVPTX-NEXT:    call void @__kmpc_target_deinit()
2617 ; NVPTX-NEXT:    ret void
2618 ; NVPTX:       worker.exit:
2619 ; NVPTX-NEXT:    ret void
2622 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2623 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__16
2624 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2625 ; NVPTX-NEXT:  entry:
2626 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2627 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2628 ; NVPTX-NEXT:    call void @weak_callee_empty() #[[ATTR9]]
2629 ; NVPTX-NEXT:    ret void
2632 ; NVPTX: Function Attrs: convergent noinline nounwind
2633 ; NVPTX-LABEL: define {{[^@]+}}@weak_callee_empty
2634 ; NVPTX-SAME: () #[[ATTR1]] {
2635 ; NVPTX-NEXT:  entry:
2636 ; NVPTX-NEXT:    ret void
2639 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2640 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__17
2641 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2642 ; NVPTX-NEXT:  entry:
2643 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2644 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2645 ; NVPTX-NEXT:    call void @p0() #[[ATTR11]]
2646 ; NVPTX-NEXT:    ret void
2649 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2650 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__17_wrapper
2651 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2652 ; NVPTX-NEXT:  entry:
2653 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2654 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2655 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2656 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2657 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2658 ; NVPTX-NEXT:    call void @__omp_outlined__17(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2659 ; NVPTX-NEXT:    ret void
2662 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2663 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__18
2664 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2665 ; NVPTX-NEXT:  entry:
2666 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2667 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2668 ; NVPTX-NEXT:    call void @p0() #[[ATTR11]]
2669 ; NVPTX-NEXT:    ret void
2672 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2673 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__18_wrapper
2674 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2675 ; NVPTX-NEXT:  entry:
2676 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2677 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2678 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2679 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2680 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2681 ; NVPTX-NEXT:    call void @__omp_outlined__18(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2682 ; NVPTX-NEXT:    ret void
2685 ; NVPTX: Function Attrs: noinline nounwind
2686 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after.internalized
2687 ; NVPTX-SAME: () #[[ATTR6]] {
2688 ; NVPTX-NEXT:  entry:
2689 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2690 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
2691 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2692 ; NVPTX-NEXT:    ret void
2695 ; NVPTX: Function Attrs: convergent noinline nounwind
2696 ; NVPTX-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after
2697 ; NVPTX-SAME: () #[[ATTR1]] {
2698 ; NVPTX-NEXT:  entry:
2699 ; NVPTX-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2700 ; NVPTX-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
2701 ; NVPTX-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2702 ; NVPTX-NEXT:    ret void
2705 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2706 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__19
2707 ; NVPTX-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2708 ; NVPTX-NEXT:  entry:
2709 ; NVPTX-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2710 ; NVPTX-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2711 ; NVPTX-NEXT:    call void @p0() #[[ATTR11]]
2712 ; NVPTX-NEXT:    ret void
2715 ; NVPTX: Function Attrs: convergent noinline norecurse nounwind
2716 ; NVPTX-LABEL: define {{[^@]+}}@__omp_outlined__19_wrapper
2717 ; NVPTX-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2718 ; NVPTX-NEXT:  entry:
2719 ; NVPTX-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2720 ; NVPTX-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2721 ; NVPTX-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2722 ; NVPTX-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2723 ; NVPTX-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2724 ; NVPTX-NEXT:    call void @__omp_outlined__19(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2725 ; NVPTX-NEXT:    ret void
2728 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2729 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_needed_l14
2730 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] {
2731 ; AMDGPU-DISABLED-NEXT:  entry:
2732 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2733 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2734 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14_kernel_environment, ptr [[DYN]])
2735 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2736 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2737 ; AMDGPU-DISABLED:       user_code.entry:
2738 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3:[0-9]+]]
2739 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2740 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
2741 ; AMDGPU-DISABLED-NEXT:    ret void
2742 ; AMDGPU-DISABLED:       worker.exit:
2743 ; AMDGPU-DISABLED-NEXT:    ret void
2746 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__kmpc_target_init
2747 ; AMDGPU-DISABLED-SAME: (ptr [[TMP0:%.*]], ptr [[TMP1:%.*]]) {
2748 ; AMDGPU-DISABLED-NEXT:    ret i32 0
2751 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2752 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__
2753 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2754 ; AMDGPU-DISABLED-NEXT:  entry:
2755 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2756 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2757 ; AMDGPU-DISABLED-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9:[0-9]+]]
2758 ; AMDGPU-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10:[0-9]+]]
2759 ; AMDGPU-DISABLED-NEXT:    ret void
2762 ; AMDGPU-DISABLED: Function Attrs: convergent noinline nounwind
2763 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@no_parallel_region_in_here.internalized
2764 ; AMDGPU-DISABLED-SAME: () #[[ATTR1:[0-9]+]] {
2765 ; AMDGPU-DISABLED-NEXT:  entry:
2766 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
2767 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
2768 ; AMDGPU-DISABLED-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
2769 ; AMDGPU-DISABLED-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
2770 ; AMDGPU-DISABLED:       omp_if.then:
2771 ; AMDGPU-DISABLED-NEXT:    store i32 0, ptr @G, align 4
2772 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
2773 ; AMDGPU-DISABLED-NEXT:    br label [[OMP_IF_END]]
2774 ; AMDGPU-DISABLED:       omp_if.end:
2775 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]]) #[[ATTR3]]
2776 ; AMDGPU-DISABLED-NEXT:    ret void
2779 ; AMDGPU-DISABLED: Function Attrs: convergent noinline nounwind
2780 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@no_parallel_region_in_here
2781 ; AMDGPU-DISABLED-SAME: () #[[ATTR1]] {
2782 ; AMDGPU-DISABLED-NEXT:  entry:
2783 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
2784 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]])
2785 ; AMDGPU-DISABLED-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
2786 ; AMDGPU-DISABLED-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
2787 ; AMDGPU-DISABLED:       omp_if.then:
2788 ; AMDGPU-DISABLED-NEXT:    store i32 0, ptr @G, align 4
2789 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]])
2790 ; AMDGPU-DISABLED-NEXT:    br label [[OMP_IF_END]]
2791 ; AMDGPU-DISABLED:       omp_if.end:
2792 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]])
2793 ; AMDGPU-DISABLED-NEXT:    ret void
2796 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2797 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_l22
2798 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2799 ; AMDGPU-DISABLED-NEXT:  entry:
2800 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2801 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2802 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_l22_kernel_environment, ptr [[DYN]])
2803 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2804 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2805 ; AMDGPU-DISABLED:       user_code.entry:
2806 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2807 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2808 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
2809 ; AMDGPU-DISABLED-NEXT:    ret void
2810 ; AMDGPU-DISABLED:       worker.exit:
2811 ; AMDGPU-DISABLED-NEXT:    ret void
2814 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2815 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__1
2816 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2817 ; AMDGPU-DISABLED-NEXT:  entry:
2818 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2819 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2820 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
2821 ; AMDGPU-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
2822 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2823 ; AMDGPU-DISABLED-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
2824 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__3, ptr @__omp_outlined__3_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
2825 ; AMDGPU-DISABLED-NEXT:    ret void
2828 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2829 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__2
2830 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2831 ; AMDGPU-DISABLED-NEXT:  entry:
2832 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2833 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2834 ; AMDGPU-DISABLED-NEXT:    call void @p0() #[[ATTR11:[0-9]+]]
2835 ; AMDGPU-DISABLED-NEXT:    ret void
2838 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2839 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__2_wrapper
2840 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2841 ; AMDGPU-DISABLED-NEXT:  entry:
2842 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2843 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2844 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2845 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2846 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2847 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__2(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2848 ; AMDGPU-DISABLED-NEXT:    ret void
2851 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2852 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__3
2853 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2854 ; AMDGPU-DISABLED-NEXT:  entry:
2855 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2856 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2857 ; AMDGPU-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
2858 ; AMDGPU-DISABLED-NEXT:    ret void
2861 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2862 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__3_wrapper
2863 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2864 ; AMDGPU-DISABLED-NEXT:  entry:
2865 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2866 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2867 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2868 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2869 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2870 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__3(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2871 ; AMDGPU-DISABLED-NEXT:    ret void
2874 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2875 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39
2876 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2877 ; AMDGPU-DISABLED-NEXT:  entry:
2878 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2879 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2880 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39_kernel_environment, ptr [[DYN]])
2881 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2882 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2883 ; AMDGPU-DISABLED:       user_code.entry:
2884 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2885 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2886 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
2887 ; AMDGPU-DISABLED-NEXT:    ret void
2888 ; AMDGPU-DISABLED:       worker.exit:
2889 ; AMDGPU-DISABLED-NEXT:    ret void
2892 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2893 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__4
2894 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2895 ; AMDGPU-DISABLED-NEXT:  entry:
2896 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2897 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2898 ; AMDGPU-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
2899 ; AMDGPU-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_before.internalized() #[[ATTR9]]
2900 ; AMDGPU-DISABLED-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
2901 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__5, ptr @__omp_outlined__5_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2902 ; AMDGPU-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_after.internalized() #[[ATTR9]]
2903 ; AMDGPU-DISABLED-NEXT:    ret void
2906 ; AMDGPU-DISABLED: Function Attrs: noinline nounwind
2907 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before.internalized
2908 ; AMDGPU-DISABLED-SAME: () #[[ATTR6:[0-9]+]] {
2909 ; AMDGPU-DISABLED-NEXT:  entry:
2910 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2911 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
2912 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2913 ; AMDGPU-DISABLED-NEXT:    ret void
2916 ; AMDGPU-DISABLED: Function Attrs: convergent noinline nounwind
2917 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before
2918 ; AMDGPU-DISABLED-SAME: () #[[ATTR1]] {
2919 ; AMDGPU-DISABLED-NEXT:  entry:
2920 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2921 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
2922 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2923 ; AMDGPU-DISABLED-NEXT:    ret void
2926 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2927 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__5
2928 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2929 ; AMDGPU-DISABLED-NEXT:  entry:
2930 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
2931 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2932 ; AMDGPU-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
2933 ; AMDGPU-DISABLED-NEXT:    ret void
2936 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2937 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__5_wrapper
2938 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
2939 ; AMDGPU-DISABLED-NEXT:  entry:
2940 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
2941 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
2942 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2943 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
2944 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
2945 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__5(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2946 ; AMDGPU-DISABLED-NEXT:    ret void
2949 ; AMDGPU-DISABLED: Function Attrs: noinline nounwind
2950 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after.internalized
2951 ; AMDGPU-DISABLED-SAME: () #[[ATTR6]] {
2952 ; AMDGPU-DISABLED-NEXT:  entry:
2953 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2954 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
2955 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2956 ; AMDGPU-DISABLED-NEXT:    ret void
2959 ; AMDGPU-DISABLED: Function Attrs: convergent noinline nounwind
2960 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after
2961 ; AMDGPU-DISABLED-SAME: () #[[ATTR1]] {
2962 ; AMDGPU-DISABLED-NEXT:  entry:
2963 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2964 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
2965 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2966 ; AMDGPU-DISABLED-NEXT:    ret void
2969 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2970 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55
2971 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
2972 ; AMDGPU-DISABLED-NEXT:  entry:
2973 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
2974 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
2975 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55_kernel_environment, ptr [[DYN]])
2976 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
2977 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
2978 ; AMDGPU-DISABLED:       user_code.entry:
2979 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
2980 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
2981 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
2982 ; AMDGPU-DISABLED-NEXT:    ret void
2983 ; AMDGPU-DISABLED:       worker.exit:
2984 ; AMDGPU-DISABLED-NEXT:    ret void
2987 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
2988 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__6
2989 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
2990 ; AMDGPU-DISABLED-NEXT:  entry:
2991 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
2992 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
2993 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
2994 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__7, ptr @__omp_outlined__7_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
2995 ; AMDGPU-DISABLED-NEXT:    [[CALL:%.*]] = call i32 @unknown() #[[ATTR11]]
2996 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__8, ptr @__omp_outlined__8_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
2997 ; AMDGPU-DISABLED-NEXT:    ret void
3000 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3001 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__7
3002 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3003 ; AMDGPU-DISABLED-NEXT:  entry:
3004 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3005 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3006 ; AMDGPU-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3007 ; AMDGPU-DISABLED-NEXT:    ret void
3010 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3011 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__7_wrapper
3012 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3013 ; AMDGPU-DISABLED-NEXT:  entry:
3014 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3015 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3016 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3017 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3018 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3019 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__7(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3020 ; AMDGPU-DISABLED-NEXT:    ret void
3023 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3024 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__8
3025 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3026 ; AMDGPU-DISABLED-NEXT:  entry:
3027 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3028 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3029 ; AMDGPU-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3030 ; AMDGPU-DISABLED-NEXT:    ret void
3033 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3034 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__8_wrapper
3035 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3036 ; AMDGPU-DISABLED-NEXT:  entry:
3037 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3038 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3039 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3040 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3041 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3042 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__8(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3043 ; AMDGPU-DISABLED-NEXT:    ret void
3046 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3047 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66
3048 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3049 ; AMDGPU-DISABLED-NEXT:  entry:
3050 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3051 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3052 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66_kernel_environment, ptr [[DYN]])
3053 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3054 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3055 ; AMDGPU-DISABLED:       user_code.entry:
3056 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3057 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3058 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3059 ; AMDGPU-DISABLED-NEXT:    ret void
3060 ; AMDGPU-DISABLED:       worker.exit:
3061 ; AMDGPU-DISABLED-NEXT:    ret void
3064 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3065 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__9
3066 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3067 ; AMDGPU-DISABLED-NEXT:  entry:
3068 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3069 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3070 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
3071 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__10, ptr @__omp_outlined__10_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3072 ; AMDGPU-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
3073 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__11, ptr @__omp_outlined__11_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
3074 ; AMDGPU-DISABLED-NEXT:    ret void
3077 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3078 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__10
3079 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3080 ; AMDGPU-DISABLED-NEXT:  entry:
3081 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3082 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3083 ; AMDGPU-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3084 ; AMDGPU-DISABLED-NEXT:    ret void
3087 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3088 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__10_wrapper
3089 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3090 ; AMDGPU-DISABLED-NEXT:  entry:
3091 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3092 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3093 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3094 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3095 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3096 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__10(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3097 ; AMDGPU-DISABLED-NEXT:    ret void
3100 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3101 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__11
3102 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3103 ; AMDGPU-DISABLED-NEXT:  entry:
3104 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3105 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3106 ; AMDGPU-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3107 ; AMDGPU-DISABLED-NEXT:    ret void
3110 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3111 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__11_wrapper
3112 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3113 ; AMDGPU-DISABLED-NEXT:  entry:
3114 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3115 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3116 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3117 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3118 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3119 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__11(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3120 ; AMDGPU-DISABLED-NEXT:    ret void
3123 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3124 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_pure_l77
3125 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3126 ; AMDGPU-DISABLED-NEXT:  entry:
3127 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3128 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3129 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77_kernel_environment, ptr [[DYN]])
3130 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3131 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3132 ; AMDGPU-DISABLED:       user_code.entry:
3133 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3134 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__12(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3135 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3136 ; AMDGPU-DISABLED-NEXT:    ret void
3137 ; AMDGPU-DISABLED:       worker.exit:
3138 ; AMDGPU-DISABLED-NEXT:    ret void
3141 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3142 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__12
3143 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3144 ; AMDGPU-DISABLED-NEXT:  entry:
3145 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3146 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3147 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
3148 ; AMDGPU-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
3149 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__13, ptr @__omp_outlined__13_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3150 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__14, ptr @__omp_outlined__14_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
3151 ; AMDGPU-DISABLED-NEXT:    ret void
3154 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3155 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__13
3156 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3157 ; AMDGPU-DISABLED-NEXT:  entry:
3158 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3159 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3160 ; AMDGPU-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3161 ; AMDGPU-DISABLED-NEXT:    ret void
3164 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3165 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__13_wrapper
3166 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3167 ; AMDGPU-DISABLED-NEXT:  entry:
3168 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3169 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3170 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3171 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3172 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3173 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__13(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3174 ; AMDGPU-DISABLED-NEXT:    ret void
3177 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3178 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__14
3179 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3180 ; AMDGPU-DISABLED-NEXT:  entry:
3181 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3182 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3183 ; AMDGPU-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3184 ; AMDGPU-DISABLED-NEXT:    ret void
3187 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3188 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__14_wrapper
3189 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3190 ; AMDGPU-DISABLED-NEXT:  entry:
3191 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3192 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3193 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3194 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3195 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3196 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__14(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3197 ; AMDGPU-DISABLED-NEXT:    ret void
3200 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3201 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92
3202 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3203 ; AMDGPU-DISABLED-NEXT:  entry:
3204 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3205 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3206 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92_kernel_environment, ptr [[DYN]])
3207 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3208 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3209 ; AMDGPU-DISABLED:       user_code.entry:
3210 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3211 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__15(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3212 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3213 ; AMDGPU-DISABLED-NEXT:    ret void
3214 ; AMDGPU-DISABLED:       worker.exit:
3215 ; AMDGPU-DISABLED-NEXT:    ret void
3218 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3219 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__15
3220 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3221 ; AMDGPU-DISABLED-NEXT:  entry:
3222 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3223 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3224 ; AMDGPU-DISABLED-NEXT:    [[CALL:%.*]] = call i32 @omp_get_thread_num() #[[ATTR9]]
3225 ; AMDGPU-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[CALL]]) #[[ATTR9]]
3226 ; AMDGPU-DISABLED-NEXT:    ret void
3229 ; AMDGPU-DISABLED: Function Attrs: noinline nounwind
3230 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after.internalized
3231 ; AMDGPU-DISABLED-SAME: (i32 [[A:%.*]]) #[[ATTR6]] {
3232 ; AMDGPU-DISABLED-NEXT:  entry:
3233 ; AMDGPU-DISABLED-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
3234 ; AMDGPU-DISABLED-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
3235 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
3236 ; AMDGPU-DISABLED-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
3237 ; AMDGPU-DISABLED-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
3238 ; AMDGPU-DISABLED:       if.then:
3239 ; AMDGPU-DISABLED-NEXT:    br label [[RETURN:%.*]]
3240 ; AMDGPU-DISABLED:       if.end:
3241 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
3242 ; AMDGPU-DISABLED-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
3243 ; AMDGPU-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[SUB]]) #[[ATTR9]]
3244 ; AMDGPU-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after.internalized() #[[ATTR9]]
3245 ; AMDGPU-DISABLED-NEXT:    br label [[RETURN]]
3246 ; AMDGPU-DISABLED:       return:
3247 ; AMDGPU-DISABLED-NEXT:    ret void
3250 ; AMDGPU-DISABLED: Function Attrs: convergent noinline nounwind
3251 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after
3252 ; AMDGPU-DISABLED-SAME: (i32 [[A:%.*]]) #[[ATTR1]] {
3253 ; AMDGPU-DISABLED-NEXT:  entry:
3254 ; AMDGPU-DISABLED-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
3255 ; AMDGPU-DISABLED-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
3256 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
3257 ; AMDGPU-DISABLED-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
3258 ; AMDGPU-DISABLED-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
3259 ; AMDGPU-DISABLED:       if.then:
3260 ; AMDGPU-DISABLED-NEXT:    br label [[RETURN:%.*]]
3261 ; AMDGPU-DISABLED:       if.end:
3262 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
3263 ; AMDGPU-DISABLED-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
3264 ; AMDGPU-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after(i32 [[SUB]]) #[[ATTR11]]
3265 ; AMDGPU-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after() #[[ATTR11]]
3266 ; AMDGPU-DISABLED-NEXT:    br label [[RETURN]]
3267 ; AMDGPU-DISABLED:       return:
3268 ; AMDGPU-DISABLED-NEXT:    ret void
3271 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3272 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112
3273 ; AMDGPU-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3274 ; AMDGPU-DISABLED-NEXT:  entry:
3275 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3276 ; AMDGPU-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3277 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112_kernel_environment, ptr [[DYN]])
3278 ; AMDGPU-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3279 ; AMDGPU-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3280 ; AMDGPU-DISABLED:       user_code.entry:
3281 ; AMDGPU-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3282 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__16(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3283 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3284 ; AMDGPU-DISABLED-NEXT:    ret void
3285 ; AMDGPU-DISABLED:       worker.exit:
3286 ; AMDGPU-DISABLED-NEXT:    ret void
3289 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3290 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__16
3291 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3292 ; AMDGPU-DISABLED-NEXT:  entry:
3293 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3294 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3295 ; AMDGPU-DISABLED-NEXT:    call void @weak_callee_empty() #[[ATTR9]]
3296 ; AMDGPU-DISABLED-NEXT:    ret void
3299 ; AMDGPU-DISABLED: Function Attrs: convergent noinline nounwind
3300 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@weak_callee_empty
3301 ; AMDGPU-DISABLED-SAME: () #[[ATTR1]] {
3302 ; AMDGPU-DISABLED-NEXT:  entry:
3303 ; AMDGPU-DISABLED-NEXT:    ret void
3306 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3307 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__17
3308 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3309 ; AMDGPU-DISABLED-NEXT:  entry:
3310 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3311 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3312 ; AMDGPU-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3313 ; AMDGPU-DISABLED-NEXT:    ret void
3316 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3317 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__17_wrapper
3318 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3319 ; AMDGPU-DISABLED-NEXT:  entry:
3320 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3321 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3322 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3323 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3324 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3325 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__17(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3326 ; AMDGPU-DISABLED-NEXT:    ret void
3329 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3330 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__18
3331 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3332 ; AMDGPU-DISABLED-NEXT:  entry:
3333 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3334 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3335 ; AMDGPU-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3336 ; AMDGPU-DISABLED-NEXT:    ret void
3339 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3340 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__18_wrapper
3341 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3342 ; AMDGPU-DISABLED-NEXT:  entry:
3343 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3344 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3345 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3346 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3347 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3348 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__18(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3349 ; AMDGPU-DISABLED-NEXT:    ret void
3352 ; AMDGPU-DISABLED: Function Attrs: noinline nounwind
3353 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after.internalized
3354 ; AMDGPU-DISABLED-SAME: () #[[ATTR6]] {
3355 ; AMDGPU-DISABLED-NEXT:  entry:
3356 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3357 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
3358 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3359 ; AMDGPU-DISABLED-NEXT:    ret void
3362 ; AMDGPU-DISABLED: Function Attrs: convergent noinline nounwind
3363 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after
3364 ; AMDGPU-DISABLED-SAME: () #[[ATTR1]] {
3365 ; AMDGPU-DISABLED-NEXT:  entry:
3366 ; AMDGPU-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3367 ; AMDGPU-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
3368 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3369 ; AMDGPU-DISABLED-NEXT:    ret void
3372 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3373 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__19
3374 ; AMDGPU-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3375 ; AMDGPU-DISABLED-NEXT:  entry:
3376 ; AMDGPU-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3377 ; AMDGPU-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3378 ; AMDGPU-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3379 ; AMDGPU-DISABLED-NEXT:    ret void
3382 ; AMDGPU-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3383 ; AMDGPU-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__19_wrapper
3384 ; AMDGPU-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3385 ; AMDGPU-DISABLED-NEXT:  entry:
3386 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3387 ; AMDGPU-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3388 ; AMDGPU-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3389 ; AMDGPU-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3390 ; AMDGPU-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3391 ; AMDGPU-DISABLED-NEXT:    call void @__omp_outlined__19(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3392 ; AMDGPU-DISABLED-NEXT:    ret void
3395 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3396 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_needed_l14
3397 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] {
3398 ; NVPTX-DISABLED-NEXT:  entry:
3399 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3400 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3401 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14_kernel_environment, ptr [[DYN]])
3402 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3403 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3404 ; NVPTX-DISABLED:       user_code.entry:
3405 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3:[0-9]+]]
3406 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3407 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3408 ; NVPTX-DISABLED-NEXT:    ret void
3409 ; NVPTX-DISABLED:       worker.exit:
3410 ; NVPTX-DISABLED-NEXT:    ret void
3413 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__kmpc_target_init
3414 ; NVPTX-DISABLED-SAME: (ptr [[TMP0:%.*]], ptr [[TMP1:%.*]]) {
3415 ; NVPTX-DISABLED-NEXT:    ret i32 0
3418 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3419 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__
3420 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3421 ; NVPTX-DISABLED-NEXT:  entry:
3422 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3423 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3424 ; NVPTX-DISABLED-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9:[0-9]+]]
3425 ; NVPTX-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10:[0-9]+]]
3426 ; NVPTX-DISABLED-NEXT:    ret void
3429 ; NVPTX-DISABLED: Function Attrs: convergent noinline nounwind
3430 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@no_parallel_region_in_here.internalized
3431 ; NVPTX-DISABLED-SAME: () #[[ATTR1:[0-9]+]] {
3432 ; NVPTX-DISABLED-NEXT:  entry:
3433 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
3434 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
3435 ; NVPTX-DISABLED-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
3436 ; NVPTX-DISABLED-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
3437 ; NVPTX-DISABLED:       omp_if.then:
3438 ; NVPTX-DISABLED-NEXT:    store i32 0, ptr @G, align 4
3439 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]]) #[[ATTR3]]
3440 ; NVPTX-DISABLED-NEXT:    br label [[OMP_IF_END]]
3441 ; NVPTX-DISABLED:       omp_if.end:
3442 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]]) #[[ATTR3]]
3443 ; NVPTX-DISABLED-NEXT:    ret void
3446 ; NVPTX-DISABLED: Function Attrs: convergent noinline nounwind
3447 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@no_parallel_region_in_here
3448 ; NVPTX-DISABLED-SAME: () #[[ATTR1]] {
3449 ; NVPTX-DISABLED-NEXT:  entry:
3450 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
3451 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_single(ptr @[[GLOB2]], i32 [[TMP0]])
3452 ; NVPTX-DISABLED-NEXT:    [[TMP2:%.*]] = icmp ne i32 [[TMP1]], 0
3453 ; NVPTX-DISABLED-NEXT:    br i1 [[TMP2]], label [[OMP_IF_THEN:%.*]], label [[OMP_IF_END:%.*]]
3454 ; NVPTX-DISABLED:       omp_if.then:
3455 ; NVPTX-DISABLED-NEXT:    store i32 0, ptr @G, align 4
3456 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_end_single(ptr @[[GLOB2]], i32 [[TMP0]])
3457 ; NVPTX-DISABLED-NEXT:    br label [[OMP_IF_END]]
3458 ; NVPTX-DISABLED:       omp_if.end:
3459 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_barrier(ptr @[[GLOB3]], i32 [[TMP0]])
3460 ; NVPTX-DISABLED-NEXT:    ret void
3463 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3464 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_l22
3465 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3466 ; NVPTX-DISABLED-NEXT:  entry:
3467 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3468 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3469 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_l22_kernel_environment, ptr [[DYN]])
3470 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3471 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3472 ; NVPTX-DISABLED:       user_code.entry:
3473 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3474 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__1(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3475 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3476 ; NVPTX-DISABLED-NEXT:    ret void
3477 ; NVPTX-DISABLED:       worker.exit:
3478 ; NVPTX-DISABLED-NEXT:    ret void
3481 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3482 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__1
3483 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3484 ; NVPTX-DISABLED-NEXT:  entry:
3485 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3486 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3487 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
3488 ; NVPTX-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
3489 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__2, ptr @__omp_outlined__2_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3490 ; NVPTX-DISABLED-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
3491 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__3, ptr @__omp_outlined__3_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
3492 ; NVPTX-DISABLED-NEXT:    ret void
3495 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3496 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__2
3497 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3498 ; NVPTX-DISABLED-NEXT:  entry:
3499 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3500 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3501 ; NVPTX-DISABLED-NEXT:    call void @p0() #[[ATTR11:[0-9]+]]
3502 ; NVPTX-DISABLED-NEXT:    ret void
3505 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3506 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__2_wrapper
3507 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3508 ; NVPTX-DISABLED-NEXT:  entry:
3509 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3510 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3511 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3512 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3513 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3514 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__2(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3515 ; NVPTX-DISABLED-NEXT:    ret void
3518 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3519 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__3
3520 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3521 ; NVPTX-DISABLED-NEXT:  entry:
3522 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3523 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3524 ; NVPTX-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3525 ; NVPTX-DISABLED-NEXT:    ret void
3528 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3529 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__3_wrapper
3530 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3531 ; NVPTX-DISABLED-NEXT:  entry:
3532 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3533 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3534 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3535 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3536 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3537 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__3(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3538 ; NVPTX-DISABLED-NEXT:    ret void
3541 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3542 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39
3543 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3544 ; NVPTX-DISABLED-NEXT:  entry:
3545 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3546 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3547 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39_kernel_environment, ptr [[DYN]])
3548 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3549 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3550 ; NVPTX-DISABLED:       user_code.entry:
3551 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3552 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__4(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3553 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3554 ; NVPTX-DISABLED-NEXT:    ret void
3555 ; NVPTX-DISABLED:       worker.exit:
3556 ; NVPTX-DISABLED-NEXT:    ret void
3559 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3560 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__4
3561 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3562 ; NVPTX-DISABLED-NEXT:  entry:
3563 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3564 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3565 ; NVPTX-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
3566 ; NVPTX-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_before.internalized() #[[ATTR9]]
3567 ; NVPTX-DISABLED-NEXT:    call void @no_parallel_region_in_here.internalized() #[[ATTR9]]
3568 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__5, ptr @__omp_outlined__5_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3569 ; NVPTX-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_after.internalized() #[[ATTR9]]
3570 ; NVPTX-DISABLED-NEXT:    ret void
3573 ; NVPTX-DISABLED: Function Attrs: noinline nounwind
3574 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before.internalized
3575 ; NVPTX-DISABLED-SAME: () #[[ATTR6:[0-9]+]] {
3576 ; NVPTX-DISABLED-NEXT:  entry:
3577 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3578 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
3579 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3580 ; NVPTX-DISABLED-NEXT:    ret void
3583 ; NVPTX-DISABLED: Function Attrs: convergent noinline nounwind
3584 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_before
3585 ; NVPTX-DISABLED-SAME: () #[[ATTR1]] {
3586 ; NVPTX-DISABLED-NEXT:  entry:
3587 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3588 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
3589 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__17, ptr @__omp_outlined__17_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3590 ; NVPTX-DISABLED-NEXT:    ret void
3593 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3594 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__5
3595 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3596 ; NVPTX-DISABLED-NEXT:  entry:
3597 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3598 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3599 ; NVPTX-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3600 ; NVPTX-DISABLED-NEXT:    ret void
3603 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3604 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__5_wrapper
3605 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3606 ; NVPTX-DISABLED-NEXT:  entry:
3607 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3608 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3609 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3610 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3611 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3612 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__5(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3613 ; NVPTX-DISABLED-NEXT:    ret void
3616 ; NVPTX-DISABLED: Function Attrs: noinline nounwind
3617 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after.internalized
3618 ; NVPTX-DISABLED-SAME: () #[[ATTR6]] {
3619 ; NVPTX-DISABLED-NEXT:  entry:
3620 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3621 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
3622 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3623 ; NVPTX-DISABLED-NEXT:    ret void
3626 ; NVPTX-DISABLED: Function Attrs: convergent noinline nounwind
3627 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_after
3628 ; NVPTX-DISABLED-SAME: () #[[ATTR1]] {
3629 ; NVPTX-DISABLED-NEXT:  entry:
3630 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3631 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
3632 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__18, ptr @__omp_outlined__18_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3633 ; NVPTX-DISABLED-NEXT:    ret void
3636 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3637 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55
3638 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3639 ; NVPTX-DISABLED-NEXT:  entry:
3640 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3641 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3642 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55_kernel_environment, ptr [[DYN]])
3643 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3644 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3645 ; NVPTX-DISABLED:       user_code.entry:
3646 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3647 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__6(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3648 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3649 ; NVPTX-DISABLED-NEXT:    ret void
3650 ; NVPTX-DISABLED:       worker.exit:
3651 ; NVPTX-DISABLED-NEXT:    ret void
3654 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3655 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__6
3656 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3657 ; NVPTX-DISABLED-NEXT:  entry:
3658 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3659 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3660 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
3661 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__7, ptr @__omp_outlined__7_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3662 ; NVPTX-DISABLED-NEXT:    [[CALL:%.*]] = call i32 @unknown() #[[ATTR11]]
3663 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__8, ptr @__omp_outlined__8_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
3664 ; NVPTX-DISABLED-NEXT:    ret void
3667 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3668 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__7
3669 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3670 ; NVPTX-DISABLED-NEXT:  entry:
3671 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3672 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3673 ; NVPTX-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3674 ; NVPTX-DISABLED-NEXT:    ret void
3677 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3678 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__7_wrapper
3679 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3680 ; NVPTX-DISABLED-NEXT:  entry:
3681 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3682 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3683 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3684 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3685 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3686 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__7(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3687 ; NVPTX-DISABLED-NEXT:    ret void
3690 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3691 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__8
3692 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3693 ; NVPTX-DISABLED-NEXT:  entry:
3694 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3695 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3696 ; NVPTX-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3697 ; NVPTX-DISABLED-NEXT:    ret void
3700 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3701 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__8_wrapper
3702 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3703 ; NVPTX-DISABLED-NEXT:  entry:
3704 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3705 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3706 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3707 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3708 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3709 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__8(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3710 ; NVPTX-DISABLED-NEXT:    ret void
3713 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3714 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66
3715 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3716 ; NVPTX-DISABLED-NEXT:  entry:
3717 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3718 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3719 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66_kernel_environment, ptr [[DYN]])
3720 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3721 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3722 ; NVPTX-DISABLED:       user_code.entry:
3723 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3724 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__9(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3725 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3726 ; NVPTX-DISABLED-NEXT:    ret void
3727 ; NVPTX-DISABLED:       worker.exit:
3728 ; NVPTX-DISABLED-NEXT:    ret void
3731 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3732 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__9
3733 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3734 ; NVPTX-DISABLED-NEXT:  entry:
3735 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3736 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3737 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
3738 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__10, ptr @__omp_outlined__10_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3739 ; NVPTX-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
3740 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__11, ptr @__omp_outlined__11_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
3741 ; NVPTX-DISABLED-NEXT:    ret void
3744 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3745 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__10
3746 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3747 ; NVPTX-DISABLED-NEXT:  entry:
3748 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3749 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3750 ; NVPTX-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3751 ; NVPTX-DISABLED-NEXT:    ret void
3754 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3755 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__10_wrapper
3756 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3757 ; NVPTX-DISABLED-NEXT:  entry:
3758 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3759 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3760 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3761 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3762 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3763 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__10(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3764 ; NVPTX-DISABLED-NEXT:    ret void
3767 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3768 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__11
3769 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3770 ; NVPTX-DISABLED-NEXT:  entry:
3771 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3772 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3773 ; NVPTX-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3774 ; NVPTX-DISABLED-NEXT:    ret void
3777 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3778 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__11_wrapper
3779 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3780 ; NVPTX-DISABLED-NEXT:  entry:
3781 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3782 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3783 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3784 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3785 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3786 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__11(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3787 ; NVPTX-DISABLED-NEXT:    ret void
3790 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3791 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_pure_l77
3792 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3793 ; NVPTX-DISABLED-NEXT:  entry:
3794 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3795 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3796 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77_kernel_environment, ptr [[DYN]])
3797 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3798 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3799 ; NVPTX-DISABLED:       user_code.entry:
3800 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3801 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__12(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3802 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3803 ; NVPTX-DISABLED-NEXT:    ret void
3804 ; NVPTX-DISABLED:       worker.exit:
3805 ; NVPTX-DISABLED-NEXT:    ret void
3808 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3809 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__12
3810 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3811 ; NVPTX-DISABLED-NEXT:  entry:
3812 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3813 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
3814 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS1:%.*]] = alloca [0 x ptr], align 8
3815 ; NVPTX-DISABLED-NEXT:    call void @unknown_no_openmp() #[[ATTR10]]
3816 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__13, ptr @__omp_outlined__13_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
3817 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB1]], i32 undef, i32 1, i32 -1, i32 -1, ptr @__omp_outlined__14, ptr @__omp_outlined__14_wrapper, ptr [[CAPTURED_VARS_ADDRS1]], i64 0)
3818 ; NVPTX-DISABLED-NEXT:    ret void
3821 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3822 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__13
3823 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3824 ; NVPTX-DISABLED-NEXT:  entry:
3825 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3826 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3827 ; NVPTX-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3828 ; NVPTX-DISABLED-NEXT:    ret void
3831 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3832 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__13_wrapper
3833 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3834 ; NVPTX-DISABLED-NEXT:  entry:
3835 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3836 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3837 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3838 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3839 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3840 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__13(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3841 ; NVPTX-DISABLED-NEXT:    ret void
3844 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3845 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__14
3846 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3847 ; NVPTX-DISABLED-NEXT:  entry:
3848 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3849 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3850 ; NVPTX-DISABLED-NEXT:    call void @p1() #[[ATTR11]]
3851 ; NVPTX-DISABLED-NEXT:    ret void
3854 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3855 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__14_wrapper
3856 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3857 ; NVPTX-DISABLED-NEXT:  entry:
3858 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3859 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3860 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3861 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3862 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3863 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__14(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3864 ; NVPTX-DISABLED-NEXT:    ret void
3867 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3868 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92
3869 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3870 ; NVPTX-DISABLED-NEXT:  entry:
3871 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3872 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3873 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92_kernel_environment, ptr [[DYN]])
3874 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3875 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3876 ; NVPTX-DISABLED:       user_code.entry:
3877 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3878 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__15(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3879 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3880 ; NVPTX-DISABLED-NEXT:    ret void
3881 ; NVPTX-DISABLED:       worker.exit:
3882 ; NVPTX-DISABLED-NEXT:    ret void
3885 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3886 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__15
3887 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3888 ; NVPTX-DISABLED-NEXT:  entry:
3889 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3890 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3891 ; NVPTX-DISABLED-NEXT:    [[CALL:%.*]] = call i32 @omp_get_thread_num() #[[ATTR9]]
3892 ; NVPTX-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[CALL]]) #[[ATTR9]]
3893 ; NVPTX-DISABLED-NEXT:    ret void
3896 ; NVPTX-DISABLED: Function Attrs: noinline nounwind
3897 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after.internalized
3898 ; NVPTX-DISABLED-SAME: (i32 [[A:%.*]]) #[[ATTR6]] {
3899 ; NVPTX-DISABLED-NEXT:  entry:
3900 ; NVPTX-DISABLED-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
3901 ; NVPTX-DISABLED-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
3902 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
3903 ; NVPTX-DISABLED-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
3904 ; NVPTX-DISABLED-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
3905 ; NVPTX-DISABLED:       if.then:
3906 ; NVPTX-DISABLED-NEXT:    br label [[RETURN:%.*]]
3907 ; NVPTX-DISABLED:       if.end:
3908 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
3909 ; NVPTX-DISABLED-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
3910 ; NVPTX-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after.internalized(i32 [[SUB]]) #[[ATTR9]]
3911 ; NVPTX-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after.internalized() #[[ATTR9]]
3912 ; NVPTX-DISABLED-NEXT:    br label [[RETURN]]
3913 ; NVPTX-DISABLED:       return:
3914 ; NVPTX-DISABLED-NEXT:    ret void
3917 ; NVPTX-DISABLED: Function Attrs: convergent noinline nounwind
3918 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after
3919 ; NVPTX-DISABLED-SAME: (i32 [[A:%.*]]) #[[ATTR1]] {
3920 ; NVPTX-DISABLED-NEXT:  entry:
3921 ; NVPTX-DISABLED-NEXT:    [[A_ADDR:%.*]] = alloca i32, align 4
3922 ; NVPTX-DISABLED-NEXT:    store i32 [[A]], ptr [[A_ADDR]], align 4
3923 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = load i32, ptr [[A_ADDR]], align 4
3924 ; NVPTX-DISABLED-NEXT:    [[CMP:%.*]] = icmp eq i32 [[TMP0]], 0
3925 ; NVPTX-DISABLED-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_END:%.*]]
3926 ; NVPTX-DISABLED:       if.then:
3927 ; NVPTX-DISABLED-NEXT:    br label [[RETURN:%.*]]
3928 ; NVPTX-DISABLED:       if.end:
3929 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A_ADDR]], align 4
3930 ; NVPTX-DISABLED-NEXT:    [[SUB:%.*]] = sub nsw i32 [[TMP1]], 1
3931 ; NVPTX-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after(i32 [[SUB]]) #[[ATTR11]]
3932 ; NVPTX-DISABLED-NEXT:    call void @simple_state_machine_interprocedural_nested_recursive_after_after() #[[ATTR11]]
3933 ; NVPTX-DISABLED-NEXT:    br label [[RETURN]]
3934 ; NVPTX-DISABLED:       return:
3935 ; NVPTX-DISABLED-NEXT:    ret void
3938 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3939 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112
3940 ; NVPTX-DISABLED-SAME: (ptr [[DYN:%.*]]) #[[ATTR0]] {
3941 ; NVPTX-DISABLED-NEXT:  entry:
3942 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3943 ; NVPTX-DISABLED-NEXT:    [[DOTTHREADID_TEMP_:%.*]] = alloca i32, align 4
3944 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_target_init(ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112_kernel_environment, ptr [[DYN]])
3945 ; NVPTX-DISABLED-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
3946 ; NVPTX-DISABLED-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[WORKER_EXIT:%.*]]
3947 ; NVPTX-DISABLED:       user_code.entry:
3948 ; NVPTX-DISABLED-NEXT:    [[TMP1:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB1]]) #[[ATTR3]]
3949 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__16(ptr [[DOTTHREADID_TEMP_]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3950 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_target_deinit()
3951 ; NVPTX-DISABLED-NEXT:    ret void
3952 ; NVPTX-DISABLED:       worker.exit:
3953 ; NVPTX-DISABLED-NEXT:    ret void
3956 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3957 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__16
3958 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3959 ; NVPTX-DISABLED-NEXT:  entry:
3960 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3961 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3962 ; NVPTX-DISABLED-NEXT:    call void @weak_callee_empty() #[[ATTR9]]
3963 ; NVPTX-DISABLED-NEXT:    ret void
3966 ; NVPTX-DISABLED: Function Attrs: convergent noinline nounwind
3967 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@weak_callee_empty
3968 ; NVPTX-DISABLED-SAME: () #[[ATTR1]] {
3969 ; NVPTX-DISABLED-NEXT:  entry:
3970 ; NVPTX-DISABLED-NEXT:    ret void
3973 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3974 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__17
3975 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3976 ; NVPTX-DISABLED-NEXT:  entry:
3977 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
3978 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
3979 ; NVPTX-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
3980 ; NVPTX-DISABLED-NEXT:    ret void
3983 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3984 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__17_wrapper
3985 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
3986 ; NVPTX-DISABLED-NEXT:  entry:
3987 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
3988 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
3989 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
3990 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
3991 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
3992 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__17(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
3993 ; NVPTX-DISABLED-NEXT:    ret void
3996 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
3997 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__18
3998 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
3999 ; NVPTX-DISABLED-NEXT:  entry:
4000 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
4001 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
4002 ; NVPTX-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
4003 ; NVPTX-DISABLED-NEXT:    ret void
4006 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
4007 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__18_wrapper
4008 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
4009 ; NVPTX-DISABLED-NEXT:  entry:
4010 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
4011 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
4012 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
4013 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
4014 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
4015 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__18(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
4016 ; NVPTX-DISABLED-NEXT:    ret void
4019 ; NVPTX-DISABLED: Function Attrs: noinline nounwind
4020 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after.internalized
4021 ; NVPTX-DISABLED-SAME: () #[[ATTR6]] {
4022 ; NVPTX-DISABLED-NEXT:  entry:
4023 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
4024 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]]) #[[ATTR3]]
4025 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
4026 ; NVPTX-DISABLED-NEXT:    ret void
4029 ; NVPTX-DISABLED: Function Attrs: convergent noinline nounwind
4030 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@simple_state_machine_interprocedural_nested_recursive_after_after
4031 ; NVPTX-DISABLED-SAME: () #[[ATTR1]] {
4032 ; NVPTX-DISABLED-NEXT:  entry:
4033 ; NVPTX-DISABLED-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [0 x ptr], align 8
4034 ; NVPTX-DISABLED-NEXT:    [[TMP0:%.*]] = call i32 @__kmpc_global_thread_num(ptr @[[GLOB2]])
4035 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_parallel_51(ptr @[[GLOB2]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr @__omp_outlined__19, ptr @__omp_outlined__19_wrapper, ptr [[CAPTURED_VARS_ADDRS]], i64 0)
4036 ; NVPTX-DISABLED-NEXT:    ret void
4039 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
4040 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__19
4041 ; NVPTX-DISABLED-SAME: (ptr noalias [[DOTGLOBAL_TID_:%.*]], ptr noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR0]] {
4042 ; NVPTX-DISABLED-NEXT:  entry:
4043 ; NVPTX-DISABLED-NEXT:    [[DOTGLOBAL_TID__ADDR:%.*]] = alloca ptr, align 8
4044 ; NVPTX-DISABLED-NEXT:    [[DOTBOUND_TID__ADDR:%.*]] = alloca ptr, align 8
4045 ; NVPTX-DISABLED-NEXT:    call void @p0() #[[ATTR11]]
4046 ; NVPTX-DISABLED-NEXT:    ret void
4049 ; NVPTX-DISABLED: Function Attrs: convergent noinline norecurse nounwind
4050 ; NVPTX-DISABLED-LABEL: define {{[^@]+}}@__omp_outlined__19_wrapper
4051 ; NVPTX-DISABLED-SAME: (i16 zeroext [[TMP0:%.*]], i32 [[TMP1:%.*]]) #[[ATTR0]] {
4052 ; NVPTX-DISABLED-NEXT:  entry:
4053 ; NVPTX-DISABLED-NEXT:    [[DOTADDR:%.*]] = alloca i16, align 2
4054 ; NVPTX-DISABLED-NEXT:    [[DOTADDR1:%.*]] = alloca i32, align 4
4055 ; NVPTX-DISABLED-NEXT:    [[DOTZERO_ADDR:%.*]] = alloca i32, align 4
4056 ; NVPTX-DISABLED-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
4057 ; NVPTX-DISABLED-NEXT:    call void @__kmpc_get_shared_variables(ptr [[GLOBAL_ARGS]])
4058 ; NVPTX-DISABLED-NEXT:    call void @__omp_outlined__19(ptr [[DOTADDR1]], ptr [[DOTZERO_ADDR]]) #[[ATTR3]]
4059 ; NVPTX-DISABLED-NEXT:    ret void
4062 ; AMDGPU: attributes #[[ATTR0]] = { convergent noinline norecurse nounwind "frame-pointer"="none" "kernel" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4063 ; AMDGPU: attributes #[[ATTR1]] = { convergent noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4064 ; AMDGPU: attributes #[[ATTR2:[0-9]+]] = { convergent "frame-pointer"="none" "llvm.assume"="omp_no_openmp" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4065 ; AMDGPU: attributes #[[ATTR3]] = { nounwind }
4066 ; AMDGPU: attributes #[[ATTR4:[0-9]+]] = { convergent "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4067 ; AMDGPU: attributes #[[ATTR5:[0-9]+]] = { alwaysinline }
4068 ; AMDGPU: attributes #[[ATTR6]] = { noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4069 ; AMDGPU: attributes #[[ATTR7:[0-9]+]] = { convergent nounwind willreturn memory(read) "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4070 ; AMDGPU: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4071 ; AMDGPU: attributes #[[ATTR9]] = { convergent nounwind }
4072 ; AMDGPU: attributes #[[ATTR10]] = { convergent "llvm.assume"="omp_no_openmp" }
4073 ; AMDGPU: attributes #[[ATTR11]] = { convergent }
4075 ; NVPTX: attributes #[[ATTR0]] = { convergent noinline norecurse nounwind "frame-pointer"="none" "kernel" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4076 ; NVPTX: attributes #[[ATTR1]] = { convergent noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4077 ; NVPTX: attributes #[[ATTR2:[0-9]+]] = { convergent "frame-pointer"="none" "llvm.assume"="omp_no_openmp" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4078 ; NVPTX: attributes #[[ATTR3]] = { nounwind }
4079 ; NVPTX: attributes #[[ATTR4:[0-9]+]] = { convergent "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4080 ; NVPTX: attributes #[[ATTR5:[0-9]+]] = { alwaysinline }
4081 ; NVPTX: attributes #[[ATTR6]] = { noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4082 ; NVPTX: attributes #[[ATTR7:[0-9]+]] = { convergent nounwind willreturn memory(read) "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4083 ; NVPTX: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4084 ; NVPTX: attributes #[[ATTR9]] = { convergent nounwind }
4085 ; NVPTX: attributes #[[ATTR10]] = { convergent "llvm.assume"="omp_no_openmp" }
4086 ; NVPTX: attributes #[[ATTR11]] = { convergent }
4088 ; AMDGPU-DISABLED: attributes #[[ATTR0]] = { convergent noinline norecurse nounwind "frame-pointer"="none" "kernel" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4089 ; AMDGPU-DISABLED: attributes #[[ATTR1]] = { convergent noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4090 ; AMDGPU-DISABLED: attributes #[[ATTR2:[0-9]+]] = { convergent "frame-pointer"="none" "llvm.assume"="omp_no_openmp" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4091 ; AMDGPU-DISABLED: attributes #[[ATTR3]] = { nounwind }
4092 ; AMDGPU-DISABLED: attributes #[[ATTR4:[0-9]+]] = { convergent "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4093 ; AMDGPU-DISABLED: attributes #[[ATTR5:[0-9]+]] = { alwaysinline }
4094 ; AMDGPU-DISABLED: attributes #[[ATTR6]] = { noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4095 ; AMDGPU-DISABLED: attributes #[[ATTR7:[0-9]+]] = { convergent nounwind willreturn memory(read) "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4096 ; AMDGPU-DISABLED: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4097 ; AMDGPU-DISABLED: attributes #[[ATTR9]] = { convergent nounwind }
4098 ; AMDGPU-DISABLED: attributes #[[ATTR10]] = { convergent "llvm.assume"="omp_no_openmp" }
4099 ; AMDGPU-DISABLED: attributes #[[ATTR11]] = { convergent }
4101 ; NVPTX-DISABLED: attributes #[[ATTR0]] = { convergent noinline norecurse nounwind "frame-pointer"="none" "kernel" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4102 ; NVPTX-DISABLED: attributes #[[ATTR1]] = { convergent noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4103 ; NVPTX-DISABLED: attributes #[[ATTR2:[0-9]+]] = { convergent "frame-pointer"="none" "llvm.assume"="omp_no_openmp" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4104 ; NVPTX-DISABLED: attributes #[[ATTR3]] = { nounwind }
4105 ; NVPTX-DISABLED: attributes #[[ATTR4:[0-9]+]] = { convergent "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4106 ; NVPTX-DISABLED: attributes #[[ATTR5:[0-9]+]] = { alwaysinline }
4107 ; NVPTX-DISABLED: attributes #[[ATTR6]] = { noinline nounwind "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4108 ; NVPTX-DISABLED: attributes #[[ATTR7:[0-9]+]] = { convergent nounwind willreturn memory(read) "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4109 ; NVPTX-DISABLED: attributes #[[ATTR8:[0-9]+]] = { convergent nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+ptx32,+sm_20" }
4110 ; NVPTX-DISABLED: attributes #[[ATTR9]] = { convergent nounwind }
4111 ; NVPTX-DISABLED: attributes #[[ATTR10]] = { convergent "llvm.assume"="omp_no_openmp" }
4112 ; NVPTX-DISABLED: attributes #[[ATTR11]] = { convergent }
4114 ; AMDGPU: [[META0:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural", i32 39, i32 2}
4115 ; AMDGPU: [[META1:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_no_openmp_attr", i32 66, i32 4}
4116 ; AMDGPU: [[META2:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_needed", i32 14, i32 0}
4117 ; AMDGPU: [[META3:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_with_fallback", i32 55, i32 3}
4118 ; AMDGPU: [[META4:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_pure", i32 77, i32 5}
4119 ; AMDGPU: [[META5:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural_nested_recursive", i32 92, i32 6}
4120 ; AMDGPU: [[META6:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_weak_callee", i32 112, i32 7}
4121 ; AMDGPU: [[META7:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine", i32 22, i32 1}
4122 ; AMDGPU: [[META8:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14, !"kernel", i32 1}
4123 ; AMDGPU: [[META9:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_l22, !"kernel", i32 1}
4124 ; AMDGPU: [[META10:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39, !"kernel", i32 1}
4125 ; AMDGPU: [[META11:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55, !"kernel", i32 1}
4126 ; AMDGPU: [[META12:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66, !"kernel", i32 1}
4127 ; AMDGPU: [[META13:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77, !"kernel", i32 1}
4128 ; AMDGPU: [[META14:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92, !"kernel", i32 1}
4129 ; AMDGPU: [[META15:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112, !"kernel", i32 1}
4130 ; AMDGPU: [[META16:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
4131 ; AMDGPU: [[META17:![0-9]+]] = !{i32 7, !"openmp", i32 50}
4132 ; AMDGPU: [[META18:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
4134 ; NVPTX: [[META0:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural", i32 39, i32 2}
4135 ; NVPTX: [[META1:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_no_openmp_attr", i32 66, i32 4}
4136 ; NVPTX: [[META2:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_needed", i32 14, i32 0}
4137 ; NVPTX: [[META3:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_with_fallback", i32 55, i32 3}
4138 ; NVPTX: [[META4:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_pure", i32 77, i32 5}
4139 ; NVPTX: [[META5:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural_nested_recursive", i32 92, i32 6}
4140 ; NVPTX: [[META6:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_weak_callee", i32 112, i32 7}
4141 ; NVPTX: [[META7:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine", i32 22, i32 1}
4142 ; NVPTX: [[META8:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14, !"kernel", i32 1}
4143 ; NVPTX: [[META9:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_l22, !"kernel", i32 1}
4144 ; NVPTX: [[META10:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39, !"kernel", i32 1}
4145 ; NVPTX: [[META11:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55, !"kernel", i32 1}
4146 ; NVPTX: [[META12:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66, !"kernel", i32 1}
4147 ; NVPTX: [[META13:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77, !"kernel", i32 1}
4148 ; NVPTX: [[META14:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92, !"kernel", i32 1}
4149 ; NVPTX: [[META15:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112, !"kernel", i32 1}
4150 ; NVPTX: [[META16:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
4151 ; NVPTX: [[META17:![0-9]+]] = !{i32 7, !"openmp", i32 50}
4152 ; NVPTX: [[META18:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
4154 ; AMDGPU-DISABLED: [[META0:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural", i32 39, i32 2}
4155 ; AMDGPU-DISABLED: [[META1:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_no_openmp_attr", i32 66, i32 4}
4156 ; AMDGPU-DISABLED: [[META2:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_needed", i32 14, i32 0}
4157 ; AMDGPU-DISABLED: [[META3:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_with_fallback", i32 55, i32 3}
4158 ; AMDGPU-DISABLED: [[META4:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_pure", i32 77, i32 5}
4159 ; AMDGPU-DISABLED: [[META5:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural_nested_recursive", i32 92, i32 6}
4160 ; AMDGPU-DISABLED: [[META6:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_weak_callee", i32 112, i32 7}
4161 ; AMDGPU-DISABLED: [[META7:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine", i32 22, i32 1}
4162 ; AMDGPU-DISABLED: [[META8:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14, !"kernel", i32 1}
4163 ; AMDGPU-DISABLED: [[META9:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_l22, !"kernel", i32 1}
4164 ; AMDGPU-DISABLED: [[META10:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39, !"kernel", i32 1}
4165 ; AMDGPU-DISABLED: [[META11:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55, !"kernel", i32 1}
4166 ; AMDGPU-DISABLED: [[META12:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66, !"kernel", i32 1}
4167 ; AMDGPU-DISABLED: [[META13:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77, !"kernel", i32 1}
4168 ; AMDGPU-DISABLED: [[META14:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92, !"kernel", i32 1}
4169 ; AMDGPU-DISABLED: [[META15:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112, !"kernel", i32 1}
4170 ; AMDGPU-DISABLED: [[META16:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
4171 ; AMDGPU-DISABLED: [[META17:![0-9]+]] = !{i32 7, !"openmp", i32 50}
4172 ; AMDGPU-DISABLED: [[META18:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
4174 ; NVPTX-DISABLED: [[META0:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural", i32 39, i32 2}
4175 ; NVPTX-DISABLED: [[META1:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_no_openmp_attr", i32 66, i32 4}
4176 ; NVPTX-DISABLED: [[META2:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_needed", i32 14, i32 0}
4177 ; NVPTX-DISABLED: [[META3:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_with_fallback", i32 55, i32 3}
4178 ; NVPTX-DISABLED: [[META4:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_pure", i32 77, i32 5}
4179 ; NVPTX-DISABLED: [[META5:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine_interprocedural_nested_recursive", i32 92, i32 6}
4180 ; NVPTX-DISABLED: [[META6:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"no_state_machine_weak_callee", i32 112, i32 7}
4181 ; NVPTX-DISABLED: [[META7:![0-9]+]] = !{i32 0, i32 20, i32 171331627, !"simple_state_machine", i32 22, i32 1}
4182 ; NVPTX-DISABLED: [[META8:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_needed_l14, !"kernel", i32 1}
4183 ; NVPTX-DISABLED: [[META9:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_l22, !"kernel", i32 1}
4184 ; NVPTX-DISABLED: [[META10:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_l39, !"kernel", i32 1}
4185 ; NVPTX-DISABLED: [[META11:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_with_fallback_l55, !"kernel", i32 1}
4186 ; NVPTX-DISABLED: [[META12:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_no_openmp_attr_l66, !"kernel", i32 1}
4187 ; NVPTX-DISABLED: [[META13:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_pure_l77, !"kernel", i32 1}
4188 ; NVPTX-DISABLED: [[META14:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_simple_state_machine_interprocedural_nested_recursive_l92, !"kernel", i32 1}
4189 ; NVPTX-DISABLED: [[META15:![0-9]+]] = !{ptr @__omp_offloading_14_a36502b_no_state_machine_weak_callee_l112, !"kernel", i32 1}
4190 ; NVPTX-DISABLED: [[META16:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
4191 ; NVPTX-DISABLED: [[META17:![0-9]+]] = !{i32 7, !"openmp", i32 50}
4192 ; NVPTX-DISABLED: [[META18:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}