Skip to content

Commit 6225d0c

Browse files
committed
[OpaquePtr] Remove uses of CreateInBoundsGEP() without element type
Remove uses of to-be-deprecated API. Unfortunately this one mostly just makes the use of getPointerElementType() explicit, as the correct type to use wasn't immediately available (deriving it from QualType is left as an excercise to the reader).
1 parent d0f8047 commit 6225d0c

File tree

4 files changed

+36
-25
lines changed

4 files changed

+36
-25
lines changed

clang/lib/CodeGen/CGDecl.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2246,8 +2246,9 @@ void CodeGenFunction::emitArrayDestroy(llvm::Value *begin,
22462246

22472247
// Shift the address back by one element.
22482248
llvm::Value *negativeOne = llvm::ConstantInt::get(SizeTy, -1, true);
2249-
llvm::Value *element = Builder.CreateInBoundsGEP(elementPast, negativeOne,
2250-
"arraydestroy.element");
2249+
llvm::Value *element = Builder.CreateInBoundsGEP(
2250+
elementPast->getType()->getPointerElementType(), elementPast, negativeOne,
2251+
"arraydestroy.element");
22512252

22522253
if (useEHCleanup)
22532254
pushRegularPartialArrayCleanup(begin, element, elementType, elementAlign,
@@ -2287,8 +2288,11 @@ static void emitPartialArrayDestroy(CodeGenFunction &CGF,
22872288
llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
22882289

22892290
SmallVector<llvm::Value*,4> gepIndices(arrayDepth+1, zero);
2290-
begin = CGF.Builder.CreateInBoundsGEP(begin, gepIndices, "pad.arraybegin");
2291-
end = CGF.Builder.CreateInBoundsGEP(end, gepIndices, "pad.arrayend");
2291+
llvm::Type *elemTy = begin->getType()->getPointerElementType();
2292+
begin = CGF.Builder.CreateInBoundsGEP(
2293+
elemTy, begin, gepIndices, "pad.arraybegin");
2294+
end = CGF.Builder.CreateInBoundsGEP(
2295+
elemTy, end, gepIndices, "pad.arrayend");
22922296
}
22932297

22942298
// Destroy the array. We don't ever need an EH cleanup because we

clang/lib/CodeGen/CGExprAgg.cpp

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,8 @@ AggExprEmitter::VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E) {
417417
LValue Start = CGF.EmitLValueForFieldInitialization(DestLV, *Field);
418418
llvm::Value *Zero = llvm::ConstantInt::get(CGF.PtrDiffTy, 0);
419419
llvm::Value *IdxStart[] = { Zero, Zero };
420-
llvm::Value *ArrayStart =
421-
Builder.CreateInBoundsGEP(ArrayPtr.getPointer(), IdxStart, "arraystart");
420+
llvm::Value *ArrayStart = Builder.CreateInBoundsGEP(
421+
ArrayPtr.getElementType(), ArrayPtr.getPointer(), IdxStart, "arraystart");
422422
CGF.EmitStoreThroughLValue(RValue::get(ArrayStart), Start);
423423
++Field;
424424

@@ -434,8 +434,8 @@ AggExprEmitter::VisitCXXStdInitializerListExpr(CXXStdInitializerListExpr *E) {
434434
ArrayType->getElementType())) {
435435
// End pointer.
436436
llvm::Value *IdxEnd[] = { Zero, Size };
437-
llvm::Value *ArrayEnd =
438-
Builder.CreateInBoundsGEP(ArrayPtr.getPointer(), IdxEnd, "arrayend");
437+
llvm::Value *ArrayEnd = Builder.CreateInBoundsGEP(
438+
ArrayPtr.getElementType(), ArrayPtr.getPointer(), IdxEnd, "arrayend");
439439
CGF.EmitStoreThroughLValue(RValue::get(ArrayEnd), EndOrLength);
440440
} else if (Ctx.hasSameType(Field->getType(), Ctx.getSizeType())) {
441441
// Length.
@@ -484,12 +484,14 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
484484
// down a level.
485485
llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
486486
llvm::Value *indices[] = { zero, zero };
487-
llvm::Value *begin =
488-
Builder.CreateInBoundsGEP(DestPtr.getPointer(), indices, "arrayinit.begin");
487+
llvm::Value *begin = Builder.CreateInBoundsGEP(
488+
DestPtr.getElementType(), DestPtr.getPointer(), indices,
489+
"arrayinit.begin");
489490

490491
CharUnits elementSize = CGF.getContext().getTypeSizeInChars(elementType);
491492
CharUnits elementAlign =
492493
DestPtr.getAlignment().alignmentOfArrayElement(elementSize);
494+
llvm::Type *llvmElementType = begin->getType()->getPointerElementType();
493495

494496
// Consider initializing the array by copying from a global. For this to be
495497
// more efficient than per-element initialization, the size of the elements
@@ -552,7 +554,8 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
552554
for (uint64_t i = 0; i != NumInitElements; ++i) {
553555
// Advance to the next element.
554556
if (i > 0) {
555-
element = Builder.CreateInBoundsGEP(element, one, "arrayinit.element");
557+
element = Builder.CreateInBoundsGEP(
558+
llvmElementType, element, one, "arrayinit.element");
556559

557560
// Tell the cleanup that it needs to destroy up to this
558561
// element. TODO: some of these stores can be trivially
@@ -581,14 +584,15 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
581584

582585
// Advance to the start of the rest of the array.
583586
if (NumInitElements) {
584-
element = Builder.CreateInBoundsGEP(element, one, "arrayinit.start");
587+
element = Builder.CreateInBoundsGEP(
588+
llvmElementType, element, one, "arrayinit.start");
585589
if (endOfInit.isValid()) Builder.CreateStore(element, endOfInit);
586590
}
587591

588592
// Compute the end of the array.
589-
llvm::Value *end = Builder.CreateInBoundsGEP(begin,
590-
llvm::ConstantInt::get(CGF.SizeTy, NumArrayElements),
591-
"arrayinit.end");
593+
llvm::Value *end = Builder.CreateInBoundsGEP(
594+
llvmElementType, begin,
595+
llvm::ConstantInt::get(CGF.SizeTy, NumArrayElements), "arrayinit.end");
592596

593597
llvm::BasicBlock *entryBB = Builder.GetInsertBlock();
594598
llvm::BasicBlock *bodyBB = CGF.createBasicBlock("arrayinit.body");
@@ -616,8 +620,8 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType,
616620
}
617621

618622
// Move on to the next element.
619-
llvm::Value *nextElement =
620-
Builder.CreateInBoundsGEP(currentElement, one, "arrayinit.next");
623+
llvm::Value *nextElement = Builder.CreateInBoundsGEP(
624+
llvmElementType, currentElement, one, "arrayinit.next");
621625

622626
// Tell the EH cleanup that we finished with the last element.
623627
if (endOfInit.isValid()) Builder.CreateStore(nextElement, endOfInit);
@@ -1779,8 +1783,9 @@ void AggExprEmitter::VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E,
17791783
// destPtr is an array*. Construct an elementType* by drilling down a level.
17801784
llvm::Value *zero = llvm::ConstantInt::get(CGF.SizeTy, 0);
17811785
llvm::Value *indices[] = {zero, zero};
1782-
llvm::Value *begin = Builder.CreateInBoundsGEP(destPtr.getPointer(), indices,
1783-
"arrayinit.begin");
1786+
llvm::Value *begin = Builder.CreateInBoundsGEP(
1787+
destPtr.getElementType(), destPtr.getPointer(), indices,
1788+
"arrayinit.begin");
17841789

17851790
// Prepare to special-case multidimensional array initialization: we avoid
17861791
// emitting multiple destructor loops in that case.
@@ -1802,7 +1807,8 @@ void AggExprEmitter::VisitArrayInitLoopExpr(const ArrayInitLoopExpr *E,
18021807
llvm::PHINode *index =
18031808
Builder.CreatePHI(zero->getType(), 2, "arrayinit.index");
18041809
index->addIncoming(zero, entryBB);
1805-
llvm::Value *element = Builder.CreateInBoundsGEP(begin, index);
1810+
llvm::Value *element = Builder.CreateInBoundsGEP(
1811+
begin->getType()->getPointerElementType(), begin, index);
18061812

18071813
// Prepare for a cleanup.
18081814
QualType::DestructionKind dtorKind = elementType.isDestructedType();

clang/lib/CodeGen/CGExprScalar.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5013,14 +5013,14 @@ Value *
50135013
CodeGenFunction::EmitCheckedInBoundsGEP(Value *Ptr, ArrayRef<Value *> IdxList,
50145014
bool SignedIndices, bool IsSubtraction,
50155015
SourceLocation Loc, const Twine &Name) {
5016-
Value *GEPVal = Builder.CreateInBoundsGEP(Ptr, IdxList, Name);
5016+
llvm::Type *PtrTy = Ptr->getType();
5017+
Value *GEPVal = Builder.CreateInBoundsGEP(
5018+
PtrTy->getPointerElementType(), Ptr, IdxList, Name);
50175019

50185020
// If the pointer overflow sanitizer isn't enabled, do nothing.
50195021
if (!SanOpts.has(SanitizerKind::PointerOverflow))
50205022
return GEPVal;
50215023

5022-
llvm::Type *PtrTy = Ptr->getType();
5023-
50245024
// Perform nullptr-and-offset check unless the nullptr is defined.
50255025
bool PerformNullCheck = !NullPointerIsDefined(
50265026
Builder.GetInsertBlock()->getParent(), PtrTy->getPointerAddressSpace());

polly/lib/CodeGen/IslNodeBuilder.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,10 +1146,11 @@ static Value *buildFADOutermostDimensionLoad(Value *GlobalDescriptor,
11461146
PollyIRBuilder &Builder,
11471147
std::string ArrayName) {
11481148
assert(GlobalDescriptor && "invalid global descriptor given");
1149+
Type *Ty = GlobalDescriptor->getType()->getPointerElementType();
11491150

11501151
Value *endIdx[4] = {Builder.getInt64(0), Builder.getInt32(3),
11511152
Builder.getInt64(0), Builder.getInt32(2)};
1152-
Value *endPtr = Builder.CreateInBoundsGEP(GlobalDescriptor, endIdx,
1153+
Value *endPtr = Builder.CreateInBoundsGEP(Ty, GlobalDescriptor, endIdx,
11531154
ArrayName + "_end_ptr");
11541155
Type *type = cast<GEPOperator>(endPtr)->getResultElementType();
11551156
assert(isa<IntegerType>(type) && "expected type of end to be integral");
@@ -1158,7 +1159,7 @@ static Value *buildFADOutermostDimensionLoad(Value *GlobalDescriptor,
11581159

11591160
Value *beginIdx[4] = {Builder.getInt64(0), Builder.getInt32(3),
11601161
Builder.getInt64(0), Builder.getInt32(1)};
1161-
Value *beginPtr = Builder.CreateInBoundsGEP(GlobalDescriptor, beginIdx,
1162+
Value *beginPtr = Builder.CreateInBoundsGEP(Ty, GlobalDescriptor, beginIdx,
11621163
ArrayName + "_begin_ptr");
11631164
Value *begin = Builder.CreateLoad(type, beginPtr, ArrayName + "_begin");
11641165

0 commit comments

Comments
 (0)