Skip to content

Commit 2c68ecc

Browse files
committed
[OpaquePtr] Remove uses of CreateGEP() without element type
Remove uses of to-be-deprecated API. In cases where the correct element type was not immediately obvious to me, fall back to explicit getPointerElementType().
1 parent f95d260 commit 2c68ecc

15 files changed

+103
-66
lines changed

clang/lib/CodeGen/CGBuilder.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,8 @@ class CGBuilderTy : public CGBuilderBaseTy {
261261
Address CreateConstByteGEP(Address Addr, CharUnits Offset,
262262
const llvm::Twine &Name = "") {
263263
assert(Addr.getElementType() == TypeCache.Int8Ty);
264-
return Address(CreateGEP(Addr.getPointer(), getSize(Offset), Name),
264+
return Address(CreateGEP(Addr.getElementType(), Addr.getPointer(),
265+
getSize(Offset), Name),
265266
Addr.getAlignment().alignmentAtOffset(Offset));
266267
}
267268

clang/lib/CodeGen/CGBuiltin.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9358,7 +9358,8 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
93589358
llvm::Value *Val = Builder.CreateCall(F, MemAddr);
93599359
llvm::Value *ToRet;
93609360
for (size_t i = 0; i < 8; i++) {
9361-
llvm::Value *ValOffsetPtr = Builder.CreateGEP(ValPtr, Builder.getInt32(i));
9361+
llvm::Value *ValOffsetPtr =
9362+
Builder.CreateGEP(Int64Ty, ValPtr, Builder.getInt32(i));
93629363
Address Addr(ValOffsetPtr, CharUnits::fromQuantity(8));
93639364
ToRet = Builder.CreateStore(Builder.CreateExtractValue(Val, i), Addr);
93649365
}
@@ -9369,7 +9370,8 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
93699370
SmallVector<llvm::Value *, 9> Args;
93709371
Args.push_back(MemAddr);
93719372
for (size_t i = 0; i < 8; i++) {
9372-
llvm::Value *ValOffsetPtr = Builder.CreateGEP(ValPtr, Builder.getInt32(i));
9373+
llvm::Value *ValOffsetPtr =
9374+
Builder.CreateGEP(Int64Ty, ValPtr, Builder.getInt32(i));
93739375
Address Addr(ValOffsetPtr, CharUnits::fromQuantity(8));
93749376
Args.push_back(Builder.CreateLoad(Addr));
93759377
}
@@ -14948,7 +14950,7 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
1494814950
Ops[0] = Builder.CreateBitCast(Ops[0], Int8PtrTy);
1494914951
}else {
1495014952
Ops[1] = Builder.CreateBitCast(Ops[1], Int8PtrTy);
14951-
Ops[0] = Builder.CreateGEP(Ops[1], Ops[0]);
14953+
Ops[0] = Builder.CreateGEP(Int8Ty, Ops[1], Ops[0]);
1495214954
Ops.pop_back();
1495314955
}
1495414956

@@ -15016,7 +15018,7 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
1501615018
Ops[1] = Builder.CreateBitCast(Ops[1], Int8PtrTy);
1501715019
}else {
1501815020
Ops[2] = Builder.CreateBitCast(Ops[2], Int8PtrTy);
15019-
Ops[1] = Builder.CreateGEP(Ops[2], Ops[1]);
15021+
Ops[1] = Builder.CreateGEP(Int8Ty, Ops[2], Ops[1]);
1502015022
Ops.pop_back();
1502115023
}
1502215024

