aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-12-04 17:05:42 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-12-04 17:05:42 +0000
commit14bab5db2d2a7b597ae7272e9c809d68ed3343b6 (patch)
treed2c2f827dfc5c87d08871b95ebd3e187f4f16bd7 /lib
parent10292555f391bf9fa0e8ee78da35757e9b7e49f2 (diff)
downloadexternal_llvm-14bab5db2d2a7b597ae7272e9c809d68ed3343b6.zip
external_llvm-14bab5db2d2a7b597ae7272e9c809d68ed3343b6.tar.gz
external_llvm-14bab5db2d2a7b597ae7272e9c809d68ed3343b6.tar.bz2
Fix inferred casts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32180 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Analysis/ScalarEvolution.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/Analysis/ScalarEvolution.cpp b/lib/Analysis/ScalarEvolution.cpp
index 87232b3..52d9410 100644
--- a/lib/Analysis/ScalarEvolution.cpp
+++ b/lib/Analysis/ScalarEvolution.cpp
@@ -178,7 +178,8 @@ SCEVHandle SCEVConstant::get(ConstantInt *V) {
// Make sure that SCEVConstant instances are all unsigned.
if (V->getType()->isSigned()) {
const Type *NewTy = V->getType()->getUnsignedVersion();
- V = cast<ConstantInt>(ConstantExpr::getCast(V, NewTy));
+ V = cast<ConstantInt>(
+ ConstantExpr::getInferredCast(V, false, NewTy, false));
}
SCEVConstant *&R = (*SCEVConstants)[V];
@@ -465,7 +466,7 @@ SCEVHandle SCEVUnknown::getIntegerSCEV(int Val, const Type *Ty) {
C = ConstantInt::get(Ty, Val);
else {
C = ConstantInt::get(Ty->getSignedVersion(), Val);
- C = ConstantExpr::getCast(C, Ty);
+ C = ConstantExpr::getInferredCast(C, true, Ty, false);
}
return SCEVUnknown::get(C);
}
@@ -511,7 +512,8 @@ static SCEVHandle PartialFact(SCEVHandle V, unsigned NumSteps) {
for (; NumSteps; --NumSteps)
Result *= Val-(NumSteps-1);
Constant *Res = ConstantInt::get(Type::ULongTy, Result);
- return SCEVUnknown::get(ConstantExpr::getCast(Res, V->getType()));
+ return SCEVUnknown::get(
+ ConstantExpr::getInferredCast(Res, false, V->getType(), true));
}
const Type *Ty = V->getType();
@@ -996,10 +998,11 @@ SCEVHandle SCEVSDivExpr::get(const SCEVHandle &LHS, const SCEVHandle &RHS) {
Constant *LHSCV = LHSC->getValue();
Constant *RHSCV = RHSC->getValue();
if (LHSCV->getType()->isUnsigned())
- LHSCV = ConstantExpr::getCast(LHSCV,
- LHSCV->getType()->getSignedVersion());
+ LHSCV = ConstantExpr::getInferredCast(
+ LHSCV, false, LHSCV->getType()->getSignedVersion(), true);
if (RHSCV->getType()->isUnsigned())
- RHSCV = ConstantExpr::getCast(RHSCV, LHSCV->getType());
+ RHSCV = ConstantExpr::getInferredCast(
+ RHSCV, false, LHSCV->getType(), true);
return SCEVUnknown::get(ConstantExpr::getSDiv(LHSCV, RHSCV));
}
}