summaryrefslogtreecommitdiff
path: root/tools/opt/NewPMDriver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/opt/NewPMDriver.cpp')
-rw-r--r--tools/opt/NewPMDriver.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/tools/opt/NewPMDriver.cpp b/tools/opt/NewPMDriver.cpp
new file mode 100644
index 0000000000..e577995e26
--- /dev/null
+++ b/tools/opt/NewPMDriver.cpp
@@ -0,0 +1,46 @@
+//===- NewPMDriver.cpp - Driver for opt with new PM -----------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+/// \file
+///
+/// This file is just a split of the code that logically belongs in opt.cpp but
+/// that includes the new pass manager headers.
+///
+//===----------------------------------------------------------------------===//
+
+#include "NewPMDriver.h"
+#include "Passes.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/Module.h"
+#include "llvm/IR/PassManager.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ToolOutputFile.h"
+
+using namespace llvm;
+
+bool llvm::runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M,
+ tool_output_file *Out, StringRef PassPipeline,
+ bool NoOutput) {
+ // 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;
+ }
+
+ // Now that we have all of the passes ready, run them.
+ MPM.run(&M);
+
+ // Declare success.
+ if (!NoOutput)
+ Out->keep();
+ return true;
+}