xref: /llvm-project/llvm/test/Transforms/OpenMP/nested_parallelism.ll (revision 07ed8187acc31ac3f4779da452864a29d48799ac)
113b909efSRafael A Herrera Guaitero; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
213b909efSRafael A Herrera Guaitero; RUN: opt -S -passes=openmp-opt < %s | FileCheck %s
313b909efSRafael A Herrera Guaitero
413b909efSRafael A Herrera Guaitero; void foo1(int i) {
513b909efSRafael A Herrera Guaitero;   #pragma omp parallel
613b909efSRafael A Herrera Guaitero;     i++;
713b909efSRafael A Herrera Guaitero; }
813b909efSRafael A Herrera Guaitero
913b909efSRafael A Herrera Guaitero; void foo(int i) {
1013b909efSRafael A Herrera Guaitero;   #pragma omp parallel
1113b909efSRafael A Herrera Guaitero;     foo1(i);
1213b909efSRafael A Herrera Guaitero; }
1313b909efSRafael A Herrera Guaitero
1413b909efSRafael A Herrera Guaitero; int main() {
1513b909efSRafael A Herrera Guaitero;   int i=0;
1613b909efSRafael A Herrera Guaitero;   #pragma omp target
1713b909efSRafael A Herrera Guaitero;     foo(i);
1813b909efSRafael A Herrera Guaitero
1913b909efSRafael A Herrera Guaitero;   #pragma omp target
2013b909efSRafael A Herrera Guaitero;     foo1(i);
2113b909efSRafael A Herrera Guaitero; }
2213b909efSRafael A Herrera Guaitero
2313b909efSRafael A Herrera Guaiterotarget triple = "nvptx64"
2413b909efSRafael A Herrera Guaitero
2513b909efSRafael A Herrera Guaitero%struct.ident_t = type { i32, i32, i32, i32, ptr }
2610068cd6SShilei Tian%struct.KernelEnvironmentTy = type { %struct.ConfigurationEnvironmentTy, ptr, ptr }
273de645efSJohannes Doerfert%struct.ConfigurationEnvironmentTy = type { i8, i8, i8, i32, i32, i32, i32, i32, i32 }
2813b909efSRafael A Herrera Guaitero
2913b909efSRafael A Herrera Guaitero@0 = private unnamed_addr constant [23 x i8] c";unknown;unknown;0;0;;\00", align 1
3013b909efSRafael A Herrera Guaitero@1 = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 22, ptr @0 }, align 8
3113b909efSRafael A Herrera Guaitero@i_shared = internal addrspace(3) global [4 x i8] undef, align 16
3213b909efSRafael A Herrera Guaitero@i.i_shared = internal addrspace(3) global [4 x i8] undef, align 16
3310068cd6SShilei Tian
343de645efSJohannes Doerfert@__omp_offloading_10302_bd7e0_main_l13_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 0, i8 0, i8 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
353de645efSJohannes Doerfert@__omp_offloading_10302_bd7e0_main_l16_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr @1, ptr null }
3610068cd6SShilei Tian
3713b909efSRafael A Herrera Guaitero
3813b909efSRafael A Herrera Guaitero;.
3913b909efSRafael A Herrera Guaitero; CHECK: @[[GLOB0:[0-9]+]] = private unnamed_addr constant [23 x i8] c"
40cd3a4c31SJohannes Doerfert; CHECK: @[[GLOB1:[0-9]+]] = private unnamed_addr constant %struct.ident_t { i32 0, i32 2, i32 0, i32 22, ptr @[[GLOB0]] }, align 8
41cd3a4c31SJohannes Doerfert; CHECK: @i_shared = internal addrspace(3) global [4 x i8] undef, align 16
42cd3a4c31SJohannes Doerfert; CHECK: @i.i_shared = internal addrspace(3) global [4 x i8] undef, align 16
43cd3a4c31SJohannes Doerfert; CHECK: @__omp_offloading_10302_bd7e0_main_l13_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 0, i8 0, i8 2, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
44cd3a4c31SJohannes Doerfert; CHECK: @__omp_offloading_10302_bd7e0_main_l16_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 1, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr @[[GLOB1]], ptr null }
4513b909efSRafael A Herrera Guaitero;.
46*07ed8187SAlex MacLeandefine weak_odr protected ptx_kernel void @__omp_offloading_10302_bd7e0_main_l13(ptr %dyn, i64 noundef %i) local_unnamed_addr "kernel" {
4713b909efSRafael A Herrera Guaitero; CHECK-LABEL: @__omp_offloading_10302_bd7e0_main_l13(
4813b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
4913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[CAPTURED_VARS_ADDRS_I:%.*]] = alloca [1 x ptr], align 8
50b8cbc5c0SJohannes Doerfert; CHECK-NEXT:    [[TMP0:%.*]] = tail call i32 @__kmpc_target_init(ptr @__omp_offloading_10302_bd7e0_main_l13_kernel_environment, ptr [[DYN:%.*]])
5113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
5213b909efSRafael A Herrera Guaitero; CHECK-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[COMMON_RET:%.*]]
5313b909efSRafael A Herrera Guaitero; CHECK:       common.ret:
5413b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
5513b909efSRafael A Herrera Guaitero; CHECK:       user_code.entry:
5613b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I]])
578f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @__kmpc_global_thread_num(ptr nonnull @[[GLOB1]]) #[[ATTR2:[0-9]+]]
588f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[TMP2:%.*]] = tail call i32 @__kmpc_get_hardware_thread_id_in_block() #[[ATTR2]]
5913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP3:%.*]] = icmp eq i32 [[TMP2]], 0
6013b909efSRafael A Herrera Guaitero; CHECK-NEXT:    br i1 [[TMP3]], label [[REGION_GUARDED_I:%.*]], label [[_Z3FOOI_INTERNALIZED_EXIT:%.*]]
6113b909efSRafael A Herrera Guaitero; CHECK:       region.guarded.i:
6213b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[I_ADDR_SROA_0_0_EXTRACT_TRUNC:%.*]] = trunc i64 [[I:%.*]] to i32
63907c7eb3SShilei Tian; CHECK-NEXT:    store i32 [[I_ADDR_SROA_0_0_EXTRACT_TRUNC]], ptr addrspace(3) @i_shared, align 16
6413b909efSRafael A Herrera Guaitero; CHECK-NEXT:    br label [[_Z3FOOI_INTERNALIZED_EXIT]]
6513b909efSRafael A Herrera Guaitero; CHECK:       _Z3fooi.internalized.exit:
668f4fadd1SJohannes Doerfert; CHECK-NEXT:    tail call void @__kmpc_barrier_simple_spmd(ptr nonnull @[[GLOB1]], i32 [[TMP2]]) #[[ATTR2]]
67499f691bSShilei Tian; CHECK-NEXT:    store ptr addrspacecast (ptr addrspace(3) @i_shared to ptr), ptr [[CAPTURED_VARS_ADDRS_I]], align 8
6813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_parallel_51(ptr nonnull @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__, ptr nonnull @__omp_outlined___wrapper, ptr nonnull [[CAPTURED_VARS_ADDRS_I]], i64 1)
6913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I]])
7010068cd6SShilei Tian; CHECK-NEXT:    call void @__kmpc_target_deinit()
7113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    br label [[COMMON_RET]]
7213b909efSRafael A Herrera Guaitero;
7313b909efSRafael A Herrera Guaiteroentry:
7413b909efSRafael A Herrera Guaitero  %captured_vars_addrs.i = alloca [1 x ptr], align 8
75b8cbc5c0SJohannes Doerfert  %0 = tail call i32 @__kmpc_target_init(ptr @__omp_offloading_10302_bd7e0_main_l13_kernel_environment, ptr %dyn) #6
7613b909efSRafael A Herrera Guaitero  %exec_user_code = icmp eq i32 %0, -1
7713b909efSRafael A Herrera Guaitero  br i1 %exec_user_code, label %user_code.entry, label %common.ret
7813b909efSRafael A Herrera Guaitero
7913b909efSRafael A Herrera Guaiterocommon.ret:                                       ; preds = %entry, %_Z3fooi.internalized.exit
8013b909efSRafael A Herrera Guaitero  ret void
8113b909efSRafael A Herrera Guaitero
8213b909efSRafael A Herrera Guaiterouser_code.entry:                                  ; preds = %entry
8313b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %captured_vars_addrs.i)
8413b909efSRafael A Herrera Guaitero  %1 = tail call i32 @__kmpc_global_thread_num(ptr nonnull @1) #6
8513b909efSRafael A Herrera Guaitero  %2 = tail call i32 @__kmpc_get_hardware_thread_id_in_block() #6
8613b909efSRafael A Herrera Guaitero  %3 = icmp eq i32 %2, 0
8713b909efSRafael A Herrera Guaitero  br i1 %3, label %region.guarded.i, label %_Z3fooi.internalized.exit
8813b909efSRafael A Herrera Guaitero
8913b909efSRafael A Herrera Guaiteroregion.guarded.i:                                 ; preds = %user_code.entry
9013b909efSRafael A Herrera Guaitero  %i.addr.sroa.0.0.extract.trunc = trunc i64 %i to i32
9113b909efSRafael A Herrera Guaitero  store i32 %i.addr.sroa.0.0.extract.trunc, ptr addrspacecast (ptr addrspace(3) @i_shared to ptr), align 16
9213b909efSRafael A Herrera Guaitero  br label %_Z3fooi.internalized.exit
9313b909efSRafael A Herrera Guaitero
9413b909efSRafael A Herrera Guaitero_Z3fooi.internalized.exit:                        ; preds = %user_code.entry, %region.guarded.i
9513b909efSRafael A Herrera Guaitero  tail call void @__kmpc_barrier_simple_spmd(ptr nonnull @1, i32 %2)
9613b909efSRafael A Herrera Guaitero  store ptr addrspacecast (ptr addrspace(3) @i_shared to ptr), ptr %captured_vars_addrs.i, align 8
9713b909efSRafael A Herrera Guaitero  call void @__kmpc_parallel_51(ptr nonnull @1, i32 %1, i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__, ptr nonnull @__omp_outlined___wrapper, ptr nonnull %captured_vars_addrs.i, i64 1) #6
9813b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %captured_vars_addrs.i)
9910068cd6SShilei Tian  call void @__kmpc_target_deinit() #6
10013b909efSRafael A Herrera Guaitero  br label %common.ret
10113b909efSRafael A Herrera Guaitero}
10213b909efSRafael A Herrera Guaitero
103b8cbc5c0SJohannes Doerfertdeclare i32 @__kmpc_target_init(ptr, ptr) local_unnamed_addr
10413b909efSRafael A Herrera Guaitero
10513b909efSRafael A Herrera Guaiterodefine hidden void @_Z3fooi(i32 noundef %i1) local_unnamed_addr #1 {
10613b909efSRafael A Herrera Guaitero; CHECK-LABEL: @_Z3fooi(
10713b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
10813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
1098f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[TMP0:%.*]] = tail call i32 @__kmpc_global_thread_num(ptr nonnull @[[GLOB1]]) #[[ATTR2]]
1108f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[I:%.*]] = tail call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4) #[[ATTR2]]
11113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store i32 [[I1:%.*]], ptr [[I]], align 16
11213b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store ptr [[I]], ptr [[CAPTURED_VARS_ADDRS]], align 8
11313b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_parallel_51(ptr nonnull @[[GLOB1]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__, ptr nonnull @__omp_outlined___wrapper, ptr nonnull [[CAPTURED_VARS_ADDRS]], i64 1)
1148f4fadd1SJohannes Doerfert; CHECK-NEXT:    call void @__kmpc_free_shared(ptr [[I]], i64 4) #[[ATTR2]]
11513b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
11613b909efSRafael A Herrera Guaitero;
11713b909efSRafael A Herrera Guaiteroentry:
11813b909efSRafael A Herrera Guaitero  %captured_vars_addrs = alloca [1 x ptr], align 8
11913b909efSRafael A Herrera Guaitero  %0 = tail call i32 @__kmpc_global_thread_num(ptr nonnull @1) #6
12013b909efSRafael A Herrera Guaitero  %i = tail call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4)
12113b909efSRafael A Herrera Guaitero  store i32 %i1, ptr %i, align 16
12213b909efSRafael A Herrera Guaitero  store ptr %i, ptr %captured_vars_addrs, align 8
12313b909efSRafael A Herrera Guaitero  call void @__kmpc_parallel_51(ptr nonnull @1, i32 %0, i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__, ptr nonnull @__omp_outlined___wrapper, ptr nonnull %captured_vars_addrs, i64 1) #6
12413b909efSRafael A Herrera Guaitero  call void @__kmpc_free_shared(ptr %i, i64 4)
12513b909efSRafael A Herrera Guaitero  ret void
12613b909efSRafael A Herrera Guaitero}
12713b909efSRafael A Herrera Guaitero
12813b909efSRafael A Herrera Guaiterodeclare void @__kmpc_target_deinit(ptr, i8) local_unnamed_addr
12913b909efSRafael A Herrera Guaitero
130*07ed8187SAlex MacLeandefine weak_odr protected ptx_kernel void @__omp_offloading_10302_bd7e0_main_l16(ptr %dyn, i64 noundef %i) local_unnamed_addr "kernel" {
13113b909efSRafael A Herrera Guaitero; CHECK-LABEL: @__omp_offloading_10302_bd7e0_main_l16(
13213b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
13313b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[CAPTURED_VARS_ADDRS_I:%.*]] = alloca [1 x ptr], align 8
134b8cbc5c0SJohannes Doerfert; CHECK-NEXT:    [[TMP0:%.*]] = tail call i32 @__kmpc_target_init(ptr @__omp_offloading_10302_bd7e0_main_l16_kernel_environment, ptr [[DYN:%.*]])
13513b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[EXEC_USER_CODE:%.*]] = icmp eq i32 [[TMP0]], -1
13613b909efSRafael A Herrera Guaitero; CHECK-NEXT:    br i1 [[EXEC_USER_CODE]], label [[USER_CODE_ENTRY:%.*]], label [[COMMON_RET:%.*]]
13713b909efSRafael A Herrera Guaitero; CHECK:       common.ret:
13813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
13913b909efSRafael A Herrera Guaitero; CHECK:       user_code.entry:
14013b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[I_ADDR_SROA_0_0_EXTRACT_TRUNC:%.*]] = trunc i64 [[I:%.*]] to i32
14113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I]])
1428f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @__kmpc_global_thread_num(ptr nonnull @[[GLOB1]]) #[[ATTR2]]
143907c7eb3SShilei Tian; CHECK-NEXT:    store i32 [[I_ADDR_SROA_0_0_EXTRACT_TRUNC]], ptr addrspace(3) @i.i_shared, align 16
144499f691bSShilei Tian; CHECK-NEXT:    store ptr addrspacecast (ptr addrspace(3) @i.i_shared to ptr), ptr [[CAPTURED_VARS_ADDRS_I]], align 8
14513b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_parallel_51(ptr nonnull @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull [[CAPTURED_VARS_ADDRS_I]], i64 1)
14613b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I]])
14710068cd6SShilei Tian; CHECK-NEXT:    call void @__kmpc_target_deinit()
14813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    br label [[COMMON_RET]]
14913b909efSRafael A Herrera Guaitero;
15013b909efSRafael A Herrera Guaiteroentry:
15113b909efSRafael A Herrera Guaitero  %captured_vars_addrs.i = alloca [1 x ptr], align 8
152b8cbc5c0SJohannes Doerfert  %0 = tail call i32 @__kmpc_target_init(ptr @__omp_offloading_10302_bd7e0_main_l16_kernel_environment, ptr %dyn) #6
15313b909efSRafael A Herrera Guaitero  %exec_user_code = icmp eq i32 %0, -1
15413b909efSRafael A Herrera Guaitero  br i1 %exec_user_code, label %user_code.entry, label %common.ret
15513b909efSRafael A Herrera Guaitero
15613b909efSRafael A Herrera Guaiterocommon.ret:                                       ; preds = %entry, %user_code.entry
15713b909efSRafael A Herrera Guaitero  ret void
15813b909efSRafael A Herrera Guaitero
15913b909efSRafael A Herrera Guaiterouser_code.entry:                                  ; preds = %entry
16013b909efSRafael A Herrera Guaitero  %i.addr.sroa.0.0.extract.trunc = trunc i64 %i to i32
16113b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %captured_vars_addrs.i)
16213b909efSRafael A Herrera Guaitero  %1 = tail call i32 @__kmpc_global_thread_num(ptr nonnull @1) #6
16313b909efSRafael A Herrera Guaitero  store i32 %i.addr.sroa.0.0.extract.trunc, ptr addrspacecast (ptr addrspace(3) @i.i_shared to ptr), align 16
16413b909efSRafael A Herrera Guaitero  store ptr addrspacecast (ptr addrspace(3) @i.i_shared to ptr), ptr %captured_vars_addrs.i, align 8
16513b909efSRafael A Herrera Guaitero  call void @__kmpc_parallel_51(ptr nonnull @1, i32 %1, i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull %captured_vars_addrs.i, i64 1) #6
16613b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %captured_vars_addrs.i)
16710068cd6SShilei Tian  call void @__kmpc_target_deinit() #6
16813b909efSRafael A Herrera Guaitero  br label %common.ret
16913b909efSRafael A Herrera Guaitero}
17013b909efSRafael A Herrera Guaitero
17113b909efSRafael A Herrera Guaiterodefine hidden void @_Z4foo1i(i32 noundef %i1) local_unnamed_addr #1 {
17213b909efSRafael A Herrera Guaitero; CHECK-LABEL: @_Z4foo1i(
17313b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
17413b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[CAPTURED_VARS_ADDRS:%.*]] = alloca [1 x ptr], align 8
1758f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[TMP0:%.*]] = tail call i32 @__kmpc_global_thread_num(ptr nonnull @[[GLOB1]]) #[[ATTR2]]
1768f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[I:%.*]] = tail call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4) #[[ATTR2]]
17713b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store i32 [[I1:%.*]], ptr [[I]], align 16
17813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store ptr [[I]], ptr [[CAPTURED_VARS_ADDRS]], align 8
17913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_parallel_51(ptr nonnull @[[GLOB1]], i32 [[TMP0]], i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull [[CAPTURED_VARS_ADDRS]], i64 1)
1808f4fadd1SJohannes Doerfert; CHECK-NEXT:    call void @__kmpc_free_shared(ptr [[I]], i64 4) #[[ATTR2]]
18113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
18213b909efSRafael A Herrera Guaitero;
18313b909efSRafael A Herrera Guaiteroentry:
18413b909efSRafael A Herrera Guaitero  %captured_vars_addrs = alloca [1 x ptr], align 8
18513b909efSRafael A Herrera Guaitero  %0 = tail call i32 @__kmpc_global_thread_num(ptr nonnull @1) #6
18613b909efSRafael A Herrera Guaitero  %i = tail call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4)
18713b909efSRafael A Herrera Guaitero  store i32 %i1, ptr %i, align 16
18813b909efSRafael A Herrera Guaitero  store ptr %i, ptr %captured_vars_addrs, align 8
18913b909efSRafael A Herrera Guaitero  call void @__kmpc_parallel_51(ptr nonnull @1, i32 %0, i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull %captured_vars_addrs, i64 1) #6
19013b909efSRafael A Herrera Guaitero  call void @__kmpc_free_shared(ptr %i, i64 4)
19113b909efSRafael A Herrera Guaitero  ret void
19213b909efSRafael A Herrera Guaitero}
19313b909efSRafael A Herrera Guaitero
19413b909efSRafael A Herrera Guaiterodeclare ptr @__kmpc_alloc_shared(i64) local_unnamed_addr #3
19513b909efSRafael A Herrera Guaitero
19613b909efSRafael A Herrera Guaiterodefine internal void @__omp_outlined__(ptr noalias nocapture readnone %.global_tid., ptr noalias nocapture readnone %.bound_tid., ptr nocapture noundef nonnull readonly align 4 dereferenceable(4) %i) #4 {
19713b909efSRafael A Herrera Guaitero; CHECK-LABEL: @__omp_outlined__(
19813b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
19913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[CAPTURED_VARS_ADDRS_I:%.*]] = alloca [1 x ptr], align 8
20013b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[I:%.*]], align 4
20113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I]])
2028f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @__kmpc_global_thread_num(ptr nonnull @[[GLOB1]]) #[[ATTR2]]
2038f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[I_I:%.*]] = tail call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4) #[[ATTR2]]
20413b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store i32 [[TMP0]], ptr [[I_I]], align 16
20513b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store ptr [[I_I]], ptr [[CAPTURED_VARS_ADDRS_I]], align 8
20613b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_parallel_51(ptr nonnull @[[GLOB1]], i32 [[TMP1]], i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull [[CAPTURED_VARS_ADDRS_I]], i64 1)
2078f4fadd1SJohannes Doerfert; CHECK-NEXT:    call void @__kmpc_free_shared(ptr [[I_I]], i64 4) #[[ATTR2]]
20813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I]])
20913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
21013b909efSRafael A Herrera Guaitero;
21113b909efSRafael A Herrera Guaiteroentry:
21213b909efSRafael A Herrera Guaitero  %captured_vars_addrs.i = alloca [1 x ptr], align 8
21313b909efSRafael A Herrera Guaitero  %0 = load i32, ptr %i, align 4
21413b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %captured_vars_addrs.i)
21513b909efSRafael A Herrera Guaitero  %1 = tail call i32 @__kmpc_global_thread_num(ptr nonnull @1) #6
21613b909efSRafael A Herrera Guaitero  %i.i = tail call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4) #6
21713b909efSRafael A Herrera Guaitero  store i32 %0, ptr %i.i, align 16
21813b909efSRafael A Herrera Guaitero  store ptr %i.i, ptr %captured_vars_addrs.i, align 8
21913b909efSRafael A Herrera Guaitero  call void @__kmpc_parallel_51(ptr nonnull @1, i32 %1, i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull %captured_vars_addrs.i, i64 1) #6
22013b909efSRafael A Herrera Guaitero  call void @__kmpc_free_shared(ptr %i.i, i64 4) #6
22113b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %captured_vars_addrs.i)
22213b909efSRafael A Herrera Guaitero  ret void
22313b909efSRafael A Herrera Guaitero}
22413b909efSRafael A Herrera Guaitero
22513b909efSRafael A Herrera Guaiterodefine internal void @__omp_outlined___wrapper(i16 zeroext %0, i32 %1) #5 {
22613b909efSRafael A Herrera Guaitero; CHECK-LABEL: @__omp_outlined___wrapper(
22713b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
22813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[CAPTURED_VARS_ADDRS_I_I:%.*]] = alloca [1 x ptr], align 8
22913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
23013b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_get_shared_variables(ptr nonnull [[GLOBAL_ARGS]])
23113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[GLOBAL_ARGS]], align 8
23213b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
23313b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 4
23413b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.start.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I_I]])
2358f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[TMP5:%.*]] = call i32 @__kmpc_global_thread_num(ptr nonnull @[[GLOB1]]) #[[ATTR2]]
2368f4fadd1SJohannes Doerfert; CHECK-NEXT:    [[I_I_I:%.*]] = call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4) #[[ATTR2]]
23713b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store i32 [[TMP4]], ptr [[I_I_I]], align 16
23813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store ptr [[I_I_I]], ptr [[CAPTURED_VARS_ADDRS_I_I]], align 8
23913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_parallel_51(ptr nonnull @[[GLOB1]], i32 [[TMP5]], i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull [[CAPTURED_VARS_ADDRS_I_I]], i64 1)
2408f4fadd1SJohannes Doerfert; CHECK-NEXT:    call void @__kmpc_free_shared(ptr [[I_I_I]], i64 4) #[[ATTR2]]
24113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @llvm.lifetime.end.p0(i64 8, ptr nonnull [[CAPTURED_VARS_ADDRS_I_I]])
24213b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
24313b909efSRafael A Herrera Guaitero;
24413b909efSRafael A Herrera Guaiteroentry:
24513b909efSRafael A Herrera Guaitero  %captured_vars_addrs.i.i = alloca [1 x ptr], align 8
24613b909efSRafael A Herrera Guaitero  %global_args = alloca ptr, align 8
24713b909efSRafael A Herrera Guaitero  call void @__kmpc_get_shared_variables(ptr nonnull %global_args) #6
24813b909efSRafael A Herrera Guaitero  %2 = load ptr, ptr %global_args, align 8
24913b909efSRafael A Herrera Guaitero  %3 = load ptr, ptr %2, align 8
25013b909efSRafael A Herrera Guaitero  %4 = load i32, ptr %3, align 4
25113b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %captured_vars_addrs.i.i)
25213b909efSRafael A Herrera Guaitero  %5 = call i32 @__kmpc_global_thread_num(ptr nonnull @1) #6
25313b909efSRafael A Herrera Guaitero  %i.i.i = call align 16 dereferenceable_or_null(4) ptr @__kmpc_alloc_shared(i64 4) #6
25413b909efSRafael A Herrera Guaitero  store i32 %4, ptr %i.i.i, align 16
25513b909efSRafael A Herrera Guaitero  store ptr %i.i.i, ptr %captured_vars_addrs.i.i, align 8
25613b909efSRafael A Herrera Guaitero  call void @__kmpc_parallel_51(ptr nonnull @1, i32 %5, i32 1, i32 -1, i32 -1, ptr nonnull @__omp_outlined__1, ptr nonnull @__omp_outlined__1_wrapper, ptr nonnull %captured_vars_addrs.i.i, i64 1) #6
25713b909efSRafael A Herrera Guaitero  call void @__kmpc_free_shared(ptr %i.i.i, i64 4) #6
25813b909efSRafael A Herrera Guaitero  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %captured_vars_addrs.i.i)
25913b909efSRafael A Herrera Guaitero  ret void
26013b909efSRafael A Herrera Guaitero}
26113b909efSRafael A Herrera Guaitero
26213b909efSRafael A Herrera Guaiterodeclare void @__kmpc_get_shared_variables(ptr) local_unnamed_addr
26313b909efSRafael A Herrera Guaitero
26413b909efSRafael A Herrera Guaiterodeclare i32 @__kmpc_global_thread_num(ptr) local_unnamed_addr #6
26513b909efSRafael A Herrera Guaitero
26613b909efSRafael A Herrera Guaiterodeclare void @__kmpc_parallel_51(ptr, i32, i32, i32, i32, ptr, ptr, ptr, i64) local_unnamed_addr #7
26713b909efSRafael A Herrera Guaitero
26813b909efSRafael A Herrera Guaiterodeclare void @__kmpc_free_shared(ptr allocptr nocapture, i64) local_unnamed_addr #8
26913b909efSRafael A Herrera Guaitero
27013b909efSRafael A Herrera Guaiterodefine internal void @__omp_outlined__1(ptr noalias nocapture readnone %.global_tid., ptr noalias nocapture readnone %.bound_tid., ptr nocapture noundef nonnull align 4 dereferenceable(4) %i) #9 {
27113b909efSRafael A Herrera Guaitero; CHECK-LABEL: @__omp_outlined__1(
27213b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
27313b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP0:%.*]] = load i32, ptr [[I:%.*]], align 4
27413b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[INC:%.*]] = add nsw i32 [[TMP0]], 1
27513b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store i32 [[INC]], ptr [[I]], align 4
27613b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
27713b909efSRafael A Herrera Guaitero;
27813b909efSRafael A Herrera Guaiteroentry:
27913b909efSRafael A Herrera Guaitero  %0 = load i32, ptr %i, align 4
28013b909efSRafael A Herrera Guaitero  %inc = add nsw i32 %0, 1
28113b909efSRafael A Herrera Guaitero  store i32 %inc, ptr %i, align 4
28213b909efSRafael A Herrera Guaitero  ret void
28313b909efSRafael A Herrera Guaitero}
28413b909efSRafael A Herrera Guaitero
28513b909efSRafael A Herrera Guaiterodefine internal void @__omp_outlined__1_wrapper(i16 zeroext %0, i32 %1) #5 {
28613b909efSRafael A Herrera Guaitero; CHECK-LABEL: @__omp_outlined__1_wrapper(
28713b909efSRafael A Herrera Guaitero; CHECK-NEXT:  entry:
28813b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[GLOBAL_ARGS:%.*]] = alloca ptr, align 8
28913b909efSRafael A Herrera Guaitero; CHECK-NEXT:    call void @__kmpc_get_shared_variables(ptr nonnull [[GLOBAL_ARGS]])
29013b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP2:%.*]] = load ptr, ptr [[GLOBAL_ARGS]], align 8
29113b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP3:%.*]] = load ptr, ptr [[TMP2]], align 8
29213b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[TMP4:%.*]] = load i32, ptr [[TMP3]], align 4
29313b909efSRafael A Herrera Guaitero; CHECK-NEXT:    [[INC_I:%.*]] = add nsw i32 [[TMP4]], 1
29413b909efSRafael A Herrera Guaitero; CHECK-NEXT:    store i32 [[INC_I]], ptr [[TMP3]], align 4
29513b909efSRafael A Herrera Guaitero; CHECK-NEXT:    ret void
29613b909efSRafael A Herrera Guaitero;
29713b909efSRafael A Herrera Guaiteroentry:
29813b909efSRafael A Herrera Guaitero  %global_args = alloca ptr, align 8
29913b909efSRafael A Herrera Guaitero  call void @__kmpc_get_shared_variables(ptr nonnull %global_args) #6
30013b909efSRafael A Herrera Guaitero  %2 = load ptr, ptr %global_args, align 8
30113b909efSRafael A Herrera Guaitero  %3 = load ptr, ptr %2, align 8
30213b909efSRafael A Herrera Guaitero  %4 = load i32, ptr %3, align 4
30313b909efSRafael A Herrera Guaitero  %inc.i = add nsw i32 %4, 1
30413b909efSRafael A Herrera Guaitero  store i32 %inc.i, ptr %3, align 4
30513b909efSRafael A Herrera Guaitero  ret void
30613b909efSRafael A Herrera Guaitero}
30713b909efSRafael A Herrera Guaitero
30813b909efSRafael A Herrera Guaiterodeclare i32 @__kmpc_get_hardware_thread_id_in_block() local_unnamed_addr
30913b909efSRafael A Herrera Guaitero
31013b909efSRafael A Herrera Guaiterodeclare void @__kmpc_barrier_simple_spmd(ptr, i32) local_unnamed_addr #10
31113b909efSRafael A Herrera Guaitero
31213b909efSRafael A Herrera Guaiterodeclare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #11
31313b909efSRafael A Herrera Guaitero
31413b909efSRafael A Herrera Guaiterodeclare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #11
31513b909efSRafael A Herrera Guaitero
31613b909efSRafael A Herrera Guaitero
31713b909efSRafael A Herrera Guaitero!omp_offload.info = !{!0, !1}
31813b909efSRafael A Herrera Guaitero!llvm.module.flags = !{!4, !5}
31913b909efSRafael A Herrera Guaitero
32013b909efSRafael A Herrera Guaitero!0 = !{i32 0, i32 66306, i32 776160, !"main", i32 13, i32 0, i32 0}
32113b909efSRafael A Herrera Guaitero!1 = !{i32 0, i32 66306, i32 776160, !"main", i32 16, i32 0, i32 1}
32213b909efSRafael A Herrera Guaitero
32313b909efSRafael A Herrera Guaitero!4 = !{i32 7, !"openmp", i32 50}
32413b909efSRafael A Herrera Guaitero!5 = !{i32 7, !"openmp-device", i32 50}
32513b909efSRafael A Herrera Guaitero;.
3268f4fadd1SJohannes Doerfert; CHECK: attributes #[[ATTR0:[0-9]+]] = { "kernel" }
3278f4fadd1SJohannes Doerfert; CHECK: attributes #[[ATTR1:[0-9]+]] = { nosync nounwind allocsize(0) }
3288f4fadd1SJohannes Doerfert; CHECK: attributes #[[ATTR2]] = { nounwind }
3298f4fadd1SJohannes Doerfert; CHECK: attributes #[[ATTR3:[0-9]+]] = { alwaysinline }
3308f4fadd1SJohannes Doerfert; CHECK: attributes #[[ATTR4:[0-9]+]] = { nosync nounwind }
3318f4fadd1SJohannes Doerfert; CHECK: attributes #[[ATTR5:[0-9]+]] = { convergent nounwind }
3328f4fadd1SJohannes Doerfert; CHECK: attributes #[[ATTR6:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
33313b909efSRafael A Herrera Guaitero;.
33413b909efSRafael A Herrera Guaitero; CHECK: [[META0:![0-9]+]] = !{i32 0, i32 66306, i32 776160, !"main", i32 13, i32 0, i32 0}
33513b909efSRafael A Herrera Guaitero; CHECK: [[META1:![0-9]+]] = !{i32 0, i32 66306, i32 776160, !"main", i32 16, i32 0, i32 1}
336*07ed8187SAlex MacLean; CHECK: [[META2:![0-9]+]] = !{i32 7, !"openmp", i32 50}
337*07ed8187SAlex MacLean; CHECK: [[META3:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
33813b909efSRafael A Herrera Guaitero;.
339