aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/Target/RISCV/RISCVPipeline.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-28 19:44:49 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-28 19:44:49 +0800
commitb91913184946e8381dc2d632ce37563913d5ce5f (patch)
tree5ab382b56dd7d728e41f23bb3de23939e69ec3be /backend/lib/Target/RISCV/RISCVPipeline.cpp
parentb1c08d57f1637f5ee813d1409dacdfa88c1509a0 (diff)
downloadrcc-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.cpp24
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 {};
}