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 PassBuilder; 27 class StringRef; 28 class Module; 29 class PassPlugin; 30 class TargetMachine; 31 class ToolOutputFile; 32 class TargetLibraryInfoImpl; 33 34 extern cl::opt<bool> DebugifyEach; 35 extern cl::opt<std::string> DebugifyExport; 36 37 extern cl::opt<bool> VerifyEachDebugInfoPreserve; 38 extern cl::opt<std::string> VerifyDIPreserveExport; 39 40 namespace opt_tool { 41 enum OutputKind { 42 OK_NoOutput, 43 OK_OutputAssembly, 44 OK_OutputBitcode, 45 OK_OutputThinLTOBitcode, 46 }; 47 enum VerifierKind { VK_NoVerifier, VK_VerifyOut, VK_VerifyEachPass }; 48 enum PGOKind { 49 NoPGO, 50 InstrGen, 51 InstrUse, 52 SampleUse 53 }; 54 enum CSPGOKind { NoCSPGO, CSInstrGen, CSInstrUse }; 55 } 56 57 void printPasses(raw_ostream &OS); 58 59 /// Driver function to run the new pass manager over a module. 60 /// 61 /// This function only exists factored away from opt.cpp in order to prevent 62 /// inclusion of the new pass manager headers and the old headers into the same 63 /// file. It's interface is consequentially somewhat ad-hoc, but will go away 64 /// when the transition finishes. 65 /// 66 /// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be 67 /// nullptr. 68 bool runPassPipeline( 69 StringRef Arg0, Module &M, TargetMachine *TM, TargetLibraryInfoImpl *TLII, 70 ToolOutputFile *Out, ToolOutputFile *ThinLinkOut, 71 ToolOutputFile *OptRemarkFile, StringRef PassPipeline, 72 ArrayRef<PassPlugin> PassPlugins, 73 ArrayRef<std::function<void(llvm::PassBuilder &)>> PassBuilderCallbacks, 74 opt_tool::OutputKind OK, opt_tool::VerifierKind VK, 75 bool ShouldPreserveAssemblyUseListOrder, 76 bool ShouldPreserveBitcodeUseListOrder, bool EmitSummaryIndex, 77 bool EmitModuleHash, bool EnableDebugify, bool VerifyDIPreserve, 78 bool UnifiedLTO = false); 79 } // namespace llvm 80 81 #endif 82