LLVM 18.0.0git
|
This class provides access to building LLVM's passes. More...
#include "llvm/CodeGen/CodeGenPassBuilder.h"
Classes | |
class | AddIRPass |
class | AddMachinePass |
Public Member Functions | |
CodeGenPassBuilder (LLVMTargetMachine &TM, CGPassBuilderOption Opts, PassInstrumentationCallbacks *PIC) | |
Error | buildPipeline (ModulePassManager &MPM, MachineFunctionPassManager &MFPM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType) const |
void | registerModuleAnalyses (ModuleAnalysisManager &) const |
void | registerFunctionAnalyses (FunctionAnalysisManager &) const |
void | registerMachineFunctionAnalyses (MachineFunctionAnalysisManager &) const |
std::pair< StringRef, bool > | getPassNameFromLegacyName (StringRef) const |
void | registerAnalyses (MachineFunctionAnalysisManager &MFAM) const |
PassInstrumentationCallbacks * | getPassInstrumentationCallbacks () const |
Protected Types | |
template<typename PassT > | |
using | has_key_t = decltype(PassT::Key) |
template<typename PassT > | |
using | is_module_pass_t = decltype(std::declval< PassT & >().run(std::declval< Module & >(), std::declval< ModuleAnalysisManager & >())) |
template<typename PassT > | |
using | is_function_pass_t = decltype(std::declval< PassT & >().run(std::declval< Function & >(), std::declval< FunctionAnalysisManager & >())) |
using | CreateMCStreamer = std::function< Expected< std::unique_ptr< MCStreamer > >(MCContext &)> |
Protected Member Functions | |
void | registerTargetAnalysis (ModuleAnalysisManager &) const |
Target override these hooks to parse target-specific analyses. | |
void | registerTargetAnalysis (FunctionAnalysisManager &) const |
void | registerTargetAnalysis (MachineFunctionAnalysisManager &) const |
std::pair< StringRef, bool > | getTargetPassNameFromLegacyName (StringRef) const |
template<typename TMC > | |
TMC & | getTM () const |
CodeGenOptLevel | getOptLevel () const |
bool | isGlobalISelAbortEnabled () const |
Check whether or not GlobalISel should abort on error. | |
bool | reportDiagnosticWhenGlobalISelFallback () const |
Check whether or not a diagnostic should be emitted when GlobalISel uses the fallback path. | |
Error | addInstSelector (AddMachinePass &) const |
addInstSelector - This method should install an instruction selector pass, which converts from LLVM code to machine instructions. | |
void | addILPOpts (AddMachinePass &) const |
Add passes that optimize instruction level parallelism for out-of-order targets. | |
void | addPreRegAlloc (AddMachinePass &) const |
This method may be implemented by targets that want to run passes immediately before register allocation. | |
void | addPreRewrite (AddMachinePass &) const |
addPreRewrite - Add passes to the optimized register allocation pipeline after register allocation is complete, but before virtual registers are rewritten to physical registers. | |
void | addPostRewrite (AddMachinePass &) const |
Add passes to be run immediately after virtual registers are rewritten to physical registers. | |
void | addPostRegAlloc (AddMachinePass &) const |
This method may be implemented by targets that want to run passes after register allocation pass pipeline but before prolog-epilog insertion. | |
void | addPreSched2 (AddMachinePass &) const |
This method may be implemented by targets that want to run passes after prolog-epilog insertion and before the second instruction scheduling pass. | |
void | addPreEmitPass (AddMachinePass &) const |
This pass may be implemented by targets that want to run passes immediately before machine code is emitted. | |
void | addPreEmitPass2 (AddMachinePass &) const |
Targets may add passes immediately before machine code is emitted in this callback. | |
void | addPreISel (AddIRPass &) const |
{{@ For GlobalISel | |
Error | addIRTranslator (AddMachinePass &) const |
This method should install an IR translator pass, which converts from LLVM code to machine instructions with possibly generic opcodes. | |
void | addPreLegalizeMachineIR (AddMachinePass &) const |
This method may be implemented by targets that want to run passes immediately before legalization. | |
Error | addLegalizeMachineIR (AddMachinePass &) const |
This method should install a legalize pass, which converts the instruction sequence into one that can be selected by the target. | |
void | addPreRegBankSelect (AddMachinePass &) const |
This method may be implemented by targets that want to run passes immediately before the register bank selection. | |
Error | addRegBankSelect (AddMachinePass &) const |
This method should install a register bank selector pass, which assigns register banks to virtual registers without a register class or register banks. | |
void | addPreGlobalInstructionSelect (AddMachinePass &) const |
This method may be implemented by targets that want to run passes immediately before the (global) instruction selection. | |
Error | addGlobalInstructionSelect (AddMachinePass &) const |
This method should install a (global) instruction selector pass, which converts possibly generic instructions to fully target-specific instructions, thereby constraining all generic virtual registers to register classes. | |
void | addISelPasses (AddIRPass &) const |
High level function that adds all passes necessary to go from llvm IR representation to the MI representation. | |
Error | addCoreISelPasses (AddMachinePass &) const |
Add the actual instruction selection passes. | |
Error | addMachinePasses (AddMachinePass &) const |
Add the complete, standard set of LLVM CodeGen passes. | |
void | addPassesToHandleExceptions (AddIRPass &) const |
Add passes to lower exception handling for the code generator. | |
void | addIRPasses (AddIRPass &) const |
Add common target configurable passes that perform LLVM IR to IR transforms following machine independent optimization. | |
void | addCodeGenPrepare (AddIRPass &) const |
Add pass to prepare the LLVM IR for code generation. | |
void | addISelPrepare (AddIRPass &) const |
Add common passes that perform LLVM IR to IR transforms in preparation for instruction selection. | |
void | addMachineSSAOptimization (AddMachinePass &) const |
Methods with trivial inline returns are convenient points in the common codegen pass pipeline where targets may insert passes. | |
Error | addFastRegAlloc (AddMachinePass &) const |
addFastRegAlloc - Add the minimum set of target-independent passes that are required for fast register allocation. | |
void | addOptimizedRegAlloc (AddMachinePass &) const |
addOptimizedRegAlloc - Add passes related to register allocation. | |
void | addMachineLateOptimization (AddMachinePass &) const |
Add passes that optimize machine instructions after register allocation. | |
void | addGCPasses (AddMachinePass &) const |
addGCPasses - Add late codegen passes that analyze code for garbage collection. | |
void | addBlockPlacement (AddMachinePass &) const |
Add standard basic block placement passes. | |
void | addAsmPrinter (AddMachinePass &, CreateMCStreamer) const |
void | addTargetRegisterAllocator (AddMachinePass &, bool Optimized) const |
Utilities for targets to add passes to the pass manager. | |
void | addRegAllocPass (AddMachinePass &, bool Optimized) const |
addMachinePasses helper to create the target-selected or overriden regalloc pass. | |
Error | addRegAssignmentFast (AddMachinePass &) const |
Add core register alloator passes which do the actual register assignment and rewriting. | |
Error | addRegAssignmentOptimized (AddMachinePass &) const |
Protected Attributes | |
LLVMTargetMachine & | TM |
CGPassBuilderOption | Opt |
PassInstrumentationCallbacks * | PIC |
This class provides access to building LLVM's passes.
Its members provide the baseline state available to passes during their construction. The MachinePassRegistry.def
file specifies how to construct all of the built-in passes, and those may reference these members during construction.
Definition at line 101 of file CodeGenPassBuilder.h.
|
protected |
Definition at line 431 of file CodeGenPassBuilder.h.
|
protected |
Definition at line 141 of file CodeGenPassBuilder.h.
|
protected |
Definition at line 148 of file CodeGenPassBuilder.h.
|
protected |
Definition at line 144 of file CodeGenPassBuilder.h.
|
inlineexplicit |
Definition at line 103 of file CodeGenPassBuilder.h.
References llvm::CGPassBuilderOption::EnableGlobalISelAbort, llvm::CGPassBuilderOption::EnableIPRA, llvm::TargetOptions::EnableIPRA, llvm::CodeGenPassBuilder< DerivedT >::getOptLevel(), llvm::TargetOptions::GlobalISelAbort, llvm::None, llvm::CodeGenPassBuilder< DerivedT >::Opt, llvm::CGPassBuilderOption::OptimizeRegAlloc, llvm::TargetMachine::Options, and llvm::CodeGenPassBuilder< DerivedT >::TM.
|
inlineprotected |
Definition at line 433 of file CodeGenPassBuilder.h.
References llvm_unreachable.
|
protected |
Add standard basic block placement passes.
Definition at line 1129 of file CodeGenPassBuilder.h.
|
protected |
Add pass to prepare the LLVM IR for code generation.
This should be done before exception handling preparation passes.
Definition at line 705 of file CodeGenPassBuilder.h.
References llvm::None.
|
protected |
Add the actual instruction selection passes.
This does not include preparation passes on IR.
Definition at line 735 of file CodeGenPassBuilder.h.
References llvm::None, llvm::Error::success(), and TM.
|
protected |
addFastRegAlloc - Add the minimum set of target-independent passes that are required for fast register allocation.
Add the minimum set of target-independent passes that are required for register allocation.
No coalescing or scheduling.
Definition at line 1051 of file CodeGenPassBuilder.h.
|
inlineprotected |
addGCPasses - Add late codegen passes that analyze code for garbage collection.
This should return true if GC info should be printed after these passes.
Definition at line 426 of file CodeGenPassBuilder.h.
|
inlineprotected |
This method should install a (global) instruction selector pass, which converts possibly generic instructions to fully target-specific instructions, thereby constraining all generic virtual registers to register classes.
Definition at line 365 of file CodeGenPassBuilder.h.
References llvm::inconvertibleErrorCode().
|
inlineprotected |
Add passes that optimize instruction level parallelism for out-of-order targets.
These passes are run while the machine code is still in SSA form, so they can use MachineTraceMetrics to control their heuristics.
All passes added here should preserve the MachineDominatorTree, MachineLoopInfo, and MachineTraceMetrics analyses.
Definition at line 275 of file CodeGenPassBuilder.h.
|
inlineprotected |
addInstSelector - This method should install an instruction selector pass, which converts from LLVM code to machine instructions.
Definition at line 264 of file CodeGenPassBuilder.h.
References llvm::inconvertibleErrorCode().
|
protected |
Add common target configurable passes that perform LLVM IR to IR transforms following machine independent optimization.
Definition at line 593 of file CodeGenPassBuilder.h.
References llvm::createFunctionToLoopPassAdaptor(), llvm::dbgs(), and llvm::None.
|
inlineprotected |
This method should install an IR translator pass, which converts from LLVM code to machine instructions with possibly generic opcodes.
Definition at line 329 of file CodeGenPassBuilder.h.
References llvm::inconvertibleErrorCode().
|
protected |
High level function that adds all passes necessary to go from llvm IR representation to the MI representation.
Adds IR based lowering and target specific optimization passes and finally the core instruction selection passes.
Definition at line 578 of file CodeGenPassBuilder.h.
References TM.
|
protected |
Add common passes that perform LLVM IR to IR transforms in preparation for instruction selection.
Definition at line 715 of file CodeGenPassBuilder.h.
References llvm::dbgs().
|
inlineprotected |
This method should install a legalize pass, which converts the instruction sequence into one that can be selected by the target.
Definition at line 340 of file CodeGenPassBuilder.h.
References llvm::inconvertibleErrorCode().
|
protected |
Add passes that optimize machine instructions after register allocation.
Post RegAlloc Pass Configuration.
Add passes that optimize machine instructions after register allocation.
Definition at line 1108 of file CodeGenPassBuilder.h.
References TM.
|
protected |
Add the complete, standard set of LLVM CodeGen passes.
Add the complete set of target-independent postISel code generator passes.
Fully developed targets will not generally override this.
This can be read as the standard order of major LLVM CodeGen stages. Stages with nontrivial configuration or multiple passes are broken out below in addStage routines.
Any CodeGenPassBuilder<Derived>::addXX routine may be overriden by the Target. The addPre/Post methods with empty header implementations allow injecting target-specific fixups just before or after major stages. Additionally, targets have the flexibility to change pass order within a stage by overriding default implementation of addStage routines below. Each technique has maintainability tradeoffs because alternate pass orders are not well supported. addPre/Post works better if the target pass is easily tied to a common pass. But if it has subtle dependencies on multiple passes, the target should override the stage instead.
Add passes that optimize machine instructions after register allocation.
Definition at line 827 of file CodeGenPassBuilder.h.
References llvm::AlwaysOutline, llvm::NeverOutline, llvm::None, llvm::Error::success(), and TM.
|
protected |
Methods with trivial inline returns are convenient points in the common codegen pass pipeline where targets may insert passes.
Add passes that optimize machine instructions in SSA form.
Methods with out-of-line standard implementations are major CodeGen stages called by addMachinePasses. Some targets may override major stages when inserting passes is insufficient, but maintaining overriden stages is more work. addMachineSSAOptimization - Add standard passes that optimize machine instructions in SSA form.
Definition at line 934 of file CodeGenPassBuilder.h.
|
protected |
addOptimizedRegAlloc - Add passes related to register allocation.
Add standard target-independent passes that are tightly coupled with optimized register allocation, including coalescing, machine instruction scheduling, and register allocation itself.
LLVMTargetMachine provides standard regalloc passes for most targets.
Definition at line 1062 of file CodeGenPassBuilder.h.
|
protected |
Add passes to lower exception handling for the code generator.
Turn exception handling constructs into something the code generators can handle.
Definition at line 659 of file CodeGenPassBuilder.h.
References llvm::AIX, llvm::ARM, assert(), llvm::DwarfCFI, llvm::MCAsmInfo::getExceptionHandlingType(), llvm::None, llvm::SjLj, TM, llvm::Wasm, and llvm::WinEH.
|
inlineprotected |
This method may be implemented by targets that want to run passes after register allocation pass pipeline but before prolog-epilog insertion.
Definition at line 301 of file CodeGenPassBuilder.h.
|
inlineprotected |
Add passes to be run immediately after virtual registers are rewritten to physical registers.
Definition at line 297 of file CodeGenPassBuilder.h.
|
inlineprotected |
This pass may be implemented by targets that want to run passes immediately before machine code is emitted.
Definition at line 309 of file CodeGenPassBuilder.h.
|
inlineprotected |
Targets may add passes immediately before machine code is emitted in this callback.
This is called even later than addPreEmitPass
.
Definition at line 316 of file CodeGenPassBuilder.h.
|
inlineprotected |
This method may be implemented by targets that want to run passes immediately before the (global) instruction selection.
Definition at line 359 of file CodeGenPassBuilder.h.
|
inlineprotected |
{{@ For GlobalISel
addPreISel - This method should add any "last minute" LLVM->LLVM passes (which are run just before instruction selector).
Definition at line 323 of file CodeGenPassBuilder.h.
References llvm_unreachable.
|
inlineprotected |
This method may be implemented by targets that want to run passes immediately before legalization.
Definition at line 336 of file CodeGenPassBuilder.h.
|
inlineprotected |
This method may be implemented by targets that want to run passes immediately before register allocation.
Definition at line 279 of file CodeGenPassBuilder.h.
|
inlineprotected |
This method may be implemented by targets that want to run passes immediately before the register bank selection.
Definition at line 347 of file CodeGenPassBuilder.h.
|
inlineprotected |
addPreRewrite - Add passes to the optimized register allocation pipeline after register allocation is complete, but before virtual registers are rewritten to physical registers.
These passes must preserve VirtRegMap and LiveIntervals, and when running after RABasic or RAGreedy, they should take advantage of LiveRegMatrix. When these passes run, VirtRegMap contains legal physreg assignments for all virtual registers.
Note if the target overloads addRegAssignAndRewriteOptimized, this may not be honored. This is also not generally used for the fast variant, where the allocation and rewriting are done in one pass.
Definition at line 293 of file CodeGenPassBuilder.h.
|
inlineprotected |
This method may be implemented by targets that want to run passes after prolog-epilog insertion and before the second instruction scheduling pass.
Definition at line 305 of file CodeGenPassBuilder.h.
|
protected |
addMachinePasses helper to create the target-selected or overriden regalloc pass.
Find and instantiate the register allocation pass requested by this target at the current optimization level.
Different register allocators are defined as separate passes because they may require different analysis.
Definition at line 998 of file CodeGenPassBuilder.h.
References llvm::Basic, llvm::Default, llvm::Fast, llvm::Greedy, llvm_unreachable, and llvm::PBQP.
|
protected |
Add core register alloator passes which do the actual register assignment and rewriting.
Definition at line 1016 of file CodeGenPassBuilder.h.
References llvm::Default, llvm::Fast, llvm::inconvertibleErrorCode(), and llvm::Error::success().
|
protected |
Definition at line 1029 of file CodeGenPassBuilder.h.
References llvm::Error::success().
|
inlineprotected |
This method should install a register bank selector pass, which assigns register banks to virtual registers without a register class or register banks.
Definition at line 352 of file CodeGenPassBuilder.h.
References llvm::inconvertibleErrorCode().
|
protected |
Utilities for targets to add passes to the pass manager.
Register Allocation Pass Configuration.
createTargetRegisterAllocator - Create the register allocator pass for this target at the current optimization level.
Instantiate the default register allocator pass for this target for either the optimized or unoptimized allocation path. This will be added to the pass manager by addFastRegAlloc in the unoptimized case or addOptimizedRegAlloc in the optimized case.
A target that uses the standard regalloc pass order for fast or optimized allocation may still override this for per-target regalloc selection. But -regalloc=... always takes precedence.
Definition at line 986 of file CodeGenPassBuilder.h.
Error llvm::CodeGenPassBuilder< Derived >::buildPipeline | ( | ModulePassManager & | MPM, |
MachineFunctionPassManager & | MFPM, | ||
raw_pwrite_stream & | Out, | ||
raw_pwrite_stream * | DwoOut, | ||
CodeGenFileType | FileType | ||
) | const |
Definition at line 461 of file CodeGenPassBuilder.h.
References MPM, llvm::Error::success(), and TM.
|
inlineprotected |
Definition at line 246 of file CodeGenPassBuilder.h.
References llvm::TargetMachine::getOptLevel(), and llvm::CodeGenPassBuilder< DerivedT >::TM.
Referenced by llvm::CodeGenPassBuilder< DerivedT >::CodeGenPassBuilder().
|
inline |
Definition at line 136 of file CodeGenPassBuilder.h.
References llvm::CodeGenPassBuilder< DerivedT >::PIC.
std::pair< StringRef, bool > llvm::CodeGenPassBuilder< Derived >::getPassNameFromLegacyName | ( | StringRef | Name | ) | const |
Definition at line 536 of file CodeGenPassBuilder.h.
References Name, and llvm::report_fatal_error().
|
inlineprotected |
Definition at line 241 of file CodeGenPassBuilder.h.
|
inlineprotected |
Definition at line 245 of file CodeGenPassBuilder.h.
References llvm::CodeGenPassBuilder< DerivedT >::TM.
|
inlineprotected |
Check whether or not GlobalISel should abort on error.
When this is disabled, GlobalISel will fall back on SDISel instead of erroring out.
Definition at line 251 of file CodeGenPassBuilder.h.
References llvm::Enable, llvm::TargetOptions::GlobalISelAbort, llvm::TargetMachine::Options, and llvm::CodeGenPassBuilder< DerivedT >::TM.
|
inline |
Definition at line 130 of file CodeGenPassBuilder.h.
References llvm::MachineFunctionAnalysisManager::FAM, llvm::MachineFunctionAnalysisManager::MAM, llvm::CodeGenPassBuilder< DerivedT >::registerFunctionAnalyses(), llvm::CodeGenPassBuilder< DerivedT >::registerMachineFunctionAnalyses(), and llvm::CodeGenPassBuilder< DerivedT >::registerModuleAnalyses().
void llvm::CodeGenPassBuilder< Derived >::registerFunctionAnalyses | ( | FunctionAnalysisManager & | FAM | ) | const |
Definition at line 511 of file CodeGenPassBuilder.h.
References FAM, llvm::registerAAAnalyses(), and llvm::AnalysisManager< IRUnitT, ExtraArgTs >::registerPass().
Referenced by llvm::CodeGenPassBuilder< DerivedT >::registerAnalyses().
void llvm::CodeGenPassBuilder< Derived >::registerMachineFunctionAnalyses | ( | MachineFunctionAnalysisManager & | MFAM | ) | const |
Definition at line 522 of file CodeGenPassBuilder.h.
Referenced by llvm::CodeGenPassBuilder< DerivedT >::registerAnalyses().
void llvm::CodeGenPassBuilder< Derived >::registerModuleAnalyses | ( | ModuleAnalysisManager & | MAM | ) | const |
Definition at line 502 of file CodeGenPassBuilder.h.
References MAM.
Referenced by llvm::CodeGenPassBuilder< DerivedT >::registerAnalyses().
|
inlineprotected |
Definition at line 239 of file CodeGenPassBuilder.h.
|
inlineprotected |
Definition at line 240 of file CodeGenPassBuilder.h.
|
inlineprotected |
Target override these hooks to parse target-specific analyses.
Definition at line 238 of file CodeGenPassBuilder.h.
|
inlineprotected |
Check whether or not a diagnostic should be emitted when GlobalISel uses the fallback path.
In other words, it will emit a diagnostic when GlobalISel failed and isGlobalISelAbortEnabled is false.
Definition at line 258 of file CodeGenPassBuilder.h.
References llvm::DisableWithDiag, llvm::TargetOptions::GlobalISelAbort, llvm::TargetMachine::Options, and llvm::CodeGenPassBuilder< DerivedT >::TM.
|
protected |
Definition at line 234 of file CodeGenPassBuilder.h.
Referenced by llvm::CodeGenPassBuilder< DerivedT >::CodeGenPassBuilder().
|
protected |
Definition at line 235 of file CodeGenPassBuilder.h.
Referenced by llvm::CodeGenPassBuilder< DerivedT >::getPassInstrumentationCallbacks().
|
protected |
Definition at line 233 of file CodeGenPassBuilder.h.
Referenced by llvm::CodeGenPassBuilder< DerivedT >::CodeGenPassBuilder(), llvm::CodeGenPassBuilder< DerivedT >::getOptLevel(), llvm::CodeGenPassBuilder< DerivedT >::getTM(), llvm::CodeGenPassBuilder< DerivedT >::isGlobalISelAbortEnabled(), and llvm::CodeGenPassBuilder< DerivedT >::reportDiagnosticWhenGlobalISelFallback().