diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 40dbbaabe69..e3fd2161c82 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -226,7 +226,7 @@ public: static unsigned getPointerOperandIndex() { return 0U; } unsigned getPointerAddressSpace() const { - return cast(getPointerOperand()->getType())->getAddressSpace(); + return getPointerOperand()->getType()->getPointerAddressSpace(); } @@ -348,16 +348,7 @@ public: static unsigned getPointerOperandIndex() { return 1U; } unsigned getPointerAddressSpace() const { - if (getPointerOperand()->getType()->isPointerTy()) - return cast(getPointerOperand()->getType()) - ->getAddressSpace(); - if (getPointerOperand()->getType()->isVectorTy() - && cast(getPointerOperand()->getType())->isPointerTy()) - return cast(cast( - getPointerOperand()->getType())->getElementType()) - ->getAddressSpace(); - llvm_unreachable("Only a vector of pointers or pointers can be used!"); - return 0; + return getPointerOperand()->getType()->getPointerAddressSpace(); } // Methods for support type inquiry through isa, cast, and dyn_cast: @@ -527,7 +518,7 @@ public: const Value *getNewValOperand() const { return getOperand(2); } unsigned getPointerAddressSpace() const { - return cast(getPointerOperand()->getType())->getAddressSpace(); + return getPointerOperand()->getType()->getPointerAddressSpace(); } // Methods for support type inquiry through isa, cast, and dyn_cast: @@ -670,7 +661,7 @@ public: const Value *getValOperand() const { return getOperand(1); } unsigned getPointerAddressSpace() const { - return cast(getPointerOperand()->getType())->getAddressSpace(); + return getPointerOperand()->getType()->getPointerAddressSpace(); } // Methods for support type inquiry through isa, cast, and dyn_cast: @@ -801,7 +792,7 @@ public: } unsigned getPointerAddressSpace() const { - return cast(getPointerOperandType())->getAddressSpace(); + return getPointerOperand()->getType()->getPointerAddressSpace(); } /// getPointerOperandType - Method to return the pointer operand as a @@ -3616,15 +3607,7 @@ public: /// @brief return the address space of the pointer. unsigned getAddressSpace() const { - if (getType()->isPointerTy()) - return cast(getType())->getAddressSpace(); - if (getType()->isVectorTy() && - cast(getType())->getElementType()->isPointerTy()) - return cast( - cast(getType())->getElementType()) - ->getAddressSpace(); - llvm_unreachable("Must be a pointer or a vector of pointers."); - return 0; + return getType()->getPointerAddressSpace(); } // Methods for support type inquiry through isa, cast, and dyn_cast: @@ -3665,16 +3648,7 @@ public: /// @brief return the address space of the pointer. unsigned getPointerAddressSpace() const { - Type *Ty = getOperand(0)->getType(); - if (Ty->isPointerTy()) - return cast(Ty)->getAddressSpace(); - if (Ty->isVectorTy() - && cast(Ty)->getElementType()->isPointerTy()) - return cast( - cast(Ty)->getElementType()) - ->getAddressSpace(); - llvm_unreachable("Must be a pointer or a vector of pointers."); - return 0; + return getOperand(0)->getType()->getPointerAddressSpace(); } // Methods for support type inquiry through isa, cast, and dyn_cast: diff --git a/include/llvm/Type.h b/include/llvm/Type.h index 10e14dd8dea..def45750dd7 100644 --- a/include/llvm/Type.h +++ b/include/llvm/Type.h @@ -346,8 +346,10 @@ public: unsigned getVectorNumElements() const; Type *getVectorElementType() const { return getSequentialElementType(); } - unsigned getPointerAddressSpace() const; Type *getPointerElementType() const { return getSequentialElementType(); } + + /// \brief Get the address space of this pointer or pointer vector type. + unsigned getPointerAddressSpace() const; //===--------------------------------------------------------------------===// // Static members exported by the Type class itself. Useful for getting diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index 1bbd2c6cf0b..1656ab2cab3 100644 --- a/lib/VMCore/Type.cpp +++ b/lib/VMCore/Type.cpp @@ -215,7 +215,7 @@ unsigned Type::getVectorNumElements() const { } unsigned Type::getPointerAddressSpace() const { - return cast(this)->getAddressSpace(); + return cast(getScalarType())->getAddressSpace(); }