From 085c07f4ed04c075173d8dfb9aa0f258c933b898 Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Mon, 13 Jan 2014 05:16:45 +0000 Subject: [PATCH] [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 --- test/Other/new-pass-manager.ll | 6 ++++++ 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 48b97624b80..d7cfb5ec7a4 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 b05da36d281..c7534e794a4 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); -- 2.34.1