aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen/MachineRegisterInfo.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-14 20:35:54 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-14 20:35:54 +0800
commit97e5fbaa55b4672db36123c2425d05a4738452ab (patch)
treec2750bd49922edc8c76bc831ad7bfc8b0bf42bb8 /backend/lib/CodeGen/MachineRegisterInfo.cpp
parent8be4d04455f70892a94d1e0798e266c948b4750a (diff)
downloadrcc-project-97e5fbaa55b4672db36123c2425d05a4738452ab.tar.gz
rcc-project-97e5fbaa55b4672db36123c2425d05a4738452ab.tar.xz
[GlobalISel] Match LLVM legalization value tracking
Diffstat (limited to 'backend/lib/CodeGen/MachineRegisterInfo.cpp')
-rw-r--r--backend/lib/CodeGen/MachineRegisterInfo.cpp20
1 files changed, 16 insertions, 4 deletions
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<Register> MachineRegisterInfo::createVirtualRegister(LowLevelType Type)
return *Reg;
}
+Expected<Register> 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<void> 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<MachineInstr *>(Definition->parent());
+ return Definition == nullptr ? nullptr : const_cast<MachineInstr *>(Definition->parent());
}
const MachineInstr *MachineRegisterInfo::getVRegDef(Register Reg) const noexcept {
@@ -327,8 +340,7 @@ Expected<LowLevelType> 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;
}