From b91913184946e8381dc2d632ce37563913d5ce5f Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Fri, 28 Aug 2026 19:44:49 +0800 Subject: [RISCV] Complete Zcmp frame lowering and optimization --- backend/lib/Target/RISCV/RISCVPipeline.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'backend/lib/Target/RISCV/RISCVPipeline.cpp') diff --git a/backend/lib/Target/RISCV/RISCVPipeline.cpp b/backend/lib/Target/RISCV/RISCVPipeline.cpp index c34a590..3e7599d 100644 --- a/backend/lib/Target/RISCV/RISCVPipeline.cpp +++ b/backend/lib/Target/RISCV/RISCVPipeline.cpp @@ -102,6 +102,15 @@ template return addPass(Pipeline); } +[[nodiscard]] MachineFunctionPassManager::PassList +postRAPseudoExpansionPasses(const RISCVSubtarget &Subtarget) { + MachineFunctionPassManager::PassList Passes; + Passes.push_back(createMakeCompressiblePass(Subtarget)); + Passes.push_back(createMoveMergePass(Subtarget)); + Passes.push_back(createPushPopOptimizationPass(Subtarget)); + return Passes; +} + [[nodiscard]] Expected addCompleteRegistry(MachineFunctionPassManager &Pipeline, const RISCVSubtarget &Subtarget, TargetPipelineOptions Options) { @@ -123,13 +132,7 @@ template Options.DebugPrologueEpilogue), MachineOptimizationPipelineOptions{.UseTargetCopyInstructions = Options.UseTargetCopyInstructions}, - createPushPopOptimizationPass(Subtarget)); - if (!Added) - return std::unexpected(Added.error()); - Added = Pipeline.addPass(createMakeCompressiblePass(Subtarget)); - if (!Added) - return std::unexpected(Added.error()); - Added = Pipeline.addPass(createMoveMergePass(Subtarget)); + postRAPseudoExpansionPasses(Subtarget)); if (!Added) return std::unexpected(Added.error()); return addPass(Pipeline, Subtarget.frameLowering()); @@ -198,15 +201,10 @@ Expected addCanonicalPipeline(MachineFunctionPassManager &Pipeline, Options.DebugPrologueEpilogue), MachineOptimizationPipelineOptions{.UseTargetCopyInstructions = Options.UseTargetCopyInstructions}, - createPushPopOptimizationPass(Subtarget)); + postRAPseudoExpansionPasses(Subtarget)); if (!Added) return std::unexpected(Added.error()); } - auto Added = Pipeline.addPass(createMakeCompressiblePass(Subtarget)); - if (!Added) - return std::unexpected(Added.error()); - if (Subtarget.features().has(RISCVExtension::Zcmp)) - return Pipeline.addPass(createMoveMergePass(Subtarget)); return {}; } -- cgit v1.2.3