From a213f735d8113de5428bd23cf97153dcda0e2e71 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 4 Jul 2021 16:30:18 +0200 Subject: [PATCH] [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. --- llvm/include/llvm/IR/Instructions.h | 20 ++++++++++---------- llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp | 5 +++-- llvm/lib/Transforms/Vectorize/VectorCombine.cpp | 6 +++--- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h index b911c34..9d9471f 100644 --- a/llvm/include/llvm/IR/Instructions.h +++ b/llvm/include/llvm/IR/Instructions.h @@ -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 IdxList, - const Twine &NameStr = "", - Instruction *InsertBefore = nullptr){ + LLVM_ATTRIBUTE_DEPRECATED(static GetElementPtrInst *CreateInBounds( + Value *Ptr, ArrayRef 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 IdxList, const Twine &NameStr = "", @@ -1006,10 +1006,10 @@ public: return GEP; } - static GetElementPtrInst *CreateInBounds(Value *Ptr, - ArrayRef IdxList, - const Twine &NameStr, - BasicBlock *InsertAtEnd) { + LLVM_ATTRIBUTE_DEPRECATED(static GetElementPtrInst *CreateInBounds( + Value *Ptr, ArrayRef 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 a12ef39..e4c0cd7 100644 --- a/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp +++ b/llvm/lib/Target/BPF/BPFAbstractMemberAccess.cpp @@ -367,8 +367,9 @@ void BPFAbstractMemberAccess::replaceWithGEP(std::vector &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 5fae270..d18bcd3 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( -- 2.7.4