IR: Change the Type::get{Array,Vector,Pointer}ElementType() functions to perform...
authorPeter Collingbourne <peter@pcc.me.uk>
Sun, 13 Nov 2016 06:58:45 +0000 (06:58 +0000)
committerPeter Collingbourne <peter@pcc.me.uk>
Sun, 13 Nov 2016 06:58:45 +0000 (06:58 +0000)
Previously we were only asserting that the type was a sequential type.

llvm-svn: 286749

llvm/include/llvm/IR/Type.h
llvm/lib/IR/Instructions.cpp

index 52ef560..4e2ef53 100644 (file)
@@ -344,12 +344,21 @@ public:
   }
 
   inline uint64_t getArrayNumElements() const;
-  Type *getArrayElementType() const { return getSequentialElementType(); }
+  Type *getArrayElementType() const {
+    assert(getTypeID() == ArrayTyID);
+    return ContainedTys[0];
+  }
 
   inline unsigned getVectorNumElements() const;
-  Type *getVectorElementType() const { return getSequentialElementType(); }
+  Type *getVectorElementType() const {
+    assert(getTypeID() == VectorTyID);
+    return ContainedTys[0];
+  }
 
-  Type *getPointerElementType() const { return getSequentialElementType(); }
+  Type *getPointerElementType() const {
+    assert(getTypeID() == PointerTyID);
+    return ContainedTys[0];
+  }
 
   /// Get the address space of this pointer or pointer vector type.
   inline unsigned getPointerAddressSpace() const;
index dcd0feb..693879b 100644 (file)
@@ -2550,7 +2550,8 @@ unsigned CastInst::isEliminableCastPair(
     case 14:
       // bitcast, addrspacecast -> addrspacecast if the element type of
       // bitcast's source is the same as that of addrspacecast's destination.
-      if (SrcTy->getPointerElementType() == DstTy->getPointerElementType())
+      if (SrcTy->getScalarType()->getPointerElementType() ==
+          DstTy->getScalarType()->getPointerElementType())
         return Instruction::AddrSpaceCast;
       return 0;