diff options
| author | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 20:37:03 +0800 |
|---|---|---|
| committer | Richard-Qin-X <richard.qin.001@gmail.com> | 2026-08-11 20:37:03 +0800 |
| commit | 234d7d3bec020103e46daaff39d207d978479730 (patch) | |
| tree | c3fe4f23416b0f37e9fe77366884983dbba15125 /backend/lib | |
| parent | 38626ed37c9ea78c76c12dae4806b750881fd910 (diff) | |
| download | rcc-project-234d7d3bec020103e46daaff39d207d978479730.tar.gz rcc-project-234d7d3bec020103e46daaff39d207d978479730.tar.xz | |
[RISCV] Order call operands like LLVM MIR
Diffstat (limited to 'backend/lib')
| -rw-r--r-- | backend/lib/Target/RISCV/RISCVCallLowering.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/backend/lib/Target/RISCV/RISCVCallLowering.cpp b/backend/lib/Target/RISCV/RISCVCallLowering.cpp index 4780edb..60bf6f2 100644 --- a/backend/lib/Target/RISCV/RISCVCallLowering.cpp +++ b/backend/lib/Target/RISCV/RISCVCallLowering.cpp @@ -1352,6 +1352,14 @@ emitOutgoingArguments(MachineIRBuilder &Builder, const CallLoweringPlan &Plan, if (!Mask) return std::unexpected(Mask.error()); + std::unordered_set<PhysicalRegister> DynamicUses; + for (const CCAssignment &Assignment : Plan.argumentAssignments()) { + if (Assignment.LocationRegister && DynamicUses.insert(*Assignment.LocationRegister).second) { + auto Use = Instruction->addImplicitUse(Register::fromPhysical(*Assignment.LocationRegister)); + if (!Use) + return std::unexpected(Use.error()); + } + } std::unordered_set<PhysicalRegister> DynamicDefs; if (!IsTail) { for (const CCAssignment &Assignment : Plan.returnAssignments()) { @@ -1363,14 +1371,6 @@ emitOutgoingArguments(MachineIRBuilder &Builder, const CallLoweringPlan &Plan, } } } - std::unordered_set<PhysicalRegister> DynamicUses; - for (const CCAssignment &Assignment : Plan.argumentAssignments()) { - if (Assignment.LocationRegister && DynamicUses.insert(*Assignment.LocationRegister).second) { - auto Use = Instruction->addImplicitUse(Register::fromPhysical(*Assignment.LocationRegister)); - if (!Use) - return std::unexpected(Use.error()); - } - } auto Built = Instruction->build(); if (!Built) return std::unexpected(Built.error()); |
