[llvm] [MachineVerifier] Disallow subregister defs in SSA form (PR #189403)

Jay Foad via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 31 01:07:13 PDT 2026


https://github.com/jayfoad updated https://github.com/llvm/llvm-project/pull/189403

>From ff861c587a149553142559a630cf3ec2718495d0 Mon Sep 17 00:00:00 2001
From: Jay Foad <jay.foad at amd.com>
Date: Mon, 30 Mar 2026 16:12:25 +0100
Subject: [PATCH] [MachineVerifier] Disallow subregister defs in SSA form

---
 llvm/lib/CodeGen/MachineVerifier.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp
index e5b145bb82c71..980ff2c6717a6 100644
--- a/llvm/lib/CodeGen/MachineVerifier.cpp
+++ b/llvm/lib/CodeGen/MachineVerifier.cpp
@@ -3140,9 +3140,12 @@ void MachineVerifier::checkLiveness(const MachineOperand *MO, unsigned MONum) {
       addRegWithSubRegs(regsDefined, Reg);
 
     // Verify SSA form.
-    if (MRI->isSSA() && Reg.isVirtual() &&
-        std::next(MRI->def_begin(Reg)) != MRI->def_end())
-      report("Multiple virtual register defs in SSA form", MO, MONum);
+    if (MRI->isSSA() && Reg.isVirtual()) {
+      if (!MRI->hasOneDef(Reg))
+        report("Multiple virtual register defs in SSA form", MO, MONum);
+      if (MO->getSubReg())
+        report("Subreg def in SSA form", MO, MONum);
+    }
 
     // Check LiveInts for a live segment, but only for virtual registers.
     if (LiveInts && !LiveInts->isNotInMIMap(*MI)) {



More information about the llvm-commits mailing list