From 83a87b831a11d99d3c986c0c285f4688119e8831 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 8 Jul 2021 17:49:56 +0200 Subject: [PATCH] [IR] Restore vector support for deprecated CreateGEP methods As pointed out in post-commit review on rG8e22539067d9, it's necessary to call getScalarType() to support GEPs with a vector base. Dropping that call was an oversight on my side. --- llvm/include/llvm/IR/IRBuilder.h | 28 ++++++++++++++++++---------- llvm/include/llvm/IR/Instructions.h | 10 ++++++---- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/llvm/include/llvm/IR/IRBuilder.h b/llvm/include/llvm/IR/IRBuilder.h index c76ebb06d44a..bd7fa7f0caff 100644 --- a/llvm/include/llvm/IR/IRBuilder.h +++ b/llvm/include/llvm/IR/IRBuilder.h @@ -1786,8 +1786,8 @@ public: Value *CreateGEP(Value *Ptr, ArrayRef IdxList, const Twine &Name = "") { - return CreateGEP( - Ptr->getType()->getPointerElementType(), Ptr, IdxList, Name); + return CreateGEP(Ptr->getType()->getScalarType()->getPointerElementType(), + Ptr, IdxList, Name); } Value *CreateGEP(Type *Ty, Value *Ptr, ArrayRef IdxList, @@ -1807,7 +1807,8 @@ public: Value *CreateInBoundsGEP(Value *Ptr, ArrayRef IdxList, const Twine &Name = "") { return CreateInBoundsGEP( - Ptr->getType()->getPointerElementType(), Ptr, IdxList, Name); + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, IdxList, + Name); } Value *CreateInBoundsGEP(Type *Ty, Value *Ptr, ArrayRef IdxList, @@ -1826,7 +1827,8 @@ public: } Value *CreateGEP(Value *Ptr, Value *Idx, const Twine &Name = "") { - return CreateGEP(Ptr->getType()->getPointerElementType(), Ptr, Idx, Name); + return CreateGEP(Ptr->getType()->getScalarType()->getPointerElementType(), + Ptr, Idx, Name); } Value *CreateGEP(Type *Ty, Value *Ptr, Value *Idx, const Twine &Name = "") { @@ -1846,7 +1848,8 @@ public: Value *CreateConstGEP1_32(Value *Ptr, unsigned Idx0, const Twine &Name = "") { return CreateConstGEP1_32( - Ptr->getType()->getPointerElementType(), Ptr, Idx0, Name); + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, Idx0, + Name); } Value *CreateConstGEP1_32(Type *Ty, Value *Ptr, unsigned Idx0, @@ -1907,7 +1910,8 @@ public: Value *CreateConstGEP1_64(Value *Ptr, uint64_t Idx0, const Twine &Name = "") { return CreateConstGEP1_64( - Ptr->getType()->getPointerElementType(), Ptr, Idx0, Name); + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, Idx0, + Name); } Value *CreateConstInBoundsGEP1_64(Type *Ty, Value *Ptr, uint64_t Idx0, @@ -1923,7 +1927,8 @@ public: Value *CreateConstInBoundsGEP1_64(Value *Ptr, uint64_t Idx0, const Twine &Name = "") { return CreateConstInBoundsGEP1_64( - Ptr->getType()->getPointerElementType(), Ptr, Idx0, Name); + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, Idx0, + Name); } Value *CreateConstGEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0, uint64_t Idx1, @@ -1942,7 +1947,8 @@ public: Value *CreateConstGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1, const Twine &Name = "") { return CreateConstGEP2_64( - Ptr->getType()->getPointerElementType(), Ptr, Idx0, Idx1, Name); + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, Idx0, + Idx1, Name); } Value *CreateConstInBoundsGEP2_64(Type *Ty, Value *Ptr, uint64_t Idx0, @@ -1961,7 +1967,8 @@ public: Value *CreateConstInBoundsGEP2_64(Value *Ptr, uint64_t Idx0, uint64_t Idx1, const Twine &Name = "") { return CreateConstInBoundsGEP2_64( - Ptr->getType()->getPointerElementType(), Ptr, Idx0, Idx1, Name); + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, Idx0, + Idx1, Name); } Value *CreateStructGEP(Type *Ty, Value *Ptr, unsigned Idx, @@ -1971,7 +1978,8 @@ public: Value *CreateStructGEP(Value *Ptr, unsigned Idx, const Twine &Name = "") { return CreateConstInBoundsGEP2_32( - Ptr->getType()->getPointerElementType(), Ptr, 0, Idx, Name); + Ptr->getType()->getScalarType()->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 e48a14f4b5b4..a5cebf0a4626 100644 --- a/llvm/include/llvm/IR/Instructions.h +++ b/llvm/include/llvm/IR/Instructions.h @@ -987,8 +987,9 @@ public: Value *Ptr, ArrayRef IdxList, const Twine &NameStr = "", Instruction *InsertBefore = nullptr), "Use the version with explicit element type instead") { - return CreateInBounds(Ptr->getType()->getPointerElementType(), Ptr, IdxList, - NameStr, InsertBefore); + return CreateInBounds( + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, IdxList, + NameStr, InsertBefore); } /// Create an "inbounds" getelementptr. See the documentation for the @@ -1007,8 +1008,9 @@ public: Value *Ptr, ArrayRef IdxList, const Twine &NameStr, BasicBlock *InsertAtEnd), "Use the version with explicit element type instead") { - return CreateInBounds(Ptr->getType()->getPointerElementType(), Ptr, IdxList, - NameStr, InsertAtEnd); + return CreateInBounds( + Ptr->getType()->getScalarType()->getPointerElementType(), Ptr, IdxList, + NameStr, InsertAtEnd); } static GetElementPtrInst *CreateInBounds(Type *PointeeType, Value *Ptr,