class MachineFunctionPassManager
Declaration
class MachineFunctionPassManager : public PassManager { /* full declaration omitted */ };
Description
MachineFunctionPassManager adds/removes below features to/from the base PassManager template instantiation. - Support passes that implement doInitialization/doFinalization. This is for machine function passes to work on module level constructs. One such pass is AsmPrinter. - Support machine module pass which runs over the module (for example, MachineOutliner). A machine module pass needs to define the method: ```Error run(Module & , MachineFunctionAnalysisManager & )``` FIXME: machine module passes still need to define the usual machine function pass interface, namely, `PreservedAnalyses run(MachineFunction & , MachineFunctionAnalysisManager & )` But this interface wouldn't be executed. It is just a placeholder to satisfy the pass manager type-erased inteface. This special-casing of machine module pass is due to its limited use cases and the unnecessary complexity it may bring to the machine pass manager. - The base class `run` method is replaced by an alternative `run` method. See details below. - Support codegening in the SCC order. Users include interprocedural register allocation (IPRA).
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:132
Inherits from: PassManager
Member Variables
- private SmallVector<llvm::unique_function<FuncTy>, 4> InitializationFuncs
- private SmallVector<llvm::unique_function<FuncTy>, 4> FinalizationFuncs
- private std::map<PassIndex, llvm::unique_function<FuncTy>> MachineModulePasses
- private bool RequireCodeGenSCCOrder
- private bool VerifyMachineFunction
Method Overview
- public MachineFunctionPassManager(bool DebugLogging = false, bool RequireCodeGenSCCOrder = false, bool VerifyMachineFunction = false)
- public MachineFunctionPassManager(llvm::MachineFunctionPassManager &&)
- private template <typename PassT>std::enable_if_t<!is_detected<llvm::MachineFunctionPassManager::has_fini_t, PassT>::value> addDoFinalization(llvm::PassManager<llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>::PassConceptT * Pass)
- private template <typename PassT>std::enable_if_t<is_detected<llvm::MachineFunctionPassManager::has_fini_t, PassT>::value> addDoFinalization(llvm::PassManager<llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>::PassConceptT * Pass)
- private template <typename PassT>std::enable_if_t<!is_detected<llvm::MachineFunctionPassManager::has_init_t, PassT>::value> addDoInitialization(llvm::PassManager<llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>::PassConceptT * Pass)
- private template <typename PassT>std::enable_if_t<is_detected<llvm::MachineFunctionPassManager::has_init_t, PassT>::value> addDoInitialization(llvm::PassManager<llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>::PassConceptT * Pass)
- public template <typename PassT>void addPass(PassT && Pass)
- private template <typename PassT>std::enable_if_t<!is_detected<llvm::MachineFunctionPassManager::is_machine_module_pass_t, PassT>::value> addRunOnModule(llvm::PassManager<llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>::PassConceptT * Pass)
- private template <typename PassT>std::enable_if_t<is_detected<llvm::MachineFunctionPassManager::is_machine_module_pass_t, PassT>::value> addRunOnModule(llvm::PassManager<llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>::PassConceptT * Pass)
- public llvm::Error run(llvm::Module & M, llvm::MachineFunctionAnalysisManager & MFAM)
Methods
¶MachineFunctionPassManager(
bool DebugLogging = false,
bool RequireCodeGenSCCOrder = false,
bool VerifyMachineFunction = false)
MachineFunctionPassManager(
bool DebugLogging = false,
bool RequireCodeGenSCCOrder = false,
bool VerifyMachineFunction = false)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:137
Parameters
- bool DebugLogging = false
- bool RequireCodeGenSCCOrder = false
- bool VerifyMachineFunction = false
¶MachineFunctionPassManager(
llvm::MachineFunctionPassManager&&)
MachineFunctionPassManager(
llvm::MachineFunctionPassManager&&)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:142
Parameters
¶template <typename PassT>
std::enable_if_t<!is_detected<
llvm::MachineFunctionPassManager::has_fini_t,
PassT>::value>
addDoFinalization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
template <typename PassT>
std::enable_if_t<!is_detected<
llvm::MachineFunctionPassManager::has_fini_t,
PassT>::value>
addDoFinalization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:195
Templates
- PassT
Parameters
- llvm::PassManager< llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>:: PassConceptT* Pass
¶template <typename PassT>
std::enable_if_t<is_detected<
llvm::MachineFunctionPassManager::has_fini_t,
PassT>::value>
addDoFinalization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
template <typename PassT>
std::enable_if_t<is_detected<
llvm::MachineFunctionPassManager::has_fini_t,
PassT>::value>
addDoFinalization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:199
Templates
- PassT
Parameters
- llvm::PassManager< llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>:: PassConceptT* Pass
¶template <typename PassT>
std::enable_if_t<!is_detected<
llvm::MachineFunctionPassManager::has_init_t,
PassT>::value>
addDoInitialization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
template <typename PassT>
std::enable_if_t<!is_detected<
llvm::MachineFunctionPassManager::has_init_t,
PassT>::value>
addDoInitialization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:173
Templates
- PassT
Parameters
- llvm::PassManager< llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>:: PassConceptT* Pass
¶template <typename PassT>
std::enable_if_t<is_detected<
llvm::MachineFunctionPassManager::has_init_t,
PassT>::value>
addDoInitialization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
template <typename PassT>
std::enable_if_t<is_detected<
llvm::MachineFunctionPassManager::has_init_t,
PassT>::value>
addDoInitialization(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:177
Templates
- PassT
Parameters
- llvm::PassManager< llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>:: PassConceptT* Pass
¶template <typename PassT>
void addPass(PassT&& Pass)
template <typename PassT>
void addPass(PassT&& Pass)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:155
Templates
- PassT
Parameters
- PassT&& Pass
¶template <typename PassT>
std::enable_if_t<!is_detected<
llvm::MachineFunctionPassManager::
is_machine_module_pass_t,
PassT>::value>
addRunOnModule(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
template <typename PassT>
std::enable_if_t<!is_detected<
llvm::MachineFunctionPassManager::
is_machine_module_pass_t,
PassT>::value>
addRunOnModule(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:222
Templates
- PassT
Parameters
- llvm::PassManager< llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>:: PassConceptT* Pass
¶template <typename PassT>
std::enable_if_t<
is_detected<llvm::MachineFunctionPassManager::
is_machine_module_pass_t,
PassT>::value>
addRunOnModule(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
template <typename PassT>
std::enable_if_t<
is_detected<llvm::MachineFunctionPassManager::
is_machine_module_pass_t,
PassT>::value>
addRunOnModule(
llvm::PassManager<
llvm::MachineFunction,
llvm::MachineFunctionAnalysisManager>::
PassConceptT* Pass)
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:226
Templates
- PassT
Parameters
- llvm::PassManager< llvm::MachineFunction, llvm::MachineFunctionAnalysisManager>:: PassConceptT* Pass
¶llvm::Error run(
llvm::Module& M,
llvm::MachineFunctionAnalysisManager& MFAM)
llvm::Error run(
llvm::Module& M,
llvm::MachineFunctionAnalysisManager& MFAM)
Description
Run machine passes for a Module. The intended use is to start the codegen pipeline for a Module. The base class's `run` method is deliberately hidden by this due to the observation that we don't yet have the use cases of compositing two instances of machine pass managers, or compositing machine pass managers with other types of pass managers.
Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:153