[llvm-branch-commits] [llvm] [RISCV] Eliminate redundant VSLIDEDOWN_VL/VSLIDEUP_VL pairs (PR #223863)
Min-Yih Hsu via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Thu Sep 17 11:47:16 PDT 2026
https://github.com/mshockwave updated https://github.com/llvm/llvm-project/pull/223863
>From cdb63cdbdbd58be09b0ebef2e76376025659b7bf Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Tue, 15 Sep 2026 12:35:03 -0700
Subject: [PATCH 1/4] [RISCV] Eliminate redundant VSLIDEDOWN_VL/VSLIDEUP_VL
pairs
---
llvm/lib/Target/RISCV/RISCVISelLowering.cpp | 58 +++++++-
.../CodeGen/RISCV/rvv/vector-interleave.ll | 126 ++++--------------
2 files changed, 78 insertions(+), 106 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 15abb0dfe15fe..2691980e06888 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -22232,6 +22232,60 @@ static SDValue performVECTOR_INTERLEAVECombine(SDNode *N, SelectionDAG &DAG) {
return DAG.getMergeValues(Operands, DL);
}
+static SDValue performVSlideUpDownCombine(SDNode *N, SelectionDAG &DAG,
+ const RISCVSubtarget &Subtarget) {
+ unsigned Opcode = N->getOpcode();
+ assert(Opcode == RISCVISD::VSLIDEUP_VL || Opcode == RISCVISD::VSLIDEDOWN_VL);
+ SDValue Passthru = N->getOperand(0);
+ SDValue Val = N->getOperand(1);
+ SDValue ShiftAmt = N->getOperand(2);
+ SDValue Mask = N->getOperand(3);
+ SDValue VL = N->getOperand(4);
+
+ // Trivial case.
+ if (N->getOperand(1)->isUndef())
+ return N->getOperand(0);
+
+ // Given this pattern
+ // ```
+ // %down = RISCVISD::VSLIDEDOWN_VL undef, %val, %shift, %mask, %vl0
+ // %up = RISCVISD::VSLIDEUP_VL %val, %down, %shift, %mask, %vl1
+ // ```
+ // We can simplify it with `%val`, as it's doing redundant shifting.
+ // Note that we actually don't need to check their VLs: First, VSLIDEUP_VL
+ // is literally just putting %down back to their original position in %val.
+ // The only situation we need to worry about is actually the zeros shifted
+ // into VSLIDEDOWN_VL. In this scenario, the worst case would be %vl0 = VLMAX,
+ // as %down is gaurantee to have those zeros. Our goal here is to ensure
+ // elements from %down that are actually inserted into %up are not those
+ // zeros. The number of %down that are actually inserted would be `%vl1 -
+ // %shift`, and the number of non-zero elements from %down would be `VLMAX -
+ // %shift`. Therefore, the invariant would be
+ // `%vl1 - %shift <= VLMAX - %shift` ---> `%vl1 <= VLMAX`
+ // Thus, we will never read those zeros that are shifted in by VSLIDEDOWN_VL.
+ if (Opcode != RISCVISD::VSLIDEUP_VL || !Val ||
+ Val->getOpcode() != RISCVISD::VSLIDEDOWN_VL)
+ return SDValue();
+
+ SDValue SlideDown = Val;
+ SDValue SlideDownPassthru = SlideDown->getOperand(0);
+ SDValue SlideDownVal = SlideDown->getOperand(1);
+ SDValue SlideDownShiftAmt = SlideDown->getOperand(2);
+ SDValue SlideDownMask = SlideDown->getOperand(3);
+ SDValue SlideDownVL = SlideDown->getOperand(4);
+ if (!SlideDownPassthru.isUndef() || SlideDownVal != Passthru ||
+ SlideDownShiftAmt != ShiftAmt)
+ return SDValue();
+ // We can loosen the mask requirement in the future.
+ if (SlideDownMask != Mask &&
+ (SlideDownMask.getOpcode() != RISCVISD::VMSET_VL ||
+ Mask.getOpcode() != RISCVISD::VMSET_VL ||
+ SlideDownMask.getOperand(0) != SlideDownVL || Mask.getOperand(0) != VL))
+ return SDValue();
+
+ return SlideDownVal;
+}
+
// Convert from one FMA opcode to another based on whether we are negating the
// multiply result and/or the accumulator.
// NOTE: Only supports RVV operations with VL.
@@ -25661,9 +25715,7 @@ SDValue RISCVTargetLowering::PerformDAGCombine(SDNode *N,
}
case RISCVISD::VSLIDEDOWN_VL:
case RISCVISD::VSLIDEUP_VL:
- if (N->getOperand(1)->isUndef())
- return N->getOperand(0);
- break;
+ return performVSlideUpDownCombine(N, DAG, Subtarget);
case RISCVISD::VSLIDE1UP_VL:
case RISCVISD::VFSLIDE1UP_VL: {
using namespace SDPatternMatch;
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll b/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
index 6956fc3a01d6b..e1ae4595f363e 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
@@ -6468,12 +6468,7 @@ define <vscale x 4 x bfloat> @vector_interleave_nxv4bf16_nxv2bf16(<vscale x 2 x
; ZVZIP: # %bb.0:
; ZVZIP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v10, v8, v9
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v10, a0
-; ZVZIP-NEXT: vslideup.vx v10, v8, a0
-; ZVZIP-NEXT: vmv.v.v v8, v10
+; ZVZIP-NEXT: vmv1r.v v8, v10
; ZVZIP-NEXT: ret
%res = call <vscale x 4 x bfloat> @llvm.vector.interleave2.nxv4bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b)
ret <vscale x 4 x bfloat> %res
@@ -6542,12 +6537,7 @@ define <vscale x 4 x half> @vector_interleave_nxv4f16_nxv2f16(<vscale x 2 x half
; ZVZIP: # %bb.0:
; ZVZIP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v10, v8, v9
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v10, a0
-; ZVZIP-NEXT: vslideup.vx v10, v8, a0
-; ZVZIP-NEXT: vmv.v.v v8, v10
+; ZVZIP-NEXT: vmv1r.v v8, v10
; ZVZIP-NEXT: ret
%res = call <vscale x 4 x half> @llvm.vector.interleave2.nxv4f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b)
ret <vscale x 4 x half> %res
@@ -7557,16 +7547,10 @@ define <vscale x 8 x half> @vector_interleave_nxv8f16_nxv2f16(<vscale x 2 x half
;
; ZVZIP-LABEL: vector_interleave_nxv8f16_nxv2f16:
; ZVZIP: # %bb.0:
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
+; ZVZIP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v12, v9, v11
; ZVZIP-NEXT: vzip.vv v11, v8, v10
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v12, a0
-; ZVZIP-NEXT: vslidedown.vx v9, v11, a0
-; ZVZIP-NEXT: vslideup.vx v12, v8, a0
-; ZVZIP-NEXT: vslideup.vx v11, v9, a0
+; ZVZIP-NEXT: vsetvli a0, zero, e16, m1, ta, ma
; ZVZIP-NEXT: vzip.vv v8, v11, v12
; ZVZIP-NEXT: ret
%res = call <vscale x 8 x half> @llvm.vector.interleave4.nxv8f16(<vscale x 2 x half> %v0, <vscale x 2 x half> %v1, <vscale x 2 x half> %v2, <vscale x 2 x half> %v3)
@@ -7756,16 +7740,10 @@ define <vscale x 8 x bfloat> @vector_interleave_nxv8bf16_nxv2bf16(<vscale x 2 x
;
; ZVZIP-LABEL: vector_interleave_nxv8bf16_nxv2bf16:
; ZVZIP: # %bb.0:
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
+; ZVZIP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v12, v9, v11
; ZVZIP-NEXT: vzip.vv v11, v8, v10
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v12, a0
-; ZVZIP-NEXT: vslidedown.vx v9, v11, a0
-; ZVZIP-NEXT: vslideup.vx v12, v8, a0
-; ZVZIP-NEXT: vslideup.vx v11, v9, a0
+; ZVZIP-NEXT: vsetvli a0, zero, e16, m1, ta, ma
; ZVZIP-NEXT: vzip.vv v8, v11, v12
; ZVZIP-NEXT: ret
%res = call <vscale x 8 x bfloat> @llvm.vector.interleave4.nxv8bf16(<vscale x 2 x bfloat> %v0, <vscale x 2 x bfloat> %v1, <vscale x 2 x bfloat> %v2, <vscale x 2 x bfloat> %v3)
@@ -7955,16 +7933,10 @@ define <vscale x 4 x float> @vector_interleave_nxv4f32_nxv1f32(<vscale x 1 x flo
;
; ZVZIP-LABEL: vector_interleave_nxv4f32_nxv1f32:
; ZVZIP: # %bb.0:
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 3
-; ZVZIP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
+; ZVZIP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v12, v9, v11
; ZVZIP-NEXT: vzip.vv v11, v8, v10
-; ZVZIP-NEXT: vsetvli a1, zero, e32, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v12, a0
-; ZVZIP-NEXT: vslidedown.vx v9, v11, a0
-; ZVZIP-NEXT: vslideup.vx v12, v8, a0
-; ZVZIP-NEXT: vslideup.vx v11, v9, a0
+; ZVZIP-NEXT: vsetvli a0, zero, e32, m1, ta, ma
; ZVZIP-NEXT: vzip.vv v8, v11, v12
; ZVZIP-NEXT: ret
%res = call <vscale x 4 x float> @llvm.vector.interleave4.nxv4f32(<vscale x 1 x float> %v0, <vscale x 1 x float> %v1, <vscale x 1 x float> %v2, <vscale x 1 x float> %v3)
@@ -14168,28 +14140,14 @@ define <vscale x 16 x half> @vector_interleave_nxv16f16_nxv2f16(<vscale x 2 x ha
;
; ZVZIP-LABEL: vector_interleave_nxv16f16_nxv2f16:
; ZVZIP: # %bb.0:
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
+; ZVZIP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v16, v11, v15
; ZVZIP-NEXT: vzip.vv v11, v9, v13
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v9, v16, a0
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
-; ZVZIP-NEXT: vzip.vv v17, v10, v14
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v10, v11, a0
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
-; ZVZIP-NEXT: vzip.vv v18, v8, v12
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v17, a0
-; ZVZIP-NEXT: vslidedown.vx v12, v18, a0
-; ZVZIP-NEXT: vslideup.vx v16, v9, a0
-; ZVZIP-NEXT: vslideup.vx v11, v10, a0
-; ZVZIP-NEXT: vslideup.vx v17, v8, a0
-; ZVZIP-NEXT: vslideup.vx v18, v12, a0
+; ZVZIP-NEXT: vzip.vv v9, v10, v14
+; ZVZIP-NEXT: vzip.vv v10, v8, v12
+; ZVZIP-NEXT: vsetvli a0, zero, e16, m1, ta, ma
; ZVZIP-NEXT: vzip.vv v12, v11, v16
-; ZVZIP-NEXT: vzip.vv v14, v18, v17
+; ZVZIP-NEXT: vzip.vv v14, v10, v9
; ZVZIP-NEXT: vsetvli a0, zero, e16, m2, ta, ma
; ZVZIP-NEXT: vzip.vv v8, v14, v12
; ZVZIP-NEXT: ret
@@ -14526,28 +14484,14 @@ define <vscale x 16 x bfloat> @vector_interleave_nxv16bf16_nxv2bf16(<vscale x 2
;
; ZVZIP-LABEL: vector_interleave_nxv16bf16_nxv2bf16:
; ZVZIP: # %bb.0:
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
+; ZVZIP-NEXT: vsetvli a0, zero, e16, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v16, v11, v15
; ZVZIP-NEXT: vzip.vv v11, v9, v13
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v9, v16, a0
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
-; ZVZIP-NEXT: vzip.vv v17, v10, v14
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v10, v11, a0
-; ZVZIP-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
-; ZVZIP-NEXT: vzip.vv v18, v8, v12
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v17, a0
-; ZVZIP-NEXT: vslidedown.vx v12, v18, a0
-; ZVZIP-NEXT: vslideup.vx v16, v9, a0
-; ZVZIP-NEXT: vslideup.vx v11, v10, a0
-; ZVZIP-NEXT: vslideup.vx v17, v8, a0
-; ZVZIP-NEXT: vslideup.vx v18, v12, a0
+; ZVZIP-NEXT: vzip.vv v9, v10, v14
+; ZVZIP-NEXT: vzip.vv v10, v8, v12
+; ZVZIP-NEXT: vsetvli a0, zero, e16, m1, ta, ma
; ZVZIP-NEXT: vzip.vv v12, v11, v16
-; ZVZIP-NEXT: vzip.vv v14, v18, v17
+; ZVZIP-NEXT: vzip.vv v14, v10, v9
; ZVZIP-NEXT: vsetvli a0, zero, e16, m2, ta, ma
; ZVZIP-NEXT: vzip.vv v8, v14, v12
; ZVZIP-NEXT: ret
@@ -14884,28 +14828,14 @@ define <vscale x 8 x float> @vector_interleave_nxv8f32_nxv1f32(<vscale x 1 x flo
;
; ZVZIP-LABEL: vector_interleave_nxv8f32_nxv1f32:
; ZVZIP: # %bb.0:
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 3
-; ZVZIP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
+; ZVZIP-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v16, v11, v15
; ZVZIP-NEXT: vzip.vv v11, v9, v13
-; ZVZIP-NEXT: vsetvli a1, zero, e32, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v9, v16, a0
-; ZVZIP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT: vzip.vv v17, v10, v14
-; ZVZIP-NEXT: vsetvli a1, zero, e32, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v10, v11, a0
-; ZVZIP-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT: vzip.vv v18, v8, v12
-; ZVZIP-NEXT: vsetvli a1, zero, e32, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v17, a0
-; ZVZIP-NEXT: vslidedown.vx v12, v18, a0
-; ZVZIP-NEXT: vslideup.vx v16, v9, a0
-; ZVZIP-NEXT: vslideup.vx v11, v10, a0
-; ZVZIP-NEXT: vslideup.vx v17, v8, a0
-; ZVZIP-NEXT: vslideup.vx v18, v12, a0
+; ZVZIP-NEXT: vzip.vv v9, v10, v14
+; ZVZIP-NEXT: vzip.vv v10, v8, v12
+; ZVZIP-NEXT: vsetvli a0, zero, e32, m1, ta, ma
; ZVZIP-NEXT: vzip.vv v12, v11, v16
-; ZVZIP-NEXT: vzip.vv v14, v18, v17
+; ZVZIP-NEXT: vzip.vv v14, v10, v9
; ZVZIP-NEXT: vsetvli a0, zero, e32, m2, ta, ma
; ZVZIP-NEXT: vzip.vv v8, v14, v12
; ZVZIP-NEXT: ret
@@ -15441,11 +15371,6 @@ define <vscale x 4 x i16> @interleave2_diff_const_splat_nxv4i16() {
; ZVZIP-NEXT: vmv.v.i v9, 4
; ZVZIP-NEXT: vmv.v.i v10, 3
; ZVZIP-NEXT: vzip.vv v8, v10, v9
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v9, v8, a0
-; ZVZIP-NEXT: vslideup.vx v8, v9, a0
; ZVZIP-NEXT: ret
%retval = call <vscale x 4 x i16> @llvm.vector.interleave2.v4i16(<vscale x 2 x i16> splat(i16 3), <vscale x 2 x i16> splat(i16 4))
ret <vscale x 4 x i16> %retval
@@ -15503,11 +15428,6 @@ define <vscale x 4 x i16> @interleave2_diff_nonconst_splat_nxv4i16(i16 %a, i16 %
; ZVZIP-NEXT: vmv.v.x v9, a0
; ZVZIP-NEXT: vmv.v.x v10, a1
; ZVZIP-NEXT: vzip.vv v8, v9, v10
-; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: srli a0, a0, 2
-; ZVZIP-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v9, v8, a0
-; ZVZIP-NEXT: vslideup.vx v8, v9, a0
; ZVZIP-NEXT: ret
%ins1 = insertelement <vscale x 2 x i16> poison, i16 %a, i32 0
%splat1 = shufflevector <vscale x 2 x i16> %ins1, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
>From cd85aeabe2eb9dba438a4154dfb5bc0e2768e973 Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Tue, 15 Sep 2026 15:33:51 -0700
Subject: [PATCH 2/4] fixup! Update more tests
---
.../CodeGen/RISCV/rvv/vector-deinterleave.ll | 57 ++++---------------
1 file changed, 12 insertions(+), 45 deletions(-)
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
index e58ee62d1a90f..816657923a3a2 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
@@ -1997,11 +1997,6 @@ define {<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>} @vector_d
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: slli a0, a0, 1
; CHECK-NEXT: sub sp, sp, a0
-; CHECK-NEXT: csrr a0, vlenb
-; CHECK-NEXT: srli a0, a0, 2
-; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v10, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v10, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs2r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -2062,11 +2057,6 @@ define {<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>} @ve
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: slli a0, a0, 1
; CHECK-NEXT: sub sp, sp, a0
-; CHECK-NEXT: csrr a0, vlenb
-; CHECK-NEXT: srli a0, a0, 2
-; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v10, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v10, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs2r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -2127,11 +2117,6 @@ define {<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>} @vecto
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: slli a0, a0, 1
; CHECK-NEXT: sub sp, sp, a0
-; CHECK-NEXT: csrr a0, vlenb
-; CHECK-NEXT: srli a0, a0, 3
-; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v10, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v10, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs2r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
@@ -2457,8 +2442,6 @@ define {<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x
; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
; CHECK-NEXT: vslidedown.vx v11, v9, a0
; CHECK-NEXT: vslideup.vx v9, v11, a0
-; CHECK-NEXT: vslidedown.vx v11, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v11, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -2544,8 +2527,6 @@ define {<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vs
; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
; CHECK-NEXT: vslidedown.vx v11, v9, a0
; CHECK-NEXT: vslideup.vx v9, v11, a0
-; CHECK-NEXT: vslidedown.vx v11, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v11, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -2631,8 +2612,6 @@ define {<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscal
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
; CHECK-NEXT: vslidedown.vx v11, v9, a0
; CHECK-NEXT: vslideup.vx v9, v11, a0
-; CHECK-NEXT: vslidedown.vx v11, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v11, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
@@ -2776,12 +2755,10 @@ define {<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: srli a0, a0, 2
; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v11, v9, a0
-; CHECK-NEXT: vslideup.vx v9, v11, a0
-; CHECK-NEXT: vslidedown.vx v11, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v11, a0
; CHECK-NEXT: vslidedown.vx v11, v10, a0
; CHECK-NEXT: vslideup.vx v10, v11, a0
+; CHECK-NEXT: vslidedown.vx v11, v9, a0
+; CHECK-NEXT: vslideup.vx v9, v11, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -2866,12 +2843,10 @@ define {<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vs
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: srli a0, a0, 2
; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v11, v9, a0
-; CHECK-NEXT: vslideup.vx v9, v11, a0
-; CHECK-NEXT: vslidedown.vx v11, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v11, a0
; CHECK-NEXT: vslidedown.vx v11, v10, a0
; CHECK-NEXT: vslideup.vx v10, v11, a0
+; CHECK-NEXT: vslidedown.vx v11, v9, a0
+; CHECK-NEXT: vslideup.vx v9, v11, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -2956,12 +2931,10 @@ define {<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscal
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: srli a0, a0, 3
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v11, v9, a0
-; CHECK-NEXT: vslideup.vx v9, v11, a0
-; CHECK-NEXT: vslidedown.vx v11, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v11, a0
; CHECK-NEXT: vslidedown.vx v11, v10, a0
; CHECK-NEXT: vslideup.vx v10, v11, a0
+; CHECK-NEXT: vslidedown.vx v11, v9, a0
+; CHECK-NEXT: vslideup.vx v9, v11, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
@@ -3107,12 +3080,10 @@ define {<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x half>, <vscale x
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: srli a0, a0, 2
; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v12, v9, a0
-; CHECK-NEXT: vslideup.vx v9, v12, a0
-; CHECK-NEXT: vslidedown.vx v12, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v12, a0
; CHECK-NEXT: vslidedown.vx v12, v10, a0
; CHECK-NEXT: vslideup.vx v10, v12, a0
+; CHECK-NEXT: vslidedown.vx v12, v9, a0
+; CHECK-NEXT: vslideup.vx v9, v12, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -3202,12 +3173,10 @@ define {<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vs
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: srli a0, a0, 2
; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v12, v9, a0
-; CHECK-NEXT: vslideup.vx v9, v12, a0
-; CHECK-NEXT: vslidedown.vx v12, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v12, a0
; CHECK-NEXT: vslidedown.vx v12, v10, a0
; CHECK-NEXT: vslideup.vx v10, v12, a0
+; CHECK-NEXT: vslidedown.vx v12, v9, a0
+; CHECK-NEXT: vslideup.vx v9, v12, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma
@@ -3297,12 +3266,10 @@ define {<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscal
; CHECK-NEXT: csrr a0, vlenb
; CHECK-NEXT: srli a0, a0, 3
; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma
-; CHECK-NEXT: vslidedown.vx v12, v9, a0
-; CHECK-NEXT: vslideup.vx v9, v12, a0
-; CHECK-NEXT: vslidedown.vx v12, v8, a0
-; CHECK-NEXT: vslideup.vx v8, v12, a0
; CHECK-NEXT: vslidedown.vx v12, v10, a0
; CHECK-NEXT: vslideup.vx v10, v12, a0
+; CHECK-NEXT: vslidedown.vx v12, v9, a0
+; CHECK-NEXT: vslideup.vx v9, v12, a0
; CHECK-NEXT: addi a0, sp, 16
; CHECK-NEXT: vs4r.v v8, (a0)
; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma
>From c3762a810ef63e0f0121217652fbaaf5e56a6a1b Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Wed, 16 Sep 2026 15:14:31 -0700
Subject: [PATCH 3/4] fixup! Rebase
---
.../RISCV/rvv/vector-interleave-fixed.ll | 1360 +++++------------
1 file changed, 416 insertions(+), 944 deletions(-)
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll b/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll
index bd106e74f1d5c..53eba3e7b3531 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll
@@ -339,17 +339,8 @@ define <8 x i32> @vector_interleave4_v8i32_v2i32(<2 x i32> %a, <2 x i32> %b, <2
; ZVZIP-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
; ZVZIP-NEXT: vzip.vv v12, v9, v11
; ZVZIP-NEXT: vzip.vv v11, v8, v10
-; ZVZIP-NEXT: vsetivli zero, 2, e32, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vi v8, v12, 2
-; ZVZIP-NEXT: vslidedown.vi v9, v11, 2
; ZVZIP-NEXT: vsetivli zero, 4, e32, m1, ta, ma
-; ZVZIP-NEXT: vslideup.vi v12, v8, 2
-; ZVZIP-NEXT: vslideup.vi v11, v9, 2
; ZVZIP-NEXT: vzip.vv v8, v11, v12
-; ZVZIP-NEXT: vsetivli zero, 4, e32, m2, ta, ma
-; ZVZIP-NEXT: vslidedown.vi v10, v8, 4
-; ZVZIP-NEXT: vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT: vslideup.vi v8, v10, 4
; ZVZIP-NEXT: ret
;
; ZVZIP-WIDE-LABEL: vector_interleave4_v8i32_v2i32:
@@ -357,11 +348,7 @@ define <8 x i32> @vector_interleave4_v8i32_v2i32(<2 x i32> %a, <2 x i32> %b, <2
; ZVZIP-WIDE-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
; ZVZIP-WIDE-NEXT: vzip.vv v12, v9, v11
; ZVZIP-WIDE-NEXT: vzip.vv v9, v8, v10
-; ZVZIP-WIDE-NEXT: vslidedown.vi v8, v12, 2
-; ZVZIP-WIDE-NEXT: vslidedown.vi v10, v9, 2
; ZVZIP-WIDE-NEXT: vsetivli zero, 4, e32, mf2, ta, ma
-; ZVZIP-WIDE-NEXT: vslideup.vi v12, v8, 2
-; ZVZIP-WIDE-NEXT: vslideup.vi v9, v10, 2
; ZVZIP-WIDE-NEXT: vzip.vv v8, v9, v12
; ZVZIP-WIDE-NEXT: vsetivli zero, 2, e32, mf2, ta, ma
; ZVZIP-WIDE-NEXT: vslidedown.vi v9, v8, 2
@@ -9240,21 +9227,15 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP: # %bb.0:
; ZVZIP-NEXT: addi sp, sp, -16
; ZVZIP-NEXT: csrr a2, vlenb
-; ZVZIP-NEXT: slli a2, a2, 3
+; ZVZIP-NEXT: slli a2, a2, 4
; ZVZIP-NEXT: mv a4, a2
-; ZVZIP-NEXT: slli a2, a2, 2
-; ZVZIP-NEXT: add a4, a4, a2
-; ZVZIP-NEXT: slli a2, a2, 3
+; ZVZIP-NEXT: slli a2, a2, 4
; ZVZIP-NEXT: add a2, a2, a4
; ZVZIP-NEXT: sub sp, sp, a2
; ZVZIP-NEXT: csrr a2, vlenb
-; ZVZIP-NEXT: slli a2, a2, 3
+; ZVZIP-NEXT: slli a2, a2, 6
; ZVZIP-NEXT: mv a4, a2
; ZVZIP-NEXT: slli a2, a2, 1
-; ZVZIP-NEXT: add a4, a4, a2
-; ZVZIP-NEXT: slli a2, a2, 1
-; ZVZIP-NEXT: add a4, a4, a2
-; ZVZIP-NEXT: slli a2, a2, 2
; ZVZIP-NEXT: add a2, a2, a4
; ZVZIP-NEXT: add a2, sp, a2
; ZVZIP-NEXT: addi a2, a2, 16
@@ -9262,24 +9243,16 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: csrr a2, vlenb
; ZVZIP-NEXT: slli a2, a2, 3
; ZVZIP-NEXT: mv a4, a2
-; ZVZIP-NEXT: slli a2, a2, 1
-; ZVZIP-NEXT: add a4, a4, a2
-; ZVZIP-NEXT: slli a2, a2, 1
-; ZVZIP-NEXT: add a4, a4, a2
-; ZVZIP-NEXT: slli a2, a2, 1
-; ZVZIP-NEXT: add a4, a4, a2
-; ZVZIP-NEXT: slli a2, a2, 1
+; ZVZIP-NEXT: slli a2, a2, 5
; ZVZIP-NEXT: add a2, a2, a4
; ZVZIP-NEXT: add a2, sp, a2
; ZVZIP-NEXT: addi a2, a2, 16
; ZVZIP-NEXT: vs8r.v v8, (a2) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: li a2, 128
; ZVZIP-NEXT: csrr a4, vlenb
-; ZVZIP-NEXT: slli a4, a4, 3
+; ZVZIP-NEXT: slli a4, a4, 4
; ZVZIP-NEXT: mv a5, a4
-; ZVZIP-NEXT: slli a4, a4, 2
-; ZVZIP-NEXT: add a5, a5, a4
-; ZVZIP-NEXT: slli a4, a4, 3
+; ZVZIP-NEXT: slli a4, a4, 4
; ZVZIP-NEXT: add a4, a4, a5
; ZVZIP-NEXT: add a4, sp, a4
; ZVZIP-NEXT: addi a4, a4, 528
@@ -9302,27 +9275,29 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
; ZVZIP-NEXT: vle8.v v24, (a5)
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 8
+; ZVZIP-NEXT: slli a5, a5, 3
+; ZVZIP-NEXT: mv a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 2
+; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
; ZVZIP-NEXT: vs8r.v v24, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 8
-; ZVZIP-NEXT: add a5, sp, a5
-; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vl8r.v v24, (a5) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
; ZVZIP-NEXT: vslidedown.vx v24, v24, a4
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
; ZVZIP-NEXT: vzip.vv v0, v24, v8
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v0, v8, a4
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 5
+; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 3
+; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
@@ -9332,7 +9307,9 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: csrr a5, vlenb
; ZVZIP-NEXT: slli a5, a5, 3
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 2
+; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a6, a6, a5
; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a6, a6, a5
@@ -9343,8 +9320,20 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: addi a5, a7, 128
; ZVZIP-NEXT: vslidedown.vx v8, v16, a4
+; ZVZIP-NEXT: csrr a6, vlenb
+; ZVZIP-NEXT: slli a6, a6, 3
+; ZVZIP-NEXT: mv t0, a6
+; ZVZIP-NEXT: slli a6, a6, 2
+; ZVZIP-NEXT: add t0, t0, a6
+; ZVZIP-NEXT: slli a6, a6, 1
+; ZVZIP-NEXT: add t0, t0, a6
+; ZVZIP-NEXT: slli a6, a6, 1
+; ZVZIP-NEXT: add a6, a6, t0
+; ZVZIP-NEXT: add a6, sp, a6
+; ZVZIP-NEXT: addi a6, a6, 16
+; ZVZIP-NEXT: vs8r.v v8, (a6) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vle8.v v16, (a5)
+; ZVZIP-NEXT: vle8.v v8, (a5)
; ZVZIP-NEXT: csrr a5, vlenb
; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: mv a6, a5
@@ -9354,39 +9343,23 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v16, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v8, v16
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
+; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: csrr a5, vlenb
; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: mv a6, a5
; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
-; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v24, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 3
-; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 2
-; ZVZIP-NEXT: add a6, a6, a5
-; ZVZIP-NEXT: slli a5, a5, 3
-; ZVZIP-NEXT: add a5, a5, a6
-; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 656
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
+; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
; ZVZIP-NEXT: csrr a6, vlenb
-; ZVZIP-NEXT: slli a6, a6, 5
+; ZVZIP-NEXT: slli a6, a6, 3
; ZVZIP-NEXT: mv t0, a6
; ZVZIP-NEXT: slli a6, a6, 1
; ZVZIP-NEXT: add t0, t0, a6
+; ZVZIP-NEXT: slli a6, a6, 2
+; ZVZIP-NEXT: add t0, t0, a6
; ZVZIP-NEXT: slli a6, a6, 1
; ZVZIP-NEXT: add a6, a6, t0
; ZVZIP-NEXT: add a6, sp, a6
@@ -9397,7 +9370,9 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: csrr a5, vlenb
; ZVZIP-NEXT: slli a5, a5, 3
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 5
+; ZVZIP-NEXT: slli a5, a5, 2
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
@@ -9408,9 +9383,9 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
; ZVZIP-NEXT: vle8.v v16, (a5)
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 3
+; ZVZIP-NEXT: slli a5, a5, 5
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 4
+; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
@@ -9419,31 +9394,33 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
; ZVZIP-NEXT: vzip.vv v24, v16, v8
+; ZVZIP-NEXT: csrr a5, vlenb
+; ZVZIP-NEXT: slli a5, a5, 4
+; ZVZIP-NEXT: mv a6, a5
+; ZVZIP-NEXT: slli a5, a5, 2
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: add a5, a5, a6
+; ZVZIP-NEXT: add a5, sp, a5
+; ZVZIP-NEXT: addi a5, a5, 16
+; ZVZIP-NEXT: vs8r.v v24, (a5) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 3
+; ZVZIP-NEXT: slli a5, a5, 5
; ZVZIP-NEXT: mv a6, a5
; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a6, a6, a5
; ZVZIP-NEXT: slli a5, a5, 1
-; ZVZIP-NEXT: add a6, a6, a5
-; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v24, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v0, v24, a4
+; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
; ZVZIP-NEXT: vle8.v v8, (a1)
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 3
+; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 1
-; ZVZIP-NEXT: add a6, a6, a5
; ZVZIP-NEXT: slli a5, a5, 2
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
@@ -9451,7 +9428,17 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: addi a5, a7, 256
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
+; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
+; ZVZIP-NEXT: csrr a6, vlenb
+; ZVZIP-NEXT: slli a6, a6, 3
+; ZVZIP-NEXT: mv t0, a6
+; ZVZIP-NEXT: slli a6, a6, 2
+; ZVZIP-NEXT: add t0, t0, a6
+; ZVZIP-NEXT: slli a6, a6, 2
+; ZVZIP-NEXT: add a6, a6, t0
+; ZVZIP-NEXT: add a6, sp, a6
+; ZVZIP-NEXT: addi a6, a6, 16
+; ZVZIP-NEXT: vs8r.v v8, (a6) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
; ZVZIP-NEXT: vle8.v v8, (a5)
; ZVZIP-NEXT: csrr a5, vlenb
@@ -9462,53 +9449,63 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v24, v8, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v16, v24
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 5
+; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
-; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: addi a5, a5, 784
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v0
+; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
+; ZVZIP-NEXT: csrr a6, vlenb
+; ZVZIP-NEXT: slli a6, a6, 5
+; ZVZIP-NEXT: mv t0, a6
+; ZVZIP-NEXT: slli a6, a6, 2
+; ZVZIP-NEXT: add a6, a6, t0
+; ZVZIP-NEXT: add a6, sp, a6
+; ZVZIP-NEXT: addi a6, a6, 16
+; ZVZIP-NEXT: vs8r.v v8, (a6) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vle8.v v8, (a5)
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 4
+; ZVZIP-NEXT: slli a5, a5, 3
; ZVZIP-NEXT: mv a6, a5
; ZVZIP-NEXT: slli a5, a5, 2
-; ZVZIP-NEXT: add a6, a6, a5
-; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v24, (a5) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: addi a5, a3, 384
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
+; ZVZIP-NEXT: csrr a6, vlenb
+; ZVZIP-NEXT: slli a6, a6, 4
+; ZVZIP-NEXT: mv t0, a6
+; ZVZIP-NEXT: slli a6, a6, 3
+; ZVZIP-NEXT: add a6, a6, t0
+; ZVZIP-NEXT: add a6, sp, a6
+; ZVZIP-NEXT: addi a6, a6, 16
+; ZVZIP-NEXT: vs8r.v v8, (a6) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vle8.v v8, (a5)
; ZVZIP-NEXT: csrr a5, vlenb
; ZVZIP-NEXT: slli a5, a5, 3
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 2
-; ZVZIP-NEXT: add a6, a6, a5
-; ZVZIP-NEXT: slli a5, a5, 3
+; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
-; ZVZIP-NEXT: addi a5, a5, 784
+; ZVZIP-NEXT: addi a5, a5, 16
+; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: addi a5, a7, 384
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
+; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
; ZVZIP-NEXT: csrr a6, vlenb
; ZVZIP-NEXT: slli a6, a6, 3
; ZVZIP-NEXT: mv t0, a6
; ZVZIP-NEXT: slli a6, a6, 1
; ZVZIP-NEXT: add t0, t0, a6
-; ZVZIP-NEXT: slli a6, a6, 2
+; ZVZIP-NEXT: slli a6, a6, 1
; ZVZIP-NEXT: add t0, t0, a6
; ZVZIP-NEXT: slli a6, a6, 1
; ZVZIP-NEXT: add a6, a6, t0
@@ -9518,64 +9515,58 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
; ZVZIP-NEXT: vle8.v v8, (a5)
; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 4
-; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 2
-; ZVZIP-NEXT: add a5, a5, a6
+; ZVZIP-NEXT: slli a5, a5, 3
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: addi a5, a3, 384
+; ZVZIP-NEXT: addi a1, a1, 128
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vle8.v v16, (a5)
-; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 6
-; ZVZIP-NEXT: add a5, sp, a5
-; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v16, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v8
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
; ZVZIP-NEXT: csrr a5, vlenb
; ZVZIP-NEXT: slli a5, a5, 3
; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 2
-; ZVZIP-NEXT: add a6, a6, a5
-; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v24, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: addi a5, a7, 384
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
+; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vle8.v v16, (a5)
+; ZVZIP-NEXT: vle8.v v8, (a1)
+; ZVZIP-NEXT: csrr a1, vlenb
+; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: mv a5, a1
+; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: add a1, a1, a5
+; ZVZIP-NEXT: add a1, sp, a1
+; ZVZIP-NEXT: addi a1, a1, 400
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
; ZVZIP-NEXT: csrr a5, vlenb
; ZVZIP-NEXT: slli a5, a5, 4
; ZVZIP-NEXT: mv a6, a5
; ZVZIP-NEXT: slli a5, a5, 1
+; ZVZIP-NEXT: add a6, a6, a5
+; ZVZIP-NEXT: slli a5, a5, 1
; ZVZIP-NEXT: add a5, a5, a6
; ZVZIP-NEXT: add a5, sp, a5
; ZVZIP-NEXT: addi a5, a5, 16
; ZVZIP-NEXT: vs8r.v v16, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: addi a1, a1, 128
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vle8.v v16, (a1)
+; ZVZIP-NEXT: csrr a1, vlenb
+; ZVZIP-NEXT: slli a1, a1, 6
+; ZVZIP-NEXT: add a1, sp, a1
+; ZVZIP-NEXT: addi a1, a1, 16
+; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vle8.v v24, (a1)
+; ZVZIP-NEXT: vle8.v v24, (a3)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a5, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a5
+; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
@@ -9583,198 +9574,18 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: vslidedown.vx v24, v24, a4
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
; ZVZIP-NEXT: vzip.vv v0, v24, v16
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v0, v16, a4
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a5, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a5, a5, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a5
+; ZVZIP-NEXT: slli a1, a1, 8
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v8
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a5, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a5, a5, a1
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: add a1, a1, a5
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a5, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a5, a5, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, a1, a5
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 400
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: csrr a5, vlenb
-; ZVZIP-NEXT: slli a5, a5, 6
-; ZVZIP-NEXT: mv a6, a5
-; ZVZIP-NEXT: slli a5, a5, 1
-; ZVZIP-NEXT: add a5, a5, a6
-; ZVZIP-NEXT: add a5, sp, a5
-; ZVZIP-NEXT: addi a5, a5, 16
-; ZVZIP-NEXT: vs8r.v v8, (a5) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vle8.v v8, (a1)
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 7
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vle8.v v16, (a3)
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v8
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vle8.v v24, (a7)
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v24, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v0, v16, v24
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v0, v16, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v8
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, a1, a3
+; ZVZIP-NEXT: slli a1, a1, 8
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v24, v16
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
+; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
@@ -9792,234 +9603,17 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v8
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v0, v16, v24
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v0, v16, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v0, v16, v8
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v0, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v24, v16
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 6
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v16, v24, v8
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v16, a4
+; ZVZIP-NEXT: vslidedown.vx v16, v16, a4
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v16, v8, a4
-; ZVZIP-NEXT: addi a1, sp, 16
-; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v16, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vle8.v v24, (a7)
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v24, v16
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v0, v8, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v8, v0, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v0, v8, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v0, v16
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
; ZVZIP-NEXT: vslidedown.vx v24, v24, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
; ZVZIP-NEXT: vzip.vv v0, v16, v24
; ZVZIP-NEXT: csrr a1, vlenb
@@ -10027,68 +9621,38 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v16, v0, v24
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v24, v16, a4
+; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 7
+; ZVZIP-NEXT: add a1, sp, a1
+; ZVZIP-NEXT: addi a1, a1, 16
+; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: csrr a1, vlenb
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v16, v0, v24
+; ZVZIP-NEXT: vzip.vv v0, v24, v16
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
@@ -10098,107 +9662,92 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v24, v16, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 6
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: addi a1, sp, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v16, v8, v24
+; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v16, a4
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v0, v16, v24
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 8
+; ZVZIP-NEXT: slli a1, a1, 5
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v8
+; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
+; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
+; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v0, v24, v16
+; ZVZIP-NEXT: addi a1, sp, 16
+; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v16, v0, a4
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
+; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: csrr a1, vlenb
+; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: add a1, sp, a1
+; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
; ZVZIP-NEXT: vzip.vv v24, v8, v16
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
@@ -10209,17 +9758,13 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 7
+; ZVZIP-NEXT: slli a1, a1, 6
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
@@ -10227,309 +9772,271 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v24, v16, v8
+; ZVZIP-NEXT: vzip.vv v0, v16, v8
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v24, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v24, v8, a4
+; ZVZIP-NEXT: vslidedown.vx v8, v0, a4
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 7
+; ZVZIP-NEXT: slli a1, a1, 6
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v0, v24, a4
+; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 5
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v16, v8, v24
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v24, v16, a4
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v16, v24, a4
+; ZVZIP-NEXT: vzip.vv v8, v16, v24
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v24, v16, a4
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v24, v0
+; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 8
+; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
+; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v8, v0
+; ZVZIP-NEXT: addi a1, sp, 16
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vzip.vv v8, v0, v24
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a0)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v0, v24, v8
-; ZVZIP-NEXT: vmv8r.v v24, v0
+; ZVZIP-NEXT: vzip.vv v16, v0, v24
; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v8, v0, a4
+; ZVZIP-NEXT: vslidedown.vx v24, v16, a4
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: add a1, a1, a3
+; ZVZIP-NEXT: add a1, sp, a1
+; ZVZIP-NEXT: addi a1, a1, 16
+; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: addi a1, a0, 1536
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v8, (a1)
+; ZVZIP-NEXT: csrr a1, vlenb
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 7
+; ZVZIP-NEXT: slli a1, a1, 5
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v16, v0
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
+; ZVZIP-NEXT: vzip.vv v8, v0, v24
+; ZVZIP-NEXT: addi a1, a0, 1024
; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
+; ZVZIP-NEXT: vse8.v v8, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 6
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v0, v16, a4
-; ZVZIP-NEXT: vse8.v v8, (a0)
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v0, v8, v24
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 6
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
-; ZVZIP-NEXT: addi a1, a0, 1536
-; ZVZIP-NEXT: vse8.v v0, (a1)
+; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vzip.vv v24, v0, v16
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v24, v16, a4
-; ZVZIP-NEXT: addi a1, a0, 1024
-; ZVZIP-NEXT: vse8.v v8, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v0, v8, a4
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vzip.vv v8, v0, v16
; ZVZIP-NEXT: addi a1, a0, 512
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
; ZVZIP-NEXT: vse8.v v24, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a1, a1, a3
+; ZVZIP-NEXT: slli a1, a1, 8
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v0, v24
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v24, v8, a4
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 8
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: addi a1, a0, 256
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a1, a1, a3
+; ZVZIP-NEXT: slli a1, a1, 6
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v16, v24, a4
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 8
+; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: addi a1, a0, 256
-; ZVZIP-NEXT: vse8.v v8, (a1)
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v0, v24
+; ZVZIP-NEXT: addi a1, a0, 128
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v24, v16
-; ZVZIP-NEXT: addi a1, a0, 128
-; ZVZIP-NEXT: csrr a3, vlenb
-; ZVZIP-NEXT: slli a3, a3, 8
-; ZVZIP-NEXT: add a3, sp, a3
-; ZVZIP-NEXT: addi a3, a3, 16
-; ZVZIP-NEXT: vl8r.v v16, (a3) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vse8.v v16, (a1)
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
-; ZVZIP-NEXT: addi a1, a0, 1792
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vse8.v v0, (a1)
+; ZVZIP-NEXT: vzip.vv v0, v24, v16
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: slli a1, a1, 6
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vs8r.v v0, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vzip.vv v16, v0, v8
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v24, v0, a4
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 5
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vzip.vv v8, v24, v0
+; ZVZIP-NEXT: addi a1, a0, 1792
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
@@ -10537,157 +10044,152 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v24, v0, a4
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v0, v24
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v24, v8, a4
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
; ZVZIP-NEXT: addi a1, a0, 1664
-; ZVZIP-NEXT: csrr a3, vlenb
-; ZVZIP-NEXT: slli a3, a3, 5
-; ZVZIP-NEXT: mv a5, a3
-; ZVZIP-NEXT: slli a3, a3, 3
-; ZVZIP-NEXT: add a3, a3, a5
-; ZVZIP-NEXT: add a3, sp, a3
-; ZVZIP-NEXT: addi a3, a3, 16
-; ZVZIP-NEXT: vl8r.v v24, (a3) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vse8.v v24, (a1)
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v8, v24
+; ZVZIP-NEXT: addi a1, a0, 1280
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: add a1, a1, a3
-; ZVZIP-NEXT: add a1, sp, a1
-; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v24, v0, a4
-; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
-; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v24, (a1) # vscale x 64-byte Folded Spill
-; ZVZIP-NEXT: addi a1, a0, 1280
-; ZVZIP-NEXT: csrr a3, vlenb
-; ZVZIP-NEXT: slli a3, a3, 3
-; ZVZIP-NEXT: mv a5, a3
-; ZVZIP-NEXT: slli a3, a3, 5
-; ZVZIP-NEXT: add a3, a3, a5
-; ZVZIP-NEXT: add a3, sp, a3
-; ZVZIP-NEXT: addi a3, a3, 16
-; ZVZIP-NEXT: vl8r.v v24, (a3) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vse8.v v24, (a1)
+; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 5
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v24, v8
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v24, v0, a4
-; ZVZIP-NEXT: addi a1, a0, 1152
-; ZVZIP-NEXT: csrr a3, vlenb
-; ZVZIP-NEXT: slli a3, a3, 4
-; ZVZIP-NEXT: mv a5, a3
-; ZVZIP-NEXT: slli a3, a3, 4
-; ZVZIP-NEXT: add a3, a3, a5
-; ZVZIP-NEXT: add a3, sp, a3
-; ZVZIP-NEXT: addi a3, a3, 16
-; ZVZIP-NEXT: vl8r.v v0, (a3) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vse8.v v0, (a1)
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
-; ZVZIP-NEXT: addi a1, a0, 768
-; ZVZIP-NEXT: vse8.v v24, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vzip.vv v8, v0, v24
+; ZVZIP-NEXT: addi a1, a0, 1152
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 4
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v0, v16, a4
-; ZVZIP-NEXT: addi a1, a0, 640
-; ZVZIP-NEXT: vse8.v v8, (a1)
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v8, v0
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v0, v24, a4
+; ZVZIP-NEXT: addi a1, a0, 768
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
+; ZVZIP-NEXT: slli a1, a1, 5
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
-; ZVZIP-NEXT: addi a1, a0, 384
-; ZVZIP-NEXT: vse8.v v8, (a1)
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v0, v24
+; ZVZIP-NEXT: addi a1, a0, 640
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v8, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: csrr a1, vlenb
+; ZVZIP-NEXT: slli a1, a1, 7
+; ZVZIP-NEXT: add a1, sp, a1
+; ZVZIP-NEXT: addi a1, a1, 16
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v0, v24
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 6
; ZVZIP-NEXT: mv a3, a1
@@ -10695,69 +10197,74 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v24, v24, a4
+; ZVZIP-NEXT: addi a1, a0, 384
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 3
+; ZVZIP-NEXT: slli a1, a1, 8
+; ZVZIP-NEXT: add a1, sp, a1
+; ZVZIP-NEXT: addi a1, a1, 16
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v24, v0
+; ZVZIP-NEXT: addi a1, a0, 1920
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
+; ZVZIP-NEXT: csrr a1, vlenb
+; ZVZIP-NEXT: slli a1, a1, 5
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
-; ZVZIP-NEXT: slli a1, a1, 4
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vs8r.v v8, (a1) # vscale x 64-byte Folded Spill
+; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: csrr a1, vlenb
; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
-; ZVZIP-NEXT: slli a1, a1, 2
-; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 2
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
-; ZVZIP-NEXT: vl8r.v v16, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vl8r.v v0, (a1) # vscale x 64-byte Folded Reload
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
+; ZVZIP-NEXT: vzip.vv v16, v0, v24
+; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
+; ZVZIP-NEXT: vslidedown.vx v8, v8, a4
+; ZVZIP-NEXT: addi a1, a0, 1408
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a1)
; ZVZIP-NEXT: csrr a1, vlenb
-; ZVZIP-NEXT: slli a1, a1, 5
+; ZVZIP-NEXT: slli a1, a1, 3
; ZVZIP-NEXT: mv a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a3, a3, a1
; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
+; ZVZIP-NEXT: add a3, a3, a1
+; ZVZIP-NEXT: slli a1, a1, 1
; ZVZIP-NEXT: add a1, a1, a3
; ZVZIP-NEXT: add a1, sp, a1
; ZVZIP-NEXT: addi a1, a1, 16
; ZVZIP-NEXT: vl8r.v v24, (a1) # vscale x 64-byte Folded Reload
; ZVZIP-NEXT: vsetvli zero, a4, e8, m4, ta, ma
-; ZVZIP-NEXT: vzip.vv v8, v24, v16
-; ZVZIP-NEXT: addi a1, a0, 1920
-; ZVZIP-NEXT: csrr a3, vlenb
-; ZVZIP-NEXT: slli a3, a3, 3
-; ZVZIP-NEXT: mv a5, a3
-; ZVZIP-NEXT: slli a3, a3, 1
-; ZVZIP-NEXT: add a5, a5, a3
-; ZVZIP-NEXT: slli a3, a3, 4
-; ZVZIP-NEXT: add a3, a3, a5
-; ZVZIP-NEXT: add a3, sp, a3
-; ZVZIP-NEXT: addi a3, a3, 16
-; ZVZIP-NEXT: vl8r.v v16, (a3) # vscale x 64-byte Folded Reload
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vse8.v v16, (a1)
-; ZVZIP-NEXT: vsetvli zero, a4, e8, m8, ta, ma
-; ZVZIP-NEXT: vslidedown.vx v16, v8, a4
-; ZVZIP-NEXT: addi a1, a0, 1408
-; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
-; ZVZIP-NEXT: vse8.v v0, (a1)
-; ZVZIP-NEXT: vslideup.vx v8, v16, a4
+; ZVZIP-NEXT: vzip.vv v16, v8, v24
; ZVZIP-NEXT: addi a0, a0, 896
-; ZVZIP-NEXT: vse8.v v8, (a0)
+; ZVZIP-NEXT: vsetvli zero, a2, e8, m8, ta, ma
+; ZVZIP-NEXT: vse8.v v16, (a0)
; ZVZIP-NEXT: csrr a0, vlenb
-; ZVZIP-NEXT: slli a0, a0, 3
+; ZVZIP-NEXT: slli a0, a0, 4
; ZVZIP-NEXT: mv a1, a0
-; ZVZIP-NEXT: slli a0, a0, 2
-; ZVZIP-NEXT: add a1, a1, a0
-; ZVZIP-NEXT: slli a0, a0, 3
+; ZVZIP-NEXT: slli a0, a0, 4
; ZVZIP-NEXT: add a0, a0, a1
; ZVZIP-NEXT: add sp, sp, a0
; ZVZIP-NEXT: addi sp, sp, 16
@@ -10768,20 +10275,15 @@ define <2048 x i8> @vector_interleave4_v512i8_v2048i8(<512 x i8> %v0, <512 x i8>
; ZVZIP-WIDE-NEXT: li a0, 512
; ZVZIP-WIDE-NEXT: vsetvli zero, a0, e8, m2, ta, ma
; ZVZIP-WIDE-NEXT: vzip.vv v16, v10, v14
-; ZVZIP-WIDE-NEXT: vzip.vv v20, v8, v12
-; ZVZIP-WIDE-NEXT: vzip.vv v8, v20, v16
; ZVZIP-WIDE-NEXT: vsetvli zero, a0, e8, m4, ta, ma
-; ZVZIP-WIDE-NEXT: vslidedown.vx v24, v8, a0
-; ZVZIP-WIDE-NEXT: vslidedown.vx v16, v16, a0
-; ZVZIP-WIDE-NEXT: vslidedown.vx v20, v20, a0
+; ZVZIP-WIDE-NEXT: vslidedown.vx v20, v16, a0
; ZVZIP-WIDE-NEXT: vsetvli zero, a0, e8, m2, ta, ma
-; ZVZIP-WIDE-NEXT: vzip.vv v12, v20, v16
+; ZVZIP-WIDE-NEXT: vzip.vv v24, v8, v12
; ZVZIP-WIDE-NEXT: vsetvli zero, a0, e8, m4, ta, ma
-; ZVZIP-WIDE-NEXT: vslidedown.vx v16, v12, a0
-; ZVZIP-WIDE-NEXT: li a1, 1024
-; ZVZIP-WIDE-NEXT: vsetvli zero, a1, e8, m4, ta, ma
-; ZVZIP-WIDE-NEXT: vslideup.vx v8, v24, a0
-; ZVZIP-WIDE-NEXT: vslideup.vx v12, v16, a0
+; ZVZIP-WIDE-NEXT: vslidedown.vx v28, v24, a0
+; ZVZIP-WIDE-NEXT: vsetvli zero, a0, e8, m2, ta, ma
+; ZVZIP-WIDE-NEXT: vzip.vv v8, v24, v16
+; ZVZIP-WIDE-NEXT: vzip.vv v12, v28, v20
; ZVZIP-WIDE-NEXT: ret
%v = call <2048 x i8> @llvm.vector.interleave4(<512 x i8> %v0, <512 x i8> %v1, <512 x i8> %v2, <512 x i8> %v3)
ret <2048 x i8> %v
@@ -11266,29 +10768,11 @@ define <16 x i8> @vector_interleave8_v16i8_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i
; ZVZIP-NEXT: vzip.vv v11, v9, v13
; ZVZIP-NEXT: vzip.vv v9, v10, v14
; ZVZIP-NEXT: vzip.vv v10, v8, v12
-; ZVZIP-NEXT: vsetivli zero, 2, e8, mf4, ta, ma
-; ZVZIP-NEXT: vslidedown.vi v8, v16, 2
-; ZVZIP-NEXT: vslidedown.vi v12, v11, 2
-; ZVZIP-NEXT: vslidedown.vi v13, v9, 2
-; ZVZIP-NEXT: vslidedown.vi v14, v10, 2
; ZVZIP-NEXT: vsetivli zero, 4, e8, mf4, ta, ma
-; ZVZIP-NEXT: vslideup.vi v16, v8, 2
-; ZVZIP-NEXT: vslideup.vi v11, v12, 2
-; ZVZIP-NEXT: vslideup.vi v9, v13, 2
-; ZVZIP-NEXT: vslideup.vi v10, v14, 2
; ZVZIP-NEXT: vzip.vv v12, v11, v16
; ZVZIP-NEXT: vzip.vv v11, v10, v9
-; ZVZIP-NEXT: vsetivli zero, 4, e8, mf2, ta, ma
-; ZVZIP-NEXT: vslidedown.vi v8, v12, 4
-; ZVZIP-NEXT: vslidedown.vi v9, v11, 4
; ZVZIP-NEXT: vsetivli zero, 8, e8, mf2, ta, ma
-; ZVZIP-NEXT: vslideup.vi v12, v8, 4
-; ZVZIP-NEXT: vslideup.vi v11, v9, 4
; ZVZIP-NEXT: vzip.vv v8, v11, v12
-; ZVZIP-NEXT: vsetivli zero, 8, e8, m1, ta, ma
-; ZVZIP-NEXT: vslidedown.vi v9, v8, 8
-; ZVZIP-NEXT: vsetivli zero, 16, e8, m1, ta, ma
-; ZVZIP-NEXT: vslideup.vi v8, v9, 8
; ZVZIP-NEXT: ret
;
; ZVZIP-WIDE-LABEL: vector_interleave8_v16i8_v2i8:
@@ -11298,22 +10782,10 @@ define <16 x i8> @vector_interleave8_v16i8_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i
; ZVZIP-WIDE-NEXT: vzip.vv v11, v9, v13
; ZVZIP-WIDE-NEXT: vzip.vv v9, v10, v14
; ZVZIP-WIDE-NEXT: vzip.vv v10, v8, v12
-; ZVZIP-WIDE-NEXT: vslidedown.vi v8, v16, 2
-; ZVZIP-WIDE-NEXT: vslidedown.vi v12, v11, 2
-; ZVZIP-WIDE-NEXT: vslidedown.vi v13, v9, 2
-; ZVZIP-WIDE-NEXT: vslidedown.vi v14, v10, 2
; ZVZIP-WIDE-NEXT: vsetivli zero, 4, e8, mf8, ta, ma
-; ZVZIP-WIDE-NEXT: vslideup.vi v16, v8, 2
-; ZVZIP-WIDE-NEXT: vslideup.vi v11, v12, 2
-; ZVZIP-WIDE-NEXT: vslideup.vi v9, v13, 2
-; ZVZIP-WIDE-NEXT: vslideup.vi v10, v14, 2
; ZVZIP-WIDE-NEXT: vzip.vv v8, v11, v16
; ZVZIP-WIDE-NEXT: vzip.vv v11, v10, v9
-; ZVZIP-WIDE-NEXT: vslidedown.vi v9, v8, 4
-; ZVZIP-WIDE-NEXT: vslidedown.vi v10, v11, 4
; ZVZIP-WIDE-NEXT: vsetivli zero, 8, e8, mf8, ta, ma
-; ZVZIP-WIDE-NEXT: vslideup.vi v8, v9, 4
-; ZVZIP-WIDE-NEXT: vslideup.vi v11, v10, 4
; ZVZIP-WIDE-NEXT: vzip.vv v9, v11, v8
; ZVZIP-WIDE-NEXT: vsetivli zero, 2, e8, mf8, ta, ma
; ZVZIP-WIDE-NEXT: vslidedown.vi v10, v9, 2
>From 249b3c47f7d490c5b13e5cd0c7e97ba63c26875f Mon Sep 17 00:00:00 2001
From: Min-Yih Hsu <min.hsu at sifive.com>
Date: Wed, 16 Sep 2026 15:25:02 -0700
Subject: [PATCH 4/4] fixup! Address review comments
---
llvm/lib/Target/RISCV/RISCVISelLowering.cpp | 40 ++++++++++-----------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 2691980e06888..d7f150340719a 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -22236,51 +22236,51 @@ static SDValue performVSlideUpDownCombine(SDNode *N, SelectionDAG &DAG,
const RISCVSubtarget &Subtarget) {
unsigned Opcode = N->getOpcode();
assert(Opcode == RISCVISD::VSLIDEUP_VL || Opcode == RISCVISD::VSLIDEDOWN_VL);
- SDValue Passthru = N->getOperand(0);
- SDValue Val = N->getOperand(1);
- SDValue ShiftAmt = N->getOperand(2);
- SDValue Mask = N->getOperand(3);
- SDValue VL = N->getOperand(4);
// Trivial case.
if (N->getOperand(1)->isUndef())
return N->getOperand(0);
+ SDValue SlideDown = N->getOperand(1);
+ SDValue SlideUpOffset = N->getOperand(2);
+ SDValue SlideUpMask = N->getOperand(3);
+ SDValue SlideUpVL = N->getOperand(4);
+
// Given this pattern
// ```
- // %down = RISCVISD::VSLIDEDOWN_VL undef, %val, %shift, %mask, %vl0
- // %up = RISCVISD::VSLIDEUP_VL %val, %down, %shift, %mask, %vl1
+ // %down = RISCVISD::VSLIDEDOWN_VL undef, %val, %offset, %mask, %vl0
+ // %up = RISCVISD::VSLIDEUP_VL %val, %down, %offset, %mask, %vl1
// ```
// We can simplify it with `%val`, as it's doing redundant shifting.
// Note that we actually don't need to check their VLs: First, VSLIDEUP_VL
// is literally just putting %down back to their original position in %val.
// The only situation we need to worry about is actually the zeros shifted
// into VSLIDEDOWN_VL. In this scenario, the worst case would be %vl0 = VLMAX,
- // as %down is gaurantee to have those zeros. Our goal here is to ensure
+ // as %down is guaranteed to have those zeros. Our goal here is to ensure
// elements from %down that are actually inserted into %up are not those
// zeros. The number of %down that are actually inserted would be `%vl1 -
- // %shift`, and the number of non-zero elements from %down would be `VLMAX -
- // %shift`. Therefore, the invariant would be
- // `%vl1 - %shift <= VLMAX - %shift` ---> `%vl1 <= VLMAX`
+ // %offset`, and the number of non-zero elements from %down would be `VLMAX -
+ // %offset`. Therefore, the invariant would be
+ // `%vl1 - %offset <= VLMAX - %offset` ---> `%vl1 <= VLMAX`
// Thus, we will never read those zeros that are shifted in by VSLIDEDOWN_VL.
- if (Opcode != RISCVISD::VSLIDEUP_VL || !Val ||
- Val->getOpcode() != RISCVISD::VSLIDEDOWN_VL)
+ if (Opcode != RISCVISD::VSLIDEUP_VL ||
+ SlideDown.getOpcode() != RISCVISD::VSLIDEDOWN_VL)
return SDValue();
- SDValue SlideDown = Val;
SDValue SlideDownPassthru = SlideDown->getOperand(0);
SDValue SlideDownVal = SlideDown->getOperand(1);
- SDValue SlideDownShiftAmt = SlideDown->getOperand(2);
+ SDValue SlideDownOffset = SlideDown->getOperand(2);
SDValue SlideDownMask = SlideDown->getOperand(3);
SDValue SlideDownVL = SlideDown->getOperand(4);
- if (!SlideDownPassthru.isUndef() || SlideDownVal != Passthru ||
- SlideDownShiftAmt != ShiftAmt)
+ if (!SlideDownPassthru.isUndef() || SlideDownVal != N->getOperand(0) ||
+ SlideDownOffset != SlideUpOffset)
return SDValue();
// We can loosen the mask requirement in the future.
- if (SlideDownMask != Mask &&
+ if (SlideDownMask != SlideUpMask &&
(SlideDownMask.getOpcode() != RISCVISD::VMSET_VL ||
- Mask.getOpcode() != RISCVISD::VMSET_VL ||
- SlideDownMask.getOperand(0) != SlideDownVL || Mask.getOperand(0) != VL))
+ SlideUpMask.getOpcode() != RISCVISD::VMSET_VL ||
+ SlideDownMask.getOperand(0) != SlideDownVL ||
+ SlideUpMask.getOperand(0) != SlideUpVL))
return SDValue();
return SlideDownVal;
More information about the llvm-branch-commits
mailing list