[ScopDetect] Include zero-iteration loops in loop count.
Loop with zero iteration are, syntactically, loops. They have been
excluded from the loop counter even for the non-profitable counters.
This seems to be unintentially as the sentinel value of '0' minimal
iterations does exclude such loops.
Fix by never considering the iteration count when the sentinel
value of 0 is found.
This makes the recently added NumTotalLoops couter redundant
with NumLoopsOverall, which now is equivalent. Hence, NumTotalLoops
is removed as well.
Note: The test case 'ScopDetect/statistics.ll' effectively does not
check profitability, because -polly-process-unprofitable is passed
to all test cases.
llvm-svn: 311551
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp
index 02f515a..0db9c93 100644
--- a/polly/lib/Analysis/ScopDetection.cpp
+++ b/polly/lib/Analysis/ScopDetection.cpp
@@ -212,8 +212,6 @@
//===----------------------------------------------------------------------===//
// Statistics.
-STATISTIC(NumTotalLoops, "Number of loops (in- or out of scops, in any "
- "function processed by Polly)");
STATISTIC(NumScopRegions, "Number of scops");
STATISTIC(NumLoopsInScop, "Number of loops in scops");
STATISTIC(NumScopsDepthOne, "Number of scops with maximal loop depth 1");
@@ -305,17 +303,6 @@
//===----------------------------------------------------------------------===//
// ScopDetection.
-static void countTotalLoops(Loop *L) {
- NumTotalLoops++;
- for (Loop *SubLoop : L->getSubLoops())
- countTotalLoops(SubLoop);
-}
-
-static void countTotalLoops(LoopInfo &LI) {
- for (Loop *L : LI)
- countTotalLoops(L);
-}
-
ScopDetection::ScopDetection(Function &F, const DominatorTree &DT,
ScalarEvolution &SE, LoopInfo &LI, RegionInfo &RI,
AliasAnalysis &AA, OptimizationRemarkEmitter &ORE)
@@ -338,7 +325,6 @@
findScops(*TopRegion);
- countTotalLoops(LI);
NumScopRegions += ValidRegions.size();
// Prune non-profitable regions.
@@ -1238,10 +1224,11 @@
int NumLoops = 1;
int MaxLoopDepth = 1;
- if (auto *TripCountC = dyn_cast<SCEVConstant>(TripCount))
- if (TripCountC->getType()->getScalarSizeInBits() <= 64)
- if (TripCountC->getValue()->getZExtValue() <= MinProfitableTrips)
- NumLoops -= 1;
+ if (MinProfitableTrips > 0)
+ if (auto *TripCountC = dyn_cast<SCEVConstant>(TripCount))
+ if (TripCountC->getType()->getScalarSizeInBits() <= 64)
+ if (TripCountC->getValue()->getZExtValue() <= MinProfitableTrips)
+ NumLoops -= 1;
for (auto &SubLoop : *L) {
LoopStats Stats = countBeneficialSubLoops(SubLoop, SE, MinProfitableTrips);