[RISCV] Verify that policy operands only exist on instructions with tied passthru...
authorPhilip Reames <preames@rivosinc.com>
Thu, 6 Oct 2022 22:11:34 +0000 (15:11 -0700)
committerPhilip Reames <listmail@philipreames.com>
Thu, 6 Oct 2022 22:18:43 +0000 (15:18 -0700)
This is a non-trivial property relied upon by D135396. I wrote this to convince myself it was true.

Differential Revision: https://reviews.llvm.org/D135403

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

index 4ab5392..05b0c01 100644 (file)
@@ -1266,6 +1266,15 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
       ErrInfo = "policy operand w/o VL operand?";
       return false;
     }
+
+    // VecPolicy operands can only exist on instructions with passthru/merge
+    // arguments. Note that not all arguments with passthru have vec policy
+    // operands- some instructions have implicit policies.
+    unsigned UseOpIdx;
+    if (!MI.isRegTiedToUseOperand(0, &UseOpIdx)) {
+      ErrInfo = "policy operand w/o tied operand?";
+      return false;
+    }
   }
 
   return true;