summaryrefslogtreecommitdiffstats
path: root/polly/lib/Analysis/ScopDetection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/Analysis/ScopDetection.cpp')
-rw-r--r--polly/lib/Analysis/ScopDetection.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp
index fedca6fd206..52f57d6ec2c 100644
--- a/polly/lib/Analysis/ScopDetection.cpp
+++ b/polly/lib/Analysis/ScopDetection.cpp
@@ -1350,9 +1350,6 @@ bool ScopDetection::isValidRegion(DetectionContext &Context) const {
return invalid<ReportIrreducibleRegion>(Context, /*Assert=*/true,
&CurRegion, DbgLoc);
- if (!isProfitableRegion(Context))
- return false;
-
DEBUG(dbgs() << "OK\n");
return true;
}
@@ -1472,6 +1469,19 @@ bool ScopDetection::runOnFunction(llvm::Function &F) {
findScops(*TopRegion);
+ // Prune non-profitable regions.
+ for (auto &DIt : DetectionContextMap) {
+ auto &DC = DIt.getSecond();
+ if (DC.Log.hasErrors())
+ continue;
+ if (!ValidRegions.count(&DC.CurRegion))
+ continue;
+ if (isProfitableRegion(DC))
+ continue;
+
+ ValidRegions.remove(&DC.CurRegion);
+ }
+
// Only makes sense when we tracked errors.
if (PollyTrackFailures)
emitMissedRemarks(F);
OpenPOWER on IntegriCloud