Changeset View
Changeset View
Standalone View
Standalone View
clang/test/OpenMP/target_teams_distribute_simd_codegen.cpp
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 635 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK1-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK1-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK1-NEXT: store i16 [[TMP3]], i16* [[CONV5]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// 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_:%.*]], i64 [[AA:%.*]]) #[[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | // CHECK1-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | ||||
// 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:%.*]], %struct.anon* [[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]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK1-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK1-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK1-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK1-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK1-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK1-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK1-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK1-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK1-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK1-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK1-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK1: omp_offload.failed.i: | // CHECK1: omp_offload.failed.i: | ||||
// CHECK1-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK1-NEXT: [[TMP28:%.*]] = 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 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | // CHECK1-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | ||||
// CHECK1-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | // CHECK1-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | ||||
// CHECK1-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK1-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 21 Lines | |||||
// CHECK1-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK1-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK1-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | // CHECK1-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | ||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// 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 [[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: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[A_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: [[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 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK1-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK1-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK1-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK1-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], 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: [[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 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 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 103 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 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK1-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK1-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK1-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// 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.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:%.*]]) #[[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 478 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..11 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..11 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..11 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK1-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* 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 121 Lines • ▼ Show 20 Lines | |||||
// CHECK1-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK1-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK1-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK1-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK1-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK1-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK1-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK1-NEXT: ret void | // CHECK1-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// 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_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], 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: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK1-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 149 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 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..16 | // CHECK1-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// 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:%.*]], [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 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 | ||||
▲ Show 20 Lines • Show All 425 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK2-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK2-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK2-NEXT: store i16 [[TMP3]], i16* [[CONV5]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// 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_:%.*]], i64 [[AA:%.*]]) #[[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | // CHECK2-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | ||||
// 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:%.*]], %struct.anon* [[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]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK2-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK2-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK2-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK2-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK2-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK2-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK2-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK2-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK2-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK2-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK2-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK2: omp_offload.failed.i: | // CHECK2: omp_offload.failed.i: | ||||
// CHECK2-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK2-NEXT: [[TMP28:%.*]] = 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 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | // CHECK2-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | ||||
// CHECK2-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | // CHECK2-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | ||||
// CHECK2-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK2-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 21 Lines | |||||
// CHECK2-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK2-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK2-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | // CHECK2-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | ||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// 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 [[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: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[A_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: [[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 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK2-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK2-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK2-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK2-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], 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: [[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 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 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 103 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 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK2-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK2-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK2-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// 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.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:%.*]]) #[[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 478 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..11 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*)* @.omp_outlined..11 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..11 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK2-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* 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 121 Lines • ▼ Show 20 Lines | |||||
// CHECK2-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK2-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK2-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK2-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK2-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK2-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK2-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK2-NEXT: ret void | // CHECK2-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// 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_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], 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: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK2-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 149 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 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..16 | // CHECK2-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// 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:%.*]], [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 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 | ||||
▲ Show 20 Lines • Show All 418 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK3-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK3-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK3-NEXT: store i16 [[TMP3]], i16* [[CONV3]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// 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_:%.*]], i32 [[AA:%.*]]) #[[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | // CHECK3-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | ||||
// 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:%.*]], %struct.anon* [[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]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK3-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK3-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK3-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK3-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK3-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK3-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK3-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK3-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK3-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK3-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK3-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK3: omp_offload.failed.i: | // CHECK3: omp_offload.failed.i: | ||||
// CHECK3-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK3-NEXT: [[TMP28:%.*]] = 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 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | // CHECK3-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | ||||
// CHECK3-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | // CHECK3-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | ||||
// CHECK3-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK3-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 17 Lines | |||||
// CHECK3-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK3-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK3-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// 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 [[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: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[A_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 | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK3-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK3-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK3-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK3-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK3-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK3-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], 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: [[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 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 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK3-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK3-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK3-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK3-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// 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.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:%.*]]) #[[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 471 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..11 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..11 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..11 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// 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 116 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 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK3-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK3-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK3-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK3-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK3-NEXT: ret void | // CHECK3-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// 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 [[N:%.*]], 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: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK3-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 145 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 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..16 | // CHECK3-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 417 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK4-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK4-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK4-NEXT: store i16 [[TMP3]], i16* [[CONV3]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// 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_:%.*]], i32 [[AA:%.*]]) #[[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | // CHECK4-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | ||||
// 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:%.*]], %struct.anon* [[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]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK4-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK4-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK4-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK4-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK4-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK4-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK4-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK4-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK4-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK4-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK4-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK4: omp_offload.failed.i: | // CHECK4: omp_offload.failed.i: | ||||
// CHECK4-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK4-NEXT: [[TMP28:%.*]] = 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 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | // CHECK4-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | ||||
// CHECK4-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | // CHECK4-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | ||||
// CHECK4-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK4-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 17 Lines | |||||
// CHECK4-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK4-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK4-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// 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 [[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: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[A_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 | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK4-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK4-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK4-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK4-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK4-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK4-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], 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: [[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 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 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK4-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK4-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK4-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK4-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// 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.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:%.*]]) #[[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 471 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..11 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_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*)* @.omp_outlined..11 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..11 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// 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 116 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 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK4-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK4-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK4-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK4-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK4-NEXT: ret void | // CHECK4-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// 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 [[N:%.*]], 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: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK4-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 145 Lines • ▼ Show 20 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 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_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 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..16 | // CHECK4-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 424 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK5-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK5-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK5-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | ||||
// CHECK5-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK5-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | // CHECK5-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | ||||
// CHECK5-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | // CHECK5-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | ||||
// CHECK5-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | // CHECK5-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | ||||
// CHECK5-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | // CHECK5-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | ||||
// CHECK5-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | // CHECK5-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK5-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK5-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK5-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK5-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK5-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK5-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK5-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK5-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK5-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK5-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK5-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK5-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK5: omp_offload.failed.i: | // CHECK5: omp_offload.failed.i: | ||||
// CHECK5-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK5-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK5-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | // CHECK5-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | ||||
// CHECK5-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | // CHECK5-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | ||||
// CHECK5-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | // CHECK5-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | ||||
// CHECK5-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK5-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 21 Lines | |||||
// CHECK5-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK5-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK5-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | // CHECK5-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | ||||
// CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK5-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK5-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK5-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK5-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK5-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK5-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK5-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK5-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK5-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK5-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK5-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK5-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK5-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK5-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK5-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:%.*]]) #[[ATTR3]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK5-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK5-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK5-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK5-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK5-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 510 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK5-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK5-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | // CHECK5-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | ||||
// CHECK5-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK5-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK5-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:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK5-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK5-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK5-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 166 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK5-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK5-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK5-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK5-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK5-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK5-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
▲ Show 20 Lines • Show All 149 Lines • ▼ Show 20 Lines | |||||
// CHECK5-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK5-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK5-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK5-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK5-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK5-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK5-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK5-NEXT: ret void | // CHECK5-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..16 | // CHECK5-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK5-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK5-NEXT: entry: | // CHECK5-NEXT: entry: | ||||
// CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK5-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK5-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK5-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK5-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK5-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 425 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK6-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK6-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK6-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | ||||
// CHECK6-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK6-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | // CHECK6-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 8, !noalias !26 | ||||
// CHECK6-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | // CHECK6-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i64 0, i64 0 | ||||
// CHECK6-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | // CHECK6-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i64 0, i64 0 | ||||
// CHECK6-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | // CHECK6-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i64 0, i64 0 | ||||
// CHECK6-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | // CHECK6-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK6-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK6-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK6-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK6-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK6-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK6-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK6-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK6-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK6-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK6-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK6-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK6-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK6: omp_offload.failed.i: | // CHECK6: omp_offload.failed.i: | ||||
// CHECK6-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK6-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK6-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | // CHECK6-NEXT: [[CONV_I:%.*]] = bitcast i64* [[AA_CASTED_I]] to i16* | ||||
// CHECK6-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | // CHECK6-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !26 | ||||
// CHECK6-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | // CHECK6-NEXT: [[TMP29:%.*]] = load i64, i64* [[AA_CASTED_I]], align 8, !noalias !26 | ||||
// CHECK6-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK6-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 21 Lines | |||||
// CHECK6-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK6-NEXT: [[CONV1:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK6-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | // CHECK6-NEXT: store i32 [[TMP0]], i32* [[CONV1]], align 4 | ||||
// CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK6-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK6-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK6-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK6-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK6-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK6-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK6-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK6-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK6-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i64 [[TMP1]], i64 [[TMP3]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK6-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK6-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK6-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK6-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK6-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK6-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:%.*]]) #[[ATTR3]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK6-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK6-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK6-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK6-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK6-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 510 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK6-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK6-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | // CHECK6-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | ||||
// CHECK6-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK6-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK6-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:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK6-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK6-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK6-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 166 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK6-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK6-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK6-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK6-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK6-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK6-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
▲ Show 20 Lines • Show All 149 Lines • ▼ Show 20 Lines | |||||
// CHECK6-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK6-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK6-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK6-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK6-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK6-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK6-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK6-NEXT: ret void | // CHECK6-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..16 | // CHECK6-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK6-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK6-NEXT: entry: | // CHECK6-NEXT: entry: | ||||
// CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK6-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK6-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK6-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK6-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK6-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 418 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK7-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK7-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK7-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK7-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK7-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | // CHECK7-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | ||||
// CHECK7-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | // CHECK7-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | ||||
// CHECK7-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | // CHECK7-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | ||||
// CHECK7-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | // CHECK7-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | ||||
// CHECK7-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | // CHECK7-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK7-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK7-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK7-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK7-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK7-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK7-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK7-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK7-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK7-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK7-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK7-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK7-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK7: omp_offload.failed.i: | // CHECK7: omp_offload.failed.i: | ||||
// CHECK7-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK7-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK7-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | // CHECK7-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | ||||
// CHECK7-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | // CHECK7-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | ||||
// CHECK7-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | // CHECK7-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | ||||
// CHECK7-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK7-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 17 Lines | |||||
// CHECK7-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK7-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK7-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | // CHECK7-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | ||||
// CHECK7-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK7-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK7-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK7-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK7-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK7-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK7-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK7-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK7-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK7-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK7-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK7-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK7-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK7-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK7-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK7-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK7-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK7-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:%.*]]) #[[ATTR3]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK7-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK7-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK7-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK7-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK7-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 503 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK7-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK7-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | // CHECK7-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | ||||
// CHECK7-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK7-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK7-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:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK7-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK7-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK7-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 161 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK7-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK7-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK7-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK7-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK7-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[N:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK7-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
▲ Show 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | |||||
// CHECK7-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK7-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK7-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK7-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK7-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK7-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK7-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK7-NEXT: ret void | // CHECK7-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..16 | // CHECK7-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK7-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK7-NEXT: entry: | // CHECK7-NEXT: entry: | ||||
// CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK7-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK7-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK7-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 417 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK8-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK8-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK8-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK8-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK8-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR3:[0-9]+]] { | // CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR3:[0-9]+]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 137 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | // CHECK8-NEXT: [[TMP19:%.*]] = load [3 x i64]*, [3 x i64]** [[DOTFIRSTPRIV_PTR_ADDR3_I]], align 4, !noalias !27 | ||||
// CHECK8-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | // CHECK8-NEXT: [[TMP20:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP17]], i32 0, i32 0 | ||||
// CHECK8-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | // CHECK8-NEXT: [[TMP21:%.*]] = getelementptr inbounds [3 x i8*], [3 x i8*]* [[TMP18]], i32 0, i32 0 | ||||
// CHECK8-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | // CHECK8-NEXT: [[TMP22:%.*]] = getelementptr inbounds [3 x i64], [3 x i64]* [[TMP19]], i32 0, i32 0 | ||||
// CHECK8-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | // CHECK8-NEXT: [[TMP23:%.*]] = getelementptr inbounds [[STRUCT_ANON:%.*]], %struct.anon* [[TMP12]], i32 0, i32 1 | ||||
// CHECK8-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | // CHECK8-NEXT: [[TMP24:%.*]] = getelementptr inbounds [[STRUCT_ANON]], %struct.anon* [[TMP12]], i32 0, i32 2 | ||||
// CHECK8-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK8-NEXT: [[TMP25:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
// CHECK8-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | // CHECK8-NEXT: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i64 10) #[[ATTR4]] | ||||
// CHECK8-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1) #[[ATTR4]] | // CHECK8-NEXT: [[TMP26:%.*]] = call i32 @__tgt_target_teams_nowait_mapper(%struct.ident_t* @[[GLOB2]], i64 -1, i8* @.{{__omp_offloading_[0-9a-z]+_[0-9a-z]+}}__Z3fooi_l97.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 [[TMP25]], i32 1, i32 0, i8* null, i32 0, i8* null) #[[ATTR4]] | ||||
// CHECK8-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | // CHECK8-NEXT: [[TMP27:%.*]] = icmp ne i32 [[TMP26]], 0 | ||||
// CHECK8-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | // CHECK8-NEXT: br i1 [[TMP27]], label [[OMP_OFFLOAD_FAILED_I:%.*]], label [[DOTOMP_OUTLINED__1_EXIT:%.*]] | ||||
// CHECK8: omp_offload.failed.i: | // CHECK8: omp_offload.failed.i: | ||||
// CHECK8-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | // CHECK8-NEXT: [[TMP28:%.*]] = load i16, i16* [[TMP16]], align 2 | ||||
// CHECK8-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | // CHECK8-NEXT: [[CONV_I:%.*]] = bitcast i32* [[AA_CASTED_I]] to i16* | ||||
// CHECK8-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | // CHECK8-NEXT: store i16 [[TMP28]], i16* [[CONV_I]], align 2, !noalias !27 | ||||
// CHECK8-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | // CHECK8-NEXT: [[TMP29:%.*]] = load i32, i32* [[AA_CASTED_I]], align 4, !noalias !27 | ||||
// CHECK8-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | // CHECK8-NEXT: [[TMP30:%.*]] = load i32, i32* [[TMP23]], align 4 | ||||
Show All 17 Lines | |||||
// CHECK8-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK8-NEXT: [[TMP0:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK8-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | // CHECK8-NEXT: store i32 [[TMP0]], i32* [[A_CASTED]], align 4 | ||||
// CHECK8-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK8-NEXT: [[TMP1:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..2 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]]) #[[ATTR3]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK8-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK8-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK8-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK8-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK8-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..3 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK8-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK8-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK8-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK8-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK8-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32)* @.omp_outlined..6 to void (i32*, i32*, ...)*), i32 [[TMP1]], i32 [[TMP3]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR3]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK8-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK8-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK8-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK8-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK8-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.omp_outlined..9 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]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..9 | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..9 | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK8-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:%.*]]) #[[ATTR3]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK8-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK8-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK8-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK8-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK8-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 503 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK8-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK8-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | // CHECK8-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | ||||
// CHECK8-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK8-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..11 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..11 | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..11 | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK8-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:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR3]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK8-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK8-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK8-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 161 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK8-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK8-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK8-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK8-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK8-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..13 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..13 | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..13 | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.7* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[N:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK8-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
▲ Show 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | |||||
// CHECK8-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK8-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK8-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK8-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK8-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK8-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | // CHECK8-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 3, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, [10 x i32]*)* @.omp_outlined..16 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], [10 x i32]* [[TMP0]]) | ||||
// CHECK8-NEXT: ret void | // CHECK8-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..16 | // CHECK8-LABEL: define {{[^@]+}}@.omp_outlined..16 | ||||
// CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.8* noalias [[__CONTEXT:%.*]]) #[[ATTR3]] { | // CHECK8-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR3]] { | ||||
// CHECK8-NEXT: entry: | // CHECK8-NEXT: entry: | ||||
// CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK8-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK8-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK8-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 4,366 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK17-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK17-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK17-NEXT: store i16 [[TMP3]], i16* [[CONV5]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// 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:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1:[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK17-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK17-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK17-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK17-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK17-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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: [[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 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 103 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 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK17-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK17-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK17-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 157 Lines • ▼ Show 20 Lines | |||||
// CHECK17-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK17-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK17-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK17-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK17-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK17-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK17-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 150 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_teams(%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]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 105 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK17-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK17-NEXT: ret void | // CHECK17-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK17-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK17-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK18-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK18-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK18-NEXT: store i16 [[TMP3]], i16* [[CONV5]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// 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:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1:[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK18-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK18-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK18-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK18-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK18-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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: [[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 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 103 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 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK18-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK18-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK18-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 157 Lines • ▼ Show 20 Lines | |||||
// CHECK18-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK18-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK18-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK18-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK18-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK18-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK18-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 150 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_teams(%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]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 105 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK18-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK18-NEXT: ret void | // CHECK18-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK18-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK18-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK19-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK19-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK19-NEXT: store i16 [[TMP3]], i16* [[CONV3]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// 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:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1:[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK19-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK19-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK19-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK19-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK19-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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: [[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 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK19-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK19-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK19-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK19-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK19-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK19-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 152 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 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK19-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK19-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK19-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[N:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK19-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 146 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_teams(%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]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 102 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK19-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK19-NEXT: ret void | // CHECK19-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK19-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK19-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK20-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK20-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK20-NEXT: store i16 [[TMP3]], i16* [[CONV3]], 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_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// 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:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1:[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: [[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 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 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK20-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK20-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK20-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK20-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK20-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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: [[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 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK20-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK20-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK20-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK20-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK20-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK20-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 152 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 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK20-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK20-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK20-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// 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:%.*]]) #[[ATTR1]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[N:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK20-NEXT: [[N_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 | ||||
▲ Show 20 Lines • Show All 146 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_teams(%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]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // 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:%.*]]) #[[ATTR1]] { | ||||
// 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 102 Lines • ▼ Show 20 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_teams(%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]]) | // CHECK20-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK20-NEXT: ret void | // CHECK20-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK20-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.5* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK20-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// 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 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 | ||||
▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | |||||
// CHECK21-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK21-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK21-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK21-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | ||||
// CHECK21-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK21-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// CHECK21-NEXT: ret void | // CHECK21-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK21-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK21-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK21-NEXT: entry: | // CHECK21-NEXT: entry: | ||||
// CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK21-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK21-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK21-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK21-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK21-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK21-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK21-NEXT: ret void | // CHECK21-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK21-NEXT: entry: | // CHECK21-NEXT: entry: | ||||
// CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK21-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK21-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK21-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK21-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK21-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK21-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK21-NEXT: ret void | // CHECK21-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK21-NEXT: entry: | // CHECK21-NEXT: entry: | ||||
// CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK21-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK21-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK21-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK21-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK21-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK21-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | // CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | ||||
// CHECK21-NEXT: ret void | // CHECK21-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK21-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:%.*]]) #[[ATTR1]] { | ||||
// CHECK21-NEXT: entry: | // CHECK21-NEXT: entry: | ||||
// CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK21-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK21-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK21-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK21-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK21-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | |||||
// CHECK21-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK21-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK21-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK21-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK21-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK21-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK21-NEXT: ret void | // CHECK21-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK21-NEXT: entry: | // CHECK21-NEXT: entry: | ||||
// CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK21-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
▲ Show 20 Lines • Show All 160 Lines • ▼ Show 20 Lines | |||||
// CHECK21-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK21-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK21-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | // CHECK21-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | ||||
// CHECK21-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK21-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | // CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | ||||
// CHECK21-NEXT: ret void | // CHECK21-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK21-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:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK21-NEXT: entry: | // CHECK21-NEXT: entry: | ||||
// CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK21-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK21-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK21-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 150 Lines • ▼ Show 20 Lines | |||||
// CHECK21-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK21-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK21-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK21-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK21-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK21-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK21-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK21-NEXT: ret void | // CHECK21-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK21-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK21-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK21-NEXT: entry: | // CHECK21-NEXT: entry: | ||||
// CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK21-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK21-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK21-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK21-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK21-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 96 Lines • ▼ Show 20 Lines | |||||
// CHECK22-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK22-NEXT: [[CONV5:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK22-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | // CHECK22-NEXT: store i16 [[TMP3]], i16* [[CONV5]], align 2 | ||||
// CHECK22-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK22-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | // CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined. to void (i32*, i32*, ...)*), i64 [[TMP4]]) | ||||
// CHECK22-NEXT: ret void | // CHECK22-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK22-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK22-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK22-NEXT: entry: | // CHECK22-NEXT: entry: | ||||
// CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK22-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK22-NEXT: [[CONV1:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK22-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK22-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK22-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK22-NEXT: [[TMP1:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | // CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i64 [[TMP1]]) | ||||
// CHECK22-NEXT: ret void | // CHECK22-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK22-NEXT: entry: | // CHECK22-NEXT: entry: | ||||
// CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 81 Lines • ▼ Show 20 Lines | |||||
// CHECK22-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK22-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK22-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | // CHECK22-NEXT: store i16 [[TMP2]], i16* [[CONV3]], align 2 | ||||
// CHECK22-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK22-NEXT: [[TMP3:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK22-NEXT: ret void | // CHECK22-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK22-NEXT: entry: | // CHECK22-NEXT: entry: | ||||
// CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 103 Lines • ▼ Show 20 Lines | |||||
// CHECK22-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | // CHECK22-NEXT: [[CONV5:%.*]] = bitcast i64* [[A_CASTED]] to i32* | ||||
// CHECK22-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | // CHECK22-NEXT: store i32 [[TMP8]], i32* [[CONV5]], align 4 | ||||
// CHECK22-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | // CHECK22-NEXT: [[TMP9:%.*]] = load i64, i64* [[A_CASTED]], align 8 | ||||
// CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | // CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, [10 x float]*, i64, float*, [5 x [10 x double]]*, i64, i64, double*, %struct.TT*)* @.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]]) | ||||
// CHECK22-NEXT: ret void | // CHECK22-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK22-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:%.*]]) #[[ATTR1]] { | ||||
// CHECK22-NEXT: entry: | // CHECK22-NEXT: entry: | ||||
// CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | // CHECK22-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 8 | ||||
// CHECK22-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | // CHECK22-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 8 | ||||
// CHECK22-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | // CHECK22-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 8 | ||||
▲ Show 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | |||||
// CHECK22-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | // CHECK22-NEXT: [[CONV7:%.*]] = bitcast i64* [[AAA_CASTED]] to i8* | ||||
// CHECK22-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | // CHECK22-NEXT: store i8 [[TMP7]], i8* [[CONV7]], align 1 | ||||
// CHECK22-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | // CHECK22-NEXT: [[TMP8:%.*]] = load i64, i64* [[AAA_CASTED]], align 8 | ||||
// CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64, i64, i64, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i64 [[TMP2]], i64 [[TMP4]], i64 [[TMP6]], i64 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK22-NEXT: ret void | // CHECK22-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[N:%.*]], i64 [[AA:%.*]], i64 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK22-NEXT: entry: | // CHECK22-NEXT: entry: | ||||
// CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[N_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[AAA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK22-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
▲ Show 20 Lines • Show All 160 Lines • ▼ Show 20 Lines | |||||
// CHECK22-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK22-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK22-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | // CHECK22-NEXT: store i8 [[FROMBOOL]], i8* [[CONV5]], align 1 | ||||
// CHECK22-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | // CHECK22-NEXT: [[TMP7:%.*]] = load i64, i64* [[DOTCAPTURE_EXPR__CASTED]], align 8 | ||||
// CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | // CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i64, i64, i64, i16*, i64)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i64 [[TMP5]], i64 [[TMP1]], i64 [[TMP2]], i16* [[TMP3]], i64 [[TMP7]]) | ||||
// CHECK22-NEXT: ret void | // CHECK22-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK22-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:%.*]], i64 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK22-NEXT: entry: | // CHECK22-NEXT: entry: | ||||
// CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | // CHECK22-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 8 | ||||
// CHECK22-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[B_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[VLA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[VLA_ADDR2:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | // CHECK22-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 8 | ||||
▲ Show 20 Lines • Show All 150 Lines • ▼ Show 20 Lines | |||||
// CHECK22-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | // CHECK22-NEXT: [[CONV3:%.*]] = bitcast i64* [[AA_CASTED]] to i16* | ||||
// CHECK22-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK22-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK22-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | // CHECK22-NEXT: [[TMP4:%.*]] = load i64, i64* [[AA_CASTED]], align 8 | ||||
// CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK22-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK22-NEXT: ret void | // CHECK22-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK22-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK22-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i64 [[A:%.*]], i64 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK22-NEXT: entry: | // CHECK22-NEXT: entry: | ||||
// CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | // CHECK22-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 8 | ||||
// CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[A_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | // CHECK22-NEXT: [[AA_ADDR:%.*]] = alloca i64, align 8 | ||||
// CHECK22-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | // CHECK22-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 8 | ||||
// CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK22-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
// CHECK23-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK23-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK23-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK23-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK23-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK23-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// CHECK23-NEXT: ret void | // CHECK23-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK23-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK23-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK23-NEXT: entry: | // CHECK23-NEXT: entry: | ||||
// CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK23-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK23-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK23-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK23-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK23-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK23-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK23-NEXT: ret void | // CHECK23-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK23-NEXT: entry: | // CHECK23-NEXT: entry: | ||||
// CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
// CHECK23-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK23-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK23-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK23-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK23-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK23-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK23-NEXT: ret void | // CHECK23-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK23-NEXT: entry: | // CHECK23-NEXT: entry: | ||||
// CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK23-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK23-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK23-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK23-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK23-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK23-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | // CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | ||||
// CHECK23-NEXT: ret void | // CHECK23-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK23-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:%.*]]) #[[ATTR1]] { | ||||
// CHECK23-NEXT: entry: | // CHECK23-NEXT: entry: | ||||
// CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK23-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK23-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK23-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK23-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK23-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | |||||
// CHECK23-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK23-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK23-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK23-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK23-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK23-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK23-NEXT: ret void | // CHECK23-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[N:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK23-NEXT: entry: | // CHECK23-NEXT: entry: | ||||
// CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK23-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
▲ Show 20 Lines • Show All 156 Lines • ▼ Show 20 Lines | |||||
// CHECK23-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK23-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK23-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | // CHECK23-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | ||||
// CHECK23-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK23-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | // CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | ||||
// CHECK23-NEXT: ret void | // CHECK23-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK23-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:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK23-NEXT: entry: | // CHECK23-NEXT: entry: | ||||
// CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK23-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK23-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK23-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | |||||
// CHECK23-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK23-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK23-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK23-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK23-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK23-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK23-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK23-NEXT: ret void | // CHECK23-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK23-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK23-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK23-NEXT: entry: | // CHECK23-NEXT: entry: | ||||
// CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK23-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK23-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK23-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | |||||
// CHECK24-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK24-NEXT: [[CONV3:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK24-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | // CHECK24-NEXT: store i16 [[TMP3]], i16* [[CONV3]], align 2 | ||||
// CHECK24-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK24-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | // CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined. to void (i32*, i32*, ...)*), i32 [[TMP4]]) | ||||
// CHECK24-NEXT: ret void | // CHECK24-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK24-LABEL: define {{[^@]+}}@.omp_outlined. | // CHECK24-LABEL: define {{[^@]+}}@.omp_outlined. | ||||
// CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon* noalias [[__CONTEXT:%.*]]) #[[ATTR1:[0-9]+]] { | // CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1:[0-9]+]] { | ||||
// CHECK24-NEXT: entry: | // CHECK24-NEXT: entry: | ||||
// CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | |||||
// CHECK24-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK24-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK24-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | // CHECK24-NEXT: store i16 [[TMP0]], i16* [[CONV1]], align 2 | ||||
// CHECK24-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK24-NEXT: [[TMP1:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | // CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 1, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32)* @.omp_outlined..1 to void (i32*, i32*, ...)*), i32 [[TMP1]]) | ||||
// CHECK24-NEXT: ret void | // CHECK24-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..1 | // CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..1 | ||||
// CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.0* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK24-NEXT: entry: | // CHECK24-NEXT: entry: | ||||
// CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_UB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 79 Lines • ▼ Show 20 Lines | |||||
// CHECK24-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK24-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK24-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | // CHECK24-NEXT: store i16 [[TMP2]], i16* [[CONV1]], align 2 | ||||
// CHECK24-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK24-NEXT: [[TMP3:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK24-NEXT: ret void | // CHECK24-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..2 | // CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..2 | ||||
// CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.1* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]]) #[[ATTR1]] { | ||||
// CHECK24-NEXT: entry: | // CHECK24-NEXT: entry: | ||||
// CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_LB:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 100 Lines • ▼ Show 20 Lines | |||||
// CHECK24-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | // CHECK24-NEXT: [[TMP8:%.*]] = load i32, i32* [[A_ADDR]], align 4 | ||||
// CHECK24-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | // CHECK24-NEXT: store i32 [[TMP8]], i32* [[A_CASTED]], align 4 | ||||
// CHECK24-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | // CHECK24-NEXT: [[TMP9:%.*]] = load i32, i32* [[A_CASTED]], align 4 | ||||
// CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | // CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 9, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, [10 x float]*, i32, float*, [5 x [10 x double]]*, i32, i32, double*, %struct.TT*)* @.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]]) | ||||
// CHECK24-NEXT: ret void | // CHECK24-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..3 | // CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..3 | ||||
// CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.2* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK24-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:%.*]]) #[[ATTR1]] { | ||||
// CHECK24-NEXT: entry: | // CHECK24-NEXT: entry: | ||||
// CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | // CHECK24-NEXT: [[B_ADDR:%.*]] = alloca [10 x float]*, align 4 | ||||
// CHECK24-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | // CHECK24-NEXT: [[BN_ADDR:%.*]] = alloca float*, align 4 | ||||
// CHECK24-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | // CHECK24-NEXT: [[C_ADDR:%.*]] = alloca [5 x [10 x double]]*, align 4 | ||||
▲ Show 20 Lines • Show All 152 Lines • ▼ Show 20 Lines | |||||
// CHECK24-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | // CHECK24-NEXT: [[CONV3:%.*]] = bitcast i32* [[AAA_CASTED]] to i8* | ||||
// CHECK24-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | // CHECK24-NEXT: store i8 [[TMP7]], i8* [[CONV3]], align 1 | ||||
// CHECK24-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | // CHECK24-NEXT: [[TMP8:%.*]] = load i32, i32* [[AAA_CASTED]], align 4 | ||||
// CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | // CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 5, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i32, i32, i32, i32, [10 x i32]*)* @.omp_outlined..4 to void (i32*, i32*, ...)*), i32 [[TMP2]], i32 [[TMP4]], i32 [[TMP6]], i32 [[TMP8]], [10 x i32]* [[TMP0]]) | ||||
// CHECK24-NEXT: ret void | // CHECK24-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..4 | // CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..4 | ||||
// CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.3* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[N:%.*]], i32 [[AA:%.*]], i32 [[AAA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK24-NEXT: entry: | // CHECK24-NEXT: entry: | ||||
// CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[N_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[AAA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK24-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
▲ Show 20 Lines • Show All 156 Lines • ▼ Show 20 Lines | |||||
// CHECK24-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | // CHECK24-NEXT: [[FROMBOOL:%.*]] = zext i1 [[TOBOOL]] to i8 | ||||
// CHECK24-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | // CHECK24-NEXT: store i8 [[FROMBOOL]], i8* [[CONV3]], align 1 | ||||
// CHECK24-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | // CHECK24-NEXT: [[TMP7:%.*]] = load i32, i32* [[DOTCAPTURE_EXPR__CASTED]], align 4 | ||||
// CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | // CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @[[GLOB2]], i32 6, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, %struct.S1*, i32, i32, i32, i16*, i32)* @.omp_outlined..5 to void (i32*, i32*, ...)*), %struct.S1* [[TMP0]], i32 [[TMP5]], i32 [[TMP1]], i32 [[TMP2]], i16* [[TMP3]], i32 [[TMP7]]) | ||||
// CHECK24-NEXT: ret void | // CHECK24-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..5 | // CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..5 | ||||
// CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.4* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK24-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:%.*]], i32 [[DOTCAPTURE_EXPR_:%.*]]) #[[ATTR1]] { | ||||
// CHECK24-NEXT: entry: | // CHECK24-NEXT: entry: | ||||
// CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | // CHECK24-NEXT: [[THIS_ADDR:%.*]] = alloca %struct.S1*, align 4 | ||||
// CHECK24-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[B_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[VLA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[VLA_ADDR2:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | // CHECK24-NEXT: [[C_ADDR:%.*]] = alloca i16*, align 4 | ||||
▲ Show 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | |||||
// CHECK24-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | // CHECK24-NEXT: [[CONV1:%.*]] = bitcast i32* [[AA_CASTED]] to i16* | ||||
// CHECK24-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | // CHECK24-NEXT: store i16 [[TMP3]], i16* [[CONV1]], align 2 | ||||
// CHECK24-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | // CHECK24-NEXT: [[TMP4:%.*]] = load i32, i32* [[AA_CASTED]], align 4 | ||||
// CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | // CHECK24-NEXT: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%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]]) | ||||
// CHECK24-NEXT: ret void | // CHECK24-NEXT: ret void | ||||
// | // | ||||
// | // | ||||
// CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..6 | // CHECK24-LABEL: define {{[^@]+}}@.omp_outlined..6 | ||||
// CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], %struct.anon.6* noalias [[__CONTEXT:%.*]]) #[[ATTR1]] { | // CHECK24-SAME: (i32* noalias [[DOTGLOBAL_TID_:%.*]], i32* noalias [[DOTBOUND_TID_:%.*]], i32 [[A:%.*]], i32 [[AA:%.*]], [10 x i32]* nonnull align 4 dereferenceable(40) [[B:%.*]]) #[[ATTR1]] { | ||||
// CHECK24-NEXT: entry: | // CHECK24-NEXT: entry: | ||||
// CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTGLOBAL_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | // CHECK24-NEXT: [[DOTBOUND_TID__ADDR:%.*]] = alloca i32*, align 4 | ||||
// CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[A_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[AA_ADDR:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | // CHECK24-NEXT: [[B_ADDR:%.*]] = alloca [10 x i32]*, align 4 | ||||
// CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[DOTOMP_IV:%.*]] = alloca i32, align 4 | ||||
// CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | // CHECK24-NEXT: [[TMP:%.*]] = alloca i32, align 4 | ||||
▲ Show 20 Lines • Show All 4,340 Lines • Show Last 20 Lines |