diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2014-01-13 05:16:45 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2014-01-13 05:16:45 +0000 |
commit | 085c07f4ed04c075173d8dfb9aa0f258c933b898 (patch) | |
tree | 3cd728a948f65d29070a535265118c7ba3eb0553 | |
parent | 4a76032da63f0c9006336d9b9ab1074cf657b2c3 (diff) | |
download | llvm-085c07f4ed04c075173d8dfb9aa0f258c933b898.tar.gz llvm-085c07f4ed04c075173d8dfb9aa0f258c933b898.tar.bz2 llvm-085c07f4ed04c075173d8dfb9aa0f258c933b898.tar.xz |
[PM] Wire up support for printing assembly output from the opt command.
This lets us round-trip IR in the expected manner with the opt tool.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199075 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/Other/new-pass-manager.ll | 6 | ||||
-rw-r--r-- | tools/opt/NewPMDriver.cpp | 19 |
2 files changed, 22 insertions, 3 deletions
diff --git a/test/Other/new-pass-manager.ll b/test/Other/new-pass-manager.ll index 48b97624b8..d7cfb5ec7a 100644 --- a/test/Other/new-pass-manager.ll +++ b/test/Other/new-pass-manager.ll @@ -23,6 +23,12 @@ ; CHECK-FUNCTION-PRINT: Finished function pass manager ; CHECK-FUNCTION-PRINT: Finished module pass manager +; RUN: opt -S -o - -passes='no-op-module,no-op-module' %s \ +; RUN: | FileCheck %s --check-prefix=CHECK-NOOP +; CHECK-NOOP: define void @foo() { +; CHECK-NOOP: ret void +; CHECK-NOOP: } + define void @foo() { ret void } diff --git a/tools/opt/NewPMDriver.cpp b/tools/opt/NewPMDriver.cpp index b05da36d28..c7534e794a 100644 --- a/tools/opt/NewPMDriver.cpp +++ b/tools/opt/NewPMDriver.cpp @@ -16,10 +16,12 @@ #include "NewPMDriver.h" #include "Passes.h" #include "llvm/ADT/StringRef.h" +#include "llvm/IR/IRPrintingPasses.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IR/PassManager.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ToolOutputFile.h" using namespace llvm; @@ -28,15 +30,26 @@ using namespace opt_tool; bool llvm::runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M, tool_output_file *Out, StringRef PassPipeline, OutputKind OK) { - // Before executing passes, print the final values of the LLVM options. - cl::PrintOptionValues(); - ModulePassManager MPM; if (!parsePassPipeline(MPM, PassPipeline)) { errs() << Arg0 << ": unable to parse pass pipeline description.\n"; return false; } + // Add any relevant output pass at the end of the pipeline. + switch (OK) { + case OK_NoOutput: + break; // No output pass needed. + case OK_OutputAssembly: + MPM.addPass(PrintModulePass(Out->os())); + break; + case OK_OutputBitcode: + llvm::report_fatal_error("Bitcode output is not yet implemented!"); + } + + // Before executing passes, print the final values of the LLVM options. + cl::PrintOptionValues(); + // Now that we have all of the passes ready, run them. MPM.run(&M); |