// SPDX-License-Identifier: GPL-3.0-or-later #ifndef RCC_CODEGEN_MACHINEOPTIMIZATIONPIPELINE_H #define RCC_CODEGEN_MACHINEOPTIMIZATIONPIPELINE_H #include "rcc/CodeGen/MachinePass.h" namespace rcc { class TargetInstrInfo; class TargetFrameLowering; class TargetMachineCombinerInfo; class TargetMemoryFoldingInfo; class TargetPseudoExpansionInfo; class TargetSchedulingModel; class TargetSSAInfo; struct MachineOptimizationPipelineTargetInfo final { const TargetSSAInfo &SSA; const TargetMachineCombinerInfo &Combiner; const TargetMemoryFoldingInfo &MemoryFolding; const TargetFrameLowering &FrameLowering; const TargetPseudoExpansionInfo &PseudoExpansion; const TargetSchedulingModel &SchedulingModel; const TargetInstrInfo &BranchInfo; }; [[nodiscard]] Expected registerMachineOptimizationAnalyses(MachineAnalysisManager &Analyses); [[nodiscard]] Expected addSelectedSSAOptimizationPipeline(MachinePassManager &Pipeline, const MachineOptimizationPipelineTargetInfo &TargetInfo); [[nodiscard]] Expected addPreRegisterAllocationOptimizationPipeline( MachinePassManager &Pipeline, const MachineOptimizationPipelineTargetInfo &TargetInfo); [[nodiscard]] Expected addPostRegisterAllocationPipeline(MachinePassManager &Pipeline, const MachineOptimizationPipelineTargetInfo &TargetInfo); } // namespace rcc #endif // RCC_CODEGEN_MACHINEOPTIMIZATIONPIPELINE_H