[llvm] 83a87b8 - [IR] Restore vector support for deprecated CreateGEP methods

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 8 09:16:07 PDT 2021


Author: Nikita Popov
Date: 2021-07-08T18:15:56+02:00
New Revision: 83a87b831a11d99d3c986c0c285f4688119e8831

URL: https://github.com/llvm/llvm-project/commit/83a87b831a11d99d3c986c0c285f4688119e8831
DIFF: https://github.com/llvm/llvm-project/commit/83a87b831a11d99d3c986c0c285f4688119e8831.diff

LOG: [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.

Added: 
    

Modified: 
    llvm/include/llvm/IR/IRBuilder.h
    llvm/include/llvm/IR/Instructions.h

Removed: 
    


################################################################################
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 @@ class IRBuilderBase {
 
   Value *CreateGEP(Value *Ptr, ArrayRef<Value *> 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<Value *> IdxList,
@@ -1807,7 +1807,8 @@ class IRBuilderBase {
   Value *CreateInBoundsGEP(Value *Ptr, ArrayRef<Value *> 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<Value *> IdxList,
@@ -1826,7 +1827,8 @@ class IRBuilderBase {
   }
 
   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 @@ class IRBuilderBase {
 
   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 @@ class IRBuilderBase {
 
   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 @@ class IRBuilderBase {
   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 @@ class IRBuilderBase {
   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 @@ class IRBuilderBase {
   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 @@ class IRBuilderBase {
 
   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 @@ class GetElementPtrInst : public Instruction {
         Value *Ptr, ArrayRef<Value *> 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 @@ class GetElementPtrInst : public Instruction {
         Value *Ptr, ArrayRef<Value *> 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,


        


More information about the llvm-commits mailing list