aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen/MachineRegisterInfo.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-14 04:33:41 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-14 04:33:41 +0800
commit8be4d04455f70892a94d1e0798e266c948b4750a (patch)
tree6ef304317a6980ecfbe32868d64cd05f5e8af8bd /backend/lib/CodeGen/MachineRegisterInfo.cpp
parentaa69e15c6909c3b162b15f5326f0a72ba9bb7163 (diff)
downloadrcc-project-8be4d04455f70892a94d1e0798e266c948b4750a.tar.gz
rcc-project-8be4d04455f70892a94d1e0798e266c948b4750a.tar.xz
[CodeGen] Match LLVM Legalizer ownership
Diffstat (limited to 'backend/lib/CodeGen/MachineRegisterInfo.cpp')
-rw-r--r--backend/lib/CodeGen/MachineRegisterInfo.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/backend/lib/CodeGen/MachineRegisterInfo.cpp b/backend/lib/CodeGen/MachineRegisterInfo.cpp
index a88bfb0..4627f9e 100644
--- a/backend/lib/CodeGen/MachineRegisterInfo.cpp
+++ b/backend/lib/CodeGen/MachineRegisterInfo.cpp
@@ -311,6 +311,27 @@ const MachineOperand *MachineRegisterInfo::getUniqueVRegDef(Register Reg) const
return UniqueDef;
}
+MachineInstr *MachineRegisterInfo::getVRegDef(Register Reg) noexcept {
+ const MachineOperand *Definition = getUniqueVRegDef(Reg);
+ return Definition == nullptr ? nullptr
+ : const_cast<MachineInstr *>(Definition->parent());
+}
+
+const MachineInstr *MachineRegisterInfo::getVRegDef(Register Reg) const noexcept {
+ const MachineOperand *Definition = getUniqueVRegDef(Reg);
+ return Definition == nullptr ? nullptr : Definition->parent();
+}
+
+Expected<LowLevelType> MachineRegisterInfo::getType(Register Reg) const {
+ auto Info = virtualRegisterInfo(Reg);
+ if (!Info)
+ return std::unexpected(Info.error());
+ if (!Info->get().Type)
+ return makeUnexpected(ErrorCode::InvalidArgument,
+ "virtual register has no LowLevelType");
+ return *Info->get().Type;
+}
+
Expected<std::size_t> MachineRegisterInfo::replaceRegWith(Register OldReg, Register NewReg) {
if (OldReg.isNoRegister() || NewReg.isNoRegister()) {
return makeUnexpected(ErrorCode::InvalidArgument,