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 0a5b8bd..d22fbe3 100644 --- a/llvm/lib/CodeGen/MachineVerifier.cpp +++ b/llvm/lib/CodeGen/MachineVerifier.cpp @@ -1544,6 +1544,36 @@ void MachineVerifier::verifyPreISelGenericInstruction(const MachineInstr *MI) { break; } + case TargetOpcode::G_SCMP: + case TargetOpcode::G_UCMP: { + LLT DstTy = MRI->getType(MI->getOperand(0).getReg()); + LLT SrcTy = MRI->getType(MI->getOperand(1).getReg()); + LLT SrcTy2 = MRI->getType(MI->getOperand(2).getReg()); + + if (SrcTy.isPointerOrPointerVector() || SrcTy2.isPointerOrPointerVector()) { + report("Generic scmp/ucmp does not support pointers as operands", MI); + break; + } + + if (DstTy.isPointerOrPointerVector()) { + report("Generic scmp/ucmp does not support pointers as a result", MI); + break; + } + + if ((DstTy.isVector() != SrcTy.isVector()) || + (DstTy.isVector() && + DstTy.getElementCount() != SrcTy.getElementCount())) { + report("Generic vector scmp/ucmp must preserve number of lanes", MI); + break; + } + + if (SrcTy != SrcTy2) { + report("Generic scmp/ucmp must have same input types", MI); + break; + } + + break; + } case TargetOpcode::G_EXTRACT: { const MachineOperand &SrcOp = MI->getOperand(1); if (!SrcOp.isReg()) { |