[RISCV] Verify consistency of a couple TSFlags related to vector operands
authorPhilip Reames <preames@rivosinc.com>
Thu, 22 Sep 2022 15:27:23 +0000 (08:27 -0700)
committerPhilip Reames <listmail@philipreames.com>
Thu, 22 Sep 2022 15:35:17 +0000 (08:35 -0700)
Various bits of existing code assume the presence of one operand implies the presence of another.  Add verifier rules to catch violations.

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

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

index 1afd2fb..98ae360 100644 (file)
@@ -1237,6 +1237,10 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
         return false;
       }
     }
+    if (!RISCVII::hasSEWOp(TSFlags)) {
+      ErrInfo = "VL operand w/o SEW operand?";
+      return false;
+    }
   }
   if (RISCVII::hasSEWOp(TSFlags)) {
     unsigned OpIdx = RISCVII::getSEWOpNum(Desc);
@@ -1258,6 +1262,10 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
       ErrInfo = "Invalid Policy Value";
       return false;
     }
+    if (!RISCVII::hasVLOp(TSFlags)) {
+      ErrInfo = "policy operand w/o VL operand?";
+      return false;
+    }
   }
 
   return true;