diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-28 19:44:49 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-28 19:44:49 +0800 |
| commit | b91913184946e8381dc2d632ce37563913d5ce5f (patch) | |
| tree | 5ab382b56dd7d728e41f23bb3de23939e69ec3be /backend/lib/Target/RISCV/RISCVPipeline.cpp | |
| parent | b1c08d57f1637f5ee813d1409dacdfa88c1509a0 (diff) | |
| download | rcc-project-b91913184946e8381dc2d632ce37563913d5ce5f.tar.gz rcc-project-b91913184946e8381dc2d632ce37563913d5ce5f.tar.xz | |
[RISCV] Complete Zcmp frame lowering and optimization
Diffstat (limited to 'backend/lib/Target/RISCV/RISCVPipeline.cpp')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVPipeline.cpp | 24 |
1 files changed, 11 insertions, 13 deletions
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 <typename PassT, typename... ArgumentT> return addPass<VirtualRegisterRewritePass>(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<void> addCompleteRegistry(MachineFunctionPassManager &Pipeline, const RISCVSubtarget &Subtarget, TargetPipelineOptions Options) { @@ -123,13 +132,7 @@ template <typename PassT, typename... ArgumentT> 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<CFIInstrInserterPass>(Pipeline, Subtarget.frameLowering()); @@ -198,15 +201,10 @@ Expected<void> 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 {}; } |
