aboutsummaryrefslogtreecommitdiff
path: root/backend/lib/CodeGen/MachineVerifier.cpp
diff options
context:
space:
mode:
authorRichard-Qin-X <richard.qin.001@gmail.com>2026-08-16 01:09:11 +0800
committerRichard-Qin-X <richard.qin.001@gmail.com>2026-08-16 01:09:11 +0800
commit72a559302280a3837efea331829b70d9bb218f7a (patch)
tree01345284e79d76b071fed85406e5c983aa413720 /backend/lib/CodeGen/MachineVerifier.cpp
parent94124b0d5604d6d6a6e1b923411e97287fa51e8b (diff)
downloadrcc-project-72a559302280a3837efea331829b70d9bb218f7a.tar.gz
rcc-project-72a559302280a3837efea331829b70d9bb218f7a.tar.xz
[RISCV][GlobalISel] Select constant operands as immediates
Diffstat (limited to 'backend/lib/CodeGen/MachineVerifier.cpp')
-rw-r--r--backend/lib/CodeGen/MachineVerifier.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/backend/lib/CodeGen/MachineVerifier.cpp b/backend/lib/CodeGen/MachineVerifier.cpp
index 5a040b9..abccc56 100644
--- a/backend/lib/CodeGen/MachineVerifier.cpp
+++ b/backend/lib/CodeGen/MachineVerifier.cpp
@@ -838,7 +838,9 @@ private:
return fail("reserved-register list contains invalid or duplicate entries");
}
- for (const VirtualRegisterInfo &Info : RegInfo.virtualRegisters()) {
+ const auto VirtualRegisters = RegInfo.virtualRegisters();
+ for (std::size_t Index = 0; Index < VirtualRegisters.size(); ++Index) {
+ const VirtualRegisterInfo &Info = VirtualRegisters[Index];
if (Info.IsTombstone) {
if (Info.Type || Info.Bank || Info.RegClass || !Info.AllocationHints.empty() ||
Info.TargetFlags != 0) {
@@ -846,10 +848,16 @@ private:
}
continue;
}
- HasLiveVirtualRegister = true;
- MissingVirtualType |= !Info.Type;
- MissingVirtualBank |= !Info.Bank;
- MissingVirtualClass |= !Info.RegClass;
+ auto Reg = Register::makeVirtual(Index);
+ if (!Reg)
+ return failWith("virtual register", Reg.error());
+ const auto Operands = RegInfo.regOperands(*Reg);
+ if (Operands.begin() != Operands.end()) {
+ HasLiveVirtualRegister = true;
+ MissingVirtualType |= !Info.Type;
+ MissingVirtualBank |= !Info.Bank;
+ MissingVirtualClass |= !Info.RegClass;
+ }
if (Info.Type && !Info.Type->isValid())
return fail("virtual register has an invalid LowLevelType");