Skip to content

Commit 30272d0

Browse files
[RISCV][VLOPT] Add vl-opt-op-info tests for unit strided and strided stores
I don't include getOperandInfo for the loads, since they don't take a vector use operand, and we don't include the loads in isSupportedInstr so we will never call getOperandInfo on the vector destination of these instructions.
1 parent 9bb29c3 commit 30272d0

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,24 @@ static OperandInfo getOperandInfo(const MachineInstr &MI,
247247
llvm_unreachable("Configuration setting instructions do not read or write "
248248
"vector registers");
249249

250+
// Vector Loads and Stores
251+
// Vector Unit-Stride Instructions
252+
// Vector Strided Instructions
253+
/// Dest EEW encoded in the instruction and EMUL=(EEW/SEW)*LMUL
254+
case RISCV::VSE8_V:
255+
case RISCV::VSM_V:
256+
case RISCV::VSSE8_V:
257+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(3, MI), 3);
258+
case RISCV::VSE16_V:
259+
case RISCV::VSSE16_V:
260+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(4, MI), 4);
261+
case RISCV::VSE32_V:
262+
case RISCV::VSSE32_V:
263+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(5, MI), 5);
264+
case RISCV::VSE64_V:
265+
case RISCV::VSSE64_V:
266+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(6, MI), 6);
267+
250268
// Vector Integer Arithmetic Instructions
251269
// Vector Single-Width Integer Add and Subtract
252270
case RISCV::VADD_VI:

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

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,3 +483,82 @@ body: |
483483
%x:vr = PseudoVADD_VV_MF4 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
484484
%y:vr = PseudoVNSRL_WV_MF2 $noreg, $noreg, %x, 1, 3 /* e8 */, 0
485485
...
486+
---
487+
name: vseN_v
488+
body: |
489+
bb.0:
490+
; CHECK-LABEL: name: vseN_v
491+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
492+
; CHECK-NEXT: %y:gpr = ADDI $x0, 1
493+
; CHECK-NEXT: PseudoVSE8_V_M1 %x, %y, 1, 3 /* e8 */
494+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
495+
%y:gpr = ADDI $x0, 1
496+
PseudoVSE8_V_M1 %x, %y, 1, 3 /* e8 */
497+
...
498+
---
499+
name: vseN_v_incompatible_eew
500+
body: |
501+
bb.0:
502+
; CHECK-LABEL: name: vseN_v_incompatible_eew
503+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
504+
; CHECK-NEXT: %y:gpr = ADDI $x0, 1
505+
; CHECK-NEXT: PseudoVSE8_V_M1 %x, %y, 1, 3 /* e8 */
506+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0
507+
%y:gpr = ADDI $x0, 1
508+
PseudoVSE8_V_M1 %x, %y, 1, 3 /* e8 */
509+
...
510+
---
511+
name: vseN_v_incompatible_emul
512+
body: |
513+
bb.0:
514+
; CHECK-LABEL: name: vseN_v_incompatible_emul
515+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
516+
; CHECK-NEXT: %y:gpr = ADDI $x0, 1
517+
; CHECK-NEXT: PseudoVSE8_V_MF2 %x, %y, 1, 3 /* e8 */
518+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
519+
%y:gpr = ADDI $x0, 1
520+
PseudoVSE8_V_MF2 %x, %y, 1, 3 /* e8 */
521+
...
522+
---
523+
name: vsseN_v
524+
body: |
525+
bb.0:
526+
; CHECK-LABEL: name: vsseN_v
527+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
528+
; CHECK-NEXT: %y:gpr = ADDI $x0, 1
529+
; CHECK-NEXT: %z:gpr = ADDI $x0, 2
530+
; CHECK-NEXT: PseudoVSSE8_V_M1 %x, %y, %z, 1, 3 /* e8 */
531+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
532+
%y:gpr = ADDI $x0, 1
533+
%z:gpr = ADDI $x0, 2
534+
PseudoVSSE8_V_M1 %x, %y, %z, 1, 3 /* e8 */
535+
...
536+
---
537+
name: vsseN_v_incompatible_eew
538+
body: |
539+
bb.0:
540+
; CHECK-LABEL: name: vsseN_v_incompatible_eew
541+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
542+
; CHECK-NEXT: %y:gpr = ADDI $x0, 1
543+
; CHECK-NEXT: %z:gpr = ADDI $x0, 2
544+
; CHECK-NEXT: PseudoVSSE8_V_M1 %x, %y, %z, 1, 3 /* e8 */
545+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0
546+
%y:gpr = ADDI $x0, 1
547+
%z:gpr = ADDI $x0, 2
548+
PseudoVSSE8_V_M1 %x, %y, %z, 1, 3 /* e8 */
549+
...
550+
---
551+
name: vsseN_v_incompatible_emul
552+
body: |
553+
bb.0:
554+
; CHECK-LABEL: name: vsseN_v_incompatible_emul
555+
; CHECK: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
556+
; CHECK-NEXT: %y:gpr = ADDI $x0, 1
557+
; CHECK-NEXT: %z:gpr = ADDI $x0, 2
558+
; CHECK-NEXT: PseudoVSSE8_V_MF2 %x, %y, %z, 1, 3 /* e8 */
559+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0
560+
%y:gpr = ADDI $x0, 1
561+
%z:gpr = ADDI $x0, 2
562+
PseudoVSSE8_V_MF2 %x, %y, %z, 1, 3 /* e8 */
563+
...
564+

0 commit comments

Comments
 (0)