[llvm] [NFC][CodeGen] Refactor subregister index verification for MIR (PR #181921)
Rahul Joshi via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 18 10:26:08 PST 2026
================
@@ -2818,28 +2818,29 @@ MachineVerifier::visitMachineOperand(const MachineOperand *MO, unsigned MONum) {
return;
}
}
- if (MONum < MCID.getNumOperands()) {
- if (const TargetRegisterClass *DRC = TII->getRegClass(MCID, MONum)) {
- if (SubIdx) {
- const TargetRegisterClass *SuperRC =
- TRI->getLargestLegalSuperClass(RC, *MF);
- if (!SuperRC) {
- report("No largest legal super class exists.", MO, MONum);
- return;
- }
- DRC = TRI->getMatchingSuperRegClass(SuperRC, DRC, SubIdx);
- if (!DRC) {
- report("No matching super-reg register class.", MO, MONum);
- return;
- }
- }
- if (!RC->hasSuperClassEq(DRC)) {
- report("Illegal virtual register for instruction", MO, MONum);
- OS << "Expected a " << TRI->getRegClassName(DRC)
- << " register, but got a " << TRI->getRegClassName(RC)
- << " register\n";
- }
- }
+ if (MONum >= MCID.getNumOperands())
+ break;
+ const TargetRegisterClass *DRC = TII->getRegClass(MCID, MONum);
+ if (!DRC)
+ break;
+
+ // If SubIdx is used, validate that RC with SubIdx can be used for an
+ // operand of class DRC. This is valid if for every register in RC, the
+ // register obtained by applying SubIdx to it is in DRC, i.e.,
+ // getMatchingSuperRegClass(RC, DRC, SubIdx) returns RC.
----------------
jurahul wrote:
Done.
https://github.com/llvm/llvm-project/pull/181921
More information about the llvm-commits
mailing list