@@ -341,11 +341,17 @@ static OperandInfo getOperandInfo(const MachineInstr &MI,
341
341
case RISCV::VNMSUB_VV:
342
342
case RISCV::VNMSUB_VX:
343
343
// Vector Integer Merge Instructions
344
+ // Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
344
345
// EEW=SEW and EMUL=LMUL, except the mask operand has EEW=1 and EMUL=
345
346
// (EEW/SEW)*LMUL. Mask operand is handled before this switch.
346
347
case RISCV::VMERGE_VIM:
347
348
case RISCV::VMERGE_VVM:
348
349
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:
349
355
// Vector Integer Move Instructions
350
356
// Vector Fixed-Point Arithmetic Instructions
351
357
// Vector Single-Width Saturating Add and Subtract
@@ -521,6 +527,47 @@ static OperandInfo getOperandInfo(const MachineInstr &MI,
521
527
return OperandInfo (RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL (0 , MI), 0 );
522
528
}
523
529
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
+
524
571
default :
525
572
return {};
526
573
}
@@ -591,6 +638,11 @@ static bool isSupportedInstr(const MachineInstr &MI) {
591
638
case RISCV::VSEXT_VF8:
592
639
// Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
593
640
// 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:
594
646
// Vector Narrowing Integer Right Shift Instructions
595
647
case RISCV::VNSRL_WX:
596
648
case RISCV::VNSRL_WI:
@@ -599,7 +651,26 @@ static bool isSupportedInstr(const MachineInstr &MI) {
599
651
case RISCV::VNSRA_WV:
600
652
case RISCV::VNSRA_WX:
601
653
// 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:
603
674
// Vector Integer Min/Max Instructions
604
675
case RISCV::VMINU_VV:
605
676
case RISCV::VMINU_VX:
0 commit comments