Changeset View
Changeset View
Standalone View
Standalone View
clang/test/OpenMP/target_parallel_for_codegen.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 643 Lines • ▼ Show 20 Lines | |||||
// CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK1-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK1-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK1-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK1-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK1-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK1-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK1-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | // CHECK1-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | ||||
// CHECK1-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | // CHECK1-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | ||||
// CHECK1-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | // CHECK1-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK1-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK1-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK1-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK1-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK1-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK1-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK1-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 185 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK1-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK1-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | // CHECK1-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | ||||
// CHECK1-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | // CHECK1-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | ||||
// CHECK1-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | // CHECK1-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | ||||
// CHECK1-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | // CHECK1-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | ||||
// CHECK1-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | // CHECK1-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | ||||
// CHECK1-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | // CHECK1-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | ||||
// CHECK1-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | // CHECK1-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | ||||
// CHECK1-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK1-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK1-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK1-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK1-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK1-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK1-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK1-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK1-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK1-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK1: omp_offload.failed.i: | // CHECK1: omp_offload.failed.i: | ||||
// CHECK1-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK1-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK1-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | // CHECK1-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | ||||
// CHECK1-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | // CHECK1-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | ||||
// CHECK1-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | // CHECK1-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | ||||
// CHECK1-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK1-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 29 Lines | |||||
// CHECK1-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK1-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK1-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK1-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK1-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK1-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK1-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK1-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK1-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK1-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK1-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK1-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK1-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK1-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK1-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK1-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK1-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK1-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK1-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 454 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK1-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK1-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK1-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK1-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK1-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK1-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK1-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK1-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 106 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK1-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK1-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK1-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK1-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK1-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK1-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 33 Lines | |||||
// CHECK1-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK1-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK1-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK1-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK1-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK1-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK1-NEXT: entry: | // CHECK1-NEXT: entry: | ||||
// CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK1-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK1-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK1-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 403 Lines • ▼ Show 20 Lines | |||||
// CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK2-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK2-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK2-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK2-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK2-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK2-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK2-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | // CHECK2-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | ||||
// CHECK2-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | // CHECK2-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | ||||
// CHECK2-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | // CHECK2-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK2-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK2-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK2-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK2-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK2-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK2-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK2-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 185 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK2-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK2-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | // CHECK2-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | ||||
// CHECK2-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | // CHECK2-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | ||||
// CHECK2-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | // CHECK2-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | ||||
// CHECK2-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | // CHECK2-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | ||||
// CHECK2-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | // CHECK2-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | ||||
// CHECK2-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | // CHECK2-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | ||||
// CHECK2-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | // CHECK2-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | ||||
// CHECK2-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK2-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK2-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK2-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK2-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK2-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK2-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK2-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK2-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK2-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK2: omp_offload.failed.i: | // CHECK2: omp_offload.failed.i: | ||||
// CHECK2-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK2-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK2-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | // CHECK2-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | ||||
// CHECK2-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | // CHECK2-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | ||||
// CHECK2-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | // CHECK2-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | ||||
// CHECK2-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK2-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 29 Lines | |||||
// CHECK2-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK2-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK2-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK2-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK2-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK2-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK2-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK2-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK2-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK2-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK2-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK2-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK2-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK2-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK2-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK2-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK2-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK2-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK2-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 454 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK2-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK2-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK2-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK2-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK2-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK2-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK2-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK2-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 106 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK2-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK2-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK2-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK2-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK2-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK2-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 33 Lines | |||||
// CHECK2-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK2-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK2-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK2-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK2-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK2-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK2-NEXT: entry: | // CHECK2-NEXT: entry: | ||||
// CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK2-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK2-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK2-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 393 Lines • ▼ Show 20 Lines | |||||
// CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK3-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK3-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK3-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK3-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK3-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i64* nonnull align 4 dereferenceable(8) [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | // CHECK3-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK3-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK3-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK3-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK3-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK3-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 183 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK3-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK3-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | // CHECK3-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | ||||
// CHECK3-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | // CHECK3-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | ||||
// CHECK3-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | // CHECK3-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | ||||
// CHECK3-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | // CHECK3-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | ||||
// CHECK3-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | // CHECK3-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | ||||
// CHECK3-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | // CHECK3-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | ||||
// CHECK3-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | // CHECK3-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | ||||
// CHECK3-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK3-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK3-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK3-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK3-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK3-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK3-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK3-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK3-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK3-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK3: omp_offload.failed.i: | // CHECK3: omp_offload.failed.i: | ||||
// CHECK3-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK3-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK3-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | // CHECK3-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | ||||
// CHECK3-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | // CHECK3-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | ||||
// CHECK3-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | // CHECK3-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | ||||
// CHECK3-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK3-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 25 Lines | |||||
// CHECK3-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK3-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK3-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK3-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK3-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK3-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK3-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK3-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK3-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK3-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK3-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK3-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK3-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK3-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK3-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK3-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK3-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK3-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 447 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK3-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK3-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK3-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK3-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK3-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK3-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK3-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK3-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK3-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK3-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK3-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK3-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK3-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK3-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 30 Lines | |||||
// CHECK3-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK3-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK3-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK3-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK3-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK3-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK3-NEXT: entry: | // CHECK3-NEXT: entry: | ||||
// CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK3-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK3-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK3-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK3-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK3-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK3-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 392 Lines • ▼ Show 20 Lines | |||||
// CHECK4-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK4-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK4-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK4-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK4-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK4-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i64* nonnull align 4 dereferenceable(8) [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | // CHECK4-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK4-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK4-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK4-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK4-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK4-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 183 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK4-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK4-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | // CHECK4-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | ||||
// CHECK4-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | // CHECK4-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | ||||
// CHECK4-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | // CHECK4-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | ||||
// CHECK4-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | // CHECK4-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | ||||
// CHECK4-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | // CHECK4-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | ||||
// CHECK4-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | // CHECK4-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | ||||
// CHECK4-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | // CHECK4-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | ||||
// CHECK4-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK4-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK4-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK4-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK4-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK4-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK4-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK4-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK4-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK4-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK4: omp_offload.failed.i: | // CHECK4: omp_offload.failed.i: | ||||
// CHECK4-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK4-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK4-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | // CHECK4-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | ||||
// CHECK4-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | // CHECK4-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | ||||
// CHECK4-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | // CHECK4-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | ||||
// CHECK4-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK4-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 25 Lines | |||||
// CHECK4-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK4-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK4-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK4-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK4-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK4-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK4-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK4-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK4-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK4-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK4-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK4-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK4-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK4-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK4-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK4-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK4-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK4-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 447 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK4-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK4-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK4-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK4-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK4-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK4-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK4-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK4-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK4-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK4-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK4-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK4-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK4-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK4-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 30 Lines | |||||
// CHECK4-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK4-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK4-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK4-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK4-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK4-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK4-NEXT: entry: | // CHECK4-NEXT: entry: | ||||
// CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK4-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK4-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK4-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK4-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK4-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK4-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | |||||
// CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK9-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK9-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK9-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK9-NEXT: ret void | // CHECK9-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK9-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK9-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | |||||
// CHECK9-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK9-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK9-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK9-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK9-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK9-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK9-NEXT: ret void | // CHECK9-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[A5:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[A5:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK9-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK9-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | // CHECK9-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | ||||
// CHECK9-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK9-NEXT: store i64 [[AA]], i64* [[AA_ADDR]], align 8 | ||||
// CHECK9-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK9-NEXT: store i64 [[LIN]], i64* [[LIN_ADDR]], align 8 | ||||
// CHECK9-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK9-NEXT: store i64 [[A]], i64* [[A_ADDR]], align 8 | ||||
// CHECK9-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK9-NEXT: [[CONV:%.*]] = bitcast i64* [[AA_ADDR]] to i16* | ||||
// CHECK9-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK9-NEXT: [[CONV1:%.*]] = bitcast i64* [[LIN_ADDR]] to i32* | ||||
// CHECK9-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK9-NEXT: [[CONV2:%.*]] = bitcast i64* [[A_ADDR]] to i32* | ||||
// CHECK9-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK9-NEXT: [[TMP0:%.*]] = load i32, i32* [[CONV1]], align 8 | ||||
// CHECK9-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK9-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK9-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | // CHECK9-NEXT: [[TMP1:%.*]] = load i32, i32* [[CONV2]], align 8 | ||||
// CHECK9-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | // CHECK9-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START3]], align 4 | ||||
// CHECK9-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK9-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK9-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK9-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK9-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK9-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK9-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK9-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK9-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK9-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK9-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK9-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK9-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK9-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK9-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK9-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK9-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK9-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK9-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK9-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK9-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | |||||
// CHECK9-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK9-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK9-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK9-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK9-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK9-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK9-NEXT: ret void | // CHECK9-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK9-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK9-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK9-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK9-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK9-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK9-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK9-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK9-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK9-NEXT: ret void | // CHECK9-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK9-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK9-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK9-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK9-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK9-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 162 Lines • ▼ Show 20 Lines | |||||
// CHECK9-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK9-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK9-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK9-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK9-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK9-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK9-NEXT: ret void | // CHECK9-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK9-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 34 Lines | |||||
// CHECK9-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK9-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK9-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK9-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK9-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK9-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK9-NEXT: ret void | // CHECK9-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK9-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK9-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK9-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK9-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK9-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK9-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK9-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK9-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK9-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK9-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK9-NEXT: ret void | // CHECK9-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK9-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK9-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK9-NEXT: entry: | // CHECK9-NEXT: entry: | ||||
// CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK9-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK9-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK9-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK9-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK10-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK10-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK10-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK10-NEXT: ret void | // CHECK10-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK10-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK10-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | |||||
// CHECK10-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK10-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK10-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK10-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK10-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK10-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK10-NEXT: ret void | // CHECK10-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[A5:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[A5:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK10-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK10-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | // CHECK10-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | ||||
// CHECK10-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK10-NEXT: store i64 [[AA]], i64* [[AA_ADDR]], align 8 | ||||
// CHECK10-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK10-NEXT: store i64 [[LIN]], i64* [[LIN_ADDR]], align 8 | ||||
// CHECK10-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK10-NEXT: store i64 [[A]], i64* [[A_ADDR]], align 8 | ||||
// CHECK10-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK10-NEXT: [[CONV:%.*]] = bitcast i64* [[AA_ADDR]] to i16* | ||||
// CHECK10-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK10-NEXT: [[CONV1:%.*]] = bitcast i64* [[LIN_ADDR]] to i32* | ||||
// CHECK10-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK10-NEXT: [[CONV2:%.*]] = bitcast i64* [[A_ADDR]] to i32* | ||||
// CHECK10-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK10-NEXT: [[TMP0:%.*]] = load i32, i32* [[CONV1]], align 8 | ||||
// CHECK10-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK10-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK10-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | // CHECK10-NEXT: [[TMP1:%.*]] = load i32, i32* [[CONV2]], align 8 | ||||
// CHECK10-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | // CHECK10-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START3]], align 4 | ||||
// CHECK10-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK10-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK10-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK10-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK10-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK10-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK10-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK10-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK10-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK10-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK10-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK10-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK10-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK10-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK10-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK10-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK10-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK10-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK10-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK10-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK10-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | |||||
// CHECK10-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK10-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK10-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK10-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK10-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK10-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK10-NEXT: ret void | // CHECK10-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK10-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK10-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK10-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK10-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK10-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK10-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK10-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK10-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK10-NEXT: ret void | // CHECK10-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK10-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK10-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK10-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK10-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK10-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 162 Lines • ▼ Show 20 Lines | |||||
// CHECK10-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK10-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK10-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK10-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK10-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK10-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK10-NEXT: ret void | // CHECK10-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK10-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 34 Lines | |||||
// CHECK10-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK10-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK10-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK10-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK10-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK10-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK10-NEXT: ret void | // CHECK10-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK10-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK10-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK10-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK10-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK10-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK10-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK10-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK10-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK10-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK10-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK10-NEXT: ret void | // CHECK10-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK10-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK10-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK10-NEXT: entry: | // CHECK10-NEXT: entry: | ||||
// CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK10-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK10-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK10-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK10-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK11-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK11-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK11-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK11-NEXT: ret void | // CHECK11-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK11-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK11-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | |||||
// CHECK11-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK11-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK11-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK11-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK11-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK11-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK11-NEXT: ret void | // CHECK11-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK11-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
// CHECK11-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK11-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK11-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK11-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK11-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK11-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK11-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK11-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK11-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK11-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK11-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[A3:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[A3:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK11-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK11-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | // CHECK11-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | ||||
// CHECK11-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK11-NEXT: store i32 [[AA]], i32* [[AA_ADDR]], align 4 | ||||
// CHECK11-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK11-NEXT: store i32 [[LIN]], i32* [[LIN_ADDR]], align 4 | ||||
// CHECK11-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK11-NEXT: store i32 [[A]], i32* [[A_ADDR]], align 4 | ||||
// CHECK11-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK11-NEXT: [[CONV:%.*]] = bitcast i32* [[AA_ADDR]] to i16* | ||||
// CHECK11-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK11-NEXT: [[TMP0:%.*]] = load i32, i32* [[LIN_ADDR]], align 4 | ||||
// CHECK11-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK11-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK11-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK11-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK11-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK11-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START1]], align 4 | ||||
// CHECK11-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | |||||
// CHECK11-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | |||||
// CHECK11-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK11-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK11-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK11-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK11-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK11-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK11-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK11-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK11-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK11-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK11-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK11-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK11-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK11-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK11-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK11-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK11-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK11-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK11-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK11-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK11-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
// CHECK11-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK11-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK11-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK11-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK11-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK11-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK11-NEXT: ret void | // CHECK11-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK11-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK11-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK11-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK11-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK11-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK11-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK11-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK11-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK11-NEXT: ret void | // CHECK11-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK11-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK11-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK11-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK11-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK11-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 158 Lines • ▼ Show 20 Lines | |||||
// CHECK11-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK11-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK11-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK11-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK11-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK11-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK11-NEXT: ret void | // CHECK11-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK11-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 31 Lines | |||||
// CHECK11-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK11-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK11-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK11-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK11-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK11-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK11-NEXT: ret void | // CHECK11-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK11-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK11-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK11-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | |||||
// CHECK11-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK11-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK11-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK11-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK11-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK11-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK11-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK11-NEXT: ret void | // CHECK11-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK11-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK11-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK11-NEXT: entry: | // CHECK11-NEXT: entry: | ||||
// CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK11-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK11-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK11-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK11-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK11-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK11-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK11-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
// CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK12-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK12-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK12-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK12-NEXT: ret void | // CHECK12-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK12-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK12-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | |||||
// CHECK12-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK12-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK12-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK12-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK12-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK12-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK12-NEXT: ret void | // CHECK12-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK12-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
// CHECK12-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK12-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK12-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK12-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK12-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK12-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK12-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK12-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK12-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK12-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK12-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[A3:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[A3:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK12-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK12-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | // CHECK12-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | ||||
// CHECK12-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK12-NEXT: store i32 [[AA]], i32* [[AA_ADDR]], align 4 | ||||
// CHECK12-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK12-NEXT: store i32 [[LIN]], i32* [[LIN_ADDR]], align 4 | ||||
// CHECK12-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK12-NEXT: store i32 [[A]], i32* [[A_ADDR]], align 4 | ||||
// CHECK12-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK12-NEXT: [[CONV:%.*]] = bitcast i32* [[AA_ADDR]] to i16* | ||||
// CHECK12-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK12-NEXT: [[TMP0:%.*]] = load i32, i32* [[LIN_ADDR]], align 4 | ||||
// CHECK12-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK12-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK12-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK12-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK12-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK12-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START1]], align 4 | ||||
// CHECK12-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | |||||
// CHECK12-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | |||||
// CHECK12-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK12-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK12-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK12-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK12-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK12-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK12-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK12-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK12-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK12-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK12-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK12-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK12-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK12-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK12-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK12-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK12-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK12-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK12-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK12-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK12-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
// CHECK12-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK12-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK12-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK12-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK12-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK12-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK12-NEXT: ret void | // CHECK12-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK12-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK12-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK12-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK12-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK12-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK12-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK12-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK12-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK12-NEXT: ret void | // CHECK12-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK12-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK12-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK12-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK12-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK12-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 158 Lines • ▼ Show 20 Lines | |||||
// CHECK12-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK12-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK12-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK12-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK12-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK12-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK12-NEXT: ret void | // CHECK12-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK12-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 31 Lines | |||||
// CHECK12-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK12-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK12-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK12-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK12-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK12-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK12-NEXT: ret void | // CHECK12-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK12-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK12-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK12-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | |||||
// CHECK12-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK12-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK12-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK12-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK12-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK12-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK12-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK12-NEXT: ret void | // CHECK12-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK12-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK12-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK12-NEXT: entry: | // CHECK12-NEXT: entry: | ||||
// CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK12-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK12-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK12-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK12-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK12-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK12-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK12-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 395 Lines • ▼ Show 20 Lines | |||||
// CHECK17-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK17-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK17-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK17-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK17-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK17-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK17-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK17-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | // CHECK17-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | ||||
// CHECK17-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | // CHECK17-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | ||||
// CHECK17-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | // CHECK17-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK17-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK17-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK17-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK17-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK17-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK17-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK17-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 185 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK17-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK17-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | // CHECK17-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | ||||
// CHECK17-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | // CHECK17-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | ||||
// CHECK17-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | // CHECK17-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | ||||
// CHECK17-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | // CHECK17-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | ||||
// CHECK17-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | // CHECK17-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | ||||
// CHECK17-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | // CHECK17-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | ||||
// CHECK17-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | // CHECK17-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | ||||
// CHECK17-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK17-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK17-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK17-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK17-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK17-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK17-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK17-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK17-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK17-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK17: omp_offload.failed.i: | // CHECK17: omp_offload.failed.i: | ||||
// CHECK17-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK17-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK17-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | // CHECK17-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | ||||
// CHECK17-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | // CHECK17-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | ||||
// CHECK17-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | // CHECK17-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | ||||
// CHECK17-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK17-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 29 Lines | |||||
// CHECK17-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK17-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK17-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK17-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK17-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK17-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK17-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK17-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK17-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK17-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK17-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK17-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK17-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK17-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK17-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK17-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK17-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK17-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK17-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 454 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK17-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK17-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK17-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK17-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK17-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK17-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK17-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK17-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 106 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK17-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK17-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK17-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK17-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK17-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK17-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 33 Lines | |||||
// CHECK17-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK17-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK17-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK17-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK17-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK17-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK17-NEXT: entry: | // CHECK17-NEXT: entry: | ||||
// CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK17-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK17-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK17-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 403 Lines • ▼ Show 20 Lines | |||||
// CHECK18-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK18-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK18-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK18-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK18-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK18-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK18-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK18-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | // CHECK18-NEXT: [[TMP2:%.*]] = load i64, i64* [[K_ADDR]], align 8 | ||||
// CHECK18-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | // CHECK18-NEXT: store i64 [[TMP2]], i64* [[K_CASTED]], align 8 | ||||
// CHECK18-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | // CHECK18-NEXT: [[TMP3:%.*]] = load i64, i64* [[K_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[K_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK18-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK18-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK18-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK18-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK18-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK18-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK18-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 185 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK18-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK18-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | // CHECK18-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 8, !noalias !24 | ||||
// CHECK18-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | // CHECK18-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 8, !noalias !24 | ||||
// CHECK18-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | // CHECK18-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 8, !noalias !24 | ||||
// CHECK18-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | // CHECK18-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !24 | ||||
// CHECK18-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | // CHECK18-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | ||||
// CHECK18-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | // CHECK18-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | ||||
// CHECK18-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | // CHECK18-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | ||||
// CHECK18-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK18-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK18-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK18-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK18-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK18-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK18-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK18-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK18-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK18-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK18: omp_offload.failed.i: | // CHECK18: omp_offload.failed.i: | ||||
// CHECK18-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK18-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK18-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | // CHECK18-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | ||||
// CHECK18-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | // CHECK18-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !24 | ||||
// CHECK18-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | // CHECK18-NEXT: [[TMP28:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !24 | ||||
// CHECK18-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK18-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 29 Lines | |||||
// CHECK18-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK18-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK18-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK18-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK18-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK18-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK18-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK18-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK18-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK18-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK18-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK18-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK18-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK18-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK18-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK18-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK18-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK18-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK18-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 454 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK18-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK18-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK18-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK18-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK18-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK18-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK18-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK18-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 106 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK18-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK18-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK18-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK18-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK18-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK18-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 33 Lines | |||||
// CHECK18-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK18-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK18-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK18-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK18-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK18-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK18-NEXT: entry: | // CHECK18-NEXT: entry: | ||||
// CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK18-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK18-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK18-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 393 Lines • ▼ Show 20 Lines | |||||
// CHECK19-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK19-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK19-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK19-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK19-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK19-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | // CHECK19-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | ||||
// CHECK19-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK19-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i64* nonnull align 4 dereferenceable(8) [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | // CHECK19-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK19-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK19-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK19-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK19-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK19-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK19-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK19-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK19-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 183 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK19-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK19-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | // CHECK19-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | ||||
// CHECK19-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | // CHECK19-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | ||||
// CHECK19-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | // CHECK19-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | ||||
// CHECK19-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | // CHECK19-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | ||||
// CHECK19-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | // CHECK19-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | ||||
// CHECK19-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | // CHECK19-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | ||||
// CHECK19-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | // CHECK19-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | ||||
// CHECK19-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK19-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK19-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK19-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK19-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK19-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK19-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK19-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK19-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK19-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK19: omp_offload.failed.i: | // CHECK19: omp_offload.failed.i: | ||||
// CHECK19-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK19-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK19-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | // CHECK19-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | ||||
// CHECK19-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | // CHECK19-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | ||||
// CHECK19-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | // CHECK19-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | ||||
// CHECK19-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK19-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 25 Lines | |||||
// CHECK19-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK19-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK19-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK19-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK19-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK19-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK19-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK19-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK19-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK19-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK19-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK19-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK19-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK19-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK19-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK19-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK19-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK19-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 447 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK19-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK19-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK19-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK19-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK19-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK19-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK19-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK19-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK19-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK19-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK19-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK19-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK19-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK19-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 30 Lines | |||||
// CHECK19-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK19-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK19-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK19-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK19-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK19-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK19-NEXT: entry: | // CHECK19-NEXT: entry: | ||||
// CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK19-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK19-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK19-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK19-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK19-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK19-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 392 Lines • ▼ Show 20 Lines | |||||
// CHECK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK20-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK20-SAME: () #[[ATTR2:[0-9]+]] { | // CHECK20-SAME: () #[[ATTR2:[0-9]+]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 76 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK20-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK20-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | // CHECK20-NEXT: store i32 [[TMP1]], i32* [[A_CASTED]], align 4 | ||||
// CHECK20-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK20-NEXT: [[TMP2:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i64*)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP2]], i64* [[TMP0]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i64* nonnull align 4 dereferenceable(8) [[K:%.*]]) #[[ATTR3]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | // CHECK20-NEXT: [[K_ADDR:%.*]] = alloca i64*, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | // CHECK20-NEXT: [[DOTLINEAR_START:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK20-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK20-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK20-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK20-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK20-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK20-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK20-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 183 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | // CHECK20-NEXT: call void [[TMP15]](i8* [[TMP14]], i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]]) #[[ATTR4]] | ||||
// CHECK20-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | // CHECK20-NEXT: [[TMP16:%.*]] = load i16*, i16** [[DOTFIRSTPRIV_PTR_ADDR_I]], align 4, !noalias !25 | ||||
// CHECK20-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | // CHECK20-NEXT: [[TMP17:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR1_I]], align 4, !noalias !25 | ||||
// CHECK20-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | // CHECK20-NEXT: [[TMP18:%.*]] = load [3 x i8*]*, [3 x i8*]** [[DOTFIRSTPRIV_PTR_ADDR2_I]], align 4, !noalias !25 | ||||
// CHECK20-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | // CHECK20-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !25 | ||||
// CHECK20-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | // CHECK20-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | ||||
// CHECK20-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | // CHECK20-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | ||||
// CHECK20-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | // CHECK20-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | ||||
// CHECK20-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON_2:%.*]], %struct.anon.2* [[TMP12]], i32 0, i32 1 | // CHECK20-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK20-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON_2]], %struct.anon.2* [[TMP12]], i32 0, i32 2 | // CHECK20-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK20-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0) #[[ATTR4]] | // CHECK20-NEXT: [[TMP25:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l138.region_id, i32 3, i8** [[TMP20]], i8** [[TMP21]], i64* [[TMP22]], i64* getelementptr inbounds ([3 x i64], [3 x i64]* @.offload_maptypes, i32 0, i32 0), i8** null, i8** null, i32 1, i32 0, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK20-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | // CHECK20-NEXT: [[TMP26:%.*]] = icmp ne i32 [[TMP25]], 0 | ||||
// CHECK20-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | // CHECK20-NEXT: br i1 [[TMP26]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__3_EXIT:%.*]] | ||||
// CHECK20: omp_offload.failed.i: | // CHECK20: omp_offload.failed.i: | ||||
// CHECK20-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK20-NEXT: [[TMP27:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK20-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | // CHECK20-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | ||||
// CHECK20-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | // CHECK20-NEXT: store i16 [[TMP27]], i16* [[CONV_I]], align 2, !noalias !25 | ||||
// CHECK20-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | // CHECK20-NEXT: [[TMP28:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !25 | ||||
// CHECK20-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK20-NEXT: [[TMP29:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 25 Lines | |||||
// CHECK20-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK20-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK20-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK20-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK20-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK20-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK20-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK20-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK20-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK20-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK20-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK20-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK20-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..7 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..7 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..7 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK20-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK20-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK20-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK20-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK20-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 447 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK20-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK20-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK20-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK20-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK20-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..9 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR3]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK20-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK20-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK20-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK20-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK20-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK20-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK20-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK20-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..11 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK20-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 30 Lines | |||||
// CHECK20-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK20-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK20-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK20-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK20-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK20-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..14 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..14 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..14 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK20-NEXT: entry: | // CHECK20-NEXT: entry: | ||||
// CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK20-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK20-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK20-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK20-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK20-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK20-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | |||||
// CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK25-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK25-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK25-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK25-NEXT: ret void | // CHECK25-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK25-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK25-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | |||||
// CHECK25-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK25-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK25-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK25-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK25-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK25-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK25-NEXT: ret void | // CHECK25-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[A5:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[A5:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK25-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK25-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | // CHECK25-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | ||||
// CHECK25-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK25-NEXT: store i64 [[AA]], i64* [[AA_ADDR]], align 8 | ||||
// CHECK25-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK25-NEXT: store i64 [[LIN]], i64* [[LIN_ADDR]], align 8 | ||||
// CHECK25-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK25-NEXT: store i64 [[A]], i64* [[A_ADDR]], align 8 | ||||
// CHECK25-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK25-NEXT: [[CONV:%.*]] = bitcast i64* [[AA_ADDR]] to i16* | ||||
// CHECK25-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK25-NEXT: [[CONV1:%.*]] = bitcast i64* [[LIN_ADDR]] to i32* | ||||
// CHECK25-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK25-NEXT: [[CONV2:%.*]] = bitcast i64* [[A_ADDR]] to i32* | ||||
// CHECK25-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK25-NEXT: [[TMP0:%.*]] = load i32, i32* [[CONV1]], align 8 | ||||
// CHECK25-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK25-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK25-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | // CHECK25-NEXT: [[TMP1:%.*]] = load i32, i32* [[CONV2]], align 8 | ||||
// CHECK25-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | // CHECK25-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START3]], align 4 | ||||
// CHECK25-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK25-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK25-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK25-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK25-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK25-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK25-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK25-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK25-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK25-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK25-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK25-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK25-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK25-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK25-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK25-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK25-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK25-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK25-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK25-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK25-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | |||||
// CHECK25-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK25-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK25-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK25-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK25-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK25-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK25-NEXT: ret void | // CHECK25-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK25-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK25-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK25-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK25-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK25-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK25-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK25-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK25-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK25-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK25-NEXT: ret void | // CHECK25-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK25-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK25-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK25-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK25-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK25-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 162 Lines • ▼ Show 20 Lines | |||||
// CHECK25-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK25-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK25-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK25-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK25-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK25-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK25-NEXT: ret void | // CHECK25-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK25-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 34 Lines | |||||
// CHECK25-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK25-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK25-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK25-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK25-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK25-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK25-NEXT: ret void | // CHECK25-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK25-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK25-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK25-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK25-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK25-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK25-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK25-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK25-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK25-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK25-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK25-NEXT: ret void | // CHECK25-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK25-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK25-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK25-NEXT: entry: | // CHECK25-NEXT: entry: | ||||
// CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK25-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK25-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK25-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK25-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK26-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK26-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK26-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK26-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK26-NEXT: ret void | // CHECK26-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK26-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK26-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | |||||
// CHECK26-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK26-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK26-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | // CHECK26-NEXT: store i32 [[TMP4]], i32* [[CONV5]], align 4 | ||||
// CHECK26-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK26-NEXT: [[TMP5:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | // CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]], i64 [[TMP5]]) | ||||
// CHECK26-NEXT: ret void | // CHECK26-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]], i64 [[LIN:%.*]], i64 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[LIN_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTLINEAR_START3:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[LIN4:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[A5:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[A5:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK26-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK26-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | // CHECK26-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 8 | ||||
// CHECK26-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK26-NEXT: store i64 [[AA]], i64* [[AA_ADDR]], align 8 | ||||
// CHECK26-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 8 | // CHECK26-NEXT: store i64 [[LIN]], i64* [[LIN_ADDR]], align 8 | ||||
// CHECK26-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK26-NEXT: store i64 [[A]], i64* [[A_ADDR]], align 8 | ||||
// CHECK26-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK26-NEXT: [[CONV:%.*]] = bitcast i64* [[AA_ADDR]] to i16* | ||||
// CHECK26-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK26-NEXT: [[CONV1:%.*]] = bitcast i64* [[LIN_ADDR]] to i32* | ||||
// CHECK26-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK26-NEXT: [[CONV2:%.*]] = bitcast i64* [[A_ADDR]] to i32* | ||||
// CHECK26-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK26-NEXT: [[TMP0:%.*]] = load i32, i32* [[CONV1]], align 8 | ||||
// CHECK26-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK26-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK26-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | // CHECK26-NEXT: [[TMP1:%.*]] = load i32, i32* [[CONV2]], align 8 | ||||
// CHECK26-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | // CHECK26-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START3]], align 4 | ||||
// CHECK26-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK26-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK26-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK26-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK26-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK26-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK26-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK26-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK26-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK26-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK26-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK26-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK26-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK26-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK26-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK26-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK26-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK26-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | // CHECK26-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 8 | ||||
// CHECK26-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK26-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 104 Lines • ▼ Show 20 Lines | |||||
// CHECK26-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK26-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK26-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK26-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK26-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK26-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK26-NEXT: ret void | // CHECK26-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK26-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK26-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK26-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | |||||
// CHECK26-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | // CHECK26-NEXT: [[CONV7:%.*]] = bitcast i64* [[DOTCAPTURE_EXPR__CASTED]] to i32* | ||||
// CHECK26-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | // CHECK26-NEXT: store i32 [[TMP10]], i32* [[CONV7]], align 4 | ||||
// CHECK26-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK26-NEXT: [[TMP11:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | // CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP9]], [10 x float]* [[TMP0]], i64 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i64 [[TMP4]], i64 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i64 [[TMP11]]) | ||||
// CHECK26-NEXT: ret void | // CHECK26-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i64 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 8 dereferenceable(400) [[C:%.*]], i64 [[VLA1:%.*]], i64 [[VLA3:%.*]], double* nonnull align 8 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 8 dereferenceable(16) [[D:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK26-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK26-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK26-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK26-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK26-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 162 Lines • ▼ Show 20 Lines | |||||
// CHECK26-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK26-NEXT: [[CONV5:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK26-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | // CHECK26-NEXT: store i8 [[TMP5]], i8* [[CONV5]], align 1 | ||||
// CHECK26-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK26-NEXT: [[TMP6:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK26-NEXT: ret void | // CHECK26-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK26-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 34 Lines | |||||
// CHECK26-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | // CHECK26-NEXT: [[CONV3:%.*]] = bitcast i64* [[B_CASTED]] to i32* | ||||
// CHECK26-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | // CHECK26-NEXT: store i32 [[TMP4]], i32* [[CONV3]], align 4 | ||||
// CHECK26-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | // CHECK26-NEXT: [[TMP5:%.*]] = load i64, i64* [[B_CASTED]], align 8 | ||||
// CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | // CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK26-NEXT: ret void | // CHECK26-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i64 [[B:%.*]], i64 [[VLA:%.*]], i64 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK26-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK26-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK26-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | |||||
// CHECK26-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK26-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK26-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK26-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK26-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK26-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK26-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK26-NEXT: ret void | // CHECK26-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK26-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK26-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK26-NEXT: entry: | // CHECK26-NEXT: entry: | ||||
// CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK26-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK26-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK26-NEXT: [[TMP:%.*]] = alloca i64, align 8 | // CHECK26-NEXT: [[TMP:%.*]] = alloca i64, align 8 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK27-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK27-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK27-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK27-NEXT: ret void | // CHECK27-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK27-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK27-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | |||||
// CHECK27-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK27-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK27-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK27-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK27-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK27-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK27-NEXT: ret void | // CHECK27-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK27-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK27-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
// CHECK27-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK27-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK27-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK27-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK27-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK27-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK27-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK27-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK27-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK27-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK27-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[A3:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[A3:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK27-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK27-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | // CHECK27-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | ||||
// CHECK27-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK27-NEXT: store i32 [[AA]], i32* [[AA_ADDR]], align 4 | ||||
// CHECK27-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK27-NEXT: store i32 [[LIN]], i32* [[LIN_ADDR]], align 4 | ||||
// CHECK27-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK27-NEXT: store i32 [[A]], i32* [[A_ADDR]], align 4 | ||||
// CHECK27-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK27-NEXT: [[CONV:%.*]] = bitcast i32* [[AA_ADDR]] to i16* | ||||
// CHECK27-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK27-NEXT: [[TMP0:%.*]] = load i32, i32* [[LIN_ADDR]], align 4 | ||||
// CHECK27-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK27-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK27-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK27-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK27-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK27-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START1]], align 4 | ||||
// CHECK27-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | |||||
// CHECK27-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | |||||
// CHECK27-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK27-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK27-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK27-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK27-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK27-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK27-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK27-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK27-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK27-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK27-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK27-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK27-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK27-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK27-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK27-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK27-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK27-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK27-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK27-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK27-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
// CHECK27-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK27-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK27-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK27-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK27-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK27-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK27-NEXT: ret void | // CHECK27-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK27-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK27-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK27-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK27-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK27-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK27-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK27-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK27-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK27-NEXT: ret void | // CHECK27-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK27-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK27-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK27-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK27-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK27-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 158 Lines • ▼ Show 20 Lines | |||||
// CHECK27-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK27-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK27-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK27-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK27-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK27-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK27-NEXT: ret void | // CHECK27-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK27-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 31 Lines | |||||
// CHECK27-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK27-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK27-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK27-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK27-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK27-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK27-NEXT: ret void | // CHECK27-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK27-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK27-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK27-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | |||||
// CHECK27-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK27-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK27-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK27-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK27-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK27-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK27-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK27-NEXT: ret void | // CHECK27-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK27-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK27-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK27-NEXT: entry: | // CHECK27-NEXT: entry: | ||||
// CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK27-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK27-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK27-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK27-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK27-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK27-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK27-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
// CHECK28-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | // CHECK28-LABEL: define {{[^@]+}}@{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l103 | ||||
// CHECK28-SAME: () #[[ATTR0:[0-9]+]] { | // CHECK28-SAME: () #[[ATTR0:[0-9]+]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | // CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2:[0-9]+]], i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* @.omp_outlined. to void (i32*, i32*, ...)*)) | ||||
// CHECK28-NEXT: ret void | // CHECK28-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK28-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK28-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | |||||
// CHECK28-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK28-NEXT: [[TMP4:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK28-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | // CHECK28-NEXT: store i32 [[TMP4]], i32* [[A_CASTED]], align 4 | ||||
// CHECK28-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK28-NEXT: [[TMP5:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | // CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]], i32 [[TMP5]]) | ||||
// CHECK28-NEXT: ret void | // CHECK28-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]], i32 [[LIN:%.*]], i32 [[A:%.*]]) #[[ATTR1]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[LIN_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK28-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK28-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
// CHECK28-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTLINEAR_START:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTLINEAR_START1:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | // CHECK28-NEXT: [[DOTLINEAR_STEP:%.*]] = alloca i64, align 8 | ||||
// CHECK28-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | // CHECK28-NEXT: [[DOTOMP_LB:%.*]] = alloca i64, align 8 | ||||
// CHECK28-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | // CHECK28-NEXT: [[DOTOMP_UB:%.*]] = alloca i64, align 8 | ||||
// CHECK28-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | // CHECK28-NEXT: [[DOTOMP_STRIDE:%.*]] = alloca i64, align 8 | ||||
// CHECK28-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_IS_LAST:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[IT:%.*]] = alloca i64, align 8 | // CHECK28-NEXT: [[IT:%.*]] = alloca i64, align 8 | ||||
// CHECK28-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[LIN2:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[A3:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[A3:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK28-NEXT: store i32* [[DOTGLOBAL_TID_]], i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK28-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | // CHECK28-NEXT: store i32* [[DOTBOUND_TID_]], i32** [[DOTBOUND_TID__ADDR]], align 4 | ||||
// CHECK28-NEXT: store %struct.anon.0* [[__CONTEXT]], %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK28-NEXT: store i32 [[AA]], i32* [[AA_ADDR]], align 4 | ||||
// CHECK28-NEXT: [[TMP0:%.*]] = load %struct.anon.0*, %struct.anon.0** [[__CONTEXT_ADDR]], align 4 | // CHECK28-NEXT: store i32 [[LIN]], i32* [[LIN_ADDR]], align 4 | ||||
// CHECK28-NEXT: [[TMP1:%.*]] = getelementptr inbounds [[STRUCT_ANON_0:%.*]], %struct.anon.0* [[TMP0]], i32 0, i32 0 | // CHECK28-NEXT: store i32 [[A]], i32* [[A_ADDR]], align 4 | ||||
// CHECK28-NEXT: [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 4 | // CHECK28-NEXT: [[CONV:%.*]] = bitcast i32* [[AA_ADDR]] to i16* | ||||
// CHECK28-NEXT: store i16 [[TMP2]], i16* [[AA]], align 2 | // CHECK28-NEXT: [[TMP0:%.*]] = load i32, i32* [[LIN_ADDR]], align 4 | ||||
// CHECK28-NEXT: [[TMP3:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 1 | // CHECK28-NEXT: store i32 [[TMP0]], i32* [[DOTLINEAR_START]], align 4 | ||||
// CHECK28-NEXT: [[TMP4:%.*]] = load i32, i32* [[TMP3]], align 4 | // CHECK28-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK28-NEXT: store i32 [[TMP4]], i32* [[LIN]], align 4 | // CHECK28-NEXT: store i32 [[TMP1]], i32* [[DOTLINEAR_START1]], align 4 | ||||
// CHECK28-NEXT: [[TMP5:%.*]] = getelementptr inbounds [[STRUCT_ANON_0]], %struct.anon.0* [[TMP0]], i32 0, i32 2 | |||||
// CHECK28-NEXT: [[TMP6:%.*]] = load i32, i32* [[TMP5]], align 4 | |||||
// CHECK28-NEXT: store i32 [[TMP6]], i32* [[A]], align 4 | |||||
// CHECK28-NEXT: [[TMP7:%.*]] = load i32, i32* [[LIN]], align 4 | |||||
// CHECK28-NEXT: store i32 [[TMP7]], i32* [[DOTLINEAR_START]], align 4 | |||||
// CHECK28-NEXT: [[TMP8:%.*]] = load i32, i32* [[A]], align 4 | |||||
// CHECK28-NEXT: store i32 [[TMP8]], i32* [[DOTLINEAR_START1]], align 4 | |||||
// CHECK28-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | // CHECK28-NEXT: [[CALL:%.*]] = call i64 @_Z7get_valv() #[[ATTR5:[0-9]+]] | ||||
// CHECK28-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | // CHECK28-NEXT: store i64 [[CALL]], i64* [[DOTLINEAR_STEP]], align 8 | ||||
// CHECK28-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | // CHECK28-NEXT: store i64 0, i64* [[DOTOMP_LB]], align 8 | ||||
// CHECK28-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | // CHECK28-NEXT: store i64 3, i64* [[DOTOMP_UB]], align 8 | ||||
// CHECK28-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | // CHECK28-NEXT: store i64 1, i64* [[DOTOMP_STRIDE]], align 8 | ||||
// CHECK28-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | // CHECK28-NEXT: store i32 0, i32* [[DOTOMP_IS_LAST]], align 4 | ||||
// CHECK28-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | // CHECK28-NEXT: [[TMP2:%.*]] = load i32*, i32** [[DOTGLOBAL_TID__ADDR]], align 4 | ||||
// CHECK28-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | // CHECK28-NEXT: [[TMP3:%.*]] = load i32, i32* [[TMP2]], align 4 | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
// CHECK28-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK28-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK28-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK28-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK28-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK28-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK28-NEXT: ret void | // CHECK28-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[TMP:%.*]] = alloca i16, align 2 | // CHECK28-NEXT: [[TMP:%.*]] = alloca i16, align 2 | ||||
// CHECK28-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK28-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | // CHECK28-NEXT: [[TMP10:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__ADDR]], align 4 | ||||
// CHECK28-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK28-NEXT: store i32 [[TMP10]], i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK28-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK28-NEXT: [[TMP11:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | // CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 10, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP9]], [10 x float]* [[TMP0]], i32 [[TMP1]], float* [[TMP2]], [5 x [10 x double]]* [[TMP3]], i32 [[TMP4]], i32 [[TMP5]], double* [[TMP6]], %struct.TT* [[TMP7]], i32 [[TMP11]]) | ||||
// CHECK28-NEXT: ret void | // CHECK28-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], [10 x float]* nonnull align 4 dereferenceable(40) [[B:%.*]], i32 [[VLA:%.*]], float* nonnull align 4 dereferenceable(4) [[BN:%.*]], [5 x [10 x double]]* nonnull align 4 dereferenceable(400) [[C:%.*]], i32 [[VLA1:%.*]], i32 [[VLA3:%.*]], double* nonnull align 4 dereferenceable(8) [[CN:%.*]], %struct.TT* nonnull align 4 dereferenceable(12) [[D:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK28-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK28-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK28-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK28-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK28-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 158 Lines • ▼ Show 20 Lines | |||||
// CHECK28-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK28-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK28-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | // CHECK28-NEXT: store i8 [[TMP5]], i8* [[CONV3]], align 1 | ||||
// CHECK28-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK28-NEXT: [[TMP6:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | // CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 4, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], [10 x i32]* [[TMP0]]) | ||||
// CHECK28-NEXT: ret void | // CHECK28-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK28-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
Show All 31 Lines | |||||
// CHECK28-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | // CHECK28-NEXT: [[TMP4:%.*]] = load i32, i32* [[B_ADDR]], align 4 | ||||
// CHECK28-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | // CHECK28-NEXT: store i32 [[TMP4]], i32* [[B_CASTED]], align 4 | ||||
// CHECK28-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | // CHECK28-NEXT: [[TMP5:%.*]] = load i32, i32* [[B_CASTED]], align 4 | ||||
// CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | // CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]]) | ||||
// CHECK28-NEXT: ret void | // CHECK28-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.S1* [[THIS:%.*]], i32 [[B:%.*]], i32 [[VLA:%.*]], i32 [[VLA1:%.*]], i16* nonnull align 2 dereferenceable(2) [[C:%.*]]) #[[ATTR1]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK28-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK28-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK28-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | |||||
// CHECK28-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK28-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK28-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK28-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK28-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK28-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK28-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK28-NEXT: ret void | // CHECK28-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK28-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK28-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK28-NEXT: entry: | // CHECK28-NEXT: entry: | ||||
// CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK28-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK28-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK28-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK28-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | // CHECK28-NEXT: [[DOTOMP_IV:%.*]] = alloca i64, align 8 | ||||
// CHECK28-NEXT: [[TMP:%.*]] = alloca i64, align 4 | // CHECK28-NEXT: [[TMP:%.*]] = alloca i64, align 4 | ||||
▲ Show 20 Lines • Show All 69 Lines • Show Last 20 Lines |