From 540c73a2f450af3d0aec6e039fab054471efdbb1 Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Mon, 24 Aug 2026 16:37:25 +0800 Subject: [RISCV] Match LLVM frame lowering semantics --- backend/tools/MIRTool/MIRToolMain.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'backend/tools/MIRTool/MIRToolMain.cpp') diff --git a/backend/tools/MIRTool/MIRToolMain.cpp b/backend/tools/MIRTool/MIRToolMain.cpp index b635c27..cfee95d 100644 --- a/backend/tools/MIRTool/MIRToolMain.cpp +++ b/backend/tools/MIRTool/MIRToolMain.cpp @@ -706,9 +706,14 @@ void setBackendOption(std::vector &Options, std::st Command.Invocation.CPU = *CodeGenFlags.CPU; if (CodeGenFlags.TuneCPU) Command.Invocation.TuneCPU = *CodeGenFlags.TuneCPU; - if (CodeGenFlags.ABI) - Command.Invocation.ABI = *CodeGenFlags.ABI; applyFeatureOverrides(std::move(CodeGenFlags.FeatureOverrides), Command.Invocation.Features); + if (CodeGenFlags.ABI) { + Command.Invocation.ABI = *CodeGenFlags.ABI; + } else { + const bool HasDoubleFloat = + std::ranges::find(Command.Invocation.Features, "+d") != Command.Invocation.Features.end(); + Command.Invocation.ABI = HasDoubleFloat ? "lp64d" : "lp64"; + } if (CodeGenFlags.Relocation) Command.Invocation.Relocation = *CodeGenFlags.Relocation; if (CodeGenFlags.Code) @@ -923,8 +928,11 @@ runWithCache(const CommandLine &Command, CanonicalMIR Input, const rcc::TargetDe rcc::riscv::RISCVSubtargetFeatures::fromFeatureList(Command.Invocation.Features); if (!Features) return std::unexpected(Features.error()); + auto ABI = rcc::riscv::parseRISCVABI(Command.Invocation.ABI); + if (!ABI) + return std::unexpected(ABI.error()); const rcc::riscv::RISCVSubtarget Subtarget(*Features, Command.Invocation.Relocation, - Command.Invocation.Code); + Command.Invocation.Code, *ABI); std::vector Names; for (std::size_t Index = 0; Index < Input->Document.unit().functionCount(); ++Index) { const rcc::MachineFunction *Function = Input->Document.unit().functionAt(Index); -- cgit v1.2.3