diff options
author | Dan Gohman <gohman@apple.com> | 2009-04-29 22:29:01 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-04-29 22:29:01 +0000 |
commit | 0098d01ef988708314fbbff12ac292ea2c5e5467 (patch) | |
tree | 857087b3b436ae90b6788f126fec236f3b202f55 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 494dac3f84500d0b6ee0cf78c66ece6d5d92a600 (diff) | |
download | bcm5719-llvm-0098d01ef988708314fbbff12ac292ea2c5e5467.tar.gz bcm5719-llvm-0098d01ef988708314fbbff12ac292ea2c5e5467.zip |
Implement getSCEVAtScope for SCEV cast expressions.
llvm-svn: 70422
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index 257186f4599..8ecdd11d13a 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -2707,8 +2707,31 @@ SCEVHandle ScalarEvolution::getSCEVAtScope(SCEV *V, const Loop *L) { return UnknownValue; } - //assert(0 && "Unknown SCEV type!"); - return UnknownValue; + if (SCEVZeroExtendExpr *Cast = dyn_cast<SCEVZeroExtendExpr>(V)) { + SCEVHandle Op = getSCEVAtScope(Cast->getOperand(), L); + if (Op == UnknownValue) return Op; + if (Op == Cast->getOperand()) + return Cast; // must be loop invariant + return getZeroExtendExpr(Op, Cast->getType()); + } + + if (SCEVSignExtendExpr *Cast = dyn_cast<SCEVSignExtendExpr>(V)) { + SCEVHandle Op = getSCEVAtScope(Cast->getOperand(), L); + if (Op == UnknownValue) return Op; + if (Op == Cast->getOperand()) + return Cast; // must be loop invariant + return getSignExtendExpr(Op, Cast->getType()); + } + + if (SCEVTruncateExpr *Cast = dyn_cast<SCEVTruncateExpr>(V)) { + SCEVHandle Op = getSCEVAtScope(Cast->getOperand(), L); + if (Op == UnknownValue) return Op; + if (Op == Cast->getOperand()) + return Cast; // must be loop invariant + return getTruncateExpr(Op, Cast->getType()); + } + + assert(0 && "Unknown SCEV type!"); } /// getSCEVAtScope - Return a SCEV expression handle for the specified value |