forked from OSchip/llvm-project
[CGOpenMPRuntime] Specify correct type in EmitLoadOfPointerLValue()
Perform a bitcast first, so we can specify the correct pointer type inf EmitLoadOfPointerLValue(), rather than using a dummy void pointer.
This commit is contained in:
parent
edb7ba714a
commit
47eb4f7dcd
|
@ -4651,17 +4651,15 @@ CGOpenMPRuntime::getDepobjElements(CodeGenFunction &CGF, LValue DepobjLVal,
|
|||
getDependTypes(C, KmpDependInfoTy, FlagsTy);
|
||||
RecordDecl *KmpDependInfoRD =
|
||||
cast<RecordDecl>(KmpDependInfoTy->getAsTagDecl());
|
||||
LValue Base = CGF.EmitLoadOfPointerLValue(
|
||||
DepobjLVal.getAddress(CGF),
|
||||
C.getPointerType(C.VoidPtrTy).castAs<PointerType>());
|
||||
QualType KmpDependInfoPtrTy = C.getPointerType(KmpDependInfoTy);
|
||||
Address Addr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
|
||||
Base.getAddress(CGF), CGF.ConvertTypeForMem(KmpDependInfoPtrTy),
|
||||
CGF.ConvertTypeForMem(KmpDependInfoTy));
|
||||
Base = CGF.MakeAddrLValue(Addr, KmpDependInfoTy, Base.getBaseInfo(),
|
||||
Base.getTBAAInfo());
|
||||
LValue Base = CGF.EmitLoadOfPointerLValue(
|
||||
CGF.Builder.CreateElementBitCast(
|
||||
DepobjLVal.getAddress(CGF),
|
||||
CGF.ConvertTypeForMem(KmpDependInfoPtrTy)),
|
||||
KmpDependInfoPtrTy->castAs<PointerType>());
|
||||
Address DepObjAddr = CGF.Builder.CreateGEP(
|
||||
Addr, llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
|
||||
Base.getAddress(CGF),
|
||||
llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
|
||||
LValue NumDepsBase = CGF.MakeAddrLValue(
|
||||
DepObjAddr, KmpDependInfoTy, Base.getBaseInfo(), Base.getTBAAInfo());
|
||||
// NumDeps = deps[i].base_addr;
|
||||
|
|
|
@ -68,8 +68,8 @@ int main(int argc, char **argv) {
|
|||
// CHECK: [[B_REF:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[B_BASE]], i{{.+}} -1
|
||||
// CHECK: [[B:%.+]] = bitcast %struct.kmp_depend_info* [[B_REF]] to i8*
|
||||
// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[B]], i8* null)
|
||||
// CHECK: [[B:%.+]] = load i8*, i8** [[B_ADDR]],
|
||||
// CHECK: [[B_BASE:%.+]] = bitcast i8* [[B]] to %struct.kmp_depend_info*
|
||||
// CHECK: [[B_ADDR_CAST:%.+]] = bitcast i8** [[B_ADDR]] to %struct.kmp_depend_info**
|
||||
// CHECK: [[B_BASE:%.+]] = load %struct.kmp_depend_info*, %struct.kmp_depend_info** [[B_ADDR_CAST]], align 8
|
||||
// CHECK: [[NUMDEPS_BASE:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[B_BASE]], i64 -1
|
||||
// CHECK: [[NUMDEPS_ADDR:%.+]] = getelementptr inbounds %struct.kmp_depend_info, %struct.kmp_depend_info* [[NUMDEPS_BASE]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK: [[NUMDEPS:%.+]] = load i64, i64* [[NUMDEPS_ADDR]],
|
||||
|
@ -226,8 +226,8 @@ int main(int argc, char **argv) {
|
|||
// CHECK: [[ARGC_REF:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[ARGC_BASE]], i{{.+}} -1
|
||||
// CHECK: [[ARGC:%.+]] = bitcast %struct.kmp_depend_info* [[ARGC_REF]] to i8*
|
||||
// CHECK: call void @__kmpc_free(i32 [[GTID]], i8* [[ARGC]], i8* null)
|
||||
// CHECK: [[ARGC:%.+]] = load i8*, i8** [[ARGC_ADDR]],
|
||||
// CHECK: [[ARGC_BASE:%.+]] = bitcast i8* [[ARGC]] to %struct.kmp_depend_info*
|
||||
// CHECK: [[ARGC_ADDR_CAST:%.+]] = bitcast i8** [[ARGC_ADDR]] to %struct.kmp_depend_info**
|
||||
// CHECK: [[ARGC_BASE:%.+]] = load %struct.kmp_depend_info*, %struct.kmp_depend_info** [[ARGC_ADDR_CAST]], align 8
|
||||
// CHECK: [[NUMDEPS_BASE:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[ARGC_BASE]], i64 -1
|
||||
// CHECK: [[NUMDEPS_ADDR:%.+]] = getelementptr inbounds %struct.kmp_depend_info, %struct.kmp_depend_info* [[NUMDEPS_BASE]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK: [[NUMDEPS:%.+]] = load i64, i64* [[NUMDEPS_ADDR]],
|
||||
|
|
|
@ -34,8 +34,8 @@ int main(void) {
|
|||
// CHECK: [[CAST_EVT_VAL:%.+]] = ptrtoint i8* [[EVT_VAL]] to i64
|
||||
// CHECK: store i64 [[CAST_EVT_VAL]], i64* [[EVT_ADDR]], align 8
|
||||
// CHECK: [[DATA:%.+]] = bitcast i8* [[ALLOC]] to [[PRIVATES_TY]]*
|
||||
// CHECK: [[D:%.+]] = load i8*, i8** [[D_ADDR]], align 8
|
||||
// CHECK: [[D_DEP:%.+]] = bitcast i8* [[D]] to %struct.kmp_depend_info*
|
||||
// CHECK: [[D_ADDR_CAST:%.+]] = bitcast i8** [[D_ADDR]] to %struct.kmp_depend_info**
|
||||
// CHECK: [[D_DEP:%.+]] = load %struct.kmp_depend_info*, %struct.kmp_depend_info** [[D_ADDR_CAST]], align 8
|
||||
// CHECK: [[D_DEP_BASE:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[D_DEP]], i{{.+}} -1
|
||||
// CHECK: [[D_DEP_BASE_SIZE:%.+]] = getelementptr inbounds %struct.kmp_depend_info, %struct.kmp_depend_info* [[D_DEP_BASE]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK: [[SIZE1:%.+]] = load i64, i64* [[D_DEP_BASE_SIZE]], align 8
|
||||
|
@ -43,8 +43,8 @@ int main(void) {
|
|||
// CHECK: [[SZ:%.+]] = load i64, i64* [[DEPOBJ_SIZE_ADDR]], align 8
|
||||
// CHECK: [[SIZE:%.+]] = add nuw i64 [[SZ]], [[SIZE1]]
|
||||
// CHECK: store i64 [[SIZE]], i64* [[DEPOBJ_SIZE_ADDR]], align 8
|
||||
// CHECK: [[X:%.+]] = load i8*, i8** [[X_ADDR]], align 8
|
||||
// CHECK: [[X_DEP:%.+]] = bitcast i8* [[X]] to %struct.kmp_depend_info*
|
||||
// CHECK: [[X_ADDR_CAST:%.+]] = bitcast i8** [[X_ADDR]] to %struct.kmp_depend_info**
|
||||
// CHECK: [[X_DEP:%.+]] = load %struct.kmp_depend_info*, %struct.kmp_depend_info** [[X_ADDR_CAST]], align 8
|
||||
// CHECK: [[X_DEP_BASE:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[X_DEP]], i{{.+}} -1
|
||||
// CHECK: [[X_DEP_BASE_SIZE:%.+]] = getelementptr inbounds %struct.kmp_depend_info, %struct.kmp_depend_info* [[X_DEP_BASE]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK: [[SIZE2:%.+]] = load i64, i64* [[X_DEP_BASE_SIZE]], align 8
|
||||
|
@ -84,8 +84,8 @@ int main(void) {
|
|||
// CHECK: [[FLAGS_ADDR:%.+]] = getelementptr inbounds %struct.kmp_depend_info, %struct.kmp_depend_info* [[VLA1]], i{{.+}} 0, i{{.+}} 2
|
||||
// CHECK: store i8 1, i8* [[FLAGS_ADDR]], align 8
|
||||
// CHECK: store i64 2, i64* [[DEP_COUNTER_ADDR]], align 8
|
||||
// CHECK: [[D:%.+]] = load i8*, i8** [[D_ADDR]], align 8
|
||||
// CHECK: [[BC:%.+]] = bitcast i8* [[D]] to %struct.kmp_depend_info*
|
||||
// CHECK: [[D_ADDR_CAST:%.+]] = bitcast i8** [[D_ADDR]] to %struct.kmp_depend_info**
|
||||
// CHECK: [[BC:%.+]] = load %struct.kmp_depend_info*, %struct.kmp_depend_info** [[D_ADDR_CAST]], align 8
|
||||
// CHECK: [[PREV:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[BC]], i64 -1
|
||||
// CHECK: [[SIZE_ADDR:%.+]] = getelementptr inbounds %struct.kmp_depend_info, %struct.kmp_depend_info* [[PREV]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK: [[SIZE:%.+]] = load i64, i64* [[SIZE_ADDR]], align 8
|
||||
|
@ -97,8 +97,8 @@ int main(void) {
|
|||
// CHECK: call void @llvm.memcpy.p0i8.p0i8.i64(i8* align {{.+}} [[DEST]], i8* align {{.+}} [[SRC]], i64 [[BYTES]], i1 false)
|
||||
// CHECK: [[ADD:%.+]] = add nuw i64 [[POS]], [[SIZE]]
|
||||
// CHECK: store i64 [[ADD]], i64* [[DEP_COUNTER_ADDR]], align 8
|
||||
// CHECK: [[X:%.+]] = load i8*, i8** [[X_ADDR]], align 8
|
||||
// CHECK: [[BC:%.+]] = bitcast i8* [[X]] to %struct.kmp_depend_info*
|
||||
// CHECK: [[X_ADDR_CAST:%.+]] = bitcast i8** [[X_ADDR]] to %struct.kmp_depend_info**
|
||||
// CHECK: [[BC:%.+]] = load %struct.kmp_depend_info*, %struct.kmp_depend_info** [[X_ADDR_CAST]], align 8
|
||||
// CHECK: [[PREV:%.+]] = getelementptr %struct.kmp_depend_info, %struct.kmp_depend_info* [[BC]], i64 -1
|
||||
// CHECK: [[SIZE_ADDR:%.+]] = getelementptr inbounds %struct.kmp_depend_info, %struct.kmp_depend_info* [[PREV]], i{{.+}} 0, i{{.+}} 0
|
||||
// CHECK: [[SIZE:%.+]] = load i64, i64* [[SIZE_ADDR]], align 8
|
||||
|
|
Loading…
Reference in New Issue