summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LoopPassManager.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2017-01-25 02:49:01 +0000
committerChandler Carruth <chandlerc@gmail.com>2017-01-25 02:49:01 +0000
commitce40fa13ceb88dce5834e18da332981bc0fd5327 (patch)
treee5d33221f6597262beceb497202509e211c8c990 /llvm/lib/Transforms/Scalar/LoopPassManager.cpp
parent05a5f7dc0b6e5c167afc6dde6dff1810af198f8e (diff)
downloadbcm5719-llvm-ce40fa13ceb88dce5834e18da332981bc0fd5327.tar.gz
bcm5719-llvm-ce40fa13ceb88dce5834e18da332981bc0fd5327.zip
[PM] Teach LoopUnroll to update the LPM infrastructure as it unrolls
loops. We do this by reconstructing the newly added loops after the unroll completes to avoid threading pass manager details through all the mess of the unrolling infrastructure. I've enabled some extra assertions in the LPM to try and catch issues here and enabled a bunch of unroller tests to try and make sure this is sane. Currently, I'm manually running loop-simplify when needed. That should go away once it is folded into the LPM infrastructure. Differential Revision: https://reviews.llvm.org/D28848 llvm-svn: 293011
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopPassManager.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopPassManager.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopPassManager.cpp b/llvm/lib/Transforms/Scalar/LoopPassManager.cpp
index 028f4bba8b1..10f6fcdcfdb 100644
--- a/llvm/lib/Transforms/Scalar/LoopPassManager.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopPassManager.cpp
@@ -42,6 +42,13 @@ PassManager<Loop, LoopAnalysisManager, LoopStandardAnalysisResults &,
break;
}
+#ifndef NDEBUG
+ // Verify the loop structure and LCSSA form before visiting the loop.
+ L.verifyLoop();
+ assert(L.isRecursivelyLCSSAForm(AR.DT, AR.LI) &&
+ "Loops must remain in LCSSA form!");
+#endif
+
// Update the analysis manager as each pass runs and potentially
// invalidates analyses.
AM.invalidate(L, PassPA);
OpenPOWER on IntegriCloud