aboutsummaryrefslogtreecommitdiff
path: root/backend/unittests/Target
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-24 18:27:25 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-24 18:27:25 +0800
commitf430936038432e90b2d70e08ac51620931651450 (patch)
tree741d8f94e2315180a6b0dd3fdbe8b25ab298548a /backend/unittests/Target
parent1b4601c1ac91a06091610e969e70bcd1cb014cc5 (diff)
downloadrcc-project-f430936038432e90b2d70e08ac51620931651450.tar.gz
rcc-project-f430936038432e90b2d70e08ac51620931651450.tar.xz
[RISCV] Match LLVM compressed stack frame lowering
Diffstat (limited to 'backend/unittests/Target')
-rw-r--r--backend/unittests/Target/RISCVFrameLoweringTest.cpp11
-rw-r--r--backend/unittests/Target/RISCVLateCodeGenTest.cpp11
2 files changed, 16 insertions, 6 deletions
diff --git a/backend/unittests/Target/RISCVFrameLoweringTest.cpp b/backend/unittests/Target/RISCVFrameLoweringTest.cpp
index ec4bfa3..9b8e25c 100644
--- a/backend/unittests/Target/RISCVFrameLoweringTest.cpp
+++ b/backend/unittests/Target/RISCVFrameLoweringTest.cpp
@@ -57,6 +57,11 @@ struct FunctionFixture final {
rcc::MachineBasicBlock *Block = nullptr;
};
+[[nodiscard]] const rcc::riscv::RISCVSubtarget &subtarget() {
+ static const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc());
+ return Subtarget;
+}
+
class ObservingFrameLowering final : public rcc::TargetFrameLowering {
public:
explicit ObservingFrameLowering(const rcc::TargetFrameLowering &Delegate,
@@ -227,7 +232,7 @@ runFrameLoweringWith(rcc::MachineFunction &Function, const rcc::TargetDescriptio
[[nodiscard]] rcc::Expected<void> runFrameLowering(rcc::MachineFunction &Function,
const rcc::TargetDescription &Target) {
- return runFrameLoweringWith(Function, Target, rcc::riscv::frameLowering());
+ return runFrameLoweringWith(Function, Target, subtarget().frameLowering());
}
[[nodiscard]] rcc::Expected<rcc::FrameIndex>
@@ -1173,7 +1178,7 @@ void testPEIOrderingAndPostconditions(TestContext &Context, const rcc::TargetDes
!buildReturn(*Ordered->Function, Target, *Ordered->Block)) {
return;
}
- ObservingFrameLowering Observer(rcc::riscv::frameLowering());
+ ObservingFrameLowering Observer(subtarget().frameLowering());
auto OrderedResult = runFrameLoweringWith(*Ordered->Function, Target, Observer);
Context.expect(
OrderedResult && Observer.PrepareSawUnfrozen && Observer.InsertSawUnfrozen &&
@@ -1197,7 +1202,7 @@ void testPEIOrderingAndPostconditions(TestContext &Context, const rcc::TargetDes
return;
}
const std::size_t OriginalInstructionCount = InvalidPostcondition->Block->instructionCount();
- ObservingFrameLowering Broken(rcc::riscv::frameLowering(), true);
+ ObservingFrameLowering Broken(subtarget().frameLowering(), true);
auto Rejected = runFrameLoweringWith(*InvalidPostcondition->Function, Target, Broken);
Context.expect(
!Rejected && !InvalidPostcondition->Function->frameInfo().isFrozen() &&
diff --git a/backend/unittests/Target/RISCVLateCodeGenTest.cpp b/backend/unittests/Target/RISCVLateCodeGenTest.cpp
index 8160370..d78d4c4 100644
--- a/backend/unittests/Target/RISCVLateCodeGenTest.cpp
+++ b/backend/unittests/Target/RISCVLateCodeGenTest.cpp
@@ -66,6 +66,11 @@ constexpr rcc::Opcode GrowingLatePseudoOpcode = rcc::Opcode::fromValue(10'000);
constexpr rcc::Opcode LateExpansionRealOpcode = rcc::Opcode::fromValue(10'001);
constexpr rcc::Opcode ShrinkingLatePseudoOpcode = rcc::Opcode::fromValue(10'002);
+[[nodiscard]] const rcc::riscv::RISCVSubtarget &subtarget() {
+ static const rcc::riscv::RISCVSubtarget Subtarget(rcc::riscv::RISCVSubtargetFeatures::rv64gc());
+ return Subtarget;
+}
+
class GrowingLatePseudoInfo final : public rcc::TargetPseudoExpansionInfo {
public:
[[nodiscard]] rcc::Expected<bool>
@@ -741,7 +746,7 @@ void testShrinkWrappedFrameRegion(TestContext &Context, const rcc::TargetDescrip
Context.expect(rcc::rebuildMachineLiveness(*Function, Target).has_value(),
"shrink-wrapping fixture liveness must be rebuilt");
rcc::MachineFunctionAnalysisManager Analyses;
- rcc::MachineShrinkWrappingPass Shrink{rcc::riscv::frameLowering()};
+ rcc::MachineShrinkWrappingPass Shrink{subtarget().frameLowering()};
auto Shrunk = Shrink.run(*Function, Target, Analyses);
Context.expect(Shrunk && Shrunk->Changed &&
Function->frameInfo().state().SavePoints.size() == 1 &&
@@ -755,7 +760,7 @@ void testShrinkWrappedFrameRegion(TestContext &Context, const rcc::TargetDescrip
rcc::MachineFunctionPassManager FramePipeline;
Context.expect(FramePipeline
.addPass(std::make_unique<rcc::PrologueEpilogueInsertionPass>(
- rcc::riscv::frameLowering()))
+ subtarget().frameLowering()))
.has_value(),
"shrink-wrapped PEI pass must register");
auto Lowered = FramePipeline.run(*Function, Target, Analyses);
@@ -1058,7 +1063,7 @@ void testPostRAPseudoExpansionAndFinalization(TestContext &Context,
void testCanonicalOptimizationPipelines(TestContext &Context,
const rcc::TargetDescription &Target) {
const rcc::MachineOptimizationPipelineTargetInfo TargetInfo =
- rcc::riscv::optimizationPipelineInfo();
+ rcc::riscv::optimizationPipelineInfo(subtarget());
rcc::MachineFunctionPassManager SelectedPipeline;
rcc::MachineFunctionPassManager PreRAPipeline;
Context.expect(rcc::addSelectedSSAOptimizationPipeline(SelectedPipeline, TargetInfo) &&