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 namespace llvm { 25 class StringRef; 26 class LLVMContext; 27 class Module; 28 class TargetMachine; 29 class ToolOutputFile; 30 31 namespace opt_tool { 32 enum OutputKind { 33 OK_NoOutput, 34 OK_OutputAssembly, 35 OK_OutputBitcode, 36 OK_OutputThinLTOBitcode, 37 }; 38 enum VerifierKind { 39 VK_NoVerifier, 40 VK_VerifyInAndOut, 41 VK_VerifyEachPass 42 }; 43 } 44 45 /// 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. 51 /// 52 /// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be 53 /// nullptr. 54 bool runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM, 55 ToolOutputFile *Out, ToolOutputFile *ThinLinkOut, 56 ToolOutputFile *OptRemarkFile, StringRef PassPipeline, 57 opt_tool::OutputKind OK, opt_tool::VerifierKind VK, 58 bool ShouldPreserveAssemblyUseListOrder, 59 bool ShouldPreserveBitcodeUseListOrder, 60 bool EmitSummaryIndex, bool EmitModuleHash, 61 bool EnableDebugify); 62 } // namespace llvm 63 64 #endif 65