Skip to content

Commit b9fbab7

Browse files
fixup! include vector integer add-cary sub-borrow
1 parent cad3091 commit b9fbab7

File tree

2 files changed

+34
-9
lines changed

2 files changed

+34
-9
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 26 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
@@ -438,7 +444,11 @@ static OperandInfo getOperandInfo(const MachineInstr &MI,
438444
case RISCV::VWMACC_VX:
439445
case RISCV::VWMACCSU_VV:
440446
case RISCV::VWMACCSU_VX:
441-
case RISCV::VWMACCUS_VX: {
447+
case RISCV::VWMACCUS_VX:
448+
// Vector Single-Width Fractional Multiply with Rounding and Saturation
449+
// Destination EEW=2*SEW and EMUL=2*EMUL. Source EEW=SEW and EMUL=LMUL.
450+
case RISCV::VSMUL_VV:
451+
case RISCV::VSMUL_VX: {
442452
unsigned Log2EEW = IsMODef ? MILog2SEW + 1 : MILog2SEW;
443453
RISCVII::VLMUL EMUL =
444454
IsMODef ? RISCVVType::twoTimesVLMUL(MIVLMul) : MIVLMul;
@@ -543,9 +553,24 @@ static OperandInfo getOperandInfo(const MachineInstr &MI,
543553
case RISCV::VMSGTU_VX:
544554
case RISCV::VMSGT_VI:
545555
case RISCV::VMSGT_VX:
556+
// Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
557+
// Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL. Mask
558+
// source operand handled above this switch.
559+
case RISCV::VMADC_VIM:
560+
case RISCV::VMADC_VVM:
561+
case RISCV::VMADC_VXM:
562+
case RISCV::VMSBC_VVM:
563+
case RISCV::VMSBC_VXM:
564+
// Dest EEW=1 and EMUL=(EEW/SEW)*LMUL. Source EEW=SEW and EMUL=LMUL.
565+
case RISCV::VMADC_VV:
566+
case RISCV::VMADC_VI:
567+
case RISCV::VMADC_VX:
568+
case RISCV::VMSBC_VV:
569+
case RISCV::VMSBC_VX: {
546570
if (IsMODef)
547571
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(0, MI), 0);
548572
return OperandInfo(MIVLMul, MILog2SEW);
573+
}
549574

550575
default:
551576
return {};

llvm/test/CodeGen/RISCV/rvv/vl-opt-op-info.mir

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ body: |
603603
%y:vrnov0 = PseudoVADD_VV_MF2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0
604604
...
605605
---
606-
name: vmcmp_vv
606+
name: vmop_vv
607607
body: |
608608
bb.0:
609609
; CHECK-LABEL: name: vmcmp_vv
@@ -613,7 +613,7 @@ body: |
613613
%y:vr = PseudoVMAND_MM_M1 $noreg, %x, 1, 0
614614
...
615615
---
616-
name: vmcmp_vv_maskuser
616+
name: vmop_vv_maskuser
617617
body: |
618618
bb.0:
619619
; CHECK-LABEL: name: vmcmp_vv_maskuser
@@ -623,7 +623,7 @@ body: |
623623
%y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0
624624
...
625625
---
626-
name: vmcmp_vv_maskuser_incompatible_eew
626+
name: vmop_vv_maskuser_incompatible_eew
627627
body: |
628628
bb.0:
629629
; CHECK-LABEL: name: vmcmp_vv_maskuser_incompatible_eew
@@ -633,7 +633,7 @@ body: |
633633
%y:vrnov0 = PseudoVADD_VV_M1_MASK $noreg, $noreg, $noreg, %x, 1, 4 /* e16 */, 0
634634
...
635635
---
636-
name: vmcmp_vv_incompatible_emul
636+
name: vmop_vv_incompatible_emul
637637
body: |
638638
bb.0:
639639
; CHECK-LABEL: name: vmcmp_vv_incompatible_emul
@@ -643,7 +643,7 @@ body: |
643643
%y:vr = PseudoVMAND_MM_MF2 $noreg, %x, 1, 0
644644
...
645645
---
646-
name: vmcmp_vv_maskuser_incompaible_emul
646+
name: vmop_vv_maskuser_incompaible_emul
647647
body: |
648648
bb.0:
649649
; CHECK-LABEL: name: vmcmp_vv_maskuser_incompaible_emul
@@ -653,7 +653,7 @@ body: |
653653
%y:vrnov0 = PseudoVADD_VV_MF2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0
654654
...
655655
---
656-
name: vmcmp_vv_maskuser_larger_emul
656+
name: vmop_vv_maskuser_larger_emul
657657
body: |
658658
bb.0:
659659
; CHECK-LABEL: name: vmcmp_vv_maskuser_larger_emul
@@ -663,7 +663,7 @@ body: |
663663
%y:vrm2nov0 = PseudoVADD_VV_M2_MASK $noreg, $noreg, $noreg, %x, 1, 3 /* e8 */, 0
664664
...
665665
---
666-
name: vmcmp_vv_consumer_incompatible_eew
666+
name: vmop_vv_consumer_incompatible_eew
667667
body: |
668668
bb.0:
669669
; CHECK-LABEL: name: vmcmp_vv_consumer
@@ -673,7 +673,7 @@ body: |
673673
%y:vr = PseudoVMSEQ_VV_M1 $noreg, %x, 1, 0
674674
...
675675
---
676-
name: vmcmp_vv_consumer_incompatible_emul
676+
name: vmop_vv_consumer_incompatible_emul
677677
body: |
678678
bb.0:
679679
; CHECK-LABEL: name: vmcmp_vv_consumer_incompatible_emul

0 commit comments

Comments
 (0)