Skip to content

Commit ad0fbb0

Browse files
[RISCV][VLOPT] Add vl-opt-op-info tests for unit strided and strided stores (#119465)
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. Don't add support for VSM since we don't have any mask producing instructions in isSupportedInstr at the moment.
1 parent e0c6088 commit ad0fbb0

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

+17
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,23 @@ 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::VSSE8_V:
256+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(3, MI), 3);
257+
case RISCV::VSE16_V:
258+
case RISCV::VSSE16_V:
259+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(4, MI), 4);
260+
case RISCV::VSE32_V:
261+
case RISCV::VSSE32_V:
262+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(5, MI), 5);
263+
case RISCV::VSE64_V:
264+
case RISCV::VSSE64_V:
265+
return OperandInfo(RISCVVType::getEMULEqualsEEWDivSEWTimesLMUL(6, MI), 6);
266+
250267
// Vector Integer Arithmetic Instructions
251268
// Vector Single-Width Integer Add and Subtract
252269
case RISCV::VADD_VI:

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

+79
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)