diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-24 18:27:25 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-24 18:27:25 +0800 |
| commit | f430936038432e90b2d70e08ac51620931651450 (patch) | |
| tree | 741d8f94e2315180a6b0dd3fdbe8b25ab298548a /backend/unittests/Target | |
| parent | 1b4601c1ac91a06091610e969e70bcd1cb014cc5 (diff) | |
| download | rcc-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.cpp | 11 | ||||
| -rw-r--r-- | backend/unittests/Target/RISCVLateCodeGenTest.cpp | 11 |
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) && |
