1 //===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// \file 9 /// 10 /// A single function which is called to drive the opt behavior for the new 11 /// PassManager. 12 /// 13 /// This is only in a separate TU with a header to avoid including all of the 14 /// old pass manager headers and the new pass manager headers into the same 15 /// file. Eventually all of the routines here will get folded back into 16 /// opt.cpp. 17 /// 18 //===----------------------------------------------------------------------===// 19 20 #ifndef LLVM_TOOLS_OPT_NEWPMDRIVER_H 21 #define LLVM_TOOLS_OPT_NEWPMDRIVER_H 22 23 #include "llvm/Support/CommandLine.h" 24 25 namespace llvm { 26 class StringRef; 27 class Module; 28 class PassPlugin; 29 class TargetMachine; 30 class ToolOutputFile; 31 class TargetLibraryInfoImpl; 32 33 extern cl::opt<bool> DebugifyEach; 34 extern cl::opt<std::string> DebugifyExport; 35 36 extern cl::opt<bool> VerifyEachDebugInfoPreserve; 37 extern cl::opt<std::string> VerifyDIPreserveExport; 38 39 namespace opt_tool { 40 enum OutputKind { 41 OK_NoOutput, 42 OK_OutputAssembly, 43 OK_OutputBitcode, 44 OK_OutputThinLTOBitcode, 45 }; 46 enum VerifierKind { VK_NoVerifier, VK_VerifyOut, VK_VerifyEachPass }; 47 enum PGOKind { 48 NoPGO, 49 InstrGen, 50 InstrUse, 51 SampleUse 52 }; 53 enum CSPGOKind { NoCSPGO, CSInstrGen, CSInstrUse }; 54 } 55 56 void printPasses(raw_ostream &OS); 57 58 /// Driver function to run the new pass manager over a module. 59 /// 60 /// This function only exists factored away from opt.cpp in order to prevent 61 /// inclusion of the new pass manager headers and the old headers into the same 62 /// file. It's interface is consequentially somewhat ad-hoc, but will go away 63 /// when the transition finishes. 64 /// 65 /// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be 66 /// nullptr. 67 bool runPassPipeline(StringRef Arg0, Module &M, TargetMachine *TM, 68 TargetLibraryInfoImpl *TLII, ToolOutputFile *Out, 69 ToolOutputFile *ThinLinkOut, ToolOutputFile *OptRemarkFile, 70 StringRef PassPipeline, 71 ArrayRef<PassPlugin> PassPlugins, opt_tool::OutputKind OK, 72 opt_tool::VerifierKind VK, 73 bool ShouldPreserveAssemblyUseListOrder, 74 bool ShouldPreserveBitcodeUseListOrder, 75 bool EmitSummaryIndex, bool EmitModuleHash, 76 bool EnableDebugify, bool VerifyDIPreserve); 77 } // namespace llvm 78 79 #endif 80