Skip to content

Commit 7442be6

Browse files
[RISCV][VLOPT] Add vector mask producing integer instructions to isSupportedInstr and getOperandInfo (#119733)
1 parent e605969 commit 7442be6

File tree

3 files changed

+651
-2
lines changed

3 files changed

+651
-2
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)