From f430936038432e90b2d70e08ac51620931651450 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Mon, 24 Aug 2026 18:27:25 +0800 Subject: [RISCV] Match LLVM compressed stack frame lowering --- backend/unittests/Target/RISCVFrameLoweringTest.cpp | 11 ++++++++--- backend/unittests/Target/RISCVLateCodeGenTest.cpp | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'backend/unittests/Target') 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 runFrameLowering(rcc::MachineFunction &Function, const rcc::TargetDescription &Target) { - return runFrameLoweringWith(Function, Target, rcc::riscv::frameLowering()); + return runFrameLoweringWith(Function, Target, subtarget().frameLowering()); } [[nodiscard]] rcc::Expected @@ -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 @@ -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::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) && -- cgit v1.2.3