Skip to content

Commit 8b59858

Browse files
[RISCV][VLOPT] Add vector indexed instructions to getOperandInfo
1 parent 169c32e commit 8b59858

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,34 @@ static OperandInfo getOperandInfo(const MachineOperand &MO,
270270
case RISCV::VSSE64_V:
271271
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(6, MI), 6);
272272

273+
// Vector Indexed Instructions
274+
// vs(o|u)xei<eew>.v
275+
// Dest EEW=SEW, EMUL=LMUL. Source EEW=<eew> and EMUL=(EEW/SEW)*LMUL
276+
case RISCV::VSUXEI8_V:
277+
case RISCV::VSOXEI8_V: {
278+
if (IsMODef)
279+
return OperandInfo(MIVLMul, MILog2SEW);
280+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(3, MI), 3);
281+
}
282+
case RISCV::VSUXEI16_V:
283+
case RISCV::VSOXEI16_V: {
284+
if (IsMODef)
285+
return OperandInfo(MIVLMul, MILog2SEW);
286+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(4, MI), 4);
287+
}
288+
case RISCV::VSUXEI32_V:
289+
case RISCV::VSOXEI32_V: {
290+
if (IsMODef)
291+
return OperandInfo(MIVLMul, MILog2SEW);
292+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(5, MI), 5);
293+
}
294+
case RISCV::VSUXEI64_V:
295+
case RISCV::VSOXEI64_V: {
296+
if (IsMODef)
297+
return OperandInfo(MIVLMul, MILog2SEW);
298+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(6, MI), 6);
299+
}
300+
273301
// Vector Integer Arithmetic Instructions
274302
// Vector Single-Width Integer Add and Subtract
275303
case RISCV::VADD_VI:

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,36 @@ body: |
573573
PseudoVSSE8_V_MF2 %x, $noreg, $noreg, 1, 3 /* e8 */
574574
...
575575
---
576+
name: vsuxeiN_v
577+
body: |
578+
bb.0:
579+
; CHECK-LABEL: name: vsuxeiN_v
580+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
581+
; CHECK-NEXT: PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
582+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
583+
PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
584+
...
585+
---
586+
name: vsuxeiN_v_incompatible_eew
587+
body: |
588+
bb.0:
589+
; CHECK-LABEL: name: vsuxeiN_v_incompatible_eew
590+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
591+
; CHECK-NEXT: PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
592+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0
593+
PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
594+
...
595+
---
596+
name: vsuxeiN_v_incompatible_emul
597+
body: |
598+
bb.0:
599+
; CHECK-LABEL: name: vsuxeiN_v_incompatible_emul
600+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
601+
; CHECK-NEXT: PseudoVSUXEI8_V_MF2_MF2 %x, $noreg, $noreg, 1, 3 /* e8 */
602+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
603+
PseudoVSUXEI8_V_MF2_MF2 %x, $noreg, $noreg, 1, 3 /* e8 */
604+
...
605+
---
576606
name: vmop_mm
577607
body: |
578608
bb.0:

0 commit comments

Comments
 (0)