summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/Other/pass-pipeline-parsing.ll20
-rw-r--r--tools/opt/Passes.cpp8
2 files changed, 25 insertions, 3 deletions
diff --git a/test/Other/pass-pipeline-parsing.ll b/test/Other/pass-pipeline-parsing.ll
index c490f56ba8..20d39c78d3 100644
--- a/test/Other/pass-pipeline-parsing.ll
+++ b/test/Other/pass-pipeline-parsing.ll
@@ -1,2 +1,18 @@
-; RUN: opt -disable-output -passes=no-op-module,no-op-module %s
-; RUN: opt -disable-output -passes='module(no-op-module,no-op-module)' %s
+; RUN: opt -disable-output -debug-pass-manager \
+; RUN: -passes=no-op-module,no-op-module %s 2>&1 \
+; RUN: | FileCheck %s --check-prefix=CHECK-TWO-NOOP-MP
+; CHECK-TWO-NOOP-MP: Starting module pass manager
+; CHECK-TWO-NOOP-MP: Running module pass: NoOpModulePass
+; CHECK-TWO-NOOP-MP: Running module pass: NoOpModulePass
+; CHECK-TWO-NOOP-MP: Finished module pass manager
+
+; RUN: opt -disable-output -debug-pass-manager \
+; RUN: -passes='module(no-op-module,no-op-module)' %s 2>&1 \
+; RUN: | FileCheck %s --check-prefix=CHECK-NESTED-TWO-NOOP-MP
+; CHECK-NESTED-TWO-NOOP-MP: Starting module pass manager
+; CHECK-NESTED-TWO-NOOP-MP: Running module pass: ModulePassManager
+; CHECK-NESTED-TWO-NOOP-MP: Starting module pass manager
+; CHECK-NESTED-TWO-NOOP-MP: Running module pass: NoOpModulePass
+; CHECK-NESTED-TWO-NOOP-MP: Running module pass: NoOpModulePass
+; CHECK-NESTED-TWO-NOOP-MP: Finished module pass manager
+; CHECK-NESTED-TWO-NOOP-MP: Finished module pass manager
diff --git a/tools/opt/Passes.cpp b/tools/opt/Passes.cpp
index d58acaf1f6..44b3acee59 100644
--- a/tools/opt/Passes.cpp
+++ b/tools/opt/Passes.cpp
@@ -51,11 +51,17 @@ static bool parseModulePassPipeline(ModulePassManager &MPM,
for (;;) {
// Parse nested pass managers by recursing.
if (PipelineText.startswith("module(")) {
+ ModulePassManager NestedMPM;
+
+ // Parse the inner pipeline into the nested manager.
PipelineText = PipelineText.substr(strlen("module("));
- if (!parseModulePassPipeline(MPM, PipelineText))
+ if (!parseModulePassPipeline(NestedMPM, PipelineText))
return false;
assert(!PipelineText.empty() && PipelineText[0] == ')');
PipelineText = PipelineText.substr(1);
+
+ // Now add the nested manager as a module pass.
+ MPM.addPass(NestedMPM);
} else {
// Otherwise try to parse a pass name.
size_t End = PipelineText.find_first_of(",)");