Process the step before the start, because it's usually the simpler

of the two.

llvm-svn: 111495
This commit is contained in:
Dan Gohman 2010-08-19 01:02:31 +00:00
parent beb506eeed
commit 129a816ee6
1 changed files with 3 additions and 3 deletions

View File

@ -441,12 +441,12 @@ static const SCEV *getExactSDiv(const SCEV *LHS, const SCEV *RHS,
// Distribute the sdiv over addrec operands, if the addrec doesn't overflow. // Distribute the sdiv over addrec operands, if the addrec doesn't overflow.
if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(LHS)) { if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(LHS)) {
if (IgnoreSignificantBits || isAddRecSExtable(AR, SE)) { if (IgnoreSignificantBits || isAddRecSExtable(AR, SE)) {
const SCEV *Start = getExactSDiv(AR->getStart(), RHS, SE,
IgnoreSignificantBits);
if (!Start) return 0;
const SCEV *Step = getExactSDiv(AR->getStepRecurrence(SE), RHS, SE, const SCEV *Step = getExactSDiv(AR->getStepRecurrence(SE), RHS, SE,
IgnoreSignificantBits); IgnoreSignificantBits);
if (!Step) return 0; if (!Step) return 0;
const SCEV *Start = getExactSDiv(AR->getStart(), RHS, SE,
IgnoreSignificantBits);
if (!Start) return 0;
return SE.getAddRecExpr(Start, Step, AR->getLoop()); return SE.getAddRecExpr(Start, Step, AR->getLoop());
} }
return 0; return 0;