diff options
Diffstat (limited to 'llvm/lib/Analysis/ScalarEvolution.cpp')
-rw-r--r-- | llvm/lib/Analysis/ScalarEvolution.cpp | 33 |
1 files changed, 10 insertions, 23 deletions
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp index aec1e34..2ad7870 100644 --- a/llvm/lib/Analysis/ScalarEvolution.cpp +++ b/llvm/lib/Analysis/ScalarEvolution.cpp @@ -135,10 +135,10 @@ using namespace PatternMatch; #define DEBUG_TYPE "scalar-evolution" -STATISTIC(NumTripCountsComputed, - "Number of loops with predictable loop counts"); -STATISTIC(NumTripCountsNotComputed, - "Number of loops without predictable loop counts"); +STATISTIC(NumExitCountsComputed, + "Number of loop exits with predictable exit counts"); +STATISTIC(NumExitCountsNotComputed, + "Number of loop exits without predictable exit counts"); STATISTIC(NumBruteForceTripCountsComputed, "Number of loops with trip counts computed by force"); @@ -8450,23 +8450,6 @@ ScalarEvolution::getBackedgeTakenInfo(const Loop *L) { // must be cleared in this scope. BackedgeTakenInfo Result = computeBackedgeTakenCount(L); - // In product build, there are no usage of statistic. - (void)NumTripCountsComputed; - (void)NumTripCountsNotComputed; -#if LLVM_ENABLE_STATS || !defined(NDEBUG) - const SCEV *BEExact = Result.getExact(L, this); - if (BEExact != getCouldNotCompute()) { - assert(isLoopInvariant(BEExact, L) && - isLoopInvariant(Result.getConstantMax(this), L) && - "Computed backedge-taken count isn't loop invariant for loop!"); - ++NumTripCountsComputed; - } else if (Result.getConstantMax(this) == getCouldNotCompute() && - isa<PHINode>(L->getHeader()->begin())) { - // Only count loops that have phi nodes as not being computable. - ++NumTripCountsNotComputed; - } -#endif // LLVM_ENABLE_STATS || !defined(NDEBUG) - // Now that we know more about the trip count for this loop, forget any // existing SCEV values for PHI nodes in this loop since they are only // conservative estimates made without the benefit of trip count @@ -8852,7 +8835,9 @@ ScalarEvolution::computeBackedgeTakenCount(const Loop *L, // 1. For each exit that can be computed, add an entry to ExitCounts. // CouldComputeBECount is true only if all exits can be computed. - if (EL.ExactNotTaken == getCouldNotCompute()) + if (EL.ExactNotTaken != getCouldNotCompute()) + ++NumExitCountsComputed; + else // We couldn't compute an exact value for this exit, so // we won't be able to compute an exact value for the loop. CouldComputeBECount = false; @@ -8860,9 +8845,11 @@ ScalarEvolution::computeBackedgeTakenCount(const Loop *L, // Exact always implies symbolic, only check symbolic. if (EL.SymbolicMaxNotTaken != getCouldNotCompute()) ExitCounts.emplace_back(ExitBB, EL); - else + else { assert(EL.ExactNotTaken == getCouldNotCompute() && "Exact is known but symbolic isn't?"); + ++NumExitCountsNotComputed; + } // 2. Derive the loop's MaxBECount from each exit's max number of // non-exiting iterations. Partition the loop exits into two kinds: |