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)

Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:137

Parameters

bool DebugLogging = false
bool RequireCodeGenSCCOrder = false
bool VerifyMachineFunction = false

MachineFunctionPassManager(
    llvm::MachineFunctionPassManager&&)

Declared at: llvm/include/llvm/CodeGen/MachinePassManager.h:142

Parameters

llvm::MachineFunctionPassManager&&

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)

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)

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)

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)

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)

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)

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)

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

Parameters

llvm::Module& M
llvm::MachineFunctionAnalysisManager& MFAM