const SCEV *computeBECount(const SCEV *Delta, const SCEV *Stride,
bool Equality);
- // Compute the maximum backedge count based on the range of values
- // permitted by Start, End, and Stride.
- const SCEV *computeMaxBECount(const SCEV *Start, const SCEV *Stride,
+ /// Compute the maximum backedge count based on the range of values
+ /// permitted by Start, End, and Stride. This is for loops of the form
+ /// {Start, +, Stride} LT End.
+ const SCEV *computeMaxBECountForLT(const SCEV *Start, const SCEV *Stride,
const SCEV *End, unsigned BitWidth,
bool IsSigned);
return getUDivExpr(Delta, Step);
}
-const SCEV *ScalarEvolution::computeMaxBECount(const SCEV *Start,
- const SCEV *Stride,
- const SCEV *End,
- unsigned BitWidth,
- bool IsSigned) {
+const SCEV *ScalarEvolution::computeMaxBECountForLT(const SCEV *Start,
+ const SCEV *Stride,
+ const SCEV *End,
+ unsigned BitWidth,
+ bool IsSigned) {
assert(!isKnownNonPositive(Stride) &&
"Stride is expected strictly positive!");
// bound of the loop (RHS), and the fact that IV does not overflow (which is
// checked above).
if (!isLoopInvariant(RHS, L)) {
- const SCEV *MaxBECount = computeMaxBECount(
+ const SCEV *MaxBECount = computeMaxBECountForLT(
Start, Stride, RHS, getTypeSizeInBits(LHS->getType()), IsSigned);
return ExitLimit(getCouldNotCompute() /* ExactNotTaken */, MaxBECount,
false /*MaxOrZero*/, Predicates);
MaxBECount = BECountIfBackedgeTaken;
MaxOrZero = true;
} else {
- MaxBECount = computeMaxBECount(Start, Stride, RHS,
- getTypeSizeInBits(LHS->getType()), IsSigned);
+ MaxBECount = computeMaxBECountForLT(
+ Start, Stride, RHS, getTypeSizeInBits(LHS->getType()), IsSigned);
}
if (isa<SCEVCouldNotCompute>(MaxBECount) &&