From e1f5c817e89a5965094d07d563585642bfe57d42 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Sun, 13 Nov 2016 06:58:45 +0000 Subject: [PATCH] IR: Change the Type::get{Array,Vector,Pointer}ElementType() functions to perform the correct type assertion. Previously we were only asserting that the type was a sequential type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286749 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Type.h | 15 ++++++++++++--- lib/IR/Instructions.cpp | 3 ++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/include/llvm/IR/Type.h b/include/llvm/IR/Type.h index 52ef5605f7d..4e2ef5301f5 100644 --- a/include/llvm/IR/Type.h +++ b/include/llvm/IR/Type.h @@ -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; diff --git a/lib/IR/Instructions.cpp b/lib/IR/Instructions.cpp index dcd0feb43cb..693879be181 100644 --- a/lib/IR/Instructions.cpp +++ b/lib/IR/Instructions.cpp @@ -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; -- 2.11.0