diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/IR/Type.h | 15 | ||||
-rw-r--r-- | llvm/lib/IR/Instructions.cpp | 3 |
2 files changed, 14 insertions, 4 deletions
diff --git a/llvm/include/llvm/IR/Type.h b/llvm/include/llvm/IR/Type.h index 52ef5605f7d..4e2ef5301f5 100644 --- a/llvm/include/llvm/IR/Type.h +++ b/llvm/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/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index dcd0feb43cb..693879be181 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/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; |