[IR] Deprecate GetElementPtrInst::CreateInBounds without element type

This API is not compatible with opaque pointers, the method
accepting an explicit pointer element type should be used instead.

Thankfully there were few in-tree users. The BPF case still ends
up using the pointer element type for now and needs something like
D105407 to avoid doing so.
This commit is contained in:
Nikita Popov 2021-07-04 16:30:18 +02:00
parent 287d39dd5a
commit a213f735d8
3 changed files with 16 additions and 15 deletions

View File

@ -987,15 +987,15 @@ public:
NameStr, InsertAtEnd);
}
/// Create an "inbounds" getelementptr. See the documentation for the
/// "inbounds" flag in LangRef.html for details.
static GetElementPtrInst *CreateInBounds(Value *Ptr,
ArrayRef<Value *> IdxList,
const Twine &NameStr = "",
Instruction *InsertBefore = nullptr){
LLVM_ATTRIBUTE_DEPRECATED(static GetElementPtrInst *CreateInBounds(
Value *Ptr, ArrayRef<Value *> IdxList, const Twine &NameStr = "",
Instruction *InsertBefore = nullptr),
"Use the version with explicit element type instead") {
return CreateInBounds(nullptr, Ptr, IdxList, NameStr, InsertBefore);
}
/// Create an "inbounds" getelementptr. See the documentation for the
/// "inbounds" flag in LangRef.html for details.
static GetElementPtrInst *
CreateInBounds(Type *PointeeType, Value *Ptr, ArrayRef<Value *> IdxList,
const Twine &NameStr = "",
@ -1006,10 +1006,10 @@ public:
return GEP;
}
static GetElementPtrInst *CreateInBounds(Value *Ptr,
ArrayRef<Value *> IdxList,
const Twine &NameStr,
BasicBlock *InsertAtEnd) {
LLVM_ATTRIBUTE_DEPRECATED(static GetElementPtrInst *CreateInBounds(
Value *Ptr, ArrayRef<Value *> IdxList, const Twine &NameStr,
BasicBlock *InsertAtEnd),
"Use the version with explicit element type instead") {
return CreateInBounds(nullptr, Ptr, IdxList, NameStr, InsertAtEnd);
}

View File

@ -367,8 +367,9 @@ void BPFAbstractMemberAccess::replaceWithGEP(std::vector<CallInst *> &CallList,
IdxList.push_back(Zero);
IdxList.push_back(Call->getArgOperand(GEPIndex));
auto *GEP = GetElementPtrInst::CreateInBounds(Call->getArgOperand(0),
IdxList, "", Call);
auto *GEP = GetElementPtrInst::CreateInBounds(
Call->getArgOperand(0)->getType()->getPointerElementType(),
Call->getArgOperand(0), IdxList, "", Call);
Call->replaceAllUsesWith(GEP);
Call->eraseFromParent();
}

View File

@ -839,9 +839,9 @@ bool VectorCombine::foldSingleElementStore(Instruction &I) {
MemoryLocation::get(SI), AA))
return false;
Value *GEP = GetElementPtrInst::CreateInBounds(
SI->getPointerOperand(), {ConstantInt::get(Idx->getType(), 0), Idx});
Builder.Insert(GEP);
Value *GEP = Builder.CreateInBoundsGEP(
SI->getValueOperand()->getType(), SI->getPointerOperand(),
{ConstantInt::get(Idx->getType(), 0), Idx});
StoreInst *NSI = Builder.CreateStore(NewElement, GEP);
NSI->copyMetadata(*SI);
Align ScalarOpAlignment = computeAlignmentAfterScalarization(