@@ -341,11 +341,17 @@ static OperandInfo getOperandInfo(const MachineInstr &MI,
341341 case RISCV::VNMSUB_VV:
342342 case RISCV::VNMSUB_VX:
343343 // Vector Integer Merge Instructions
344+ // Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
344345 // EEW=SEW and EMUL=LMUL, except the mask operand has EEW=1 and EMUL=
345346 // (EEW/SEW)*LMUL. Mask operand is handled before this switch.
346347 case RISCV::VMERGE_VIM:
347348 case RISCV::VMERGE_VVM:
348349 case RISCV::VMERGE_VXM:
350+ case RISCV::VADC_VIM:
351+ case RISCV::VADC_VVM:
352+ case RISCV::VADC_VXM:
353+ case RISCV::VSBC_VVM:
354+ case RISCV::VSBC_VXM:
349355 // Vector Integer Move Instructions
350356 // Vector Fixed-Point Arithmetic Instructions
351357 // Vector Single-Width Saturating Add and Subtract
@@ -521,6 +527,47 @@ static OperandInfo getOperandInfo(const MachineInstr &MI,
521527 return OperandInfo (RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL (0 , MI), 0 );
522528 }
523529
530+ // Vector Integer Compare Instructions
531+ // Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL.
532+ case RISCV::VMSEQ_VI:
533+ case RISCV::VMSEQ_VV:
534+ case RISCV::VMSEQ_VX:
535+ case RISCV::VMSNE_VI:
536+ case RISCV::VMSNE_VV:
537+ case RISCV::VMSNE_VX:
538+ case RISCV::VMSLTU_VV:
539+ case RISCV::VMSLTU_VX:
540+ case RISCV::VMSLT_VV:
541+ case RISCV::VMSLT_VX:
542+ case RISCV::VMSLEU_VV:
543+ case RISCV::VMSLEU_VI:
544+ case RISCV::VMSLEU_VX:
545+ case RISCV::VMSLE_VV:
546+ case RISCV::VMSLE_VI:
547+ case RISCV::VMSLE_VX:
548+ case RISCV::VMSGTU_VI:
549+ case RISCV::VMSGTU_VX:
550+ case RISCV::VMSGT_VI:
551+ case RISCV::VMSGT_VX:
552+ // Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
553+ // Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL. Mask
554+ // source operand handled above this switch.
555+ case RISCV::VMADC_VIM:
556+ case RISCV::VMADC_VVM:
557+ case RISCV::VMADC_VXM:
558+ case RISCV::VMSBC_VVM:
559+ case RISCV::VMSBC_VXM:
560+ // Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL.
561+ case RISCV::VMADC_VV:
562+ case RISCV::VMADC_VI:
563+ case RISCV::VMADC_VX:
564+ case RISCV::VMSBC_VV:
565+ case RISCV::VMSBC_VX: {
566+ if (IsMODef)
567+ return OperandInfo (RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL (0 , MI), 0 );
568+ return OperandInfo (MIVLMul, MILog2SEW);
569+ }
570+
524571 default :
525572 return {};
526573 }
@@ -591,6 +638,11 @@ static bool isSupportedInstr(const MachineInstr &MI) {
591638 case RISCV::VSEXT_VF8:
592639 // Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
593640 // FIXME: Add support
641+ case RISCV::VMADC_VV:
642+ case RISCV::VMADC_VI:
643+ case RISCV::VMADC_VX:
644+ case RISCV::VMSBC_VV:
645+ case RISCV::VMSBC_VX:
594646 // Vector Narrowing Integer Right Shift Instructions
595647 case RISCV::VNSRL_WX:
596648 case RISCV::VNSRL_WI:
@@ -599,7 +651,26 @@ static bool isSupportedInstr(const MachineInstr &MI) {
599651 case RISCV::VNSRA_WV:
600652 case RISCV::VNSRA_WX:
601653 // Vector Integer Compare Instructions
602- // FIXME: Add support
654+ case RISCV::VMSEQ_VI:
655+ case RISCV::VMSEQ_VV:
656+ case RISCV::VMSEQ_VX:
657+ case RISCV::VMSNE_VI:
658+ case RISCV::VMSNE_VV:
659+ case RISCV::VMSNE_VX:
660+ case RISCV::VMSLTU_VV:
661+ case RISCV::VMSLTU_VX:
662+ case RISCV::VMSLT_VV:
663+ case RISCV::VMSLT_VX:
664+ case RISCV::VMSLEU_VV:
665+ case RISCV::VMSLEU_VI:
666+ case RISCV::VMSLEU_VX:
667+ case RISCV::VMSLE_VV:
668+ case RISCV::VMSLE_VI:
669+ case RISCV::VMSLE_VX:
670+ case RISCV::VMSGTU_VI:
671+ case RISCV::VMSGTU_VX:
672+ case RISCV::VMSGT_VI:
673+ case RISCV::VMSGT_VX:
603674 // Vector Integer Min/Max Instructions
604675 case RISCV::VMINU_VV:
605676 case RISCV::VMINU_VX:
0 commit comments