1//===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9/// \file 10/// 11/// A single function which is called to drive the opt behavior for the new 12/// PassManager. 13/// 14/// This is only in a separate TU with a header to avoid including all of the 15/// old pass manager headers and the new pass manager headers into the same 16/// file. Eventually all of the routines here will get folded back into 17/// opt.cpp. 18/// 19//===----------------------------------------------------------------------===// 20 21#ifndef LLVM_TOOLS_OPT_NEWPMDRIVER_H 22#define LLVM_TOOLS_OPT_NEWPMDRIVER_H 23 24#include "llvm/ADT/StringRef.h" 25 26namespace llvm { 27class LLVMContext; 28class Module; 29class TargetMachine; 30class tool_output_file; 31 32namespace opt_tool { 33enum OutputKind { 34 OK_NoOutput, 35 OK_OutputAssembly, 36 OK_OutputBitcode 37}; 38enum VerifierKind { 39 VK_NoVerifier, 40 VK_VerifyInAndOut, 41 VK_VerifyEachPass 42}; 43} 44 45/// \brief Driver function to run the new pass manager over a module. 46/// 47/// This function only exists factored away from opt.cpp in order to prevent 48/// inclusion of the new pass manager headers and the old headers into the same 49/// file. It's interface is consequentially somewhat ad-hoc, but will go away 50/// when the transition finishes. 51bool runPassPipeline(StringRef Arg0, LLVMContext &Context, Module &M, 52 TargetMachine *TM, tool_output_file *Out, 53 StringRef PassPipeline, opt_tool::OutputKind OK, 54 opt_tool::VerifierKind VK, 55 bool ShouldPreserveAssemblyUseListOrder, 56 bool ShouldPreserveBitcodeUseListOrder); 57} 58 59#endif 60