From 97e5fbaa55b4672db36123c2425d05a4738452ab Mon Sep 17 00:00:00 2001 From: Richard-Qin-X Date: Fri, 14 Aug 2026 20:35:54 +0800 Subject: [GlobalISel] Match LLVM legalization value tracking --- backend/lib/CodeGen/MachineRegisterInfo.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'backend/lib/CodeGen/MachineRegisterInfo.cpp') diff --git a/backend/lib/CodeGen/MachineRegisterInfo.cpp b/backend/lib/CodeGen/MachineRegisterInfo.cpp index 4627f9e..cc1cbdb 100644 --- a/backend/lib/CodeGen/MachineRegisterInfo.cpp +++ b/backend/lib/CodeGen/MachineRegisterInfo.cpp @@ -81,6 +81,20 @@ Expected MachineRegisterInfo::createVirtualRegister(LowLevelType Type) return *Reg; } +Expected MachineRegisterInfo::cloneVirtualRegister(Register Reg) { + auto Source = virtualRegisterInfo(Reg); + if (!Source) + return std::unexpected(Source.error()); + auto Clone = createVirtualRegister(); + if (!Clone) + return std::unexpected(Clone.error()); + VirtualRegisters.back() = Source->get(); + VirtualRegisters.back().Name.reset(); + VirtualRegisters.back().AllocationHints.clear(); + VirtualRegisters.back().IsTombstone = false; + return *Clone; +} + Expected MachineRegisterInfo::eraseVirtualRegister(Register Reg) { auto Info = virtualRegisterInfo(Reg); if (!Info) @@ -313,8 +327,7 @@ const MachineOperand *MachineRegisterInfo::getUniqueVRegDef(Register Reg) const MachineInstr *MachineRegisterInfo::getVRegDef(Register Reg) noexcept { const MachineOperand *Definition = getUniqueVRegDef(Reg); - return Definition == nullptr ? nullptr - : const_cast(Definition->parent()); + return Definition == nullptr ? nullptr : const_cast(Definition->parent()); } const MachineInstr *MachineRegisterInfo::getVRegDef(Register Reg) const noexcept { @@ -327,8 +340,7 @@ Expected MachineRegisterInfo::getType(Register Reg) const { if (!Info) return std::unexpected(Info.error()); if (!Info->get().Type) - return makeUnexpected(ErrorCode::InvalidArgument, - "virtual register has no LowLevelType"); + return makeUnexpected(ErrorCode::InvalidArgument, "virtual register has no LowLevelType"); return *Info->get().Type; } -- cgit v1.2.3