Skip to content

Commit 563ae62

Browse files
authored
[RISCV] Don't expand zero stride vp.strided.load if SEW>XLEN (llvm#98924)
A splat of a <n x i64> on RV32 will get lowered as a zero strided load anyway (and won't match any .vx splat patterns), so don't expand it to a scalar load + splat to avoid writing it to the stack.
1 parent 5bb3492 commit 563ae62

File tree

3 files changed

+5
-16
lines changed

3 files changed

+5
-16
lines changed

llvm/lib/Target/RISCV/RISCVCodeGenPrepare.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@ bool RISCVCodeGenPrepare::expandVPStrideLoad(IntrinsicInst &II) {
174174
m_Value(BasePtr), m_Zero(), m_AllOnes(), m_Value(VL))))
175175
return false;
176176

177+
// If SEW>XLEN then a splat will get lowered as a zero strided load anyway, so
178+
// avoid expanding here.
179+
if (II.getType()->getScalarSizeInBits() > ST->getXLen())
180+
return false;
181+
177182
if (!isKnownNonZero(VL, {*DL, DT, nullptr, &II}))
178183
return false;
179184

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-strided-vpload.ll

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -674,17 +674,9 @@ define <4 x half> @zero_strided_unmasked_vpload_4f16(ptr %ptr) {
674674
define <4 x i64> @zero_strided_vadd.vx(<4 x i64> %v, ptr %ptr) {
675675
; CHECK-RV32-LABEL: zero_strided_vadd.vx:
676676
; CHECK-RV32: # %bb.0:
677-
; CHECK-RV32-NEXT: addi sp, sp, -16
678-
; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
679-
; CHECK-RV32-NEXT: lw a1, 4(a0)
680-
; CHECK-RV32-NEXT: lw a0, 0(a0)
681-
; CHECK-RV32-NEXT: sw a1, 12(sp)
682-
; CHECK-RV32-NEXT: sw a0, 8(sp)
683-
; CHECK-RV32-NEXT: addi a0, sp, 8
684677
; CHECK-RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
685678
; CHECK-RV32-NEXT: vlse64.v v10, (a0), zero
686679
; CHECK-RV32-NEXT: vadd.vv v8, v8, v10
687-
; CHECK-RV32-NEXT: addi sp, sp, 16
688680
; CHECK-RV32-NEXT: ret
689681
;
690682
; CHECK-RV64-LABEL: zero_strided_vadd.vx:

llvm/test/CodeGen/RISCV/rvv/strided-vpload.ll

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -826,17 +826,9 @@ define <vscale x 1 x half> @zero_strided_unmasked_vpload_nxv1f16(ptr %ptr) {
826826
define <vscale x 1 x i64> @zero_strided_vadd.vx(<vscale x 1 x i64> %v, ptr %ptr) {
827827
; CHECK-RV32-LABEL: zero_strided_vadd.vx:
828828
; CHECK-RV32: # %bb.0:
829-
; CHECK-RV32-NEXT: addi sp, sp, -16
830-
; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
831-
; CHECK-RV32-NEXT: lw a1, 4(a0)
832-
; CHECK-RV32-NEXT: lw a0, 0(a0)
833-
; CHECK-RV32-NEXT: sw a1, 12(sp)
834-
; CHECK-RV32-NEXT: sw a0, 8(sp)
835-
; CHECK-RV32-NEXT: addi a0, sp, 8
836829
; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
837830
; CHECK-RV32-NEXT: vlse64.v v9, (a0), zero
838831
; CHECK-RV32-NEXT: vadd.vv v8, v8, v9
839-
; CHECK-RV32-NEXT: addi sp, sp, 16
840832
; CHECK-RV32-NEXT: ret
841833
;
842834
; CHECK-RV64-LABEL: zero_strided_vadd.vx:

0 commit comments

Comments
 (0)