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 c56d2cc4adb..27dfc930db8 100644
--- a/polly/lib/Analysis/ScopDetection.cpp
+++ b/polly/lib/Analysis/ScopDetection.cpp
@@ -1402,9 +1402,19 @@ bool ScopDetection::allBlocksValid(DetectionContext &Context) const {
for (const BasicBlock *BB : CurRegion.blocks()) {
Loop *L = LI.getLoopFor(BB);
- if (L && L->getHeader() == BB && CurRegion.contains(L) &&
- (!isValidLoop(L, Context) && !KeepGoing))
- return false;
+ if (L && L->getHeader() == BB) {
+ if (CurRegion.contains(L)) {
+ if (!isValidLoop(L, Context) && !KeepGoing)
+ return false;
+ } else {
+ SmallVector<BasicBlock *, 1> Latches;
+ L->getLoopLatches(Latches);
+ for (BasicBlock *Latch : Latches)
+ if (CurRegion.contains(Latch))
+ return invalid<ReportLoopOnlySomeLatches>(Context, /*Assert=*/true,
+ L);
+ }
+ }
}
for (BasicBlock *BB : CurRegion.blocks()) {
OpenPOWER on IntegriCloud