diff options
Diffstat (limited to 'backend/include/rcc/CodeGen/MachineOptimizationPipeline.h')
| -rw-r--r-- | backend/include/rcc/CodeGen/MachineOptimizationPipeline.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/backend/include/rcc/CodeGen/MachineOptimizationPipeline.h b/backend/include/rcc/CodeGen/MachineOptimizationPipeline.h new file mode 100644 index 0000000..c47fc48 --- /dev/null +++ b/backend/include/rcc/CodeGen/MachineOptimizationPipeline.h @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef RCC_CODEGEN_MACHINEOPTIMIZATIONPIPELINE_H +#define RCC_CODEGEN_MACHINEOPTIMIZATIONPIPELINE_H + +#include "rcc/CodeGen/MachinePassManager.h" +#include "rcc/CodeGen/MachineScheduler.h" +#include "rcc/CodeGen/TargetFrameLowering.h" + +#include <memory> + +namespace rcc { + +class TargetInstrInfo; +class TargetFrameLowering; +class TargetMachineCombinerInfo; +class TargetMemoryFoldingInfo; +class TargetPseudoExpansionInfo; +class TargetSchedulingModel; + +struct MachineOptimizationPipelineTargetInfo final { + const TargetInstrInfo &InstrInfo; + const TargetMachineCombinerInfo &Combiner; + const TargetMemoryFoldingInfo &MemoryFolding; + const TargetFrameLowering &FrameLowering; + const TargetPseudoExpansionInfo &PseudoExpansion; + const TargetSchedulingModel &SchedulingModel; + MachineSchedulerOptions SchedulerOptions; + FrameLoweringOptions FrameOptions; +}; + +struct MachineOptimizationPipelineOptions final { + bool UseTargetCopyInstructions = false; +}; + +[[nodiscard]] Expected<void> +registerMachineOptimizationAnalyses(MachineFunctionAnalysisManager &Analyses); + +[[nodiscard]] Expected<void> +addSelectedSSAOptimizationPipeline(MachineFunctionPassManager &Pipeline, + const MachineOptimizationPipelineTargetInfo &TargetInfo); + +[[nodiscard]] Expected<void> addPreRegisterAllocationOptimizationPipeline( + MachineFunctionPassManager &Pipeline, const MachineOptimizationPipelineTargetInfo &TargetInfo); + +[[nodiscard]] Expected<void> addPostRegisterAllocationPipeline( + MachineFunctionPassManager &Pipeline, const MachineOptimizationPipelineTargetInfo &TargetInfo, + MachineOptimizationPipelineOptions Options = {}, + MachineFunctionPassManager::PassList PostRAPseudoExpansionTargetPasses = {}); + +} // namespace rcc + +#endif // RCC_CODEGEN_MACHINEOPTIMIZATIONPIPELINE_H |
