1 //===- NewPMDriver.h - Function to drive opt with the new PM ----*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
10 /// A single function which is called to drive the opt behavior for the new
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
18 //===----------------------------------------------------------------------===//
20 #ifndef LLVM_TOOLS_OPT_NEWPMDRIVER_H
21 #define LLVM_TOOLS_OPT_NEWPMDRIVER_H
23 #include "llvm/Support/CommandLine.h"
32 class TargetLibraryInfoImpl
;
34 extern cl::opt
<bool> DebugifyEach
;
35 extern cl::opt
<std::string
> DebugifyExport
;
37 extern cl::opt
<bool> VerifyEachDebugInfoPreserve
;
38 extern cl::opt
<std::string
> VerifyDIPreserveExport
;
45 OK_OutputThinLTOBitcode
,
47 enum class VerifierKind
{ None
, InputOutput
, EachPass
};
54 enum CSPGOKind
{ NoCSPGO
, CSInstrGen
, CSInstrUse
};
57 void printPasses(raw_ostream
&OS
);
59 /// Driver function to run the new pass manager over a module.
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.
66 /// ThinLTOLinkOut is only used when OK is OK_OutputThinLTOBitcode, and can be
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);