forked from OSchip/llvm-project
[SCEV] Rename getMaxBackedgeTakenCount to getConstantMaxBackedgeTakenCount [NFC]
llvm-svn: 368930
This commit is contained in:
parent
1bebc22bd9
commit
7b0515176b
|
@ -779,10 +779,10 @@ public:
|
||||||
/// to (i.e. a "conservative over-approximation") of the value returend by
|
/// to (i.e. a "conservative over-approximation") of the value returend by
|
||||||
/// getBackedgeTakenCount. If such a value cannot be computed, it returns the
|
/// getBackedgeTakenCount. If such a value cannot be computed, it returns the
|
||||||
/// SCEVCouldNotCompute object.
|
/// SCEVCouldNotCompute object.
|
||||||
const SCEV *getMaxBackedgeTakenCount(const Loop *L);
|
const SCEV *getConstantMaxBackedgeTakenCount(const Loop *L);
|
||||||
|
|
||||||
/// Return true if the backedge taken count is either the value returned by
|
/// Return true if the backedge taken count is either the value returned by
|
||||||
/// getMaxBackedgeTakenCount or zero.
|
/// getConstantMaxBackedgeTakenCount or zero.
|
||||||
bool isBackedgeTakenCountMaxOrZero(const Loop *L);
|
bool isBackedgeTakenCountMaxOrZero(const Loop *L);
|
||||||
|
|
||||||
/// Return true if the specified loop has an analyzable loop-invariant
|
/// Return true if the specified loop has an analyzable loop-invariant
|
||||||
|
|
|
@ -1707,7 +1707,7 @@ ScalarEvolution::getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
|
||||||
// in infinite recursion. In the later case, the analysis code will
|
// in infinite recursion. In the later case, the analysis code will
|
||||||
// cope with a conservative value, and it will take care to purge
|
// cope with a conservative value, and it will take care to purge
|
||||||
// that value once it has finished.
|
// that value once it has finished.
|
||||||
const SCEV *MaxBECount = getMaxBackedgeTakenCount(L);
|
const SCEV *MaxBECount = getConstantMaxBackedgeTakenCount(L);
|
||||||
if (!isa<SCEVCouldNotCompute>(MaxBECount)) {
|
if (!isa<SCEVCouldNotCompute>(MaxBECount)) {
|
||||||
// Manually compute the final value for AR, checking for
|
// Manually compute the final value for AR, checking for
|
||||||
// overflow.
|
// overflow.
|
||||||
|
@ -2051,7 +2051,7 @@ ScalarEvolution::getSignExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth) {
|
||||||
// in infinite recursion. In the later case, the analysis code will
|
// in infinite recursion. In the later case, the analysis code will
|
||||||
// cope with a conservative value, and it will take care to purge
|
// cope with a conservative value, and it will take care to purge
|
||||||
// that value once it has finished.
|
// that value once it has finished.
|
||||||
const SCEV *MaxBECount = getMaxBackedgeTakenCount(L);
|
const SCEV *MaxBECount = getConstantMaxBackedgeTakenCount(L);
|
||||||
if (!isa<SCEVCouldNotCompute>(MaxBECount)) {
|
if (!isa<SCEVCouldNotCompute>(MaxBECount)) {
|
||||||
// Manually compute the final value for AR, checking for
|
// Manually compute the final value for AR, checking for
|
||||||
// overflow.
|
// overflow.
|
||||||
|
@ -3421,7 +3421,7 @@ ScalarEvolution::getAddRecExpr(SmallVectorImpl<const SCEV *> &Operands,
|
||||||
return getAddRecExpr(Operands, L, SCEV::FlagAnyWrap); // {X,+,0} --> X
|
return getAddRecExpr(Operands, L, SCEV::FlagAnyWrap); // {X,+,0} --> X
|
||||||
}
|
}
|
||||||
|
|
||||||
// It's tempting to want to call getMaxBackedgeTakenCount count here and
|
// It's tempting to want to call getConstantMaxBackedgeTakenCount count here and
|
||||||
// use that information to infer NUW and NSW flags. However, computing a
|
// use that information to infer NUW and NSW flags. However, computing a
|
||||||
// BE count requires calling getAddRecExpr, so we may not yet have a
|
// BE count requires calling getAddRecExpr, so we may not yet have a
|
||||||
// meaningful BE count at this point (and if we don't, we'd be stuck
|
// meaningful BE count at this point (and if we don't, we'd be stuck
|
||||||
|
@ -5654,7 +5654,7 @@ ScalarEvolution::getRangeRef(const SCEV *S,
|
||||||
|
|
||||||
// TODO: non-affine addrec
|
// TODO: non-affine addrec
|
||||||
if (AddRec->isAffine()) {
|
if (AddRec->isAffine()) {
|
||||||
const SCEV *MaxBECount = getMaxBackedgeTakenCount(AddRec->getLoop());
|
const SCEV *MaxBECount = getConstantMaxBackedgeTakenCount(AddRec->getLoop());
|
||||||
if (!isa<SCEVCouldNotCompute>(MaxBECount) &&
|
if (!isa<SCEVCouldNotCompute>(MaxBECount) &&
|
||||||
getTypeSizeInBits(MaxBECount->getType()) <= BitWidth) {
|
getTypeSizeInBits(MaxBECount->getType()) <= BitWidth) {
|
||||||
auto RangeFromAffine = getRangeForAffineAR(
|
auto RangeFromAffine = getRangeForAffineAR(
|
||||||
|
@ -6523,7 +6523,7 @@ unsigned ScalarEvolution::getSmallConstantTripCount(const Loop *L,
|
||||||
|
|
||||||
unsigned ScalarEvolution::getSmallConstantMaxTripCount(const Loop *L) {
|
unsigned ScalarEvolution::getSmallConstantMaxTripCount(const Loop *L) {
|
||||||
const auto *MaxExitCount =
|
const auto *MaxExitCount =
|
||||||
dyn_cast<SCEVConstant>(getMaxBackedgeTakenCount(L));
|
dyn_cast<SCEVConstant>(getConstantMaxBackedgeTakenCount(L));
|
||||||
return getConstantTripCount(MaxExitCount);
|
return getConstantTripCount(MaxExitCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6599,7 +6599,7 @@ const SCEV *ScalarEvolution::getBackedgeTakenCount(const Loop *L) {
|
||||||
|
|
||||||
/// Similar to getBackedgeTakenCount, except return the least SCEV value that is
|
/// Similar to getBackedgeTakenCount, except return the least SCEV value that is
|
||||||
/// known never to be less than the actual backedge taken count.
|
/// known never to be less than the actual backedge taken count.
|
||||||
const SCEV *ScalarEvolution::getMaxBackedgeTakenCount(const Loop *L) {
|
const SCEV *ScalarEvolution::getConstantMaxBackedgeTakenCount(const Loop *L) {
|
||||||
return getBackedgeTakenInfo(L).getMax(this);
|
return getBackedgeTakenInfo(L).getMax(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11438,8 +11438,8 @@ static void PrintLoopInfo(raw_ostream &OS, ScalarEvolution *SE,
|
||||||
L->getHeader()->printAsOperand(OS, /*PrintType=*/false);
|
L->getHeader()->printAsOperand(OS, /*PrintType=*/false);
|
||||||
OS << ": ";
|
OS << ": ";
|
||||||
|
|
||||||
if (!isa<SCEVCouldNotCompute>(SE->getMaxBackedgeTakenCount(L))) {
|
if (!isa<SCEVCouldNotCompute>(SE->getConstantMaxBackedgeTakenCount(L))) {
|
||||||
OS << "max backedge-taken count is " << *SE->getMaxBackedgeTakenCount(L);
|
OS << "max backedge-taken count is " << *SE->getConstantMaxBackedgeTakenCount(L);
|
||||||
if (SE->isBackedgeTakenCountMaxOrZero(L))
|
if (SE->isBackedgeTakenCountMaxOrZero(L))
|
||||||
OS << ", actual taken count either this or zero.";
|
OS << ", actual taken count either this or zero.";
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -2647,11 +2647,11 @@ bool IndVarSimplify::optimizeLoopExits(Loop *L) {
|
||||||
|
|
||||||
// Form an expression for the maximum exit count possible for this loop. We
|
// Form an expression for the maximum exit count possible for this loop. We
|
||||||
// merge the max and exact information to approximate a version of
|
// merge the max and exact information to approximate a version of
|
||||||
// getMaxBackedgeTakenInfo which isn't restricted to just constants.
|
// getConstantMaxBackedgeTakenCount which isn't restricted to just constants.
|
||||||
// TODO: factor this out as a version of getMaxBackedgeTakenCount which
|
// TODO: factor this out as a version of getConstantMaxBackedgeTakenCount which
|
||||||
// isn't guaranteed to return a constant.
|
// isn't guaranteed to return a constant.
|
||||||
SmallVector<const SCEV*, 4> ExitCounts;
|
SmallVector<const SCEV*, 4> ExitCounts;
|
||||||
const SCEV *MaxConstEC = SE->getMaxBackedgeTakenCount(L);
|
const SCEV *MaxConstEC = SE->getConstantMaxBackedgeTakenCount(L);
|
||||||
if (!isa<SCEVCouldNotCompute>(MaxConstEC))
|
if (!isa<SCEVCouldNotCompute>(MaxConstEC))
|
||||||
ExitCounts.push_back(MaxConstEC);
|
ExitCounts.push_back(MaxConstEC);
|
||||||
for (BasicBlock *ExitingBB : ExitingBlocks) {
|
for (BasicBlock *ExitingBB : ExitingBlocks) {
|
||||||
|
|
|
@ -191,7 +191,7 @@ static LoopDeletionResult deleteLoopIfDead(Loop *L, DominatorTree &DT,
|
||||||
|
|
||||||
// Don't remove loops for which we can't solve the trip count.
|
// Don't remove loops for which we can't solve the trip count.
|
||||||
// They could be infinite, in which case we'd be changing program behavior.
|
// They could be infinite, in which case we'd be changing program behavior.
|
||||||
const SCEV *S = SE.getMaxBackedgeTakenCount(L);
|
const SCEV *S = SE.getConstantMaxBackedgeTakenCount(L);
|
||||||
if (isa<SCEVCouldNotCompute>(S)) {
|
if (isa<SCEVCouldNotCompute>(S)) {
|
||||||
LLVM_DEBUG(dbgs() << "Could not compute SCEV MaxBackedgeTakenCount.\n");
|
LLVM_DEBUG(dbgs() << "Could not compute SCEV MaxBackedgeTakenCount.\n");
|
||||||
return Changed ? LoopDeletionResult::Modified
|
return Changed ? LoopDeletionResult::Modified
|
||||||
|
|
|
@ -240,7 +240,7 @@ static bool containsUnconditionalCallSafepoint(Loop *L, BasicBlock *Header,
|
||||||
static bool mustBeFiniteCountedLoop(Loop *L, ScalarEvolution *SE,
|
static bool mustBeFiniteCountedLoop(Loop *L, ScalarEvolution *SE,
|
||||||
BasicBlock *Pred) {
|
BasicBlock *Pred) {
|
||||||
// A conservative bound on the loop as a whole.
|
// A conservative bound on the loop as a whole.
|
||||||
const SCEV *MaxTrips = SE->getMaxBackedgeTakenCount(L);
|
const SCEV *MaxTrips = SE->getConstantMaxBackedgeTakenCount(L);
|
||||||
if (MaxTrips != SE->getCouldNotCompute() &&
|
if (MaxTrips != SE->getCouldNotCompute() &&
|
||||||
SE->getUnsignedRange(MaxTrips).getUnsignedMax().isIntN(
|
SE->getUnsignedRange(MaxTrips).getUnsignedMax().isIntN(
|
||||||
CountedLoopTripWidth))
|
CountedLoopTripWidth))
|
||||||
|
|
Loading…
Reference in New Issue