[llvm] a213f73 - [IR] Deprecate GetElementPtrInst::CreateInBounds without element type
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 4 07:49:56 PDT 2021
Author: Nikita Popov
Date: 2021-07-04T16:49:30+02:00
New Revision: a213f735d8113de5428bd23cf97153dcda0e2e71
URL: https://github.com/llvm/llvm-project/commit/a213f735d8113de5428bd23cf97153dcda0e2e71
DIFF: https://github.com/llvm/llvm-project/commit/a213f735d8113de5428bd23cf97153dcda0e2e71.diff
LOG: [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.
Added:
Modified:
llvm/include/llvm/IR/Instructions.h
llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp
llvm/lib/Transforms/Vectorize/VectorCombine.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h
index b911c34523788..9d9471f111537 100644
--- a/llvm/include/llvm/IR/Instructions.h
+++ b/llvm/include/llvm/IR/Instructions.h
@@ -987,15 +987,15 @@ class GetElementPtrInst : public Instruction {
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 @@ class GetElementPtrInst : public Instruction {
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);
}
diff --git a/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp b/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp
index a12ef395b00b2..e4c0cd70b3534 100644
--- a/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp
+++ b/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp
@@ -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();
}
diff --git a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
index 5fae270167294..d18bcd34620ca 100644
--- a/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ b/llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -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(
More information about the llvm-commits
mailing list