Skip to content

Commit c131942

Browse files
committed
Check that new ratio is valid
1 parent 31f3692 commit c131942

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -1502,6 +1502,8 @@ canAdjustSEWLMULRatio(const MachineInstr &MI, const MachineInstr &NextMI,
15021502
unsigned SEW = MIInfo.getSEW() * 8;
15031503
// Fixed point value with 3 fractional bits.
15041504
unsigned NewRatio = SEW / NextMIInfo.getSEWLMULRatio();
1505+
if (NewRatio < 1 || NewRatio > 64)
1506+
return std::nullopt;
15051507
bool Fractional = NewRatio < 8;
15061508
RISCVII::VLMUL NewVLMul = RISCVVType::encodeLMUL(
15071509
Fractional ? 8 / NewRatio : NewRatio / 8, Fractional);

llvm/test/CodeGen/RISCV/rvv/vsetvli-insert.mir

+54
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,14 @@
7272
ret void
7373
}
7474

75+
define void @vmv_s_x() {
76+
ret void
77+
}
78+
79+
define void @vmv_s_x_too_large_ratio_diff() {
80+
ret void
81+
}
82+
7583
declare <vscale x 1 x i64> @llvm.riscv.vadd.nxv1i64.nxv1i64.i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i64>, i64) #1
7684

7785
declare <vscale x 1 x i64> @llvm.riscv.vle.nxv1i64.i64(<vscale x 1 x i64>, <vscale x 1 x i64>* nocapture, i64) #4
@@ -446,3 +454,49 @@ body: |
446454
%4:vr = PseudoVMV_V_I_MF4 undef %4, 0, 4, 3, 0
447455
PseudoRET
448456
...
457+
458+
...
459+
---
460+
name: vmv_s_x
461+
tracksRegLiveness: true
462+
body: |
463+
bb.0:
464+
liveins: $x1
465+
; CHECK-LABEL: name: vmv_s_x
466+
; CHECK: liveins: $x1
467+
; CHECK-NEXT: {{ $}}
468+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x1
469+
; CHECK-NEXT: %pt:vr = IMPLICIT_DEF
470+
; CHECK-NEXT: dead $x0 = PseudoVSETIVLI 1, 201 /* e16, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
471+
; CHECK-NEXT: [[PseudoVMV_S_X_M1_:%[0-9]+]]:vr = PseudoVMV_S_X_M1 %pt, [[COPY]], 1, 4 /* e16 */, implicit $vl, implicit $vtype
472+
; CHECK-NEXT: dead $x0 = PseudoVSETVLIX0 killed $x0, 192 /* e8, m1, ta, ma */, implicit-def $vl, implicit-def $vtype
473+
; CHECK-NEXT: [[PseudoVADD_VI_M1_:%[0-9]+]]:vr = PseudoVADD_VI_M1 %pt, [[PseudoVMV_S_X_M1_]], 1, 1, 3 /* e8 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
474+
; CHECK-NEXT: PseudoRET
475+
%0:gpr = COPY $x1
476+
%pt:vr = IMPLICIT_DEF
477+
%1:vr = PseudoVMV_S_X_M1 %pt, %0, 1, 4
478+
%2:vr = PseudoVADD_VI_M1 %pt, %1, 1, 1, 3, 0
479+
PseudoRET
480+
481+
...
482+
---
483+
name: vmv_s_x_too_large_ratio_diff
484+
tracksRegLiveness: true
485+
body: |
486+
bb.0:
487+
liveins: $x1
488+
; CHECK-LABEL: name: vmv_s_x_too_large_ratio_diff
489+
; CHECK: liveins: $x1
490+
; CHECK-NEXT: {{ $}}
491+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr = COPY $x1
492+
; CHECK-NEXT: %pt:vrm8 = IMPLICIT_DEF
493+
; CHECK-NEXT: dead $x0 = PseudoVSETIVLI 1, 219 /* e64, m8, ta, ma */, implicit-def $vl, implicit-def $vtype
494+
; CHECK-NEXT: [[PseudoVMV_S_X_M8_:%[0-9]+]]:vrm8 = PseudoVMV_S_X_M8 %pt, [[COPY]], 1, 6 /* e64 */, implicit $vl, implicit $vtype
495+
; CHECK-NEXT: dead $x0 = PseudoVSETIVLI 1, 195 /* e8, m8, ta, ma */, implicit-def $vl, implicit-def $vtype
496+
; CHECK-NEXT: [[PseudoVADD_VI_M8_:%[0-9]+]]:vrm8 = PseudoVADD_VI_M8 %pt, [[PseudoVMV_S_X_M8_]], 1, 1, 3 /* e8 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
497+
; CHECK-NEXT: PseudoRET
498+
%0:gpr = COPY $x1
499+
%pt:vrm8 = IMPLICIT_DEF
500+
%1:vrm8 = PseudoVMV_S_X_M8 %pt, %0, 1, 6
501+
%2:vrm8 = PseudoVADD_VI_M8 %pt, %1, 1, 1, 3, 0
502+
PseudoRET

0 commit comments

Comments
 (0)