diff options
author | Dan Gohman <gohman@apple.com> | 2008-06-18 16:23:07 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-06-18 16:23:07 +0000 |
commit | be928e3b21858a97911277b5b034f6e7a5a1aefc (patch) | |
tree | ea4df02f85c443e25a83214ab8975979a5adbd96 /llvm/lib/Analysis/ScalarEvolution.cpp | |
parent | 687f35f46644eac3e0fb940c0414a0ba79d78e61 (diff) | |
download | bcm5719-llvm-be928e3b21858a97911277b5b034f6e7a5a1aefc.tar.gz bcm5719-llvm-be928e3b21858a97911277b5b034f6e7a5a1aefc.zip |
Move LSR's private isZero function to a public SCEV member
function, and make use of it in several places.
llvm-svn: 52463
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index ae3d10033f1..36da85bc06c 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -132,6 +132,12 @@ uint32_t SCEV::getBitWidth() const { return 0; } +bool SCEV::isZero() const { + if (const SCEVConstant *SC = dyn_cast<SCEVConstant>(this)) + return SC->getValue()->isZero(); + return false; +} + SCEVCouldNotCompute::SCEVCouldNotCompute() : SCEV(scCouldNotCompute) {} @@ -1136,11 +1142,10 @@ SCEVHandle ScalarEvolution::getAddRecExpr(std::vector<SCEVHandle> &Operands, const Loop *L) { if (Operands.size() == 1) return Operands[0]; - if (SCEVConstant *StepC = dyn_cast<SCEVConstant>(Operands.back())) - if (StepC->getValue()->isZero()) { - Operands.pop_back(); - return getAddRecExpr(Operands, L); // { X,+,0 } --> X - } + if (Operands.back()->isZero()) { + Operands.pop_back(); + return getAddRecExpr(Operands, L); // { X,+,0 } --> X + } SCEVAddRecExpr *&Result = (*SCEVAddRecExprs)[std::make_pair(L, std::vector<SCEV*>(Operands.begin(), @@ -2583,9 +2588,8 @@ SCEVHandle ScalarEvolutionsImpl::HowFarToZero(SCEV *V, const Loop *L) { // value at this index. When solving for "X*X != 5", for example, we // should not accept a root of 2. SCEVHandle Val = AddRec->evaluateAtIteration(R1, SE); - if (SCEVConstant *EvalVal = dyn_cast<SCEVConstant>(Val)) - if (EvalVal->getValue()->isZero()) - return R1; // We found a quadratic root! + if (Val->isZero()) + return R1; // We found a quadratic root! } } } |