diff options
| -rw-r--r-- | polly/lib/Analysis/ScopDetection.cpp | 23 | ||||
| -rw-r--r-- | polly/test/ScopDetect/statistics.ll | 44 |
2 files changed, 41 insertions, 26 deletions
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp index 02f515af13e..0db9c93be8c 100644 --- a/polly/lib/Analysis/ScopDetection.cpp +++ b/polly/lib/Analysis/ScopDetection.cpp @@ -212,8 +212,6 @@ StringRef polly::PollySkipFnAttr = "polly.skip.fn"; //===----------------------------------------------------------------------===// // 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 @@ static bool doesStringMatchAnyRegex(StringRef Str, //===----------------------------------------------------------------------===// // 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 @@ ScopDetection::ScopDetection(Function &F, const DominatorTree &DT, findScops(*TopRegion); - countTotalLoops(LI); NumScopRegions += ValidRegions.size(); // Prune non-profitable regions. @@ -1238,10 +1224,11 @@ ScopDetection::countBeneficialSubLoops(Loop *L, ScalarEvolution &SE, 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); diff --git a/polly/test/ScopDetect/statistics.ll b/polly/test/ScopDetect/statistics.ll index fbc91f4b24d..da78821c2ef 100644 --- a/polly/test/ScopDetect/statistics.ll +++ b/polly/test/ScopDetect/statistics.ll @@ -2,20 +2,19 @@ ; REQUIRES: asserts -; CHECK-DAG: 10 polly-detect - Number of loops (in- or out of scops, in any function processed by Polly) ; CHECK-DAG: 4 polly-detect - Maximal number of loops in scops (profitable scops only) ; CHECK-DAG: 4 polly-detect - Maximal number of loops in scops -; CHECK-DAG: 10 polly-detect - Number of loops in scops (profitable scops only) -; CHECK-DAG: 10 polly-detect - Number of loops in scops -; CHECK-DAG: 10 polly-detect - Number of total loops -; CHECK-DAG: 4 polly-detect - Number of scops (profitable scops only) +; CHECK-DAG: 11 polly-detect - Number of loops in scops (profitable scops only) +; CHECK-DAG: 11 polly-detect - Number of loops in scops +; CHECK-DAG: 11 polly-detect - Number of total loops +; CHECK-DAG: 5 polly-detect - Number of scops (profitable scops only) ; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 4 (profitable scops only) -; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 1 (profitable scops only) +; CHECK-DAG: 2 polly-detect - Number of scops with maximal loop depth 1 (profitable scops only) ; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 3 (profitable scops only) ; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 2 (profitable scops only) -; CHECK-DAG: 4 polly-detect - Number of scops +; CHECK-DAG: 5 polly-detect - Number of scops ; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 4 -; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 1 +; CHECK-DAG: 2 polly-detect - Number of scops with maximal loop depth 1 ; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 3 ; CHECK-DAG: 1 polly-detect - Number of scops with maximal loop depth 2 @@ -45,6 +44,10 @@ ; A[i + j + k + l] += i + j + k + l; ; } ; +; void foo_zero_iterations(float *S) { +; for (long i = 0; i < 0; i++) +; A[i] += i; +; } target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" define void @foo_1d(float* %A) { @@ -248,3 +251,28 @@ bb30: ; preds = %bb29 bb32: ; preds = %bb4 ret void } + +define void @foo_zero_iterations(float* %A) { +bb: + br label %bb1 + +bb1: ; preds = %bb6, %bb + %i.0 = phi i64 [ 0, %bb ], [ %tmp7, %bb6 ] + %exitcond = icmp ne i64 %i.0, 0 + br i1 %exitcond, label %bb2, label %bb8 + +bb2: ; preds = %bb1 + %tmp = sitofp i64 %i.0 to float + %tmp3 = getelementptr inbounds float, float* %A, i64 %i.0 + %tmp4 = load float, float* %tmp3, align 4 + %tmp5 = fadd float %tmp4, %tmp + store float %tmp5, float* %tmp3, align 4 + br label %bb6 + +bb6: ; preds = %bb2 + %tmp7 = add nuw nsw i64 %i.0, 1 + br label %bb1 + +bb8: ; preds = %bb1 + ret void +} |

