Skip to content

Commit 2973062

Browse files
[RISCV][VLOPT] Add vector indexed instructions to getOperandInfo
1 parent 6cfad63 commit 2973062

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 MachineInstr &MI,
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
@@ -543,6 +543,36 @@ body: |
543543
PseudoVSSE8_V_MF2 %x, $noreg, $noreg, 1, 3 /* e8 */
544544
...
545545
---
546+
name: vsuxeiN_v
547+
body: |
548+
bb.0:
549+
; CHECK-LABEL: name: vsuxeiN_v
550+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
551+
; CHECK-NEXT: PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
552+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
553+
PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
554+
...
555+
---
556+
name: vsuxeiN_v_incompatible_eew
557+
body: |
558+
bb.0:
559+
; CHECK-LABEL: name: vsuxeiN_v_incompatible_eew
560+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
561+
; CHECK-NEXT: PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
562+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0
563+
PseudoVSUXEI8_V_M1_M1 %x, $noreg, $noreg, 1, 3 /* e8 */
564+
...
565+
---
566+
name: vsuxeiN_v_incompatible_emul
567+
body: |
568+
bb.0:
569+
; CHECK-LABEL: name: vsuxeiN_v_incompatible_emul
570+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
571+
; CHECK-NEXT: PseudoVSUXEI8_V_MF2_MF2 %x, $noreg, $noreg, 1, 3 /* e8 */
572+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
573+
PseudoVSUXEI8_V_MF2_MF2 %x, $noreg, $noreg, 1, 3 /* e8 */
574+
...
575+
---
546576
name: vmop_mm
547577
body: |
548578
bb.0:

0 commit comments

Comments
 (0)