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/ADT/ArrayRef.h" 24 #include "llvm/Support/CommandLine.h" 25 26 namespace llvm { 27 class StringRef; 28 class Module; 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 namespace opt_tool { 37 enum OutputKind { 38 OK_NoOutput, 39 OK_OutputAssembly, 40 OK_OutputBitcode, 41 OK_OutputThinLTOBitcode, 42 }; 43 enum VerifierKind { 44 VK_NoVerifier, 45 VK_VerifyInAndOut, 46 VK_VerifyEachPass 47 }; 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(StringRef Arg0, Module &M, TargetMachine *TM, 69 TargetLibraryInfoImpl *TLII, ToolOutputFile *Out, 70 ToolOutputFile *ThinLinkOut, ToolOutputFile *OptRemarkFile, 71 StringRef PassPipeline, ArrayRef<StringRef> PassInfos, 72 opt_tool::OutputKind OK, opt_tool::VerifierKind VK, 73 bool ShouldPreserveAssemblyUseListOrder, 74 bool ShouldPreserveBitcodeUseListOrder, 75 bool EmitSummaryIndex, bool EmitModuleHash, 76 bool EnableDebugify); 77 } // namespace llvm 78 79 #endif 80