diff options
author | Jay Foad <jay.foad@gmail.com> | 2011-01-14 08:07:43 +0000 |
---|---|---|
committer | Jay Foad <jay.foad@gmail.com> | 2011-01-14 08:07:43 +0000 |
commit | 25052d8d64f18a85d6a84e0e010f6ba3eba0760d (patch) | |
tree | 3303905c62ad6228c42e26c484d442f3ec187dd6 /lib/VMCore/Constants.cpp | |
parent | e0a1a5ba91df6817f9ffae7af65ed0bda66f7620 (diff) | |
download | llvm-25052d8d64f18a85d6a84e0e010f6ba3eba0760d.tar.gz llvm-25052d8d64f18a85d6a84e0e010f6ba3eba0760d.tar.bz2 llvm-25052d8d64f18a85d6a84e0e010f6ba3eba0760d.tar.xz |
Remove casts between Value** and Constant**, which won't work if a
static_cast from Constant* to Value* has to adjust the "this" pointer.
This is groundwork for PR889.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123435 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Constants.cpp')
-rw-r--r-- | lib/VMCore/Constants.cpp | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 29fc0dbdf8..46daa61d99 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -1546,8 +1546,9 @@ Constant *ConstantExpr::getSelectTy(const Type *ReqTy, Constant *C, return pImpl->ExprConstants.getOrCreate(ReqTy, Key); } +template<typename IndexTy> Constant *ConstantExpr::getGetElementPtrTy(const Type *ReqTy, Constant *C, - Value* const *Idxs, + IndexTy const *Idxs, unsigned NumIdx) { assert(GetElementPtrInst::getIndexedType(C->getType(), Idxs, Idxs+NumIdx) == @@ -1555,7 +1556,7 @@ Constant *ConstantExpr::getGetElementPtrTy(const Type *ReqTy, Constant *C, "GEP indices invalid!"); if (Constant *FC = ConstantFoldGetElementPtr(C, /*inBounds=*/false, - (Constant**)Idxs, NumIdx)) + Idxs, NumIdx)) return FC; // Fold a few common cases... assert(C->getType()->isPointerTy() && @@ -1572,9 +1573,10 @@ Constant *ConstantExpr::getGetElementPtrTy(const Type *ReqTy, Constant *C, return pImpl->ExprConstants.getOrCreate(ReqTy, Key); } +template<typename IndexTy> Constant *ConstantExpr::getInBoundsGetElementPtrTy(const Type *ReqTy, Constant *C, - Value *const *Idxs, + IndexTy const *Idxs, unsigned NumIdx) { assert(GetElementPtrInst::getIndexedType(C->getType(), Idxs, Idxs+NumIdx) == @@ -1582,7 +1584,7 @@ Constant *ConstantExpr::getInBoundsGetElementPtrTy(const Type *ReqTy, "GEP indices invalid!"); if (Constant *FC = ConstantFoldGetElementPtr(C, /*inBounds=*/true, - (Constant**)Idxs, NumIdx)) + Idxs, NumIdx)) return FC; // Fold a few common cases... assert(C->getType()->isPointerTy() && @@ -1600,8 +1602,9 @@ Constant *ConstantExpr::getInBoundsGetElementPtrTy(const Type *ReqTy, return pImpl->ExprConstants.getOrCreate(ReqTy, Key); } -Constant *ConstantExpr::getGetElementPtr(Constant *C, Value* const *Idxs, - unsigned NumIdx) { +template<typename IndexTy> +Constant *ConstantExpr::getGetElementPtrImpl(Constant *C, IndexTy const *Idxs, + unsigned NumIdx) { // Get the result type of the getelementptr! const Type *Ty = GetElementPtrInst::getIndexedType(C->getType(), Idxs, Idxs+NumIdx); @@ -1610,9 +1613,10 @@ Constant *ConstantExpr::getGetElementPtr(Constant *C, Value* const *Idxs, return getGetElementPtrTy(PointerType::get(Ty, As), C, Idxs, NumIdx); } -Constant *ConstantExpr::getInBoundsGetElementPtr(Constant *C, - Value* const *Idxs, - unsigned NumIdx) { +template<typename IndexTy> +Constant *ConstantExpr::getInBoundsGetElementPtrImpl(Constant *C, + IndexTy const *Idxs, + unsigned NumIdx) { // Get the result type of the getelementptr! const Type *Ty = GetElementPtrInst::getIndexedType(C->getType(), Idxs, Idxs+NumIdx); @@ -1621,15 +1625,26 @@ Constant *ConstantExpr::getInBoundsGetElementPtr(Constant *C, return getInBoundsGetElementPtrTy(PointerType::get(Ty, As), C, Idxs, NumIdx); } -Constant *ConstantExpr::getGetElementPtr(Constant *C, Constant* const *Idxs, +Constant *ConstantExpr::getGetElementPtr(Constant *C, Value* const *Idxs, + unsigned NumIdx) { + return getGetElementPtrImpl(C, Idxs, NumIdx); +} + +Constant *ConstantExpr::getGetElementPtr(Constant *C, Constant *const *Idxs, unsigned NumIdx) { - return getGetElementPtr(C, (Value* const *)Idxs, NumIdx); + return getGetElementPtrImpl(C, Idxs, NumIdx); +} + +Constant *ConstantExpr::getInBoundsGetElementPtr(Constant *C, + Value* const *Idxs, + unsigned NumIdx) { + return getInBoundsGetElementPtrImpl(C, Idxs, NumIdx); } Constant *ConstantExpr::getInBoundsGetElementPtr(Constant *C, - Constant* const *Idxs, + Constant *const *Idxs, unsigned NumIdx) { - return getInBoundsGetElementPtr(C, (Value* const *)Idxs, NumIdx); + return getInBoundsGetElementPtrImpl(C, Idxs, NumIdx); } Constant * |