diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineVerifier.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineVerifier.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp index 10369928..3910046 100644 --- a/llvm/lib/CodeGen/MachineVerifier.cpp +++ b/llvm/lib/CodeGen/MachineVerifier.cpp @@ -1731,6 +1731,36 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) { } break; } + case TargetOpcode::G_STEP_VECTOR: { + if (!MI->getOperand(1).isCImm()) { + report("operand must be cimm", MI); + break; + } + + if (!MI->getOperand(1).getCImm()->getValue().isStrictlyPositive()) { + report("step must be > 0", MI); + break; + } + + LLT DstTy = MRI->getType(MI->getOperand(0).getReg()); + if (!DstTy.isScalableVector()) { + report("Destination type must be a scalable vector", MI); + break; + } + + // <vscale x 2 x p0> + if (!DstTy.getElementType().isScalar()) { + report("Destination element type must be scalar", MI); + break; + } + + if (MI->getOperand(1).getCImm()->getBitWidth() != + DstTy.getElementType().getScalarSizeInBits()) { + report("step bitwidth differs from result type element bitwidth", MI); + break; + } + break; + } case TargetOpcode::G_INSERT_SUBVECTOR: { const MachineOperand &Src0Op = MI->getOperand(1); if (!Src0Op.isReg()) { |