[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