@@ -15556,10 +15558,10 @@ Value *CodeGenFunction::EmitPPCBuiltinExpr(unsigned BuiltinID,
1555615558
if (BuiltinID == PPC::BI__builtin_vsx_lxvp ||
1555715559
BuiltinID == PPC::BI__builtin_mma_lxvp) {
1555815560
Ops[1] = Builder.CreateBitCast(Ops[1], Int8PtrTy);
15559-
Ops[0] = Builder.CreateGEP(Ops[1], Ops[0]);
15561+
Ops[0] = Builder.CreateGEP(Int8Ty, Ops[1], Ops[0]);
1556015562
} else {
1556115563
Ops[2] = Builder.CreateBitCast(Ops[2], Int8PtrTy);
15562-
Ops[1] = Builder.CreateGEP(Ops[2], Ops[1]);
15564+
Ops[1] = Builder.CreateGEP(Int8Ty, Ops[2], Ops[1]);
1556315565
}
1556415566
Ops.pop_back();
1556515567
llvm::Function *F = CGM.getIntrinsic(ID);
@@ -15657,7 +15659,7 @@ Value *EmitAMDGPUWorkGroupSize(CodeGenFunction &CGF, unsigned Index) {
1565715659
auto *DP = EmitAMDGPUDispatchPtr(CGF);
1565815660
// Indexing the HSA kernel_dispatch_packet struct.
1565915661
auto *Offset = llvm::ConstantInt::get(CGF.Int32Ty, XOffset + Index * 2);
15660-
auto *GEP = CGF.Builder.CreateGEP(DP, Offset);
15662+
auto *GEP = CGF.Builder.CreateGEP(CGF.Int8Ty, DP, Offset);
1566115663
auto *DstTy =
1566215664
CGF.Int16Ty->getPointerTo(GEP->getType()->getPointerAddressSpace());
1566315665
auto *Cast = CGF.Builder.CreateBitCast(GEP, DstTy);
@@ -15677,7 +15679,7 @@ Value *EmitAMDGPUGridSize(CodeGenFunction &CGF, unsigned Index) {
1567715679
auto *DP = EmitAMDGPUDispatchPtr(CGF);
1567815680
// Indexing the HSA kernel_dispatch_packet struct.
1567915681
auto *Offset = llvm::ConstantInt::get(CGF.Int32Ty, XOffset + Index * 4);
15680-
auto *GEP = CGF.Builder.CreateGEP(DP, Offset);
15682+
auto *GEP = CGF.Builder.CreateGEP(CGF.Int8Ty, DP, Offset);
1568115683
auto *DstTy =
1568215684
CGF.Int32Ty->getPointerTo(GEP->getType()->getPointerAddressSpace());
1568315685
auto *Cast = CGF.Builder.CreateBitCast(GEP, DstTy);
@@ -17079,7 +17081,7 @@ CodeGenFunction::EmitNVPTXBuiltinExpr(unsigned BuiltinID, const CallExpr *E) {
1707917081
Builder.CreateAlignedStore(
1708017082
Builder.CreateBitCast(Builder.CreateExtractValue(Result, i),
1708117083
Dst.getElementType()),
17082-
Builder.CreateGEP(Dst.getPointer(),
17084+
Builder.CreateGEP(Dst.getElementType(), Dst.getPointer(),
1708317085
llvm::ConstantInt::get(IntTy, i)),
1708417086
CharUnits::fromQuantity(4));
1708517087
}
@@ -17222,7 +17224,8 @@ CodeGenFunction::EmitNVPTXBuiltinExpr(unsigned BuiltinID, const CallExpr *E) {
1722217224
for (unsigned i = 0; i < MI.NumEltsD; ++i)
1722317225
Builder.CreateAlignedStore(
1722417226
Builder.CreateBitCast(Builder.CreateExtractValue(Result, i), DType),
17225-
Builder.CreateGEP(Dst.getPointer(), llvm::ConstantInt::get(IntTy, i)),
17227+
Builder.CreateGEP(Dst.getElementType(), Dst.getPointer(),
17228+
llvm::ConstantInt::get(IntTy, i)),
1722617229
CharUnits::fromQuantity(4));
1722717230
return Result;
1722817231
}
@@ -17306,7 +17309,7 @@ RValue CodeGenFunction::EmitBuiltinAlignTo(const CallExpr *E, bool AlignUp) {
1730617309
// can use an inbounds GEP to enable better optimization.
1730717310
Value *Base = EmitCastToVoidPtr(Args.Src);
1730817311
if (getLangOpts().isSignedOverflowDefined())
17309-
Result = Builder.CreateGEP(Base, Difference, "aligned_result");
17312+
Result = Builder.CreateGEP(Int8Ty, Base, Difference, "aligned_result");
1731017313
else
1731117314
Result = EmitCheckedInBoundsGEP(Base, Difference,
1731217315
/*SignedIndices=*/true,

clang/lib/CodeGen/CGClass.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,6 +1741,7 @@ namespace {
17411741
llvm::ConstantInt::get(CGF.SizeTy, PoisonStart.getQuantity());
17421742

17431743
llvm::Value *OffsetPtr = CGF.Builder.CreateGEP(
1744+
CGF.Int8Ty,
17441745
CGF.Builder.CreateBitCast(CGF.LoadCXXThis(), CGF.Int8PtrTy),
17451746
OffsetSizePtr);
17461747

clang/lib/CodeGen/CGExprScalar.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2588,7 +2588,8 @@ ScalarExprEmitter::EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV,
25882588
llvm::Value *numElts = CGF.getVLASize(vla).NumElts;
25892589
if (!isInc) numElts = Builder.CreateNSWNeg(numElts, "vla.negsize");
25902590
if (CGF.getLangOpts().isSignedOverflowDefined())
2591-
value = Builder.CreateGEP(value, numElts, "vla.inc");
2591+
value = Builder.CreateGEP(value->getType()->getPointerElementType(),
2592+
value, numElts, "vla.inc");
25922593
else
25932594
value = CGF.EmitCheckedInBoundsGEP(
25942595
value, numElts, /*SignedIndices=*/false, isSubtraction,
@@ -2600,7 +2601,7 @@ ScalarExprEmitter::EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV,
26002601

26012602
value = CGF.EmitCastToVoidPtr(value);
26022603
if (CGF.getLangOpts().isSignedOverflowDefined())
2603-
value = Builder.CreateGEP(value, amt, "incdec.funcptr");
2604+
value = Builder.CreateGEP(CGF.Int8Ty, value, amt, "incdec.funcptr");
26042605
else
26052606
value = CGF.EmitCheckedInBoundsGEP(value, amt, /*SignedIndices=*/false,
26062607
isSubtraction, E->getExprLoc(),
@@ -2611,7 +2612,8 @@ ScalarExprEmitter::EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV,
26112612
} else {
26122613
llvm::Value *amt = Builder.getInt32(amount);
26132614
if (CGF.getLangOpts().isSignedOverflowDefined())
2614-
value = Builder.CreateGEP(value, amt, "incdec.ptr");
2615+
value = Builder.CreateGEP(value->getType()->getPointerElementType(),
2616+
value, amt, "incdec.ptr");
26152617
else
26162618
value = CGF.EmitCheckedInBoundsGEP(value, amt, /*SignedIndices=*/false,
26172619
isSubtraction, E->getExprLoc(),
@@ -2720,7 +2722,7 @@ ScalarExprEmitter::EmitScalarPrePostIncDec(const UnaryOperator *E, LValue LV,
27202722
llvm::ConstantInt::get(CGF.SizeTy, size.getQuantity());
27212723

27222724
if (CGF.getLangOpts().isSignedOverflowDefined())
2723-
value = Builder.CreateGEP(value, sizeValue, "incdec.objptr");
2725+
value = Builder.CreateGEP(CGF.Int8Ty, value, sizeValue, "incdec.objptr");
27242726
else
27252727
value = CGF.EmitCheckedInBoundsGEP(value, sizeValue,
27262728
/*SignedIndices=*/false, isSubtraction,
@@ -3445,7 +3447,7 @@ static Value *emitPointerArithmetic(CodeGenFunction &CGF,
34453447
index = CGF.Builder.CreateMul(index, objectSize);
34463448

34473449
Value *result = CGF.Builder.CreateBitCast(pointer, CGF.VoidPtrTy);
3448-
result = CGF.Builder.CreateGEP(result, index, "add.ptr");
3450+
result = CGF.Builder.CreateGEP(CGF.Int8Ty, result, index, "add.ptr");
34493451
return CGF.Builder.CreateBitCast(result, pointer->getType());
34503452
}
34513453

@@ -3461,7 +3463,9 @@ static Value *emitPointerArithmetic(CodeGenFunction &CGF,
34613463
// multiply. We suppress this if overflow is not undefined behavior.
34623464
if (CGF.getLangOpts().isSignedOverflowDefined()) {
34633465
index = CGF.Builder.CreateMul(index, numElements, "vla.index");
3464-
pointer = CGF.Builder.CreateGEP(pointer, index, "add.ptr");
3466+
pointer = CGF.Builder.CreateGEP(
3467+
pointer->getType()->getPointerElementType(), pointer, index,
3468+
"add.ptr");
34653469
} else {
34663470
index = CGF.Builder.CreateNSWMul(index, numElements, "vla.index");
34673471
pointer =
@@ -3476,12 +3480,13 @@ static Value *emitPointerArithmetic(CodeGenFunction &CGF,
34763480
// future proof.
34773481
if (elementType->isVoidType() || elementType->isFunctionType()) {
34783482
Value *result = CGF.EmitCastToVoidPtr(pointer);
3479-
result = CGF.Builder.CreateGEP(result, index, "add.ptr");
3483+
result = CGF.Builder.CreateGEP(CGF.Int8Ty, result, index, "add.ptr");
34803484
return CGF.Builder.CreateBitCast(result, pointer->getType());
34813485
}
34823486

34833487
if (CGF.getLangOpts().isSignedOverflowDefined())
3484-
return CGF.Builder.CreateGEP(pointer, index, "add.ptr");
3488+
return CGF.Builder.CreateGEP(
3489+
pointer->getType()->getPointerElementType(), pointer, index, "add.ptr");
34853490

34863491
return CGF.EmitCheckedInBoundsGEP(pointer, index, isSigned, isSubtraction,
34873492
op.E->getExprLoc(), "add.ptr");

clang/lib/CodeGen/CGObjC.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1904,8 +1904,9 @@ void CodeGenFunction::EmitObjCForCollectionStmt(const ObjCForCollectionStmt &S){
19041904
Builder.CreateLoad(StateItemsPtr, "stateitems");
19051905

19061906
// Fetch the value at the current index from the buffer.
1907-
llvm::Value *CurrentItemPtr =
1908-
Builder.CreateGEP(EnumStateItems, index, "currentitem.ptr");
1907+
llvm::Value *CurrentItemPtr = Builder.CreateGEP(
1908+
EnumStateItems->getType()->getPointerElementType(), EnumStateItems, index,
1909+
"currentitem.ptr");
19091910
llvm::Value *CurrentItem =
19101911
Builder.CreateAlignedLoad(ObjCIdType, CurrentItemPtr, getPointerAlign());
19111912

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,8 @@ static void EmitOMPAggregateInit(CodeGenFunction &CGF, Address DestAddr,
698698
SrcBegin = SrcAddr.getPointer();
699699
llvm::Value *DestBegin = DestAddr.getPointer();
700700
// Cast from pointer to array type to pointer to single element.
701-
llvm::Value *DestEnd = CGF.Builder.CreateGEP(DestBegin, NumElements);
701+
llvm::Value *DestEnd =
702+
CGF.Builder.CreateGEP(DestAddr.getElementType(), DestBegin, NumElements);
702703
// The basic structure here is a while-do loop.
703704
llvm::BasicBlock *BodyBB = CGF.createBasicBlock("omp.arrayinit.body");
704705
llvm::BasicBlock *DoneBB = CGF.createBasicBlock("omp.arrayinit.done");
@@ -1012,13 +1013,14 @@ Address ReductionCodeGen::adjustPrivateAddress(CodeGenFunction &CGF, unsigned N,
10121013
LValue BaseLValue =
10131014
loadToBegin(CGF, OrigVD->getType(), SharedAddresses[N].first.getType(),
10141015
OriginalBaseLValue);
1016+
Address SharedAddr = SharedAddresses[N].first.getAddress(CGF);
10151017
llvm::Value *Adjustment = CGF.Builder.CreatePtrDiff(
1016-
BaseLValue.getPointer(CGF), SharedAddresses[N].first.getPointer(CGF));
1018+
BaseLValue.getPointer(CGF), SharedAddr.getPointer());
10171019
llvm::Value *PrivatePointer =
10181020
CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
1019-
PrivateAddr.getPointer(),
1020-
SharedAddresses[N].first.getAddress(CGF).getType());
1021-
llvm::Value *Ptr = CGF.Builder.CreateGEP(PrivatePointer, Adjustment);
1021+
PrivateAddr.getPointer(), SharedAddr.getType());
1022+
llvm::Value *Ptr = CGF.Builder.CreateGEP(
1023+
SharedAddr.getElementType(), PrivatePointer, Adjustment);
10221024
return castToBase(CGF, OrigVD->getType(),
10231025
SharedAddresses[N].first.getType(),
10241026
OriginalBaseLValue.getAddress(CGF).getType(),
@@ -4474,7 +4476,8 @@ CGOpenMPRuntime::emitTaskInit(CodeGenFunction &CGF, SourceLocation Loc,
44744476
std::tie(Addr, Size) = getPointerAndSize(CGF, E);
44754477
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
44764478
LValue Base = CGF.MakeAddrLValue(
4477-
Address(CGF.Builder.CreateGEP(AffinitiesArray.getPointer(), Idx),
4479+
Address(CGF.Builder.CreateGEP(AffinitiesArray.getElementType(),
4480+
AffinitiesArray.getPointer(), Idx),
44784481
AffinitiesArray.getAlignment()),
44794482
KmpTaskAffinityInfoTy);
44804483
// affs[i].base_addr = &<Affinities[i].second>;
@@ -4641,7 +4644,7 @@ CGOpenMPRuntime::getDepobjElements(CodeGenFunction &CGF, LValue DepobjLVal,
46414644
Base = CGF.MakeAddrLValue(Addr, KmpDependInfoTy, Base.getBaseInfo(),
46424645
Base.getTBAAInfo());
46434646
llvm::Value *DepObjAddr = CGF.Builder.CreateGEP(
4644-
Addr.getPointer(),
4647+
Addr.getElementType(), Addr.getPointer(),
46454648
llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
46464649
LValue NumDepsBase = CGF.MakeAddrLValue(
46474650
Address(DepObjAddr, Addr.getAlignment()), KmpDependInfoTy,
@@ -4681,7 +4684,8 @@ static void emitDependData(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
46814684
LValue &PosLVal = *Pos.get<LValue *>();
46824685
llvm::Value *Idx = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
46834686
Base = CGF.MakeAddrLValue(
4684-
Address(CGF.Builder.CreateGEP(DependenciesArray.getPointer(), Idx),
4687+
Address(CGF.Builder.CreateGEP(DependenciesArray.getElementType(),
4688+
DependenciesArray.getPointer(), Idx),
46854689
DependenciesArray.getAlignment()),
46864690
KmpDependInfoTy);
46874691
}
@@ -4741,7 +4745,7 @@ emitDepobjElementsSizes(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
47414745
Base = CGF.MakeAddrLValue(Addr, KmpDependInfoTy, Base.getBaseInfo(),
47424746
Base.getTBAAInfo());
47434747
llvm::Value *DepObjAddr = CGF.Builder.CreateGEP(
4744-
Addr.getPointer(),
4748+
Addr.getElementType(), Addr.getPointer(),
47454749
llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
47464750
LValue NumDepsBase = CGF.MakeAddrLValue(
47474751
Address(DepObjAddr, Addr.getAlignment()), KmpDependInfoTy,
@@ -4802,7 +4806,7 @@ static void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
48024806

48034807
// Get number of elements in a single depobj.
48044808
llvm::Value *DepObjAddr = CGF.Builder.CreateGEP(
4805-
Addr.getPointer(),
4809+
Addr.getElementType(), Addr.getPointer(),
48064810
llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
48074811
LValue NumDepsBase = CGF.MakeAddrLValue(
48084812
Address(DepObjAddr, Addr.getAlignment()), KmpDependInfoTy,
@@ -4819,7 +4823,8 @@ static void emitDepobjElements(CodeGenFunction &CGF, QualType &KmpDependInfoTy,
48194823
CGF.Builder.CreateIntCast(NumDeps, CGF.SizeTy, /*isSigned=*/false));
48204824
llvm::Value *Pos = CGF.EmitLoadOfScalar(PosLVal, E->getExprLoc());
48214825
Address DepAddr =
4822-
Address(CGF.Builder.CreateGEP(DependenciesArray.getPointer(), Pos),
4826+
Address(CGF.Builder.CreateGEP(DependenciesArray.getElementType(),
4827+
DependenciesArray.getPointer(), Pos),
48234828
DependenciesArray.getAlignment());
48244829
CGF.Builder.CreateMemCpy(DepAddr, Base.getAddress(CGF), Size);
48254830

@@ -5047,7 +5052,7 @@ void CGOpenMPRuntime::emitDestroyClause(CodeGenFunction &CGF, LValue DepobjLVal,
50475052
Address Addr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(
50485053
Base.getAddress(CGF), CGF.ConvertTypeForMem(KmpDependInfoPtrTy));
50495054
llvm::Value *DepObjAddr = CGF.Builder.CreateGEP(
5050-
Addr.getPointer(),
5055+
Addr.getElementType(), Addr.getPointer(),
50515056
llvm::ConstantInt::get(CGF.IntPtrTy, -1, /*isSigned=*/true));
50525057
DepObjAddr = CGF.Builder.CreatePointerBitCastOrAddrSpaceCast(DepObjAddr,
50535058
CGF.VoidPtrTy);
@@ -5077,7 +5082,8 @@ void CGOpenMPRuntime::emitUpdateClause(CodeGenFunction &CGF, LValue DepobjLVal,
50775082

50785083
Address Begin = Base.getAddress(CGF);
50795084
// Cast from pointer to array type to pointer to single element.
5080-
llvm::Value *End = CGF.Builder.CreateGEP(Begin.getPointer(), NumDeps);
5085+
llvm::Value *End = CGF.Builder.CreateGEP(
5086+
Begin.getElementType(), Begin.getPointer(), NumDeps);
50815087
// The basic structure here is a while-do loop.
50825088
llvm::BasicBlock *BodyBB = CGF.createBasicBlock("omp.body");
50835089
llvm::BasicBlock *DoneBB = CGF.createBasicBlock("omp.done");
@@ -5340,7 +5346,8 @@ static void EmitOMPAggregateReduction(
53405346
llvm::Value *RHSBegin = RHSAddr.getPointer();
53415347
llvm::Value *LHSBegin = LHSAddr.getPointer();
53425348
// Cast from pointer to array type to pointer to single element.
5343-
llvm::Value *LHSEnd = CGF.Builder.CreateGEP(LHSBegin, NumElements);
5349+
llvm::Value *LHSEnd =
5350+
CGF.Builder.CreateGEP(LHSAddr.getElementType(), LHSBegin, NumElements);
53445351
// The basic structure here is a while-do loop.
53455352
llvm::BasicBlock *BodyBB = CGF.createBasicBlock("omp.arraycpy.body");
53465353
llvm::BasicBlock *DoneBB = CGF.createBasicBlock("omp.arraycpy.done");
@@ -9747,7 +9754,8 @@ void CGOpenMPRuntime::emitUserDefinedMapper(const OMPDeclareMapperDecl *D,
97479754
Size, MapperCGF.Builder.getInt64(ElementSize.getQuantity()));
97489755
llvm::Value *PtrBegin = MapperCGF.Builder.CreateBitCast(
97499756
BeginIn, CGM.getTypes().ConvertTypeForMem(PtrTy));
9750-
llvm::Value *PtrEnd = MapperCGF.Builder.CreateGEP(PtrBegin, Size);
9757+
llvm::Value *PtrEnd = MapperCGF.Builder.CreateGEP(
9758+
PtrBegin->getType()->getPointerElementType(), PtrBegin, Size);
97519759
llvm::Value *MapType = MapperCGF.EmitLoadOfScalar(
97529760
MapperCGF.GetAddrOfLocalVar(&TypeArg), /*Volatile=*/false,
97539761
C.getPointerType(Int64Ty), Loc);

clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2215,7 +2215,8 @@ static llvm::Value *emitInterWarpCopyFunction(CodeGenModule &CGM,
22152215
Address ElemPtr = Address(ElemPtrPtr, Align);
22162216
ElemPtr = Bld.CreateElementBitCast(ElemPtr, CopyType);
22172217
if (NumIters > 1) {
2218-
ElemPtr = Address(Bld.CreateGEP(ElemPtr.getPointer(), Cnt),
2218+
ElemPtr = Address(Bld.CreateGEP(ElemPtr.getElementType(),
2219+
ElemPtr.getPointer(), Cnt),
22192220
ElemPtr.getAlignment());
22202221
}
22212222

@@ -2284,7 +2285,8 @@ static llvm::Value *emitInterWarpCopyFunction(CodeGenModule &CGM,
22842285
Address TargetElemPtr = Address(TargetElemPtrVal, Align);
22852286
TargetElemPtr = Bld.CreateElementBitCast(TargetElemPtr, CopyType);
22862287
if (NumIters > 1) {
2287-
TargetElemPtr = Address(Bld.CreateGEP(TargetElemPtr.getPointer(), Cnt),
2288+
TargetElemPtr = Address(Bld.CreateGEP(TargetElemPtr.getElementType(),
2289+
TargetElemPtr.getPointer(), Cnt),
22882290
TargetElemPtr.getAlignment());
22892291
}
22902292

clang/lib/CodeGen/CGStmtOpenMP.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,8 @@ void CodeGenFunction::EmitOMPAggregateAssign(
850850
llvm::Value *SrcBegin = SrcAddr.getPointer();
851851
llvm::Value *DestBegin = DestAddr.getPointer();
852852
// Cast from pointer to array type to pointer to single element.
853-
llvm::Value *DestEnd = Builder.CreateGEP(DestBegin, NumElements);
853+
llvm::Value *DestEnd =
854+
Builder.CreateGEP(DestAddr.getElementType(), DestBegin, NumElements);
854855
// The basic structure here is a while-do loop.
855856
llvm::BasicBlock *BodyBB = createBasicBlock("omp.arraycpy.body");
856857
llvm::BasicBlock *DoneBB = createBasicBlock("omp.arraycpy.done");

0 commit comments

Comments
 (0)