From 8e22539067d9376c4f808b25f543feba728d40c9 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 7 Jul 2021 21:56:32 +0200 Subject: [PATCH] [IR] Make some pointer element type accesses explicit (NFC) Explicitly fetch the pointer element type in various deprecated methods, so we can hopefully remove support from this from the base GEP constructor. --- llvm/include/llvm/IR/IRBuilder.h | 26 +++++++++++++++++--------- llvm/include/llvm/IR/Instructions.h | 6 ++++-- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index 9bd5ae1..c76ebb06 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -1786,7 +1786,8 @@ public: Value *CreateGEP(Value *Ptr, ArrayRef IdxList, const Twine &Name = "") { - return CreateGEP(nullptr, Ptr, IdxList, Name); + return CreateGEP( + Ptr->getType()->getPointerElementType(), Ptr, IdxList, Name); } Value *CreateGEP(Type *Ty, Value *Ptr, ArrayRef IdxList, @@ -1805,7 +1806,8 @@ public: Value *CreateInBoundsGEP(Value *Ptr, ArrayRef IdxList, const Twine &Name = "") { - return CreateInBoundsGEP(nullptr, Ptr, IdxList, Name); + return CreateInBoundsGEP( + Ptr->getType()->getPointerElementType(), Ptr, IdxList, Name); } Value *CreateInBoundsGEP(Type *Ty, Value *Ptr, ArrayRef IdxList, @@ -1824,7 +1826,7 @@ public: } Value *CreateGEP(Value *Ptr, Value *Idx, const Twine &Name = "") { - return CreateGEP(nullptr, Ptr, Idx, Name); + return CreateGEP(Ptr->getType()->getPointerElementType(), Ptr, Idx, Name); } Value *CreateGEP(Type *Ty, Value *Ptr, Value *Idx, const Twine &Name = "") { @@ -1843,7 +1845,8 @@ public: } Value *CreateConstGEP1_32(Value *Ptr, unsigned Idx0, const Twine &Name = "") { - return CreateConstGEP1_32(nullptr, Ptr, Idx0, Name); + return CreateConstGEP1_32( + Ptr->getType()->getPointerElementType(), Ptr, Idx0, Name); } Value *CreateConstGEP1_32(Type *Ty, Value *Ptr, unsigned Idx0, @@ -1903,7 +1906,8 @@ public: } Value *CreateConstGEP1_64(Value *Ptr, uint64_t Idx0, const Twine &Name = "") { - return CreateConstGEP1_64(nullptr, Ptr, Idx0, Name); + return CreateConstGEP1_64( + Ptr->getType()->getPointerElementType(), Ptr, Idx0, Name); } Value *CreateConstInBoundsGEP1_64(Type *Ty, Value *Ptr, uint64_t Idx0, @@ -1918,7 +1922,8 @@ public: Value *CreateConstInBoundsGEP1_64(Value *Ptr, uint64_t Idx0, const Twine &Name = "") { - return CreateConstInBoundsGEP1_64(nullptr, Ptr, Idx0, Name); + return CreateConstInBoundsGEP1_64( + Ptr->getType()->getPointerElementType(), Ptr, Idx0, Name); } Value *CreateConstGEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0, uint64_t Idx1, @@ -1936,7 +1941,8 @@ public: Value *CreateConstGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1, const Twine &Name = "") { - return CreateConstGEP2_64(nullptr, Ptr, Idx0, Idx1, Name); + return CreateConstGEP2_64( + Ptr->getType()->getPointerElementType(), Ptr, Idx0, Idx1, Name); } Value *CreateConstInBoundsGEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0, @@ -1954,7 +1960,8 @@ public: Value *CreateConstInBoundsGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1, const Twine &Name = "") { - return CreateConstInBoundsGEP2_64(nullptr, Ptr, Idx0, Idx1, Name); + return CreateConstInBoundsGEP2_64( + Ptr->getType()->getPointerElementType(), Ptr, Idx0, Idx1, Name); } Value *CreateStructGEP(Type *Ty, Value *Ptr, unsigned Idx, @@ -1963,7 +1970,8 @@ public: } Value *CreateStructGEP(Value *Ptr, unsigned Idx, const Twine &Name = "") { - return CreateConstInBoundsGEP2_32(nullptr, Ptr, 0, Idx, Name); + return CreateConstInBoundsGEP2_32( + Ptr->getType()->getPointerElementType(), Ptr, 0, Idx, Name); } /// Same as CreateGlobalString, but return a pointer with "i8*" type diff --git a/llvm/include/llvm/IR/Instructions.h b/llvm/include/llvm/IR/Instructions.h index 9d9471f..5de72de 100644 --- a/llvm/include/llvm/IR/Instructions.h +++ b/llvm/include/llvm/IR/Instructions.h @@ -991,7 +991,8 @@ public: 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); + return CreateInBounds(Ptr->getType()->getPointerElementType(), Ptr, IdxList, + NameStr, InsertBefore); } /// Create an "inbounds" getelementptr. See the documentation for the @@ -1010,7 +1011,8 @@ public: Value *Ptr, ArrayRef IdxList, const Twine &NameStr, BasicBlock *InsertAtEnd), "Use the version with explicit element type instead") { - return CreateInBounds(nullptr, Ptr, IdxList, NameStr, InsertAtEnd); + return CreateInBounds(Ptr->getType()->getPointerElementType(), Ptr, IdxList, + NameStr, InsertAtEnd); } static GetElementPtrInst *CreateInBounds(Type *PointeeType, Value *Ptr, -- 2.7.4