diff options
author | Micah Villmow <villmow@gmail.com> | 2012-10-11 17:21:41 +0000 |
---|---|---|
committer | Micah Villmow <villmow@gmail.com> | 2012-10-11 17:21:41 +0000 |
commit | f3840d2c16a4ec4c879a8ded402835746de380f8 (patch) | |
tree | 705fb3f3aea368f4880d2d672312e6b783528718 /include/llvm/Instructions.h | |
parent | ebba49395c189364c9ef77fb4c432856330ceca1 (diff) | |
download | external_llvm-f3840d2c16a4ec4c879a8ded402835746de380f8.tar.gz external_llvm-f3840d2c16a4ec4c879a8ded402835746de380f8.tar.bz2 external_llvm-f3840d2c16a4ec4c879a8ded402835746de380f8.zip |
Add in the first iteration of support for llvm/clang/lldb to allow variable per address space pointer sizes to be optimized correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165726 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Instructions.h')
-rw-r--r-- | include/llvm/Instructions.h | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 6837608b2c..9c526bd97b 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -350,7 +350,16 @@ public: static unsigned getPointerOperandIndex() { return 1U; } unsigned getPointerAddressSpace() const { - return cast<PointerType>(getPointerOperand()->getType())->getAddressSpace(); + if (getPointerOperand()->getType()->isPointerTy()) + return cast<PointerType>(getPointerOperand()->getType()) + ->getAddressSpace(); + if (getPointerOperand()->getType()->isVectorTy() + && cast<VectorType>(getPointerOperand()->getType())->isPointerTy()) + return cast<PointerType>(cast<VectorType>( + getPointerOperand()->getType())->getElementType()) + ->getAddressSpace(); + llvm_unreachable("Only a vector of pointers or pointers can be used!"); + return 0; } // Methods for support type inquiry through isa, cast, and dyn_cast: @@ -3653,7 +3662,15 @@ public: /// @brief return the address space of the pointer. unsigned getAddressSpace() const { - return cast<PointerType>(getType())->getAddressSpace(); + if (getType()->isPointerTy()) + return cast<PointerType>(getType())->getAddressSpace(); + if (getType()->isVectorTy() && + cast<VectorType>(getType())->getElementType()->isPointerTy()) + return cast<PointerType>( + cast<VectorType>(getType())->getElementType()) + ->getAddressSpace(); + llvm_unreachable("Must be a pointer or a vector of pointers."); + return 0; } // Methods for support type inquiry through isa, cast, and dyn_cast: @@ -3695,7 +3712,16 @@ public: /// @brief return the address space of the pointer. unsigned getPointerAddressSpace() const { - return cast<PointerType>(getOperand(0)->getType())->getAddressSpace(); + Type *Ty = getOperand(0)->getType(); + if (Ty->isPointerTy()) + return cast<PointerType>(Ty)->getAddressSpace(); + if (Ty->isVectorTy() + && cast<VectorType>(Ty)->getElementType()->isPointerTy()) + return cast<PointerType>( + cast<VectorType>(Ty)->getElementType()) + ->getAddressSpace(); + llvm_unreachable("Must be a pointer or a vector of pointers."); + return 0; } // Methods for support type inquiry through isa, cast, and dyn_cast: |