[llvm] [CodeGen] Expand unsupported interleave to shuffles (PR #210494)

Kamlesh Kumar via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 18 00:12:28 PDT 2026


https://github.com/kamleshbhalui created https://github.com/llvm/llvm-project/pull/210494

None

>From 2511c88abdc21775eb1f565216e1852ee37af8c2 Mon Sep 17 00:00:00 2001
From: Kamlesh Kumar <kamlesh.kumar at arm.com>
Date: Sat, 18 Jul 2026 06:23:54 +0000
Subject: [PATCH] [CodeGen] Expand unsupported interleave to shuffles

---
 llvm/include/llvm/CodeGen/TargetLowering.h    |     7 +
 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp |    51 -
 .../SelectionDAG/LegalizeVectorOps.cpp        |   159 +
 .../SelectionDAG/SelectionDAGBuilder.cpp      |    22 -
 llvm/lib/Target/AArch64/AArch64ISelLowering.h |     3 +
 llvm/lib/Target/RISCV/RISCVISelLowering.h     |     3 +
 .../complex-deinterleaving-reductions.ll      |    50 +-
 .../AArch64/complex-deinterleaving-splat.ll   |    45 +-
 .../AArch64/fixed-vector-deinterleave.ll      |   129 +-
 .../fixed-vector-interleave-odd-factor.ll     |   131 +
 .../AArch64/fixed-vector-interleave.ll        |   108 +-
 .../fixed_masked_deinterleaved_loads.ll       |    28 +-
 .../fixed_masked_interleaved_stores.ll        |    24 +-
 .../AArch64/sve-vector-deinterleave.ll        |    32 +-
 .../CodeGen/AArch64/sve-vector-interleave.ll  |    32 +-
 .../rvv/fixed-vectors-deinterleave-load.ll    |    35 +-
 .../rvv/fixed-vectors-interleave-store.ll     |    31 +-
 .../RISCV/rvv/vector-deinterleave-fixed.ll    |  1149 +-
 .../RISCV/rvv/vector-deinterleave-load.ll     |    99 +-
 .../CodeGen/RISCV/rvv/vector-deinterleave.ll  |   545 +-
 .../RISCV/rvv/vector-interleave-fixed.ll      |  9066 +++++++++---
 .../CodeGen/RISCV/rvv/vector-interleave.ll    | 11581 +++++++++-------
 .../RISCV/rvv/vp-vector-interleaved-access.ll |    28 +-
 .../X86/vector-interleave-intrinsics.ll       |   576 +
 24 files changed, 15671 insertions(+), 8263 deletions(-)
 create mode 100644 llvm/test/CodeGen/AArch64/fixed-vector-interleave-odd-factor.ll
 create mode 100644 llvm/test/CodeGen/X86/vector-interleave-intrinsics.ll

diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 9a6dd7735421e..9f8319dc6c867 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -3324,6 +3324,13 @@ class LLVM_ABI TargetLoweringBase {
   /// Default to be the minimum interleave factor: 2.
   virtual unsigned getMaxSupportedInterleaveFactor() const { return 2; }
 
+  /// Return true if the target supports interleave intrinsic for the specified
+  /// factor and vector type.
+  virtual bool isInterleaveIntrinsicSupported(unsigned /*Factor*/,
+                                              EVT /*VecTy*/) const {
+    return false;
+  }
+
   /// Lower an interleaved load to target specific intrinsics. Return
   /// true on success.
   ///
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index 65b8212755e6e..f7ec28db02e4c 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -3783,57 +3783,6 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
     Results.push_back(TLI.expandVectorSplice(Node, DAG));
     break;
   }
-  case ISD::VECTOR_DEINTERLEAVE: {
-    unsigned Factor = Node->getNumOperands();
-    if (Factor <= 2 || Factor % 2 != 0)
-      break;
-    SmallVector<SDValue, 8> Ops(Node->ops());
-    EVT VecVT = Node->getValueType(0);
-    SmallVector<EVT> HalfVTs(Factor / 2, VecVT);
-    // Deinterleave at Factor/2 so each result contains two factors interleaved:
-    // a0b0 c0d0 a1b1 c1d1 -> [a0c0 b0d0] [a1c1 b1d1]
-    SDValue L = DAG.getNode(ISD::VECTOR_DEINTERLEAVE, dl, HalfVTs,
-                            ArrayRef(Ops).take_front(Factor / 2));
-    SDValue R = DAG.getNode(ISD::VECTOR_DEINTERLEAVE, dl, HalfVTs,
-                            ArrayRef(Ops).take_back(Factor / 2));
-    Results.resize(Factor);
-    // Deinterleave the 2 factors out:
-    // [a0c0 a1c1] [b0d0 b1d1] -> a0a1 b0b1 c0c1 d0d1
-    for (unsigned I = 0; I < Factor / 2; I++) {
-      SDValue Deinterleave =
-          DAG.getNode(ISD::VECTOR_DEINTERLEAVE, dl, {VecVT, VecVT},
-                      {L.getValue(I), R.getValue(I)});
-      Results[I] = Deinterleave.getValue(0);
-      Results[I + Factor / 2] = Deinterleave.getValue(1);
-    }
-    break;
-  }
-  case ISD::VECTOR_INTERLEAVE: {
-    unsigned Factor = Node->getNumOperands();
-    if (Factor <= 2 || Factor % 2 != 0)
-      break;
-    EVT VecVT = Node->getValueType(0);
-    SmallVector<EVT> HalfVTs(Factor / 2, VecVT);
-    SmallVector<SDValue, 8> LOps, ROps;
-    // Interleave so we have 2 factors per result:
-    // a0a1 b0b1 c0c1 d0d1 -> [a0c0 b0d0] [a1c1 b1d1]
-    for (unsigned I = 0; I < Factor / 2; I++) {
-      SDValue Interleave =
-          DAG.getNode(ISD::VECTOR_INTERLEAVE, dl, {VecVT, VecVT},
-                      {Node->getOperand(I), Node->getOperand(I + Factor / 2)});
-      LOps.push_back(Interleave.getValue(0));
-      ROps.push_back(Interleave.getValue(1));
-    }
-    // Interleave at Factor/2:
-    // [a0c0 b0d0] [a1c1 b1d1] -> a0b0 c0d0 a1b1 c1d1
-    SDValue L = DAG.getNode(ISD::VECTOR_INTERLEAVE, dl, HalfVTs, LOps);
-    SDValue R = DAG.getNode(ISD::VECTOR_INTERLEAVE, dl, HalfVTs, ROps);
-    for (unsigned I = 0; I < Factor / 2; I++)
-      Results.push_back(L.getValue(I));
-    for (unsigned I = 0; I < Factor / 2; I++)
-      Results.push_back(R.getValue(I));
-    break;
-  }
   case ISD::EXTRACT_ELEMENT: {
     EVT OpTy = Node->getOperand(0).getValueType();
     if (Node->getConstantOperandVal(1)) {
diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
index f4cb60736ef7a..27df2bdd8d7cc 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeVectorOps.cpp
@@ -95,6 +95,20 @@ class VectorLegalizer {
   /// operations to legalize them.
   void Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results);
 
+  /// Expand a VECTOR_DEINTERLEAVE.
+  void ExpandVectorDeinterleave(SDNode *Node,
+                                SmallVectorImpl<SDValue> &Results);
+  /// Expand a VECTOR_INTERLEAVE.
+  void ExpandVectorInterleave(SDNode *Node, SmallVectorImpl<SDValue> &Results);
+
+  /// Expand a fixed-length VECTOR_INTERLEAVE.
+  void ExpandVectorInterleaveToShuffles(SDNode *Node,
+                                        SmallVectorImpl<SDValue> &Results);
+
+  /// Expand a fixed-length VECTOR_DEINTERLEAVE.
+  void ExpandVectorDeinterleaveToShuffles(SDNode *Node,
+                                          SmallVectorImpl<SDValue> &Results);
+
   /// Implements expansion for FP_TO_UINT; falls back to UnrollVectorOp if
   /// FP_TO_SINT isn't legal.
   void ExpandFP_TO_UINT(SDNode *Node, SmallVectorImpl<SDValue> &Results);
@@ -491,6 +505,15 @@ SDValue VectorLegalizer::LegalizeOp(SDValue Op) {
   case ISD::MASKED_SREM:
     Action = TLI.getOperationAction(Node->getOpcode(), Node->getValueType(0));
     break;
+  case ISD::VECTOR_INTERLEAVE:
+  case ISD::VECTOR_DEINTERLEAVE: {
+    EVT VT = Node->getValueType(0);
+    unsigned Factor = Node->getNumOperands();
+    Action = TLI.getOperationAction(Node->getOpcode(), VT);
+    if (!TLI.isInterleaveIntrinsicSupported(Factor, VT))
+      Action = TargetLowering::Expand;
+    break;
+  }
   case ISD::SMULFIX:
   case ISD::SMULFIXSAT:
   case ISD::UMULFIX:
@@ -966,6 +989,136 @@ SDValue VectorLegalizer::ExpandStore(SDNode *N) {
   SDValue TF = TLI.scalarizeVectorStore(ST, DAG);
   return TF;
 }
+void VectorLegalizer::ExpandVectorDeinterleave(
+    SDNode *Node, SmallVectorImpl<SDValue> &Results) {
+  assert(Node->getOpcode() == ISD::VECTOR_DEINTERLEAVE && "Unexpected opcode");
+
+  unsigned Factor = Node->getNumOperands();
+  assert(Factor == Node->getNumValues() &&
+         "Interleave operands and results must match");
+
+  EVT VecVT = Node->getValueType(0);
+  if (!TLI.isInterleaveIntrinsicSupported(Factor, VecVT)) {
+    ExpandVectorDeinterleaveToShuffles(Node, Results);
+    return;
+  }
+
+  // Break higher even factors into lower factors. The generated nodes are
+  // recursively legalized, allowing targets to custom lower any factor they
+  // support.
+  if (Factor > 2 && Factor % 2 == 0) {
+    SmallVector<EVT> HalfVTs(Factor / 2, VecVT);
+    SDLoc DL(Node);
+
+    SmallVector<SDValue, 8> Ops(Node->ops());
+    // Deinterleave at Factor/2 so each result contains two factors
+    // interleaved:
+    // a0b0 c0d0 a1b1 c1d1 -> [a0c0 b0d0] [a1c1 b1d1]
+    SDValue L = DAG.getNode(ISD::VECTOR_DEINTERLEAVE, DL, HalfVTs,
+                            ArrayRef(Ops).take_front(Factor / 2));
+    SDValue R = DAG.getNode(ISD::VECTOR_DEINTERLEAVE, DL, HalfVTs,
+                            ArrayRef(Ops).take_back(Factor / 2));
+    Results.resize(Factor);
+    // Deinterleave the 2 factors out:
+    // [a0c0 a1c1] [b0d0 b1d1] -> a0a1 b0b1 c0c1 d0d1
+    for (unsigned I = 0; I < Factor / 2; I++) {
+      SDValue Deinterleave =
+          DAG.getNode(ISD::VECTOR_DEINTERLEAVE, DL, {VecVT, VecVT},
+                      {L.getValue(I), R.getValue(I)});
+      Results[I] = Deinterleave.getValue(0);
+      Results[I + Factor / 2] = Deinterleave.getValue(1);
+    }
+    return;
+  }
+}
+
+void VectorLegalizer::ExpandVectorInterleave(
+    SDNode *Node, SmallVectorImpl<SDValue> &Results) {
+  assert(Node->getOpcode() == ISD::VECTOR_INTERLEAVE && "Unexpected opcode");
+  unsigned Factor = Node->getNumOperands();
+  EVT VecVT = Node->getValueType(0);
+
+  if (!TLI.isInterleaveIntrinsicSupported(Factor, VecVT)) {
+    ExpandVectorInterleaveToShuffles(Node, Results);
+    return;
+  }
+
+  // Break higher even factors into lower factors. The generated nodes are
+  // recursively legalized, allowing targets to custom lower any factor they
+  // support.
+  if (Factor > 2 && Factor % 2 == 0) {
+    SmallVector<EVT> HalfVTs(Factor / 2, VecVT);
+    SDLoc DL(Node);
+    SmallVector<SDValue, 8> LOps, ROps;
+    // Interleave so we have 2 factors per result:
+    // a0a1 b0b1 c0c1 d0d1 -> [a0c0 b0d0] [a1c1 b1d1]
+    for (unsigned I = 0; I < Factor / 2; I++) {
+      SDValue Interleave =
+          DAG.getNode(ISD::VECTOR_INTERLEAVE, DL, {VecVT, VecVT},
+                      {Node->getOperand(I), Node->getOperand(I + Factor / 2)});
+      LOps.push_back(Interleave.getValue(0));
+      ROps.push_back(Interleave.getValue(1));
+    }
+    // Interleave at Factor/2:
+    // [a0c0 b0d0] [a1c1 b1d1] -> a0b0 c0d0 a1b1 c1d1
+    SDValue L = DAG.getNode(ISD::VECTOR_INTERLEAVE, DL, HalfVTs, LOps);
+    SDValue R = DAG.getNode(ISD::VECTOR_INTERLEAVE, DL, HalfVTs, ROps);
+    for (unsigned I = 0; I < Factor / 2; I++)
+      Results.push_back(L.getValue(I));
+    for (unsigned I = 0; I < Factor / 2; I++)
+      Results.push_back(R.getValue(I));
+    return;
+  }
+}
+
+void VectorLegalizer::ExpandVectorInterleaveToShuffles(
+    SDNode *Node, SmallVectorImpl<SDValue> &Results) {
+  assert(Node->getOpcode() == ISD::VECTOR_INTERLEAVE && "Unexpected opcode");
+  EVT VT = Node->getValueType(0);
+  assert(VT.isFixedLengthVector() && "Expected a fixed-length vector");
+  unsigned Factor = Node->getNumOperands();
+  unsigned NumElts = VT.getVectorNumElements();
+  EVT WideVT = EVT::getVectorVT(*DAG.getContext(), VT.getVectorElementType(),
+                                NumElts * Factor);
+  SDLoc DL(Node);
+
+  SmallVector<SDValue, 8> InVecs(Node->op_values());
+  SDValue Concat = DAG.getNode(ISD::CONCAT_VECTORS, DL, WideVT, InVecs);
+  SDValue Interleaved =
+      DAG.getVectorShuffle(WideVT, DL, Concat, DAG.getUNDEF(WideVT),
+                           createInterleaveMask(NumElts, Factor));
+
+  for (unsigned I = 0; I != Factor; ++I)
+    Results.push_back(DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, Interleaved,
+                                  DAG.getVectorIdxConstant(I * NumElts, DL)));
+}
+
+void VectorLegalizer::ExpandVectorDeinterleaveToShuffles(
+    SDNode *Node, SmallVectorImpl<SDValue> &Results) {
+  assert(Node->getOpcode() == ISD::VECTOR_DEINTERLEAVE && "Unexpected opcode");
+  EVT VT = Node->getValueType(0);
+  assert(VT.isFixedLengthVector() && "Expected a fixed-length vector");
+  unsigned Factor = Node->getNumOperands();
+  unsigned NumElts = VT.getVectorNumElements();
+  EVT WideVT = EVT::getVectorVT(*DAG.getContext(), VT.getVectorElementType(),
+                                NumElts * Factor);
+  SDLoc DL(Node);
+
+  SmallVector<int, 16> Mask;
+  for (unsigned I = 0; I != Factor; ++I) {
+    SmallVector<int, 16> StrideMask = createStrideMask(I, Factor, NumElts);
+    Mask.append(StrideMask.begin(), StrideMask.end());
+  }
+
+  SmallVector<SDValue, 8> InVecs(Node->op_values());
+  SDValue Concat = DAG.getNode(ISD::CONCAT_VECTORS, DL, WideVT, InVecs);
+  SDValue Deinterleaved =
+      DAG.getVectorShuffle(WideVT, DL, Concat, DAG.getUNDEF(WideVT), Mask);
+
+  for (unsigned I = 0; I != Factor; ++I)
+    Results.push_back(DAG.getNode(ISD::EXTRACT_SUBVECTOR, DL, VT, Deinterleaved,
+                                  DAG.getVectorIdxConstant(I * NumElts, DL)));
+}
 
 void VectorLegalizer::Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results) {
   switch (Node->getOpcode()) {
@@ -982,6 +1135,12 @@ void VectorLegalizer::Expand(SDNode *Node, SmallVectorImpl<SDValue> &Results) {
     for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
       Results.push_back(Node->getOperand(i));
     return;
+  case ISD::VECTOR_INTERLEAVE:
+    ExpandVectorInterleave(Node, Results);
+    return;
+  case ISD::VECTOR_DEINTERLEAVE:
+    ExpandVectorDeinterleave(Node, Results);
+    return;
   case ISD::SIGN_EXTEND_INREG:
     if (SDValue Expanded = ExpandSEXTINREG(Node)) {
       Results.push_back(Expanded);
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index 0f6bd53cafdd8..db661c4e09330 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -13065,18 +13065,6 @@ void SelectionDAGBuilder::visitVectorDeinterleave(const CallInst &I,
                              DAG.getVectorIdxConstant(OutNumElts * i, DL));
   }
 
-  // Use VECTOR_SHUFFLE for fixed-length vectors with factor of 2 to benefit
-  // from existing legalisation and combines.
-  if (OutVT.isFixedLengthVector() && Factor == 2) {
-    SDValue Even = DAG.getVectorShuffle(OutVT, DL, SubVecs[0], SubVecs[1],
-                                        createStrideMask(0, 2, OutNumElts));
-    SDValue Odd = DAG.getVectorShuffle(OutVT, DL, SubVecs[0], SubVecs[1],
-                                       createStrideMask(1, 2, OutNumElts));
-    SDValue Res = DAG.getMergeValues({Even, Odd}, getCurSDLoc());
-    setValue(&I, Res);
-    return;
-  }
-
   SDValue Res = DAG.getNode(ISD::VECTOR_DEINTERLEAVE, DL,
                             DAG.getVTList(ValueVTs), SubVecs);
   setValue(&I, Res);
@@ -13096,16 +13084,6 @@ void SelectionDAGBuilder::visitVectorInterleave(const CallInst &I,
            "Expected VTs to be the same");
   }
 
-  // Use VECTOR_SHUFFLE for fixed-length vectors with factor of 2 to benefit
-  // from existing legalisation and combines.
-  if (OutVT.isFixedLengthVector() && Factor == 2) {
-    unsigned NumElts = InVT.getVectorMinNumElements();
-    SDValue V = DAG.getNode(ISD::CONCAT_VECTORS, DL, OutVT, InVecs);
-    setValue(&I, DAG.getVectorShuffle(OutVT, DL, V, DAG.getUNDEF(OutVT),
-                                      createInterleaveMask(NumElts, 2)));
-    return;
-  }
-
   SmallVector<EVT, 8> ValueVTs(Factor, InVT);
   SDValue Res =
       DAG.getNode(ISD::VECTOR_INTERLEAVE, DL, DAG.getVTList(ValueVTs), InVecs);
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.h b/llvm/lib/Target/AArch64/AArch64ISelLowering.h
index 6e395e004f519..05cc49ae834c0 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.h
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.h
@@ -231,6 +231,9 @@ class AArch64TargetLowering : public TargetLowering {
   bool hasPairedLoad(EVT LoadedType, Align &RequiredAlignment) const override;
 
   unsigned getMaxSupportedInterleaveFactor() const override { return 4; }
+  bool isInterleaveIntrinsicSupported(unsigned Factor, EVT VT) const override {
+    return VT.isScalableVector() || Factor == 3 || Factor % 2 == 0;
+  }
 
   bool lowerInterleavedLoad(Instruction *Load, Value *Mask,
                             ArrayRef<ShuffleVectorInst *> Shuffles,
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.h b/llvm/lib/Target/RISCV/RISCVISelLowering.h
index f8a99d38e2691..6ae942a09e911 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.h
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.h
@@ -436,6 +436,9 @@ class RISCVTargetLowering : public TargetLowering {
   bool isLegalFirstFaultLoad(EVT DataType, Align Alignment) const;
 
   unsigned getMaxSupportedInterleaveFactor() const override { return 8; }
+  bool isInterleaveIntrinsicSupported(unsigned Factor, EVT VT) const override {
+    return Factor >= 2 && Factor <= 8;
+  }
 
   bool fallBackToDAGISel(const Instruction &Inst) const override;
 
diff --git a/llvm/test/CodeGen/AArch64/complex-deinterleaving-reductions.ll b/llvm/test/CodeGen/AArch64/complex-deinterleaving-reductions.ll
index 355adec955e4b..3e3e3389c146d 100644
--- a/llvm/test/CodeGen/AArch64/complex-deinterleaving-reductions.ll
+++ b/llvm/test/CodeGen/AArch64/complex-deinterleaving-reductions.ll
@@ -31,8 +31,8 @@ define dso_local %"struct.std::complex" @complex_mul_v2f64(ptr %a, ptr %b) {
 ; CHECK-NEXT:    fcmla v0.2d, v4.2d, v2.2d, #90
 ; CHECK-NEXT:    b.ne .LBB0_1
 ; CHECK-NEXT:  // %bb.2: // %middle.block
-; CHECK-NEXT:    zip2 v2.2d, v1.2d, v0.2d
-; CHECK-NEXT:    zip1 v0.2d, v1.2d, v0.2d
+; CHECK-NEXT:    uzp2 v2.2d, v1.2d, v0.2d
+; CHECK-NEXT:    uzp1 v0.2d, v1.2d, v0.2d
 ; CHECK-NEXT:    faddp d0, v0.2d
 ; CHECK-NEXT:    faddp d1, v2.2d
 ; CHECK-NEXT:    ret
@@ -80,10 +80,13 @@ middle.block:                                     ; preds = %vector.body
 define %"struct.std::complex" @complex_mul_nonzero_init_v2f64(ptr %a, ptr %b) {
 ; CHECK-LABEL: complex_mul_nonzero_init_v2f64:
 ; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    movi v0.2d, #0000000000000000
 ; CHECK-NEXT:    adrp x8, .LCPI1_0
+; CHECK-NEXT:    adrp x9, .LCPI1_1
 ; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI1_0]
+; CHECK-NEXT:    ldr q2, [x9, :lo12:.LCPI1_1]
 ; CHECK-NEXT:    mov x8, xzr
+; CHECK-NEXT:    zip2 v0.2d, v2.2d, v1.2d
+; CHECK-NEXT:    zip1 v1.2d, v2.2d, v1.2d
 ; CHECK-NEXT:  .LBB1_1: // %vector.body
 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
 ; CHECK-NEXT:    add x9, x0, x8
@@ -98,8 +101,8 @@ define %"struct.std::complex" @complex_mul_nonzero_init_v2f64(ptr %a, ptr %b) {
 ; CHECK-NEXT:    fcmla v0.2d, v4.2d, v2.2d, #90
 ; CHECK-NEXT:    b.ne .LBB1_1
 ; CHECK-NEXT:  // %bb.2: // %middle.block
-; CHECK-NEXT:    zip2 v2.2d, v1.2d, v0.2d
-; CHECK-NEXT:    zip1 v0.2d, v1.2d, v0.2d
+; CHECK-NEXT:    uzp2 v2.2d, v1.2d, v0.2d
+; CHECK-NEXT:    uzp1 v0.2d, v1.2d, v0.2d
 ; CHECK-NEXT:    faddp d0, v0.2d
 ; CHECK-NEXT:    faddp d1, v2.2d
 ; CHECK-NEXT:    ret
@@ -143,14 +146,17 @@ middle.block:                                     ; preds = %vector.body
 define %"struct.std::complex" @complex_mul_v2f64_unrolled(ptr %a, ptr %b) {
 ; CHECK-LABEL: complex_mul_v2f64_unrolled:
 ; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    movi v0.2d, #0000000000000000
-; CHECK-NEXT:    movi v1.2d, #0000000000000000
 ; CHECK-NEXT:    adrp x8, .LCPI2_0
+; CHECK-NEXT:    adrp x9, .LCPI2_1
 ; CHECK-NEXT:    movi v3.2d, #0000000000000000
-; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI2_0]
+; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI2_0]
+; CHECK-NEXT:    ldr q2, [x9, :lo12:.LCPI2_1]
 ; CHECK-NEXT:    add x8, x0, #32
 ; CHECK-NEXT:    add x9, x1, #32
 ; CHECK-NEXT:    mov x10, #-100 // =0xffffffffffffff9c
+; CHECK-NEXT:    zip2 v0.2d, v2.2d, v1.2d
+; CHECK-NEXT:    zip1 v1.2d, v2.2d, v1.2d
+; CHECK-NEXT:    movi v2.2d, #0000000000000000
 ; CHECK-NEXT:  .LBB2_1: // %vector.body
 ; CHECK-NEXT:    // =>This Inner Loop Header: Depth=1
 ; CHECK-NEXT:    ldp q5, q4, [x8, #-32]
@@ -158,24 +164,24 @@ define %"struct.std::complex" @complex_mul_v2f64_unrolled(ptr %a, ptr %b) {
 ; CHECK-NEXT:    ldp q7, q6, [x9, #-32]
 ; CHECK-NEXT:    ldp q17, q16, [x8], #64
 ; CHECK-NEXT:    ldp q19, q18, [x9], #64
-; CHECK-NEXT:    fcmla v2.2d, v7.2d, v5.2d, #0
-; CHECK-NEXT:    fcmla v1.2d, v6.2d, v4.2d, #0
-; CHECK-NEXT:    fcmla v0.2d, v19.2d, v17.2d, #0
-; CHECK-NEXT:    fcmla v3.2d, v18.2d, v16.2d, #0
-; CHECK-NEXT:    fcmla v2.2d, v7.2d, v5.2d, #90
-; CHECK-NEXT:    fcmla v1.2d, v6.2d, v4.2d, #90
-; CHECK-NEXT:    fcmla v0.2d, v19.2d, v17.2d, #90
-; CHECK-NEXT:    fcmla v3.2d, v18.2d, v16.2d, #90
+; CHECK-NEXT:    fcmla v1.2d, v7.2d, v5.2d, #0
+; CHECK-NEXT:    fcmla v0.2d, v6.2d, v4.2d, #0
+; CHECK-NEXT:    fcmla v3.2d, v19.2d, v17.2d, #0
+; CHECK-NEXT:    fcmla v2.2d, v18.2d, v16.2d, #0
+; CHECK-NEXT:    fcmla v1.2d, v7.2d, v5.2d, #90
+; CHECK-NEXT:    fcmla v0.2d, v6.2d, v4.2d, #90
+; CHECK-NEXT:    fcmla v3.2d, v19.2d, v17.2d, #90
+; CHECK-NEXT:    fcmla v2.2d, v18.2d, v16.2d, #90
 ; CHECK-NEXT:    b.ne .LBB2_1
 ; CHECK-NEXT:  // %bb.2: // %middle.block
-; CHECK-NEXT:    zip2 v4.2d, v0.2d, v3.2d
-; CHECK-NEXT:    zip1 v0.2d, v0.2d, v3.2d
-; CHECK-NEXT:    zip2 v3.2d, v2.2d, v1.2d
-; CHECK-NEXT:    zip1 v1.2d, v2.2d, v1.2d
-; CHECK-NEXT:    fadd v0.2d, v0.2d, v1.2d
+; CHECK-NEXT:    uzp2 v4.2d, v3.2d, v2.2d
+; CHECK-NEXT:    uzp1 v2.2d, v3.2d, v2.2d
+; CHECK-NEXT:    uzp2 v3.2d, v1.2d, v0.2d
+; CHECK-NEXT:    uzp1 v0.2d, v1.2d, v0.2d
 ; CHECK-NEXT:    fadd v1.2d, v4.2d, v3.2d
-; CHECK-NEXT:    faddp d0, v0.2d
+; CHECK-NEXT:    fadd v0.2d, v2.2d, v0.2d
 ; CHECK-NEXT:    faddp d1, v1.2d
+; CHECK-NEXT:    faddp d0, v0.2d
 ; CHECK-NEXT:    ret
 entry:
   %scevgep = getelementptr i8, ptr %a, i64 32
diff --git a/llvm/test/CodeGen/AArch64/complex-deinterleaving-splat.ll b/llvm/test/CodeGen/AArch64/complex-deinterleaving-splat.ll
index ad9240b0922bd..f8c7a25f47185 100644
--- a/llvm/test/CodeGen/AArch64/complex-deinterleaving-splat.ll
+++ b/llvm/test/CodeGen/AArch64/complex-deinterleaving-splat.ll
@@ -9,21 +9,23 @@ target triple = "aarch64"
 define <4 x double> @complex_mul_const(<4 x double> %a, <4 x double> %b) {
 ; CHECK-LABEL: complex_mul_const:
 ; CHECK:       // %bb.0: // %entry
-; CHECK-NEXT:    movi v6.2d, #0000000000000000
-; CHECK-NEXT:    movi v5.2d, #0000000000000000
-; CHECK-NEXT:    adrp x8, .LCPI0_0
 ; CHECK-NEXT:    movi v4.2d, #0000000000000000
-; CHECK-NEXT:    fcmla v6.2d, v1.2d, v3.2d, #0
-; CHECK-NEXT:    fcmla v5.2d, v0.2d, v2.2d, #0
-; CHECK-NEXT:    fcmla v6.2d, v1.2d, v3.2d, #90
-; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI0_0]
-; CHECK-NEXT:    fcmla v5.2d, v0.2d, v2.2d, #90
+; CHECK-NEXT:    movi v5.2d, #0000000000000000
+; CHECK-NEXT:    fmov v6.2d, #3.00000000
+; CHECK-NEXT:    fmov v7.2d, #11.00000000
+; CHECK-NEXT:    fcmla v4.2d, v0.2d, v2.2d, #0
+; CHECK-NEXT:    fcmla v5.2d, v1.2d, v3.2d, #0
+; CHECK-NEXT:    fcmla v4.2d, v0.2d, v2.2d, #90
+; CHECK-NEXT:    movi v2.2d, #0000000000000000
+; CHECK-NEXT:    fcmla v5.2d, v1.2d, v3.2d, #90
+; CHECK-NEXT:    zip2 v1.2d, v7.2d, v6.2d
+; CHECK-NEXT:    zip1 v3.2d, v7.2d, v6.2d
 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
-; CHECK-NEXT:    fcmla v4.2d, v6.2d, v1.2d, #0
-; CHECK-NEXT:    fcmla v0.2d, v5.2d, v1.2d, #0
-; CHECK-NEXT:    fcmla v4.2d, v6.2d, v1.2d, #90
-; CHECK-NEXT:    fcmla v0.2d, v5.2d, v1.2d, #90
-; CHECK-NEXT:    mov v1.16b, v4.16b
+; CHECK-NEXT:    fcmla v2.2d, v5.2d, v1.2d, #0
+; CHECK-NEXT:    fcmla v0.2d, v4.2d, v3.2d, #0
+; CHECK-NEXT:    fcmla v2.2d, v5.2d, v1.2d, #90
+; CHECK-NEXT:    fcmla v0.2d, v4.2d, v3.2d, #90
+; CHECK-NEXT:    mov v1.16b, v2.16b
 ; CHECK-NEXT:    ret
 entry:
   %strided.vec = shufflevector <4 x double> %a, <4 x double> poison, <2 x i32> <i32 0, i32 2>
@@ -56,18 +58,21 @@ define <4 x double> @complex_mul_non_const(<4 x double> %a, <4 x double> %b, [2
 ; CHECK-NEXT:    movi v6.2d, #0000000000000000
 ; CHECK-NEXT:    // kill: def $d5 killed $d5 def $q5
 ; CHECK-NEXT:    // kill: def $d4 killed $d4 def $q4
-; CHECK-NEXT:    mov v4.d[1], v5.d[0]
-; CHECK-NEXT:    movi v5.2d, #0000000000000000
+; CHECK-NEXT:    dup v5.2d, v5.d[0]
+; CHECK-NEXT:    dup v4.2d, v4.d[0]
 ; CHECK-NEXT:    fcmla v7.2d, v1.2d, v3.2d, #0
 ; CHECK-NEXT:    fcmla v6.2d, v0.2d, v2.2d, #0
+; CHECK-NEXT:    zip2 v16.2d, v4.2d, v5.2d
+; CHECK-NEXT:    zip1 v5.2d, v4.2d, v5.2d
+; CHECK-NEXT:    movi v4.2d, #0000000000000000
 ; CHECK-NEXT:    fcmla v7.2d, v1.2d, v3.2d, #90
 ; CHECK-NEXT:    fcmla v6.2d, v0.2d, v2.2d, #90
 ; CHECK-NEXT:    movi v0.2d, #0000000000000000
-; CHECK-NEXT:    fcmla v5.2d, v7.2d, v4.2d, #0
-; CHECK-NEXT:    fcmla v0.2d, v6.2d, v4.2d, #0
-; CHECK-NEXT:    fcmla v5.2d, v7.2d, v4.2d, #90
-; CHECK-NEXT:    fcmla v0.2d, v6.2d, v4.2d, #90
-; CHECK-NEXT:    mov v1.16b, v5.16b
+; CHECK-NEXT:    fcmla v4.2d, v7.2d, v16.2d, #0
+; CHECK-NEXT:    fcmla v0.2d, v6.2d, v5.2d, #0
+; CHECK-NEXT:    fcmla v4.2d, v7.2d, v16.2d, #90
+; CHECK-NEXT:    fcmla v0.2d, v6.2d, v5.2d, #90
+; CHECK-NEXT:    mov v1.16b, v4.16b
 ; CHECK-NEXT:    ret
 entry:
   %c.coerce.fca.1.extract = extractvalue [2 x double] %c, 1
diff --git a/llvm/test/CodeGen/AArch64/fixed-vector-deinterleave.ll b/llvm/test/CodeGen/AArch64/fixed-vector-deinterleave.ll
index 8c48cc609c75a..cee81b083b6d6 100644
--- a/llvm/test/CodeGen/AArch64/fixed-vector-deinterleave.ll
+++ b/llvm/test/CodeGen/AArch64/fixed-vector-deinterleave.ll
@@ -3,21 +3,12 @@
 ; RUN: llc -mtriple=aarch64-none-linux-gnu -global-isel -global-isel-abort=0 %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
 
 define {<2 x half>, <2 x half>} @vector_deinterleave_v2f16_v4f16(<4 x half> %vec) {
-; CHECK-SD-LABEL: vector_deinterleave_v2f16_v4f16:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0
-; CHECK-SD-NEXT:    dup v1.2s, v0.s[1]
-; CHECK-SD-NEXT:    zip1 v2.4h, v0.4h, v1.4h
-; CHECK-SD-NEXT:    trn2 v1.4h, v0.4h, v1.4h
-; CHECK-SD-NEXT:    fmov d0, d2
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: vector_deinterleave_v2f16_v4f16:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    uzp1 v2.4h, v0.4h, v0.4h
-; CHECK-GI-NEXT:    uzp2 v1.4h, v0.4h, v0.4h
-; CHECK-GI-NEXT:    fmov d0, d2
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: vector_deinterleave_v2f16_v4f16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    uzp1 v2.4h, v0.4h, v0.4h
+; CHECK-NEXT:    uzp2 v1.4h, v0.4h, v0.4h
+; CHECK-NEXT:    fmov d0, d2
+; CHECK-NEXT:    ret
   %retval = call {<2 x half>, <2 x half>} @llvm.vector.deinterleave2.v4f16(<4 x half> %vec)
   ret {<2 x half>, <2 x half>}   %retval
 }
@@ -49,8 +40,8 @@ define {<2 x float>, <2 x float>} @vector_deinterleave_v2f32_v4f32(<4 x float> %
 ; CHECK-SD-LABEL: vector_deinterleave_v2f32_v4f32:
 ; CHECK-SD:       // %bb.0:
 ; CHECK-SD-NEXT:    mov d1, v0.d[1]
-; CHECK-SD-NEXT:    zip1 v2.2s, v0.2s, v1.2s
-; CHECK-SD-NEXT:    zip2 v1.2s, v0.2s, v1.2s
+; CHECK-SD-NEXT:    uzp1 v2.2s, v0.2s, v1.2s
+; CHECK-SD-NEXT:    uzp2 v1.2s, v0.2s, v1.2s
 ; CHECK-SD-NEXT:    fmov d0, d2
 ; CHECK-SD-NEXT:    ret
 ;
@@ -77,12 +68,19 @@ ret  {<4 x float>, <4 x float>}   %retval
 }
 
 define {<2 x double>, <2 x double>} @vector_deinterleave_v2f64_v4f64(<4 x double> %vec) {
-; CHECK-LABEL: vector_deinterleave_v2f64_v4f64:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    zip1 v2.2d, v0.2d, v1.2d
-; CHECK-NEXT:    zip2 v1.2d, v0.2d, v1.2d
-; CHECK-NEXT:    mov v0.16b, v2.16b
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: vector_deinterleave_v2f64_v4f64:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    uzp1 v2.2d, v0.2d, v1.2d
+; CHECK-SD-NEXT:    uzp2 v1.2d, v0.2d, v1.2d
+; CHECK-SD-NEXT:    mov v0.16b, v2.16b
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: vector_deinterleave_v2f64_v4f64:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    zip1 v2.2d, v0.2d, v1.2d
+; CHECK-GI-NEXT:    zip2 v1.2d, v0.2d, v1.2d
+; CHECK-GI-NEXT:    mov v0.16b, v2.16b
+; CHECK-GI-NEXT:    ret
   %retval = call {<2 x double>, <2 x double>} @llvm.vector.deinterleave2.v4f64(<4 x double> %vec)
   ret {<2 x double>, <2 x double>}   %retval
 }
@@ -123,12 +121,19 @@ define {<4 x i32>, <4 x i32>} @vector_deinterleave_v4i32_v8i32(<8 x i32> %vec) {
 }
 
 define {<2 x i64>, <2 x i64>} @vector_deinterleave_v2i64_v4i64(<4 x i64> %vec) {
-; CHECK-LABEL: vector_deinterleave_v2i64_v4i64:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    zip1 v2.2d, v0.2d, v1.2d
-; CHECK-NEXT:    zip2 v1.2d, v0.2d, v1.2d
-; CHECK-NEXT:    mov v0.16b, v2.16b
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: vector_deinterleave_v2i64_v4i64:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    uzp1 v2.2d, v0.2d, v1.2d
+; CHECK-SD-NEXT:    uzp2 v1.2d, v0.2d, v1.2d
+; CHECK-SD-NEXT:    mov v0.16b, v2.16b
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: vector_deinterleave_v2i64_v4i64:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    zip1 v2.2d, v0.2d, v1.2d
+; CHECK-GI-NEXT:    zip2 v1.2d, v0.2d, v1.2d
+; CHECK-GI-NEXT:    mov v0.16b, v2.16b
+; CHECK-GI-NEXT:    ret
   %retval = call {<2 x i64>, <2 x i64>} @llvm.vector.deinterleave2.v4i64(<4 x i64> %vec)
   ret {<2 x i64>, <2 x i64>}   %retval
 }
@@ -503,11 +508,12 @@ define {<2 x double>, <2 x double>, <2 x double>, <2 x double>, <2 x double>, <2
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    sub sp, sp, #96
 ; CHECK-NEXT:    .cfi_def_cfa_offset 96
-; CHECK-NEXT:    stp q0, q1, [sp]
-; CHECK-NEXT:    add x8, sp, #48
-; CHECK-NEXT:    mov x9, sp
-; CHECK-NEXT:    stp q2, q3, [sp, #32]
-; CHECK-NEXT:    stp q4, q5, [sp, #64]
+; CHECK-NEXT:    stp q4, q5, [sp, #16]
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    add x9, sp, #48
+; CHECK-NEXT:    str q3, [sp]
+; CHECK-NEXT:    stp q1, q2, [sp, #64]
+; CHECK-NEXT:    str q0, [sp, #48]
 ; CHECK-NEXT:    ld3 { v5.2d, v6.2d, v7.2d }, [x8]
 ; CHECK-NEXT:    ld3 { v16.2d, v17.2d, v18.2d }, [x9]
 ; CHECK-NEXT:    uzp1 v0.2d, v16.2d, v5.2d
@@ -533,11 +539,12 @@ define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @deint
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    sub sp, sp, #96
 ; CHECK-NEXT:    .cfi_def_cfa_offset 96
-; CHECK-NEXT:    stp q0, q1, [sp]
-; CHECK-NEXT:    add x8, sp, #48
-; CHECK-NEXT:    mov x9, sp
-; CHECK-NEXT:    stp q2, q3, [sp, #32]
-; CHECK-NEXT:    stp q4, q5, [sp, #64]
+; CHECK-NEXT:    stp q4, q5, [sp, #16]
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    add x9, sp, #48
+; CHECK-NEXT:    str q3, [sp]
+; CHECK-NEXT:    stp q1, q2, [sp, #64]
+; CHECK-NEXT:    str q0, [sp, #48]
 ; CHECK-NEXT:    ld3 { v5.4s, v6.4s, v7.4s }, [x8]
 ; CHECK-NEXT:    ld3 { v16.4s, v17.4s, v18.4s }, [x9]
 ; CHECK-NEXT:    uzp1 v0.4s, v16.4s, v5.4s
@@ -563,11 +570,12 @@ define {<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>} @deint
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    sub sp, sp, #48
 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
-; CHECK-NEXT:    stp d4, d5, [sp, #32]
-; CHECK-NEXT:    add x8, sp, #24
-; CHECK-NEXT:    mov x9, sp
-; CHECK-NEXT:    stp d2, d3, [sp, #16]
-; CHECK-NEXT:    stp d0, d1, [sp]
+; CHECK-NEXT:    stp d4, d5, [sp, #8]
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    add x9, sp, #24
+; CHECK-NEXT:    str d3, [sp]
+; CHECK-NEXT:    stp d1, d2, [sp, #32]
+; CHECK-NEXT:    str d0, [sp, #24]
 ; CHECK-NEXT:    ld3 { v5.2s, v6.2s, v7.2s }, [x8]
 ; CHECK-NEXT:    ld3 { v16.2s, v17.2s, v18.2s }, [x9]
 ; CHECK-NEXT:    uzp1 v0.2s, v16.2s, v5.2s
@@ -593,11 +601,12 @@ define {<8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8 x bfloat>, <8
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    sub sp, sp, #96
 ; CHECK-NEXT:    .cfi_def_cfa_offset 96
-; CHECK-NEXT:    stp q0, q1, [sp]
-; CHECK-NEXT:    add x8, sp, #48
-; CHECK-NEXT:    mov x9, sp
-; CHECK-NEXT:    stp q2, q3, [sp, #32]
-; CHECK-NEXT:    stp q4, q5, [sp, #64]
+; CHECK-NEXT:    stp q4, q5, [sp, #16]
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    add x9, sp, #48
+; CHECK-NEXT:    str q3, [sp]
+; CHECK-NEXT:    stp q1, q2, [sp, #64]
+; CHECK-NEXT:    str q0, [sp, #48]
 ; CHECK-NEXT:    ld3 { v5.8h, v6.8h, v7.8h }, [x8]
 ; CHECK-NEXT:    ld3 { v16.8h, v17.8h, v18.8h }, [x9]
 ; CHECK-NEXT:    uzp1 v0.8h, v16.8h, v5.8h
@@ -623,11 +632,12 @@ define {<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>} @deint
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    sub sp, sp, #48
 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
-; CHECK-NEXT:    stp d4, d5, [sp, #32]
-; CHECK-NEXT:    add x8, sp, #24
-; CHECK-NEXT:    mov x9, sp
-; CHECK-NEXT:    stp d2, d3, [sp, #16]
-; CHECK-NEXT:    stp d0, d1, [sp]
+; CHECK-NEXT:    stp d4, d5, [sp, #8]
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    add x9, sp, #24
+; CHECK-NEXT:    str d3, [sp]
+; CHECK-NEXT:    stp d1, d2, [sp, #32]
+; CHECK-NEXT:    str d0, [sp, #24]
 ; CHECK-NEXT:    ld3 { v5.4h, v6.4h, v7.4h }, [x8]
 ; CHECK-NEXT:    ld3 { v16.4h, v17.4h, v18.4h }, [x9]
 ; CHECK-NEXT:    uzp1 v0.4h, v16.4h, v5.4h
@@ -653,11 +663,12 @@ define {<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>} @deint
 ; CHECK:       // %bb.0:
 ; CHECK-NEXT:    sub sp, sp, #96
 ; CHECK-NEXT:    .cfi_def_cfa_offset 96
-; CHECK-NEXT:    stp q0, q1, [sp]
-; CHECK-NEXT:    add x8, sp, #48
-; CHECK-NEXT:    mov x9, sp
-; CHECK-NEXT:    stp q2, q3, [sp, #32]
-; CHECK-NEXT:    stp q4, q5, [sp, #64]
+; CHECK-NEXT:    stp q4, q5, [sp, #16]
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    add x9, sp, #48
+; CHECK-NEXT:    str q3, [sp]
+; CHECK-NEXT:    stp q1, q2, [sp, #64]
+; CHECK-NEXT:    str q0, [sp, #48]
 ; CHECK-NEXT:    ld3 { v5.16b, v6.16b, v7.16b }, [x8]
 ; CHECK-NEXT:    ld3 { v16.16b, v17.16b, v18.16b }, [x9]
 ; CHECK-NEXT:    uzp1 v0.16b, v16.16b, v5.16b
diff --git a/llvm/test/CodeGen/AArch64/fixed-vector-interleave-odd-factor.ll b/llvm/test/CodeGen/AArch64/fixed-vector-interleave-odd-factor.ll
new file mode 100644
index 0000000000000..7efb4df681687
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/fixed-vector-interleave-odd-factor.ll
@@ -0,0 +1,131 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=aarch64-none-linux-gnu %s -o - | FileCheck %s
+
+define { <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16> } @deinterleave5_v10i16(<10 x i16> %vec) {
+; CHECK-LABEL: deinterleave5_v10i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmov s1, w1
+; CHECK-NEXT:    fmov s4, w4
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    fmov s3, w3
+; CHECK-NEXT:    fmov s0, w0
+; CHECK-NEXT:    add x9, sp, #8
+; CHECK-NEXT:    fmov s2, w2
+; CHECK-NEXT:    mov v1.s[1], w6
+; CHECK-NEXT:    ld1 { v4.h }[2], [x9]
+; CHECK-NEXT:    mov v0.s[1], w5
+; CHECK-NEXT:    ld1 { v3.h }[2], [x8]
+; CHECK-NEXT:    // kill: def $d1 killed $d1 killed $q1
+; CHECK-NEXT:    // kill: def $d4 killed $d4 killed $q4
+; CHECK-NEXT:    mov v2.s[1], w7
+; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $q0
+; CHECK-NEXT:    // kill: def $d3 killed $d3 killed $q3
+; CHECK-NEXT:    // kill: def $d2 killed $d2 killed $q2
+; CHECK-NEXT:    ret
+  %result = call { <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16> } @llvm.vector.deinterleave5.v10i16(<10 x i16> %vec)
+  ret { <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16> } %result
+}
+
+define <10 x i16> @interleave5_v10i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e) {
+; CHECK-LABEL: interleave5_v10i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q2
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d3 killed $d3 def $q3
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    // kill: def $d4 killed $d4 def $q4
+; CHECK-NEXT:    adrp x9, .LCPI1_0
+; CHECK-NEXT:    mov v2.d[1], v3.d[0]
+; CHECK-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-NEXT:    uzp1 v16.4s, v0.4s, v2.4s
+; CHECK-NEXT:    uzp2 v1.4s, v0.4s, v2.4s
+; CHECK-NEXT:    mov d17, v16.d[1]
+; CHECK-NEXT:    ext v18.16b, v0.16b, v1.16b, #12
+; CHECK-NEXT:    ldr q0, [x9, :lo12:.LCPI1_0]
+; CHECK-NEXT:    mov d19, v18.d[1]
+; CHECK-NEXT:    mov v18.s[0], v4.s[0]
+; CHECK-NEXT:    mov v4.s[0], v3.s[1]
+; CHECK-NEXT:    xtn v1.4h, v4.4s
+; CHECK-NEXT:    tbl v0.16b, { v16.16b, v17.16b, v18.16b, v19.16b }, v0.16b
+; CHECK-NEXT:    str s1, [x8, #16]
+; CHECK-NEXT:    str q0, [x8]
+; CHECK-NEXT:    ret
+  %result = call <10 x i16> @llvm.vector.interleave5.v10i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e)
+  ret <10 x i16> %result
+}
+
+define { <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16> } @deinterleave7_v14i16(<14 x i16> %vec) {
+; CHECK-LABEL: deinterleave7_v14i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmov s3, w3
+; CHECK-NEXT:    fmov s2, w2
+; CHECK-NEXT:    mov x8, sp
+; CHECK-NEXT:    fmov s1, w1
+; CHECK-NEXT:    fmov s6, w6
+; CHECK-NEXT:    add x9, sp, #8
+; CHECK-NEXT:    fmov s5, w5
+; CHECK-NEXT:    fmov s4, w4
+; CHECK-NEXT:    add x10, sp, #16
+; CHECK-NEXT:    fmov s0, w0
+; CHECK-NEXT:    ld1 { v2.h }[2], [x9]
+; CHECK-NEXT:    ld1 { v3.h }[2], [x10]
+; CHECK-NEXT:    ld1 { v1.h }[2], [x8]
+; CHECK-NEXT:    add x8, sp, #24
+; CHECK-NEXT:    add x9, sp, #32
+; CHECK-NEXT:    add x10, sp, #40
+; CHECK-NEXT:    ld1 { v4.h }[2], [x8]
+; CHECK-NEXT:    ld1 { v5.h }[2], [x9]
+; CHECK-NEXT:    mov v0.s[1], w7
+; CHECK-NEXT:    ld1 { v6.h }[2], [x10]
+; CHECK-NEXT:    // kill: def $d1 killed $d1 killed $q1
+; CHECK-NEXT:    // kill: def $d2 killed $d2 killed $q2
+; CHECK-NEXT:    // kill: def $d3 killed $d3 killed $q3
+; CHECK-NEXT:    // kill: def $d4 killed $d4 killed $q4
+; CHECK-NEXT:    // kill: def $d5 killed $d5 killed $q5
+; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $q0
+; CHECK-NEXT:    // kill: def $d6 killed $d6 killed $q6
+; CHECK-NEXT:    ret
+  %result = call { <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16> } @llvm.vector.deinterleave7.v14i16(<14 x i16> %vec)
+  ret { <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16> } %result
+}
+
+define <14 x i16> @interleave7_v14i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e, <2 x i16> %f, <2 x i16> %g) {
+; CHECK-LABEL: interleave7_v14i16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d6 killed $d6 killed $q4_q5_q6 def $q4_q5_q6
+; CHECK-NEXT:    fmov d7, d5
+; CHECK-NEXT:    fmov d16, d4
+; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q2
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d3 killed $d3 def $q3
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    adrp x9, .LCPI3_1
+; CHECK-NEXT:    mov v2.d[1], v3.d[0]
+; CHECK-NEXT:    mov v0.d[1], v1.d[0]
+; CHECK-NEXT:    mov v1.d[1], v16.d[0]
+; CHECK-NEXT:    mov v16.d[1], v7.d[0]
+; CHECK-NEXT:    uzp1 v17.4s, v0.4s, v2.4s
+; CHECK-NEXT:    uzp1 v3.4s, v0.4s, v16.4s
+; CHECK-NEXT:    uzp2 v1.4s, v1.4s, v2.4s
+; CHECK-NEXT:    mov d18, v17.d[1]
+; CHECK-NEXT:    ext v19.16b, v3.16b, v0.16b, #8
+; CHECK-NEXT:    ext v0.16b, v1.16b, v1.16b, #12
+; CHECK-NEXT:    mov v2.16b, v19.16b
+; CHECK-NEXT:    mov v2.s[2], v6.s[0]
+; CHECK-NEXT:    uzp1 v4.4s, v1.4s, v0.4s
+; CHECK-NEXT:    ldr q0, [x9, :lo12:.LCPI3_1]
+; CHECK-NEXT:    adrp x9, .LCPI3_0
+; CHECK-NEXT:    ldr q1, [x9, :lo12:.LCPI3_0]
+; CHECK-NEXT:    mov d5, v4.d[1]
+; CHECK-NEXT:    mov d20, v2.d[1]
+; CHECK-NEXT:    mov v6.s[0], v7.s[1]
+; CHECK-NEXT:    tbl v1.16b, { v17.16b, v18.16b, v19.16b, v20.16b }, v1.16b
+; CHECK-NEXT:    tbl v0.16b, { v4.16b, v5.16b, v6.16b }, v0.16b
+; CHECK-NEXT:    str q1, [x8]
+; CHECK-NEXT:    mov s2, v0.s[2]
+; CHECK-NEXT:    str d0, [x8, #16]
+; CHECK-NEXT:    str s2, [x8, #24]
+; CHECK-NEXT:    ret
+  %result = call <14 x i16> @llvm.vector.interleave7.v14i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e, <2 x i16> %f, <2 x i16> %g)
+  ret <14 x i16> %result
+}
diff --git a/llvm/test/CodeGen/AArch64/fixed-vector-interleave.ll b/llvm/test/CodeGen/AArch64/fixed-vector-interleave.ll
index 2d368c0ec456f..9eaaa626642b2 100644
--- a/llvm/test/CodeGen/AArch64/fixed-vector-interleave.ll
+++ b/llvm/test/CodeGen/AArch64/fixed-vector-interleave.ll
@@ -12,22 +12,12 @@ define <4 x half> @interleave2_v4f16(<2 x half> %vec0, <2 x half> %vec1) {
 }
 
 define <8 x half> @interleave2_v8f16(<4 x half> %vec0, <4 x half> %vec1) {
-; CHECK-SD-LABEL: interleave2_v8f16:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0
-; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1
-; CHECK-SD-NEXT:    adrp x8, .LCPI1_0
-; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]
-; CHECK-SD-NEXT:    ldr q1, [x8, :lo12:.LCPI1_0]
-; CHECK-SD-NEXT:    tbl v0.16b, { v0.16b }, v1.16b
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: interleave2_v8f16:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0
-; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1
-; CHECK-GI-NEXT:    zip1 v0.8h, v0.8h, v1.8h
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: interleave2_v8f16:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    zip1 v0.8h, v0.8h, v1.8h
+; CHECK-NEXT:    ret
   %retval = call <8 x half> @llvm.vector.interleave2.v8f16(<4 x half> %vec0, <4 x half> %vec1)
   ret <8 x half> %retval
 }
@@ -44,21 +34,12 @@ define <16 x half> @interleave2_v16f16(<8 x half> %vec0, <8 x half> %vec1) {
 }
 
 define <4 x float> @interleave2_v4f32(<2 x float> %vec0, <2 x float> %vec1) {
-; CHECK-SD-LABEL: interleave2_v4f32:
-; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0
-; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 def $q1
-; CHECK-SD-NEXT:    mov v0.d[1], v1.d[0]
-; CHECK-SD-NEXT:    rev64 v1.4s, v0.4s
-; CHECK-SD-NEXT:    uzp1 v0.4s, v0.4s, v1.4s
-; CHECK-SD-NEXT:    ret
-;
-; CHECK-GI-LABEL: interleave2_v4f32:
-; CHECK-GI:       // %bb.0:
-; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0
-; CHECK-GI-NEXT:    // kill: def $d1 killed $d1 def $q1
-; CHECK-GI-NEXT:    zip1 v0.4s, v0.4s, v1.4s
-; CHECK-GI-NEXT:    ret
+; CHECK-LABEL: interleave2_v4f32:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
+; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1
+; CHECK-NEXT:    zip1 v0.4s, v0.4s, v1.4s
+; CHECK-NEXT:    ret
   %retval = call <4 x float> @llvm.vector.interleave2.v4f32(<2 x float> %vec0, <2 x float> %vec1)
   ret <4 x float> %retval
 }
@@ -149,9 +130,10 @@ define <4 x i16> @interleave2_same_const_splat_v4i16() {
 define <4 x i16> @interleave2_diff_const_splat_v4i16() {
 ; CHECK-SD-LABEL: interleave2_diff_const_splat_v4i16:
 ; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    mov x8, #1125899907104768 // =0x4000000040000
-; CHECK-SD-NEXT:    orr x8, x8, #0x300000003
-; CHECK-SD-NEXT:    fmov d0, x8
+; CHECK-SD-NEXT:    movi v0.2s, #4
+; CHECK-SD-NEXT:    movi v1.2s, #3
+; CHECK-SD-NEXT:    zip1 v0.4s, v1.4s, v0.4s
+; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
 ; CHECK-SD-NEXT:    ret
 ;
 ; CHECK-GI-LABEL: interleave2_diff_const_splat_v4i16:
@@ -184,12 +166,10 @@ define <4 x i16> @interleave2_same_nonconst_splat_v4i16(i16 %a) {
 define <4 x i16> @interleave2_diff_nonconst_splat_v4i16(i16 %a, i16 %b) {
 ; CHECK-SD-LABEL: interleave2_diff_nonconst_splat_v4i16:
 ; CHECK-SD:       // %bb.0:
-; CHECK-SD-NEXT:    fmov s0, w0
-; CHECK-SD-NEXT:    mov v0.h[1], w0
-; CHECK-SD-NEXT:    mov v0.h[2], w1
-; CHECK-SD-NEXT:    mov v0.h[3], w1
-; CHECK-SD-NEXT:    rev32 v1.4h, v0.4h
-; CHECK-SD-NEXT:    uzp1 v0.4h, v0.4h, v1.4h
+; CHECK-SD-NEXT:    dup v0.2s, w0
+; CHECK-SD-NEXT:    dup v1.2s, w1
+; CHECK-SD-NEXT:    zip1 v0.4s, v0.4s, v1.4s
+; CHECK-SD-NEXT:    xtn v0.4h, v0.4s
 ; CHECK-SD-NEXT:    ret
 ;
 ; CHECK-GI-LABEL: interleave2_diff_nonconst_splat_v4i16:
@@ -621,20 +601,21 @@ define <12 x double> @interleave6_v12f64(<2 x double> %vec0, <2 x double> %vec1,
 ; CHECK-NEXT:    .cfi_def_cfa_offset 96
 ; CHECK-NEXT:    zip1 v18.2d, v2.2d, v5.2d
 ; CHECK-NEXT:    zip2 v7.2d, v2.2d, v5.2d
-; CHECK-NEXT:    mov x9, sp
+; CHECK-NEXT:    add x9, sp, #48
 ; CHECK-NEXT:    zip1 v17.2d, v1.2d, v4.2d
 ; CHECK-NEXT:    zip2 v6.2d, v1.2d, v4.2d
 ; CHECK-NEXT:    zip1 v16.2d, v0.2d, v3.2d
 ; CHECK-NEXT:    zip2 v5.2d, v0.2d, v3.2d
 ; CHECK-NEXT:    st3 { v16.2d, v17.2d, v18.2d }, [x9]
-; CHECK-NEXT:    add x9, sp, #48
+; CHECK-NEXT:    mov x9, sp
 ; CHECK-NEXT:    st3 { v5.2d, v6.2d, v7.2d }, [x9]
-; CHECK-NEXT:    ldp q2, q0, [sp, #64]
-; CHECK-NEXT:    ldp q5, q1, [sp, #32]
-; CHECK-NEXT:    ldp q3, q4, [sp]
-; CHECK-NEXT:    stp q2, q0, [x8, #64]
+; CHECK-NEXT:    ldp q2, q0, [sp, #16]
+; CHECK-NEXT:    ldr q1, [sp]
+; CHECK-NEXT:    ldp q3, q4, [sp, #48]
+; CHECK-NEXT:    ldr q5, [sp, #80]
 ; CHECK-NEXT:    stp q5, q1, [x8, #32]
 ; CHECK-NEXT:    stp q3, q4, [x8]
+; CHECK-NEXT:    stp q2, q0, [x8, #64]
 ; CHECK-NEXT:    add sp, sp, #96
 ; CHECK-NEXT:    ret
   %retval = call <12 x double> @llvm.vector.interleave6.v12f64(<2 x double> %vec0, <2 x double> %vec1, <2 x double> %vec2, <2 x double> %vec3, <2 x double> %vec4, <2 x double> %vec5)
@@ -648,20 +629,21 @@ define <24 x i32> @interleave6_v24i32(<4 x i32> %vec0, <4 x i32> %vec1, <4 x i32
 ; CHECK-NEXT:    .cfi_def_cfa_offset 96
 ; CHECK-NEXT:    zip1 v18.4s, v2.4s, v5.4s
 ; CHECK-NEXT:    zip2 v7.4s, v2.4s, v5.4s
-; CHECK-NEXT:    mov x9, sp
+; CHECK-NEXT:    add x9, sp, #48
 ; CHECK-NEXT:    zip1 v17.4s, v1.4s, v4.4s
 ; CHECK-NEXT:    zip2 v6.4s, v1.4s, v4.4s
 ; CHECK-NEXT:    zip1 v16.4s, v0.4s, v3.4s
 ; CHECK-NEXT:    zip2 v5.4s, v0.4s, v3.4s
 ; CHECK-NEXT:    st3 { v16.4s, v17.4s, v18.4s }, [x9]
-; CHECK-NEXT:    add x9, sp, #48
+; CHECK-NEXT:    mov x9, sp
 ; CHECK-NEXT:    st3 { v5.4s, v6.4s, v7.4s }, [x9]
-; CHECK-NEXT:    ldp q2, q0, [sp, #64]
-; CHECK-NEXT:    ldp q5, q1, [sp, #32]
-; CHECK-NEXT:    ldp q3, q4, [sp]
-; CHECK-NEXT:    stp q2, q0, [x8, #64]
+; CHECK-NEXT:    ldp q2, q0, [sp, #16]
+; CHECK-NEXT:    ldr q1, [sp]
+; CHECK-NEXT:    ldp q3, q4, [sp, #48]
+; CHECK-NEXT:    ldr q5, [sp, #80]
 ; CHECK-NEXT:    stp q5, q1, [x8, #32]
 ; CHECK-NEXT:    stp q3, q4, [x8]
+; CHECK-NEXT:    stp q2, q0, [x8, #64]
 ; CHECK-NEXT:    add sp, sp, #96
 ; CHECK-NEXT:    ret
   %retval = call <24 x i32> @llvm.vector.interleave6.v24i32(<4 x i32> %vec0, <4 x i32> %vec1, <4 x i32> %vec2, <4 x i32> %vec3, <4 x i32> %vec4, <4 x i32> %vec5)
@@ -675,17 +657,18 @@ define <12 x i32> @interleave6_v12i32(<2 x i32> %vec0, <2 x i32> %vec1, <2 x i32
 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
 ; CHECK-NEXT:    zip1 v18.2s, v2.2s, v5.2s
 ; CHECK-NEXT:    zip2 v7.2s, v2.2s, v5.2s
-; CHECK-NEXT:    mov x9, sp
+; CHECK-NEXT:    add x9, sp, #24
 ; CHECK-NEXT:    zip1 v17.2s, v1.2s, v4.2s
 ; CHECK-NEXT:    zip2 v6.2s, v1.2s, v4.2s
 ; CHECK-NEXT:    zip1 v16.2s, v0.2s, v3.2s
 ; CHECK-NEXT:    zip2 v5.2s, v0.2s, v3.2s
 ; CHECK-NEXT:    st3 { v16.2s, v17.2s, v18.2s }, [x9]
-; CHECK-NEXT:    add x9, sp, #24
+; CHECK-NEXT:    mov x9, sp
 ; CHECK-NEXT:    st3 { v5.2s, v6.2s, v7.2s }, [x9]
-; CHECK-NEXT:    ldp d1, d0, [sp, #32]
-; CHECK-NEXT:    ldp d3, d2, [sp, #16]
-; CHECK-NEXT:    ldp d5, d4, [sp]
+; CHECK-NEXT:    ldp d1, d0, [sp, #8]
+; CHECK-NEXT:    ldr d2, [sp]
+; CHECK-NEXT:    ldp d4, d3, [sp, #32]
+; CHECK-NEXT:    ldr d5, [sp, #24]
 ; CHECK-NEXT:    mov v1.d[1], v0.d[0]
 ; CHECK-NEXT:    mov v3.d[1], v2.d[0]
 ; CHECK-NEXT:    mov v5.d[1], v4.d[0]
@@ -704,17 +687,18 @@ define <24 x i16> @interleave6_v24i16(<4 x i16> %vec0, <4 x i16> %vec1, <4 x i16
 ; CHECK-NEXT:    .cfi_def_cfa_offset 48
 ; CHECK-NEXT:    zip1 v18.4h, v2.4h, v5.4h
 ; CHECK-NEXT:    zip2 v7.4h, v2.4h, v5.4h
-; CHECK-NEXT:    mov x9, sp
+; CHECK-NEXT:    add x9, sp, #24
 ; CHECK-NEXT:    zip1 v17.4h, v1.4h, v4.4h
 ; CHECK-NEXT:    zip2 v6.4h, v1.4h, v4.4h
 ; CHECK-NEXT:    zip1 v16.4h, v0.4h, v3.4h
 ; CHECK-NEXT:    zip2 v5.4h, v0.4h, v3.4h
 ; CHECK-NEXT:    st3 { v16.4h, v17.4h, v18.4h }, [x9]
-; CHECK-NEXT:    add x9, sp, #24
+; CHECK-NEXT:    mov x9, sp
 ; CHECK-NEXT:    st3 { v5.4h, v6.4h, v7.4h }, [x9]
-; CHECK-NEXT:    ldp d1, d0, [sp, #32]
-; CHECK-NEXT:    ldp d3, d2, [sp, #16]
-; CHECK-NEXT:    ldp d5, d4, [sp]
+; CHECK-NEXT:    ldp d1, d0, [sp, #8]
+; CHECK-NEXT:    ldr d2, [sp]
+; CHECK-NEXT:    ldp d4, d3, [sp, #32]
+; CHECK-NEXT:    ldr d5, [sp, #24]
 ; CHECK-NEXT:    mov v1.d[1], v0.d[0]
 ; CHECK-NEXT:    mov v3.d[1], v2.d[0]
 ; CHECK-NEXT:    mov v5.d[1], v4.d[0]
diff --git a/llvm/test/CodeGen/AArch64/fixed_masked_deinterleaved_loads.ll b/llvm/test/CodeGen/AArch64/fixed_masked_deinterleaved_loads.ll
index da917119c6b25..d8ff031239b41 100644
--- a/llvm/test/CodeGen/AArch64/fixed_masked_deinterleaved_loads.ll
+++ b/llvm/test/CodeGen/AArch64/fixed_masked_deinterleaved_loads.ll
@@ -5,25 +5,17 @@
 define { <16 x i8>, <16 x i8> } @foo_ld2_v16i8(<16 x i1> %mask, ptr %p) {
 ; CHECK-LABEL: foo_ld2_v16i8:
 ; CHECK:       // %bb.0:
-; CHECK-NEXT:    zip2 v1.16b, v0.16b, v0.16b
 ; CHECK-NEXT:    zip1 v0.16b, v0.16b, v0.16b
 ; CHECK-NEXT:    adrp x8, .LCPI0_0
-; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI0_0]
-; CHECK-NEXT:    shl v1.16b, v1.16b, #7
+; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI0_0]
 ; CHECK-NEXT:    shl v0.16b, v0.16b, #7
-; CHECK-NEXT:    cmlt v1.16b, v1.16b, #0
 ; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0
-; CHECK-NEXT:    and v1.16b, v1.16b, v2.16b
-; CHECK-NEXT:    and v0.16b, v0.16b, v2.16b
-; CHECK-NEXT:    addp v1.16b, v1.16b, v1.16b
+; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b
 ; CHECK-NEXT:    addp v0.16b, v0.16b, v0.16b
-; CHECK-NEXT:    addp v1.16b, v1.16b, v1.16b
 ; CHECK-NEXT:    addp v0.16b, v0.16b, v0.16b
-; CHECK-NEXT:    addp v1.16b, v1.16b, v1.16b
 ; CHECK-NEXT:    addp v0.16b, v0.16b, v0.16b
-; CHECK-NEXT:    umov w9, v1.h[0]
 ; CHECK-NEXT:    umov w8, v0.h[0]
-; CHECK-NEXT:    bfi w8, w9, #16, #16
+; CHECK-NEXT:    bfi w8, w8, #16, #16
 ; CHECK-NEXT:    tbz w8, #0, .LBB0_2
 ; CHECK-NEXT:  // %bb.1: // %cond.load
 ; CHECK-NEXT:    ldr b1, [x0]
@@ -349,10 +341,11 @@ define { <8 x i16>, <8 x i16> } @foo_ld2_v8i16(<8 x i1> %mask, ptr %p) {
 define { <4 x float>, <4 x float> } @foo_ld2_v4f32(<4 x i1> %mask, ptr %p) {
 ; CHECK-LABEL: foo_ld2_v4f32:
 ; CHECK:       // %bb.0:
-; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v0.8b
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
 ; CHECK-NEXT:    adrp x8, .LCPI2_0
+; CHECK-NEXT:    zip1 v0.8h, v0.8h, v0.8h
 ; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI2_0]
-; CHECK-NEXT:    zip1 v0.8b, v0.8b, v0.8b
+; CHECK-NEXT:    xtn v0.8b, v0.8h
 ; CHECK-NEXT:    shl v0.8b, v0.8b, #7
 ; CHECK-NEXT:    cmlt v0.8b, v0.8b, #0
 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
@@ -419,10 +412,11 @@ define { <4 x float>, <4 x float> } @foo_ld2_v4f32(<4 x i1> %mask, ptr %p) {
 define { <2 x double>, <2 x double> } @foo_ld2_v2f64(<2 x i1> %mask, ptr %p) {
 ; CHECK-LABEL: foo_ld2_v2f64:
 ; CHECK:       // %bb.0:
-; CHECK-NEXT:    uzp1 v0.4h, v0.4h, v0.4h
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
 ; CHECK-NEXT:    adrp x8, .LCPI3_0
+; CHECK-NEXT:    zip1 v0.4s, v0.4s, v0.4s
 ; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI3_0]
-; CHECK-NEXT:    zip1 v0.4h, v0.4h, v0.4h
+; CHECK-NEXT:    xtn v0.4h, v0.4s
 ; CHECK-NEXT:    shl v0.4h, v0.4h, #15
 ; CHECK-NEXT:    cmlt v0.4h, v0.4h, #0
 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
@@ -453,8 +447,8 @@ define { <2 x double>, <2 x double> } @foo_ld2_v2f64(<2 x i1> %mask, ptr %p) {
 ; CHECK-NEXT:    add x8, x0, #24
 ; CHECK-NEXT:    ld1 { v2.d }[1], [x8]
 ; CHECK-NEXT:  .LBB3_8: // %else8
-; CHECK-NEXT:    zip1 v0.2d, v1.2d, v2.2d
-; CHECK-NEXT:    zip2 v1.2d, v1.2d, v2.2d
+; CHECK-NEXT:    uzp1 v0.2d, v1.2d, v2.2d
+; CHECK-NEXT:    uzp2 v1.2d, v1.2d, v2.2d
 ; CHECK-NEXT:    ret
   %interleaved.mask = call <4 x i1> @llvm.vector.interleave2.v4i1(<2 x i1> %mask, <2 x i1> %mask)
   %wide.masked.vec = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %p, i32 8, <4 x i1> %interleaved.mask, <4 x double> poison)
diff --git a/llvm/test/CodeGen/AArch64/fixed_masked_interleaved_stores.ll b/llvm/test/CodeGen/AArch64/fixed_masked_interleaved_stores.ll
index 972be0fca2089..5155be8cfed0d 100644
--- a/llvm/test/CodeGen/AArch64/fixed_masked_interleaved_stores.ll
+++ b/llvm/test/CodeGen/AArch64/fixed_masked_interleaved_stores.ll
@@ -5,26 +5,18 @@
 define void @foo_st2_v16i8(<16 x i1> %mask, <16 x i8> %val1, <16 x i8> %val2, ptr %p) {
 ; CHECK-LABEL: foo_st2_v16i8:
 ; CHECK:       // %bb.0:
-; CHECK-NEXT:    zip2 v3.16b, v0.16b, v0.16b
 ; CHECK-NEXT:    zip1 v0.16b, v0.16b, v0.16b
 ; CHECK-NEXT:    adrp x8, .LCPI0_0
-; CHECK-NEXT:    ldr q4, [x8, :lo12:.LCPI0_0]
-; CHECK-NEXT:    shl v3.16b, v3.16b, #7
+; CHECK-NEXT:    ldr q3, [x8, :lo12:.LCPI0_0]
 ; CHECK-NEXT:    shl v0.16b, v0.16b, #7
-; CHECK-NEXT:    cmlt v3.16b, v3.16b, #0
 ; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0
-; CHECK-NEXT:    and v3.16b, v3.16b, v4.16b
-; CHECK-NEXT:    and v0.16b, v0.16b, v4.16b
-; CHECK-NEXT:    addp v3.16b, v3.16b, v3.16b
+; CHECK-NEXT:    and v0.16b, v0.16b, v3.16b
 ; CHECK-NEXT:    addp v0.16b, v0.16b, v0.16b
-; CHECK-NEXT:    addp v3.16b, v3.16b, v3.16b
 ; CHECK-NEXT:    addp v0.16b, v0.16b, v0.16b
-; CHECK-NEXT:    addp v3.16b, v3.16b, v3.16b
 ; CHECK-NEXT:    addp v0.16b, v0.16b, v0.16b
-; CHECK-NEXT:    umov w9, v3.h[0]
 ; CHECK-NEXT:    umov w8, v0.h[0]
 ; CHECK-NEXT:    zip1 v0.16b, v1.16b, v2.16b
-; CHECK-NEXT:    bfi w8, w9, #16, #16
+; CHECK-NEXT:    bfi w8, w8, #16, #16
 ; CHECK-NEXT:    tbnz w8, #0, .LBB0_33
 ; CHECK-NEXT:  // %bb.1: // %else
 ; CHECK-NEXT:    tbnz w8, #1, .LBB0_34
@@ -345,10 +337,11 @@ define void @foo_st2_v8i16(<8 x i1> %mask, <8 x i16> %val1, <8 x i16> %val2, ptr
 define void @foo_st2_v4i32(<4 x i1> %mask, <4 x i32> %val1, <4 x i32> %val2, ptr %p) {
 ; CHECK-LABEL: foo_st2_v4i32:
 ; CHECK:       // %bb.0:
-; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v0.8b
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
 ; CHECK-NEXT:    adrp x8, .LCPI2_0
+; CHECK-NEXT:    zip1 v0.8h, v0.8h, v0.8h
 ; CHECK-NEXT:    ldr d3, [x8, :lo12:.LCPI2_0]
-; CHECK-NEXT:    zip1 v0.8b, v0.8b, v0.8b
+; CHECK-NEXT:    xtn v0.8b, v0.8h
 ; CHECK-NEXT:    shl v0.8b, v0.8b, #7
 ; CHECK-NEXT:    cmlt v0.8b, v0.8b, #0
 ; CHECK-NEXT:    and v0.8b, v0.8b, v3.8b
@@ -413,10 +406,11 @@ define void @foo_st2_v4i32(<4 x i1> %mask, <4 x i32> %val1, <4 x i32> %val2, ptr
 define void @foo_st2_v2i64(<2 x i1> %mask, <2 x i64> %val1, <2 x i64> %val2, ptr %p) {
 ; CHECK-LABEL: foo_st2_v2i64:
 ; CHECK:       // %bb.0:
-; CHECK-NEXT:    uzp1 v0.4h, v0.4h, v0.4h
+; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0
 ; CHECK-NEXT:    adrp x8, .LCPI3_0
+; CHECK-NEXT:    zip1 v0.4s, v0.4s, v0.4s
 ; CHECK-NEXT:    ldr d3, [x8, :lo12:.LCPI3_0]
-; CHECK-NEXT:    zip1 v0.4h, v0.4h, v0.4h
+; CHECK-NEXT:    xtn v0.4h, v0.4s
 ; CHECK-NEXT:    shl v0.4h, v0.4h, #15
 ; CHECK-NEXT:    cmlt v0.4h, v0.4h, #0
 ; CHECK-NEXT:    and v0.8b, v0.8b, v3.8b
diff --git a/llvm/test/CodeGen/AArch64/sve-vector-deinterleave.ll b/llvm/test/CodeGen/AArch64/sve-vector-deinterleave.ll
index f0d4e86752dec..3804f45aac808 100644
--- a/llvm/test/CodeGen/AArch64/sve-vector-deinterleave.ll
+++ b/llvm/test/CodeGen/AArch64/sve-vector-deinterleave.ll
@@ -846,14 +846,14 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; SVE-NEXT:    .cfi_escape 0x0f, 0x09, 0x8f, 0x10, 0x92, 0x2e, 0x00, 0x11, 0x30, 0x1e, 0x22 // sp + 16 + 48 * VG
 ; SVE-NEXT:    .cfi_offset w29, -16
 ; SVE-NEXT:    ptrue p0.d
-; SVE-NEXT:    str z5, [sp, #5, mul vl]
-; SVE-NEXT:    str z4, [sp, #4, mul vl]
-; SVE-NEXT:    str z3, [sp, #3, mul vl]
-; SVE-NEXT:    str z2, [sp, #2, mul vl]
-; SVE-NEXT:    str z1, [sp, #1, mul vl]
-; SVE-NEXT:    str z0, [sp]
-; SVE-NEXT:    ld3d { z5.d - z7.d }, p0/z, [sp, #3, mul vl]
-; SVE-NEXT:    ld3d { z24.d - z26.d }, p0/z, [sp]
+; SVE-NEXT:    str z5, [sp, #2, mul vl]
+; SVE-NEXT:    str z4, [sp, #1, mul vl]
+; SVE-NEXT:    str z3, [sp]
+; SVE-NEXT:    str z2, [sp, #5, mul vl]
+; SVE-NEXT:    str z1, [sp, #4, mul vl]
+; SVE-NEXT:    str z0, [sp, #3, mul vl]
+; SVE-NEXT:    ld3d { z5.d - z7.d }, p0/z, [sp]
+; SVE-NEXT:    ld3d { z24.d - z26.d }, p0/z, [sp, #3, mul vl]
 ; SVE-NEXT:    uzp1 z0.d, z24.d, z5.d
 ; SVE-NEXT:    uzp1 z1.d, z25.d, z6.d
 ; SVE-NEXT:    uzp1 z2.d, z26.d, z7.d
@@ -871,14 +871,14 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; SME2-NEXT:    .cfi_escape 0x0f, 0x09, 0x8f, 0x10, 0x92, 0x2e, 0x00, 0x11, 0x30, 0x1e, 0x22 // sp + 16 + 48 * VG
 ; SME2-NEXT:    .cfi_offset w29, -16
 ; SME2-NEXT:    ptrue p0.d
-; SME2-NEXT:    str z5, [sp, #5, mul vl]
-; SME2-NEXT:    str z4, [sp, #4, mul vl]
-; SME2-NEXT:    str z3, [sp, #3, mul vl]
-; SME2-NEXT:    str z2, [sp, #2, mul vl]
-; SME2-NEXT:    str z1, [sp, #1, mul vl]
-; SME2-NEXT:    str z0, [sp]
-; SME2-NEXT:    ld3d { z3.d - z5.d }, p0/z, [sp, #3, mul vl]
-; SME2-NEXT:    ld3d { z24.d - z26.d }, p0/z, [sp]
+; SME2-NEXT:    str z5, [sp, #2, mul vl]
+; SME2-NEXT:    str z4, [sp, #1, mul vl]
+; SME2-NEXT:    str z3, [sp]
+; SME2-NEXT:    str z2, [sp, #5, mul vl]
+; SME2-NEXT:    str z1, [sp, #4, mul vl]
+; SME2-NEXT:    str z0, [sp, #3, mul vl]
+; SME2-NEXT:    ld3d { z3.d - z5.d }, p0/z, [sp]
+; SME2-NEXT:    ld3d { z24.d - z26.d }, p0/z, [sp, #3, mul vl]
 ; SME2-NEXT:    uzp { z2.d, z3.d }, z24.d, z3.d
 ; SME2-NEXT:    uzp { z6.d, z7.d }, z25.d, z4.d
 ; SME2-NEXT:    uzp { z4.d, z5.d }, z26.d, z5.d
diff --git a/llvm/test/CodeGen/AArch64/sve-vector-interleave.ll b/llvm/test/CodeGen/AArch64/sve-vector-interleave.ll
index 81a0cc242fc11..f7897701d0db9 100644
--- a/llvm/test/CodeGen/AArch64/sve-vector-interleave.ll
+++ b/llvm/test/CodeGen/AArch64/sve-vector-interleave.ll
@@ -849,14 +849,14 @@ define <vscale x 12 x i64> @interleave6_nxv12i64(<vscale x 2 x i64> %vec0, <vsca
 ; SVE-NEXT:    zip2 z1.d, z1.d, z4.d
 ; SVE-NEXT:    zip2 z0.d, z0.d, z3.d
 ; SVE-NEXT:    ptrue p0.d
-; SVE-NEXT:    st3d { z24.d - z26.d }, p0, [sp]
-; SVE-NEXT:    st3d { z0.d - z2.d }, p0, [sp, #3, mul vl]
-; SVE-NEXT:    ldr z0, [sp]
-; SVE-NEXT:    ldr z1, [sp, #1, mul vl]
-; SVE-NEXT:    ldr z2, [sp, #2, mul vl]
-; SVE-NEXT:    ldr z3, [sp, #3, mul vl]
-; SVE-NEXT:    ldr z4, [sp, #4, mul vl]
-; SVE-NEXT:    ldr z5, [sp, #5, mul vl]
+; SVE-NEXT:    st3d { z24.d - z26.d }, p0, [sp, #3, mul vl]
+; SVE-NEXT:    st3d { z0.d - z2.d }, p0, [sp]
+; SVE-NEXT:    ldr z0, [sp, #3, mul vl]
+; SVE-NEXT:    ldr z1, [sp, #4, mul vl]
+; SVE-NEXT:    ldr z2, [sp, #5, mul vl]
+; SVE-NEXT:    ldr z3, [sp]
+; SVE-NEXT:    ldr z4, [sp, #1, mul vl]
+; SVE-NEXT:    ldr z5, [sp, #2, mul vl]
 ; SVE-NEXT:    addvl sp, sp, #6
 ; SVE-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
 ; SVE-NEXT:    ret
@@ -875,14 +875,14 @@ define <vscale x 12 x i64> @interleave6_nxv12i64(<vscale x 2 x i64> %vec0, <vsca
 ; SME2-NEXT:    mov z2.d, z25.d
 ; SME2-NEXT:    mov z3.d, z7.d
 ; SME2-NEXT:    ptrue p0.d
-; SME2-NEXT:    st3d { z4.d - z6.d }, p0, [sp]
-; SME2-NEXT:    st3d { z1.d - z3.d }, p0, [sp, #3, mul vl]
-; SME2-NEXT:    ldr z0, [sp]
-; SME2-NEXT:    ldr z1, [sp, #1, mul vl]
-; SME2-NEXT:    ldr z2, [sp, #2, mul vl]
-; SME2-NEXT:    ldr z3, [sp, #3, mul vl]
-; SME2-NEXT:    ldr z4, [sp, #4, mul vl]
-; SME2-NEXT:    ldr z5, [sp, #5, mul vl]
+; SME2-NEXT:    st3d { z4.d - z6.d }, p0, [sp, #3, mul vl]
+; SME2-NEXT:    st3d { z1.d - z3.d }, p0, [sp]
+; SME2-NEXT:    ldr z0, [sp, #3, mul vl]
+; SME2-NEXT:    ldr z1, [sp, #4, mul vl]
+; SME2-NEXT:    ldr z2, [sp, #5, mul vl]
+; SME2-NEXT:    ldr z3, [sp]
+; SME2-NEXT:    ldr z4, [sp, #1, mul vl]
+; SME2-NEXT:    ldr z5, [sp, #2, mul vl]
 ; SME2-NEXT:    addvl sp, sp, #6
 ; SME2-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload
 ; SME2-NEXT:    ret
diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-deinterleave-load.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-deinterleave-load.ll
index ffc9067a78604..0cd494c2f57f5 100644
--- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-deinterleave-load.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-deinterleave-load.ll
@@ -9,6 +9,8 @@
 define {<16 x i1>, <16 x i1>} @vector_deinterleave_load_v16i1_v32i1(ptr %p) {
 ; CHECK-LABEL: vector_deinterleave_load_v16i1_v32i1:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
 ; CHECK-NEXT:    li a1, 32
 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
 ; CHECK-NEXT:    vlm.v v0, (a0)
@@ -17,19 +19,17 @@ define {<16 x i1>, <16 x i1>} @vector_deinterleave_load_v16i1_v32i1(ptr %p) {
 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
 ; CHECK-NEXT:    vslidedown.vi v0, v0, 2
-; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v9, 0
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
-; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; CHECK-NEXT:    vnsrl.wi v9, v9, 8
-; CHECK-NEXT:    vnsrl.wi v11, v8, 0
-; CHECK-NEXT:    vnsrl.wi v8, v8, 8
-; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v11, 8
-; CHECK-NEXT:    vslideup.vi v9, v8, 8
-; CHECK-NEXT:    vmsne.vi v0, v10, 0
+; CHECK-NEXT:    vse8.v v9, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse8.v v8, (a1)
+; CHECK-NEXT:    vlseg2e8.v v8, (a0)
+; CHECK-NEXT:    vmsne.vi v0, v8, 0
 ; CHECK-NEXT:    vmsne.vi v8, v9, 0
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
   %vec = load <32 x i1>, ptr %p
   %deinterleaved.results = call {<16 x i1>, <16 x i1>} @llvm.vector.deinterleave2.v32i1(<32 x i1> %vec)
@@ -59,12 +59,21 @@ define {<16 x i8>, <16 x i8>} @vector_deinterleave_load_v16i8_v32i8(ptr %p) {
 define {<8 x i16>, <8 x i16>} @vector_deinterleave_load_v8i16_v16i16_align1(ptr %p) {
 ; CHECK-LABEL: vector_deinterleave_load_v8i16_v16i16_align1:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
 ; CHECK-NEXT:    li a1, 32
 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
-; CHECK-NEXT:    vle8.v v10, (a0)
+; CHECK-NEXT:    vle8.v v8, (a0)
+; CHECK-NEXT:    vsetivli zero, 8, e16, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 8
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vnsrl.wi v8, v10, 0
-; CHECK-NEXT:    vnsrl.wi v9, v10, 16
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse16.v v10, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
   %vec = load <16 x i16>, ptr %p, align 1
   %deinterleaved.results = call {<8 x i16>, <8 x i16>} @llvm.vector.deinterleave2.v16i16(<16 x i16> %vec)
diff --git a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-interleave-store.ll b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-interleave-store.ll
index a5971fb1f0310..b237d323a10f9 100644
--- a/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-interleave-store.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-interleave-store.ll
@@ -9,20 +9,24 @@
 define void @vector_interleave_store_v32i1_v16i1(<16 x i1> %a, <16 x i1> %b, ptr %p) {
 ; CHECK-LABEL: vector_interleave_store_v32i1_v16i1:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-NEXT:    vmv1r.v v9, v0
+; CHECK-NEXT:    vmv.v.i v10, 0
+; CHECK-NEXT:    vmv1r.v v0, v8
+; CHECK-NEXT:    vmerge.vim v11, v10, 1, v0
+; CHECK-NEXT:    vmv1r.v v0, v9
+; CHECK-NEXT:    vmerge.vim v10, v10, 1, v0
+; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vwaddu.vv v8, v10, v11
+; CHECK-NEXT:    li a1, -1
+; CHECK-NEXT:    vwmaccu.vx v8, a1, v11
+; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-NEXT:    vmsne.vi v9, v9, 0
+; CHECK-NEXT:    vmsne.vi v8, v8, 0
 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
-; CHECK-NEXT:    vslideup.vi v0, v8, 2
+; CHECK-NEXT:    vslideup.vi v8, v9, 2
 ; CHECK-NEXT:    li a1, 32
 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
-; CHECK-NEXT:    vmv.v.i v8, 0
-; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
-; CHECK-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
-; CHECK-NEXT:    vslidedown.vi v10, v8, 16
-; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT:    vwaddu.vv v12, v8, v10
-; CHECK-NEXT:    li a2, -1
-; CHECK-NEXT:    vwmaccu.vx v12, a2, v10
-; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
-; CHECK-NEXT:    vmsne.vi v8, v12, 0
 ; CHECK-NEXT:    vsm.v v8, (a0)
 ; CHECK-NEXT:    ret
   %res = call <32 x i1> @llvm.vector.interleave2.v32i1(<16 x i1> %a, <16 x i1> %b)
@@ -34,10 +38,13 @@ define void @vector_interleave_store_v32i1_v16i1(<16 x i1> %a, <16 x i1> %b, ptr
 define void @vector_interleave_store_v16i16_v8i16_align1(<8 x i16> %a, <8 x i16> %b, ptr %p) {
 ; CHECK-LABEL: vector_interleave_store_v16i16_v8i16_align1:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vwaddu.vv v10, v8, v9
 ; CHECK-NEXT:    li a1, -1
 ; CHECK-NEXT:    vwmaccu.vx v10, a1, v9
+; CHECK-NEXT:    vmv1r.v v8, v11
+; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v10, v8, 8
 ; CHECK-NEXT:    li a1, 32
 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
 ; CHECK-NEXT:    vse8.v v10, (a0)
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-fixed.ll b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-fixed.ll
index bce071e988f0e..8cc5555dddb0f 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-fixed.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-fixed.ll
@@ -8,24 +8,24 @@
 define {<16 x i1>, <16 x i1>} @vector_deinterleave_v16i1_v32i1(<32 x i1> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v16i1_v32i1:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
 ; CHECK-NEXT:    vmv.v.i v8, 0
 ; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0
 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
 ; CHECK-NEXT:    vslidedown.vi v0, v0, 2
-; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v9, 0
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
 ; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
-; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; CHECK-NEXT:    vnsrl.wi v9, v9, 8
-; CHECK-NEXT:    vnsrl.wi v11, v8, 0
-; CHECK-NEXT:    vnsrl.wi v8, v8, 8
-; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v11, 8
-; CHECK-NEXT:    vslideup.vi v9, v8, 8
-; CHECK-NEXT:    vmsne.vi v0, v10, 0
+; CHECK-NEXT:    vse8.v v9, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse8.v v8, (a1)
+; CHECK-NEXT:    vlseg2e8.v v8, (a0)
+; CHECK-NEXT:    vmsne.vi v0, v8, 0
 ; CHECK-NEXT:    vmsne.vi v8, v9, 0
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<16 x i1>, <16 x i1>} @llvm.vector.deinterleave2.v32i1(<32 x i1> %vec)
 ret {<16 x i1>, <16 x i1>} %retval
@@ -34,11 +34,18 @@ ret {<16 x i1>, <16 x i1>} %retval
 define {<16 x i8>, <16 x i8>} @vector_deinterleave_v16i8_v32i8(<32 x i8> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v16i8_v32i8:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 16
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v11, v8, 8
-; CHECK-NEXT:    vmv.v.v v8, v10
-; CHECK-NEXT:    vmv.v.v v9, v11
+; CHECK-NEXT:    vse8.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse8.v v10, (a1)
+; CHECK-NEXT:    vlseg2e8.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<16 x i8>, <16 x i8>} @llvm.vector.deinterleave2.v32i8(<32 x i8> %vec)
 ret {<16 x i8>, <16 x i8>} %retval
@@ -47,11 +54,18 @@ ret {<16 x i8>, <16 x i8>} %retval
 define {<8 x i16>, <8 x i16>} @vector_deinterleave_v8i16_v16i16(<16 x i16> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v8i16_v16i16:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 8, e16, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 8
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v11, v8, 16
-; CHECK-NEXT:    vmv.v.v v8, v10
-; CHECK-NEXT:    vmv.v.v v9, v11
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse16.v v10, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<8 x i16>, <8 x i16>} @llvm.vector.deinterleave2.v16i16(<16 x i16> %vec)
 ret {<8 x i16>, <8 x i16>} %retval
@@ -60,120 +74,220 @@ ret {<8 x i16>, <8 x i16>} %retval
 define {<4 x i32>, <4 x i32>} @vector_deinterleave_v4i32_vv8i32(<8 x i32> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v4i32_vv8i32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    li a0, 32
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 4
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; CHECK-NEXT:    vnsrl.wx v10, v8, a0
-; CHECK-NEXT:    vnsrl.wi v11, v8, 0
-; CHECK-NEXT:    vmv.v.v v8, v11
-; CHECK-NEXT:    vmv.v.v v9, v10
+; CHECK-NEXT:    vse32.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse32.v v10, (a1)
+; CHECK-NEXT:    vlseg2e32.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<4 x i32>, <4 x i32>} @llvm.vector.deinterleave2.v8i32(<8 x i32> %vec)
 ret {<4 x i32>, <4 x i32>} %retval
 }
 
 define {<2 x i64>, <2 x i64>} @vector_deinterleave_v2i64_v4i64(<4 x i64> %vec) {
-; V-LABEL: vector_deinterleave_v2i64_v4i64:
-; V:       # %bb.0:
-; V-NEXT:    vsetivli zero, 2, e64, m2, ta, ma
-; V-NEXT:    vslidedown.vi v10, v8, 2
-; V-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
-; V-NEXT:    vmv.v.i v0, 1
-; V-NEXT:    vmv1r.v v9, v10
-; V-NEXT:    vslidedown.vi v9, v8, 1, v0.t
-; V-NEXT:    vslideup.vi v8, v10, 1
-; V-NEXT:    ret
-;
-; ZVZIP-LABEL: vector_deinterleave_v2i64_v4i64:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
-; ZVZIP-NEXT:    vunzipe.v v10, v8
-; ZVZIP-NEXT:    vunzipo.v v11, v8
-; ZVZIP-NEXT:    vmv.v.v v8, v10
-; ZVZIP-NEXT:    vmv.v.v v9, v11
-; ZVZIP-NEXT:    ret
+; CHECK-LABEL: vector_deinterleave_v2i64_v4i64:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 2, e64, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 2
+; CHECK-NEXT:    mv a0, sp
+; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
+; CHECK-NEXT:    vse64.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse64.v v10, (a1)
+; CHECK-NEXT:    vlseg2e64.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
+; CHECK-NEXT:    ret
 %retval = call {<2 x i64>, <2 x i64>} @llvm.vector.deinterleave2.v4i64(<4 x i64> %vec)
 ret {<2 x i64>, <2 x i64>} %retval
 }
 
 define {<4 x i64>, <4 x i64>} @vector_deinterleave_v4i64_v8i64(<8 x i64> %vec) {
-; V-LABEL: vector_deinterleave_v4i64_v8i64:
-; V:       # %bb.0:
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v0, 8
-; V-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
-; V-NEXT:    vslidedown.vi v16, v8, 4
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; V-NEXT:    vslideup.vi v12, v16, 2
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v10, 2
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
-; V-NEXT:    vslideup.vi v12, v16, 1, v0.t
-; V-NEXT:    vmv2r.v v14, v8
-; V-NEXT:    vmv1r.v v0, v10
-; V-NEXT:    vslidedown.vi v14, v8, 1, v0.t
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v11, 12
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
-; V-NEXT:    vslidedown.vi v18, v8, 1
-; V-NEXT:    vmv1r.v v0, v11
-; V-NEXT:    vmerge.vvm v12, v14, v12, v0
-; V-NEXT:    vmv1r.v v0, v10
-; V-NEXT:    vslidedown.vi v18, v8, 2, v0.t
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v0, 4
-; V-NEXT:    vmv2r.v v8, v16
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
-; V-NEXT:    vslideup.vi v8, v16, 1, v0.t
-; V-NEXT:    vmv1r.v v0, v11
-; V-NEXT:    vmerge.vvm v10, v18, v8, v0
-; V-NEXT:    vmv2r.v v8, v12
-; V-NEXT:    ret
+; RV32-LABEL: vector_deinterleave_v4i64_v8i64:
+; RV32:       # %bb.0:
+; RV32-NEXT:    addi sp, sp, -96
+; RV32-NEXT:    .cfi_def_cfa_offset 96
+; RV32-NEXT:    sw ra, 92(sp) # 4-byte Folded Spill
+; RV32-NEXT:    sw s0, 88(sp) # 4-byte Folded Spill
+; RV32-NEXT:    .cfi_offset ra, -4
+; RV32-NEXT:    .cfi_offset s0, -8
+; RV32-NEXT:    addi s0, sp, 96
+; RV32-NEXT:    .cfi_def_cfa s0, 0
+; RV32-NEXT:    andi sp, sp, -32
+; RV32-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
+; RV32-NEXT:    vslidedown.vi v12, v8, 4
+; RV32-NEXT:    mv a0, sp
+; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; RV32-NEXT:    vse64.v v8, (a0)
+; RV32-NEXT:    addi a1, sp, 32
+; RV32-NEXT:    vse64.v v12, (a1)
+; RV32-NEXT:    vlseg2e64.v v8, (a0)
+; RV32-NEXT:    addi sp, s0, -96
+; RV32-NEXT:    .cfi_def_cfa sp, 96
+; RV32-NEXT:    lw ra, 92(sp) # 4-byte Folded Reload
+; RV32-NEXT:    lw s0, 88(sp) # 4-byte Folded Reload
+; RV32-NEXT:    .cfi_restore ra
+; RV32-NEXT:    .cfi_restore s0
+; RV32-NEXT:    addi sp, sp, 96
+; RV32-NEXT:    .cfi_def_cfa_offset 0
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: vector_deinterleave_v4i64_v8i64:
+; RV64:       # %bb.0:
+; RV64-NEXT:    addi sp, sp, -96
+; RV64-NEXT:    .cfi_def_cfa_offset 96
+; RV64-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
+; RV64-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
+; RV64-NEXT:    .cfi_offset ra, -8
+; RV64-NEXT:    .cfi_offset s0, -16
+; RV64-NEXT:    addi s0, sp, 96
+; RV64-NEXT:    .cfi_def_cfa s0, 0
+; RV64-NEXT:    andi sp, sp, -32
+; RV64-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
+; RV64-NEXT:    vslidedown.vi v12, v8, 4
+; RV64-NEXT:    mv a0, sp
+; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; RV64-NEXT:    vse64.v v8, (a0)
+; RV64-NEXT:    addi a1, sp, 32
+; RV64-NEXT:    vse64.v v12, (a1)
+; RV64-NEXT:    vlseg2e64.v v8, (a0)
+; RV64-NEXT:    addi sp, s0, -96
+; RV64-NEXT:    .cfi_def_cfa sp, 96
+; RV64-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
+; RV64-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
+; RV64-NEXT:    .cfi_restore ra
+; RV64-NEXT:    .cfi_restore s0
+; RV64-NEXT:    addi sp, sp, 96
+; RV64-NEXT:    .cfi_def_cfa_offset 0
+; RV64-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_deinterleave_v4i64_v8i64:
 ; ZVZIP:       # %bb.0:
+; ZVZIP-NEXT:    addi sp, sp, -96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 96
+; ZVZIP-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    .cfi_offset ra, -8
+; ZVZIP-NEXT:    .cfi_offset s0, -16
+; ZVZIP-NEXT:    addi s0, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa s0, 0
+; ZVZIP-NEXT:    andi sp, sp, -32
+; ZVZIP-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
+; ZVZIP-NEXT:    vslidedown.vi v12, v8, 4
+; ZVZIP-NEXT:    mv a0, sp
 ; ZVZIP-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; ZVZIP-NEXT:    vunzipe.v v12, v8
-; ZVZIP-NEXT:    vunzipo.v v14, v8
-; ZVZIP-NEXT:    vmv.v.v v8, v12
-; ZVZIP-NEXT:    vmv.v.v v10, v14
+; ZVZIP-NEXT:    vse64.v v8, (a0)
+; ZVZIP-NEXT:    addi a1, sp, 32
+; ZVZIP-NEXT:    vse64.v v12, (a1)
+; ZVZIP-NEXT:    vlseg2e64.v v8, (a0)
+; ZVZIP-NEXT:    addi sp, s0, -96
+; ZVZIP-NEXT:    .cfi_def_cfa sp, 96
+; ZVZIP-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    .cfi_restore ra
+; ZVZIP-NEXT:    .cfi_restore s0
+; ZVZIP-NEXT:    addi sp, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 0
 ; ZVZIP-NEXT:    ret
   %retval = call {<4 x i64>, <4 x i64>} @llvm.vector.deinterleave2.v8i64(<8 x i64> %vec)
   ret {<4 x i64>, <4 x i64>} %retval
 }
 
 define {<8 x i64>, <8 x i64>} @vector_deinterleave_v8i64_v16i64(<16 x i64> %vec) {
-; V-LABEL: vector_deinterleave_v8i64_v16i64:
-; V:       # %bb.0:
-; V-NEXT:    li a0, 85
-; V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
-; V-NEXT:    vmv.s.x v20, a0
-; V-NEXT:    vcompress.vm v16, v8, v20
-; V-NEXT:    vsetivli zero, 8, e64, m8, ta, ma
-; V-NEXT:    vslidedown.vi v24, v8, 8
-; V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; V-NEXT:    vid.v v12
-; V-NEXT:    vadd.vv v20, v12, v12
-; V-NEXT:    vmv.v.i v0, -16
-; V-NEXT:    vadd.vi v12, v20, -8
-; V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
-; V-NEXT:    vrgatherei16.vv v16, v24, v12, v0.t
-; V-NEXT:    li a0, 170
-; V-NEXT:    vmv.s.x v21, a0
-; V-NEXT:    vcompress.vm v12, v8, v21
-; V-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
-; V-NEXT:    vadd.vi v8, v20, -7
-; V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
-; V-NEXT:    vrgatherei16.vv v12, v24, v8, v0.t
-; V-NEXT:    vmv.v.v v8, v16
-; V-NEXT:    ret
+; RV32-LABEL: vector_deinterleave_v8i64_v16i64:
+; RV32:       # %bb.0:
+; RV32-NEXT:    addi sp, sp, -192
+; RV32-NEXT:    .cfi_def_cfa_offset 192
+; RV32-NEXT:    sw ra, 188(sp) # 4-byte Folded Spill
+; RV32-NEXT:    sw s0, 184(sp) # 4-byte Folded Spill
+; RV32-NEXT:    .cfi_offset ra, -4
+; RV32-NEXT:    .cfi_offset s0, -8
+; RV32-NEXT:    addi s0, sp, 192
+; RV32-NEXT:    .cfi_def_cfa s0, 0
+; RV32-NEXT:    andi sp, sp, -64
+; RV32-NEXT:    vsetivli zero, 8, e64, m8, ta, ma
+; RV32-NEXT:    vslidedown.vi v16, v8, 8
+; RV32-NEXT:    mv a0, sp
+; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
+; RV32-NEXT:    vse64.v v8, (a0)
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vse64.v v16, (a1)
+; RV32-NEXT:    vlseg2e64.v v8, (a0)
+; RV32-NEXT:    addi sp, s0, -192
+; RV32-NEXT:    .cfi_def_cfa sp, 192
+; RV32-NEXT:    lw ra, 188(sp) # 4-byte Folded Reload
+; RV32-NEXT:    lw s0, 184(sp) # 4-byte Folded Reload
+; RV32-NEXT:    .cfi_restore ra
+; RV32-NEXT:    .cfi_restore s0
+; RV32-NEXT:    addi sp, sp, 192
+; RV32-NEXT:    .cfi_def_cfa_offset 0
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: vector_deinterleave_v8i64_v16i64:
+; RV64:       # %bb.0:
+; RV64-NEXT:    addi sp, sp, -192
+; RV64-NEXT:    .cfi_def_cfa_offset 192
+; RV64-NEXT:    sd ra, 184(sp) # 8-byte Folded Spill
+; RV64-NEXT:    sd s0, 176(sp) # 8-byte Folded Spill
+; RV64-NEXT:    .cfi_offset ra, -8
+; RV64-NEXT:    .cfi_offset s0, -16
+; RV64-NEXT:    addi s0, sp, 192
+; RV64-NEXT:    .cfi_def_cfa s0, 0
+; RV64-NEXT:    andi sp, sp, -64
+; RV64-NEXT:    vsetivli zero, 8, e64, m8, ta, ma
+; RV64-NEXT:    vslidedown.vi v16, v8, 8
+; RV64-NEXT:    mv a0, sp
+; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
+; RV64-NEXT:    vse64.v v8, (a0)
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vse64.v v16, (a1)
+; RV64-NEXT:    vlseg2e64.v v8, (a0)
+; RV64-NEXT:    addi sp, s0, -192
+; RV64-NEXT:    .cfi_def_cfa sp, 192
+; RV64-NEXT:    ld ra, 184(sp) # 8-byte Folded Reload
+; RV64-NEXT:    ld s0, 176(sp) # 8-byte Folded Reload
+; RV64-NEXT:    .cfi_restore ra
+; RV64-NEXT:    .cfi_restore s0
+; RV64-NEXT:    addi sp, sp, 192
+; RV64-NEXT:    .cfi_def_cfa_offset 0
+; RV64-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_deinterleave_v8i64_v16i64:
 ; ZVZIP:       # %bb.0:
+; ZVZIP-NEXT:    addi sp, sp, -192
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 192
+; ZVZIP-NEXT:    sd ra, 184(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    sd s0, 176(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    .cfi_offset ra, -8
+; ZVZIP-NEXT:    .cfi_offset s0, -16
+; ZVZIP-NEXT:    addi s0, sp, 192
+; ZVZIP-NEXT:    .cfi_def_cfa s0, 0
+; ZVZIP-NEXT:    andi sp, sp, -64
+; ZVZIP-NEXT:    vsetivli zero, 8, e64, m8, ta, ma
+; ZVZIP-NEXT:    vslidedown.vi v16, v8, 8
+; ZVZIP-NEXT:    mv a0, sp
 ; ZVZIP-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
-; ZVZIP-NEXT:    vunzipe.v v16, v8
-; ZVZIP-NEXT:    vunzipo.v v20, v8
-; ZVZIP-NEXT:    vmv.v.v v8, v16
-; ZVZIP-NEXT:    vmv.v.v v12, v20
+; ZVZIP-NEXT:    vse64.v v8, (a0)
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vse64.v v16, (a1)
+; ZVZIP-NEXT:    vlseg2e64.v v8, (a0)
+; ZVZIP-NEXT:    addi sp, s0, -192
+; ZVZIP-NEXT:    .cfi_def_cfa sp, 192
+; ZVZIP-NEXT:    ld ra, 184(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    ld s0, 176(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    .cfi_restore ra
+; ZVZIP-NEXT:    .cfi_restore s0
+; ZVZIP-NEXT:    addi sp, sp, 192
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 0
 ; ZVZIP-NEXT:    ret
   %retval = call {<8 x i64>, <8 x i64>} @llvm.vector.deinterleave2.v16i64(<16 x i64> %vec)
   ret {<8 x i64>, <8 x i64>} %retval
@@ -226,97 +340,145 @@ define {<3 x i32>, <3 x i32>, <3 x i32>} @vector_deinterleave3_v3i32_v9i32(<9 x
 define {<15 x i32>, <15 x i32>, <15 x i32>} @vector_deinterleave3_v15i32_v45i32(<45 x i32> %v) nounwind {
 ; RV32-LABEL: vector_deinterleave3_v15i32_v45i32:
 ; RV32:       # %bb.0:
-; RV32-NEXT:    addi sp, sp, -640
-; RV32-NEXT:    sw ra, 636(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 632(sp) # 4-byte Folded Spill
-; RV32-NEXT:    addi s0, sp, 640
+; RV32-NEXT:    addi sp, sp, -656
+; RV32-NEXT:    sw ra, 652(sp) # 4-byte Folded Spill
+; RV32-NEXT:    sw s0, 648(sp) # 4-byte Folded Spill
+; RV32-NEXT:    addi s0, sp, 656
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    sub sp, sp, a1
 ; RV32-NEXT:    andi sp, sp, -128
-; RV32-NEXT:    addi a1, sp, 252
-; RV32-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
-; RV32-NEXT:    vse32.v v23, (a1)
-; RV32-NEXT:    addi a1, sp, 248
-; RV32-NEXT:    vse32.v v22, (a1)
-; RV32-NEXT:    addi a1, sp, 244
-; RV32-NEXT:    vse32.v v21, (a1)
-; RV32-NEXT:    addi a1, sp, 240
-; RV32-NEXT:    vse32.v v20, (a1)
-; RV32-NEXT:    addi a1, sp, 236
-; RV32-NEXT:    vse32.v v19, (a1)
-; RV32-NEXT:    addi a1, sp, 232
-; RV32-NEXT:    vse32.v v18, (a1)
-; RV32-NEXT:    addi a1, sp, 228
-; RV32-NEXT:    vse32.v v17, (a1)
-; RV32-NEXT:    addi a1, sp, 224
-; RV32-NEXT:    vse32.v v16, (a1)
-; RV32-NEXT:    addi a1, sp, 220
-; RV32-NEXT:    vse32.v v15, (a1)
-; RV32-NEXT:    addi a1, sp, 216
-; RV32-NEXT:    vse32.v v14, (a1)
-; RV32-NEXT:    addi a1, sp, 212
-; RV32-NEXT:    vse32.v v13, (a1)
-; RV32-NEXT:    addi a1, sp, 208
-; RV32-NEXT:    vse32.v v12, (a1)
-; RV32-NEXT:    addi a1, sp, 204
-; RV32-NEXT:    vse32.v v11, (a1)
-; RV32-NEXT:    addi a1, sp, 200
-; RV32-NEXT:    vse32.v v10, (a1)
-; RV32-NEXT:    addi a1, sp, 196
-; RV32-NEXT:    vse32.v v9, (a1)
-; RV32-NEXT:    addi a1, sp, 192
-; RV32-NEXT:    vse32.v v8, (a1)
-; RV32-NEXT:    addi a2, a0, 64
 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV32-NEXT:    vle32.v v8, (a2)
+; RV32-NEXT:    vmv1r.v v2, v23
+; RV32-NEXT:    vmv1r.v v0, v21
+; RV32-NEXT:    vmv1r.v v24, v19
+; RV32-NEXT:    addi a1, sp, 640
+; RV32-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV32-NEXT:    vmv1r.v v24, v17
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    slli a1, a1, 1
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 640
+; RV32-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    slli a1, a1, 2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 640
+; RV32-NEXT:    vs2r.v v16, (a1) # vscale x 16-byte Folded Spill
+; RV32-NEXT:    vmv1r.v v16, v15
+; RV32-NEXT:    vmv1r.v v24, v13
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 6
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 640
+; RV32-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV32-NEXT:    vmv1r.v v24, v11
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    slli a1, a1, 3
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 640
+; RV32-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV32-NEXT:    vmv1r.v v24, v9
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 10
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 640
+; RV32-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV32-NEXT:    addi a1, a0, 64
+; RV32-NEXT:    vle32.v v24, (a1)
 ; RV32-NEXT:    addi a2, sp, 384
-; RV32-NEXT:    vse32.v v8, (a2)
-; RV32-NEXT:    addi a3, a0, 96
+; RV32-NEXT:    vse32.v v24, (a2)
+; RV32-NEXT:    addi a1, a0, 96
 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; RV32-NEXT:    vle32.v v8, (a3)
-; RV32-NEXT:    addi a3, sp, 416
-; RV32-NEXT:    vse32.v v8, (a3)
-; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; RV32-NEXT:    vle32.v v8, (a0)
-; RV32-NEXT:    addi a3, sp, 64
-; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV32-NEXT:    vse32.v v8, (a3)
+; RV32-NEXT:    vle32.v v9, (a1)
+; RV32-NEXT:    addi a1, sp, 416
+; RV32-NEXT:    vse32.v v9, (a1)
 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; RV32-NEXT:    vle32.v v12, (a1)
+; RV32-NEXT:    vle32.v v24, (a0)
 ; RV32-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
-; RV32-NEXT:    vslidedown.vi v16, v12, 8
-; RV32-NEXT:    mv a1, sp
-; RV32-NEXT:    vslidedown.vi v8, v8, 8
+; RV32-NEXT:    vslidedown.vi v28, v24, 8
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV32-NEXT:    vse32.v v12, (a1)
-; RV32-NEXT:    addi a3, sp, 32
-; RV32-NEXT:    vse32.v v16, (a3)
-; RV32-NEXT:    addi a3, sp, 96
-; RV32-NEXT:    vse32.v v8, (a3)
+; RV32-NEXT:    vse32.v v28, (a1)
 ; RV32-NEXT:    lw a0, 112(a0)
 ; RV32-NEXT:    sw a0, 432(sp)
 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; RV32-NEXT:    vle32.v v8, (a2)
+; RV32-NEXT:    vle32.v v28, (a2)
 ; RV32-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
-; RV32-NEXT:    vslidedown.vi v12, v8, 8
+; RV32-NEXT:    vslidedown.vi v4, v28, 8
+; RV32-NEXT:    vsetivli zero, 8, e32, m2, tu, ma
+; RV32-NEXT:    vslideup.vi v22, v2, 1
+; RV32-NEXT:    vslideup.vi v0, v22, 1
+; RV32-NEXT:    vslideup.vi v20, v0, 1
+; RV32-NEXT:    addi a0, sp, 640
+; RV32-NEXT:    vl2r.v v22, (a0) # vscale x 16-byte Folded Reload
+; RV32-NEXT:    vslideup.vi v22, v20, 1
+; RV32-NEXT:    vslideup.vi v18, v22, 1
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a0, a0, 1
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 640
+; RV32-NEXT:    vl2r.v v20, (a0) # vscale x 16-byte Folded Reload
+; RV32-NEXT:    vslideup.vi v20, v18, 1
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a0, a0, 2
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 640
+; RV32-NEXT:    vl2r.v v18, (a0) # vscale x 16-byte Folded Reload
+; RV32-NEXT:    vslideup.vi v18, v20, 1
+; RV32-NEXT:    vslideup.vi v14, v16, 1
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    li a2, 6
+; RV32-NEXT:    mul a0, a0, a2
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 640
+; RV32-NEXT:    vl2r.v v16, (a0) # vscale x 16-byte Folded Reload
+; RV32-NEXT:    vslideup.vi v16, v14, 1
+; RV32-NEXT:    vslideup.vi v12, v16, 1
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a0, a0, 3
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 640
+; RV32-NEXT:    vl2r.v v14, (a0) # vscale x 16-byte Folded Reload
+; RV32-NEXT:    vslideup.vi v14, v12, 1
+; RV32-NEXT:    addi a0, sp, 96
+; RV32-NEXT:    vse32.v v28, (a0)
+; RV32-NEXT:    vslideup.vi v10, v14, 1
 ; RV32-NEXT:    addi a0, sp, 128
-; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV32-NEXT:    vse32.v v8, (a0)
+; RV32-NEXT:    vse32.v v4, (a0)
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    li a2, 10
+; RV32-NEXT:    mul a0, a0, a2
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 640
+; RV32-NEXT:    vl2r.v v12, (a0) # vscale x 16-byte Folded Reload
+; RV32-NEXT:    vslideup.vi v12, v10, 1
+; RV32-NEXT:    addi a0, sp, 224
+; RV32-NEXT:    vse32.v v24, (a0)
+; RV32-NEXT:    addi a0, sp, 192
+; RV32-NEXT:    vslideup.vi v8, v12, 1
+; RV32-NEXT:    vse32.v v18, (a0)
 ; RV32-NEXT:    addi a0, sp, 160
-; RV32-NEXT:    vse32.v v12, (a0)
-; RV32-NEXT:    vlseg3e32.v v20, (a3)
-; RV32-NEXT:    vlseg3e32.v v12, (a1)
+; RV32-NEXT:    vse32.v v8, (a0)
+; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
+; RV32-NEXT:    vlseg3e32.v v20, (a1)
+; RV32-NEXT:    vlseg3e32.v v12, (a0)
 ; RV32-NEXT:    vmv4r.v v28, v20
 ; RV32-NEXT:    vmv2r.v v30, v8
 ; RV32-NEXT:    vmv4r.v v8, v12
 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
 ; RV32-NEXT:    vslideup.vi v8, v28, 8
-; RV32-NEXT:    vmv2r.v v12, v14
 ; RV32-NEXT:    vmv2r.v v20, v22
-; RV32-NEXT:    vslideup.vi v12, v20, 8
+; RV32-NEXT:    vmv2r.v v12, v14
 ; RV32-NEXT:    vslideup.vi v16, v24, 8
-; RV32-NEXT:    addi sp, s0, -640
-; RV32-NEXT:    lw ra, 636(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 632(sp) # 4-byte Folded Reload
-; RV32-NEXT:    addi sp, sp, 640
+; RV32-NEXT:    vslideup.vi v12, v20, 8
+; RV32-NEXT:    addi sp, s0, -656
+; RV32-NEXT:    lw ra, 652(sp) # 4-byte Folded Reload
+; RV32-NEXT:    lw s0, 648(sp) # 4-byte Folded Reload
+; RV32-NEXT:    addi sp, sp, 656
 ; RV32-NEXT:    ret
 ;
 ; RV64-LABEL: vector_deinterleave3_v15i32_v45i32:
@@ -325,92 +487,142 @@ define {<15 x i32>, <15 x i32>, <15 x i32>} @vector_deinterleave3_v15i32_v45i32(
 ; RV64-NEXT:    sd ra, 632(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    sd s0, 624(sp) # 8-byte Folded Spill
 ; RV64-NEXT:    addi s0, sp, 640
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    sub sp, sp, a1
 ; RV64-NEXT:    andi sp, sp, -128
+; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; RV64-NEXT:    vmv1r.v v2, v23
+; RV64-NEXT:    vmv1r.v v0, v21
+; RV64-NEXT:    vmv1r.v v24, v19
+; RV64-NEXT:    addi a1, sp, 624
+; RV64-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV64-NEXT:    vmv1r.v v24, v17
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    slli a1, a1, 1
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    slli a1, a1, 2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vs2r.v v16, (a1) # vscale x 16-byte Folded Spill
+; RV64-NEXT:    vmv1r.v v16, v15
+; RV64-NEXT:    vmv1r.v v24, v13
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 6
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV64-NEXT:    vmv1r.v v24, v11
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    slli a1, a1, 3
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV64-NEXT:    vmv1r.v v24, v9
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 10
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; RV64-NEXT:    addi a1, a0, 64
+; RV64-NEXT:    vle32.v v24, (a1)
 ; RV64-NEXT:    addi a1, a0, 112
 ; RV64-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
-; RV64-NEXT:    vle32.v v24, (a1)
-; RV64-NEXT:    addi a1, sp, 252
-; RV64-NEXT:    vse32.v v23, (a1)
-; RV64-NEXT:    addi a1, sp, 248
-; RV64-NEXT:    vse32.v v22, (a1)
-; RV64-NEXT:    addi a1, sp, 244
-; RV64-NEXT:    vse32.v v21, (a1)
-; RV64-NEXT:    addi a1, sp, 240
-; RV64-NEXT:    vse32.v v20, (a1)
-; RV64-NEXT:    addi a1, sp, 236
-; RV64-NEXT:    vse32.v v19, (a1)
-; RV64-NEXT:    addi a1, sp, 232
-; RV64-NEXT:    vse32.v v18, (a1)
-; RV64-NEXT:    addi a1, sp, 228
-; RV64-NEXT:    vse32.v v17, (a1)
-; RV64-NEXT:    addi a1, sp, 224
-; RV64-NEXT:    vse32.v v16, (a1)
-; RV64-NEXT:    addi a1, sp, 220
-; RV64-NEXT:    vse32.v v15, (a1)
-; RV64-NEXT:    addi a1, sp, 216
-; RV64-NEXT:    vse32.v v14, (a1)
-; RV64-NEXT:    addi a1, sp, 212
-; RV64-NEXT:    vse32.v v13, (a1)
-; RV64-NEXT:    addi a1, sp, 208
-; RV64-NEXT:    vse32.v v12, (a1)
-; RV64-NEXT:    addi a1, sp, 204
-; RV64-NEXT:    vse32.v v11, (a1)
-; RV64-NEXT:    addi a1, sp, 200
-; RV64-NEXT:    vse32.v v10, (a1)
-; RV64-NEXT:    addi a1, sp, 196
-; RV64-NEXT:    vse32.v v9, (a1)
-; RV64-NEXT:    addi a1, sp, 192
-; RV64-NEXT:    vse32.v v8, (a1)
-; RV64-NEXT:    addi a2, a0, 64
+; RV64-NEXT:    vle32.v v9, (a1)
+; RV64-NEXT:    addi a1, sp, 384
 ; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV64-NEXT:    vle32.v v8, (a2)
-; RV64-NEXT:    addi a2, sp, 384
-; RV64-NEXT:    vse32.v v8, (a2)
-; RV64-NEXT:    addi a3, a0, 96
+; RV64-NEXT:    vse32.v v24, (a1)
+; RV64-NEXT:    addi a2, a0, 96
 ; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; RV64-NEXT:    vle32.v v8, (a3)
-; RV64-NEXT:    addi a3, sp, 416
-; RV64-NEXT:    vse32.v v8, (a3)
-; RV64-NEXT:    addi a3, sp, 432
+; RV64-NEXT:    vle32.v v11, (a2)
+; RV64-NEXT:    addi a2, sp, 416
+; RV64-NEXT:    vse32.v v11, (a2)
+; RV64-NEXT:    addi a2, sp, 432
 ; RV64-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
-; RV64-NEXT:    vse32.v v24, (a3)
+; RV64-NEXT:    vse32.v v9, (a2)
 ; RV64-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; RV64-NEXT:    vle32.v v8, (a0)
+; RV64-NEXT:    vle32.v v24, (a0)
+; RV64-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
+; RV64-NEXT:    vslidedown.vi v28, v24, 8
 ; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV64-NEXT:    vse32.v v8, (a0)
+; RV64-NEXT:    vse32.v v28, (a0)
 ; RV64-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; RV64-NEXT:    vle32.v v12, (a1)
+; RV64-NEXT:    vle32.v v28, (a1)
 ; RV64-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
-; RV64-NEXT:    vslidedown.vi v16, v12, 8
-; RV64-NEXT:    mv a0, sp
-; RV64-NEXT:    vslidedown.vi v8, v8, 8
-; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV64-NEXT:    vse32.v v12, (a0)
-; RV64-NEXT:    addi a1, sp, 32
-; RV64-NEXT:    vse32.v v16, (a1)
+; RV64-NEXT:    vslidedown.vi v4, v28, 8
+; RV64-NEXT:    vsetivli zero, 8, e32, m2, tu, ma
+; RV64-NEXT:    vslideup.vi v22, v2, 1
+; RV64-NEXT:    vslideup.vi v0, v22, 1
+; RV64-NEXT:    vslideup.vi v20, v0, 1
+; RV64-NEXT:    addi a1, sp, 624
+; RV64-NEXT:    vl2r.v v22, (a1) # vscale x 16-byte Folded Reload
+; RV64-NEXT:    vslideup.vi v22, v20, 1
+; RV64-NEXT:    vslideup.vi v18, v22, 1
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    slli a1, a1, 1
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vl2r.v v20, (a1) # vscale x 16-byte Folded Reload
+; RV64-NEXT:    vslideup.vi v20, v18, 1
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    slli a1, a1, 2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vl2r.v v18, (a1) # vscale x 16-byte Folded Reload
+; RV64-NEXT:    vslideup.vi v18, v20, 1
+; RV64-NEXT:    vslideup.vi v14, v16, 1
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 6
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vl2r.v v16, (a1) # vscale x 16-byte Folded Reload
+; RV64-NEXT:    vslideup.vi v16, v14, 1
+; RV64-NEXT:    vslideup.vi v12, v16, 1
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    slli a1, a1, 3
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vl2r.v v14, (a1) # vscale x 16-byte Folded Reload
+; RV64-NEXT:    vslideup.vi v14, v12, 1
 ; RV64-NEXT:    addi a1, sp, 96
+; RV64-NEXT:    vse32.v v28, (a1)
+; RV64-NEXT:    vslideup.vi v10, v14, 1
+; RV64-NEXT:    addi a1, sp, 128
+; RV64-NEXT:    vse32.v v4, (a1)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 10
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 624
+; RV64-NEXT:    vl2r.v v12, (a1) # vscale x 16-byte Folded Reload
+; RV64-NEXT:    vslideup.vi v12, v10, 1
+; RV64-NEXT:    addi a1, sp, 224
+; RV64-NEXT:    vse32.v v24, (a1)
+; RV64-NEXT:    addi a1, sp, 192
+; RV64-NEXT:    vslideup.vi v8, v12, 1
+; RV64-NEXT:    vse32.v v18, (a1)
+; RV64-NEXT:    addi a1, sp, 160
 ; RV64-NEXT:    vse32.v v8, (a1)
-; RV64-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; RV64-NEXT:    vle32.v v8, (a2)
-; RV64-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
-; RV64-NEXT:    vslidedown.vi v12, v8, 8
-; RV64-NEXT:    addi a2, sp, 128
-; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; RV64-NEXT:    vse32.v v8, (a2)
-; RV64-NEXT:    addi a2, sp, 160
-; RV64-NEXT:    vse32.v v12, (a2)
-; RV64-NEXT:    vlseg3e32.v v20, (a1)
-; RV64-NEXT:    vlseg3e32.v v12, (a0)
+; RV64-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
+; RV64-NEXT:    vlseg3e32.v v20, (a0)
+; RV64-NEXT:    vlseg3e32.v v12, (a1)
 ; RV64-NEXT:    vmv4r.v v28, v20
 ; RV64-NEXT:    vmv2r.v v30, v8
 ; RV64-NEXT:    vmv4r.v v8, v12
 ; RV64-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
 ; RV64-NEXT:    vslideup.vi v8, v28, 8
-; RV64-NEXT:    vmv2r.v v12, v14
 ; RV64-NEXT:    vmv2r.v v20, v22
-; RV64-NEXT:    vslideup.vi v12, v20, 8
+; RV64-NEXT:    vmv2r.v v12, v14
 ; RV64-NEXT:    vslideup.vi v16, v24, 8
+; RV64-NEXT:    vslideup.vi v12, v20, 8
 ; RV64-NEXT:    addi sp, s0, -640
 ; RV64-NEXT:    ld ra, 632(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 624(sp) # 8-byte Folded Reload
@@ -423,92 +635,142 @@ define {<15 x i32>, <15 x i32>, <15 x i32>} @vector_deinterleave3_v15i32_v45i32(
 ; ZVZIP-NEXT:    sd ra, 632(sp) # 8-byte Folded Spill
 ; ZVZIP-NEXT:    sd s0, 624(sp) # 8-byte Folded Spill
 ; ZVZIP-NEXT:    addi s0, sp, 640
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    sub sp, sp, a1
 ; ZVZIP-NEXT:    andi sp, sp, -128
+; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-NEXT:    vmv1r.v v2, v23
+; ZVZIP-NEXT:    vmv1r.v v0, v21
+; ZVZIP-NEXT:    vmv1r.v v24, v19
+; ZVZIP-NEXT:    addi a1, sp, 624
+; ZVZIP-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; ZVZIP-NEXT:    vmv1r.v v24, v17
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    slli a1, a1, 1
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    slli a1, a1, 2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vs2r.v v16, (a1) # vscale x 16-byte Folded Spill
+; ZVZIP-NEXT:    vmv1r.v v16, v15
+; ZVZIP-NEXT:    vmv1r.v v24, v13
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 6
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; ZVZIP-NEXT:    vmv1r.v v24, v11
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    slli a1, a1, 3
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; ZVZIP-NEXT:    vmv1r.v v24, v9
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 10
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vs2r.v v24, (a1) # vscale x 16-byte Folded Spill
+; ZVZIP-NEXT:    addi a1, a0, 64
+; ZVZIP-NEXT:    vle32.v v24, (a1)
 ; ZVZIP-NEXT:    addi a1, a0, 112
 ; ZVZIP-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vle32.v v24, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 252
-; ZVZIP-NEXT:    vse32.v v23, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 248
-; ZVZIP-NEXT:    vse32.v v22, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 244
-; ZVZIP-NEXT:    vse32.v v21, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 240
-; ZVZIP-NEXT:    vse32.v v20, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 236
-; ZVZIP-NEXT:    vse32.v v19, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 232
-; ZVZIP-NEXT:    vse32.v v18, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 228
-; ZVZIP-NEXT:    vse32.v v17, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 224
-; ZVZIP-NEXT:    vse32.v v16, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 220
-; ZVZIP-NEXT:    vse32.v v15, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 216
-; ZVZIP-NEXT:    vse32.v v14, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 212
-; ZVZIP-NEXT:    vse32.v v13, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 208
-; ZVZIP-NEXT:    vse32.v v12, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 204
-; ZVZIP-NEXT:    vse32.v v11, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 200
-; ZVZIP-NEXT:    vse32.v v10, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 196
-; ZVZIP-NEXT:    vse32.v v9, (a1)
-; ZVZIP-NEXT:    addi a1, sp, 192
-; ZVZIP-NEXT:    vse32.v v8, (a1)
-; ZVZIP-NEXT:    addi a2, a0, 64
+; ZVZIP-NEXT:    vle32.v v9, (a1)
+; ZVZIP-NEXT:    addi a1, sp, 384
 ; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT:    vle32.v v8, (a2)
-; ZVZIP-NEXT:    addi a2, sp, 384
-; ZVZIP-NEXT:    vse32.v v8, (a2)
-; ZVZIP-NEXT:    addi a3, a0, 96
+; ZVZIP-NEXT:    vse32.v v24, (a1)
+; ZVZIP-NEXT:    addi a2, a0, 96
 ; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVZIP-NEXT:    vle32.v v8, (a3)
-; ZVZIP-NEXT:    addi a3, sp, 416
-; ZVZIP-NEXT:    vse32.v v8, (a3)
-; ZVZIP-NEXT:    addi a3, sp, 432
+; ZVZIP-NEXT:    vle32.v v11, (a2)
+; ZVZIP-NEXT:    addi a2, sp, 416
+; ZVZIP-NEXT:    vse32.v v11, (a2)
+; ZVZIP-NEXT:    addi a2, sp, 432
 ; ZVZIP-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vse32.v v24, (a3)
+; ZVZIP-NEXT:    vse32.v v9, (a2)
 ; ZVZIP-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; ZVZIP-NEXT:    vle32.v v8, (a0)
+; ZVZIP-NEXT:    vle32.v v24, (a0)
+; ZVZIP-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
+; ZVZIP-NEXT:    vslidedown.vi v28, v24, 8
 ; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT:    vse32.v v8, (a0)
+; ZVZIP-NEXT:    vse32.v v28, (a0)
 ; ZVZIP-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; ZVZIP-NEXT:    vle32.v v12, (a1)
+; ZVZIP-NEXT:    vle32.v v28, (a1)
 ; ZVZIP-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
-; ZVZIP-NEXT:    vslidedown.vi v16, v12, 8
-; ZVZIP-NEXT:    mv a0, sp
-; ZVZIP-NEXT:    vslidedown.vi v8, v8, 8
-; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT:    vse32.v v12, (a0)
-; ZVZIP-NEXT:    addi a1, sp, 32
-; ZVZIP-NEXT:    vse32.v v16, (a1)
+; ZVZIP-NEXT:    vslidedown.vi v4, v28, 8
+; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, tu, ma
+; ZVZIP-NEXT:    vslideup.vi v22, v2, 1
+; ZVZIP-NEXT:    vslideup.vi v0, v22, 1
+; ZVZIP-NEXT:    vslideup.vi v20, v0, 1
+; ZVZIP-NEXT:    addi a1, sp, 624
+; ZVZIP-NEXT:    vl2r.v v22, (a1) # vscale x 16-byte Folded Reload
+; ZVZIP-NEXT:    vslideup.vi v22, v20, 1
+; ZVZIP-NEXT:    vslideup.vi v18, v22, 1
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    slli a1, a1, 1
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vl2r.v v20, (a1) # vscale x 16-byte Folded Reload
+; ZVZIP-NEXT:    vslideup.vi v20, v18, 1
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    slli a1, a1, 2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vl2r.v v18, (a1) # vscale x 16-byte Folded Reload
+; ZVZIP-NEXT:    vslideup.vi v18, v20, 1
+; ZVZIP-NEXT:    vslideup.vi v14, v16, 1
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 6
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vl2r.v v16, (a1) # vscale x 16-byte Folded Reload
+; ZVZIP-NEXT:    vslideup.vi v16, v14, 1
+; ZVZIP-NEXT:    vslideup.vi v12, v16, 1
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    slli a1, a1, 3
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vl2r.v v14, (a1) # vscale x 16-byte Folded Reload
+; ZVZIP-NEXT:    vslideup.vi v14, v12, 1
 ; ZVZIP-NEXT:    addi a1, sp, 96
+; ZVZIP-NEXT:    vse32.v v28, (a1)
+; ZVZIP-NEXT:    vslideup.vi v10, v14, 1
+; ZVZIP-NEXT:    addi a1, sp, 128
+; ZVZIP-NEXT:    vse32.v v4, (a1)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 10
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 624
+; ZVZIP-NEXT:    vl2r.v v12, (a1) # vscale x 16-byte Folded Reload
+; ZVZIP-NEXT:    vslideup.vi v12, v10, 1
+; ZVZIP-NEXT:    addi a1, sp, 224
+; ZVZIP-NEXT:    vse32.v v24, (a1)
+; ZVZIP-NEXT:    addi a1, sp, 192
+; ZVZIP-NEXT:    vslideup.vi v8, v12, 1
+; ZVZIP-NEXT:    vse32.v v18, (a1)
+; ZVZIP-NEXT:    addi a1, sp, 160
 ; ZVZIP-NEXT:    vse32.v v8, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; ZVZIP-NEXT:    vle32.v v8, (a2)
-; ZVZIP-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
-; ZVZIP-NEXT:    vslidedown.vi v12, v8, 8
-; ZVZIP-NEXT:    addi a2, sp, 128
-; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT:    vse32.v v8, (a2)
-; ZVZIP-NEXT:    addi a2, sp, 160
-; ZVZIP-NEXT:    vse32.v v12, (a2)
-; ZVZIP-NEXT:    vlseg3e32.v v20, (a1)
-; ZVZIP-NEXT:    vlseg3e32.v v12, (a0)
+; ZVZIP-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
+; ZVZIP-NEXT:    vlseg3e32.v v20, (a0)
+; ZVZIP-NEXT:    vlseg3e32.v v12, (a1)
 ; ZVZIP-NEXT:    vmv4r.v v28, v20
 ; ZVZIP-NEXT:    vmv2r.v v30, v8
 ; ZVZIP-NEXT:    vmv4r.v v8, v12
 ; ZVZIP-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
 ; ZVZIP-NEXT:    vslideup.vi v8, v28, 8
-; ZVZIP-NEXT:    vmv2r.v v12, v14
 ; ZVZIP-NEXT:    vmv2r.v v20, v22
-; ZVZIP-NEXT:    vslideup.vi v12, v20, 8
+; ZVZIP-NEXT:    vmv2r.v v12, v14
 ; ZVZIP-NEXT:    vslideup.vi v16, v24, 8
+; ZVZIP-NEXT:    vslideup.vi v12, v20, 8
 ; ZVZIP-NEXT:    addi sp, s0, -640
 ; ZVZIP-NEXT:    ld ra, 632(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 624(sp) # 8-byte Folded Reload
@@ -700,10 +962,18 @@ define {<2 x i8>, <2 x i8>, <2 x i8>, <2 x i8>, <2 x i8>, <2 x i8>, <2 x i8>, <2
 define {<2 x half>, <2 x half>} @vector_deinterleave_v2f16_v4f16(<4 x half> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v2f16_v4f16:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -16
+; CHECK-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v9, v8, 2
+; CHECK-NEXT:    addi a0, sp, 8
 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v9, v8, 16
-; CHECK-NEXT:    vmv1r.v v8, v10
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 12
+; CHECK-NEXT:    vse16.v v9, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<2 x half>, <2 x half>} @llvm.vector.deinterleave2.v4f16(<4 x half> %vec)
 ret {<2 x half>, <2 x half>} %retval
@@ -712,10 +982,18 @@ ret {<2 x half>, <2 x half>} %retval
 define {<2 x bfloat>, <2 x bfloat>} @vector_deinterleave_v2bf16_v4bf16(<4 x bfloat> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v2bf16_v4bf16:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -16
+; CHECK-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v9, v8, 2
+; CHECK-NEXT:    addi a0, sp, 8
 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v9, v8, 16
-; CHECK-NEXT:    vmv1r.v v8, v10
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 12
+; CHECK-NEXT:    vse16.v v9, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<2 x bfloat>, <2 x bfloat>} @llvm.vector.deinterleave2.v4bf16(<4 x bfloat> %vec)
 ret {<2 x bfloat>, <2 x bfloat>} %retval
@@ -724,10 +1002,18 @@ ret {<2 x bfloat>, <2 x bfloat>} %retval
 define {<4 x half>, <4 x half>} @vector_deinterleave_v4f16_v8f16(<8 x half> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v4f16_v8f16:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -16
+; CHECK-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
+; CHECK-NEXT:    vslidedown.vi v9, v8, 4
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v9, v8, 16
-; CHECK-NEXT:    vmv1r.v v8, v10
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 8
+; CHECK-NEXT:    vse16.v v9, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<4 x half>, <4 x half>} @llvm.vector.deinterleave2.v8f16(<8 x half> %vec)
 ret {<4 x half>, <4 x half>} %retval
@@ -736,10 +1022,18 @@ ret {<4 x half>, <4 x half>} %retval
 define {<4 x bfloat>, <4 x bfloat>} @vector_deinterleave_v4bf16_v8bf16(<8 x bfloat> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v4bf16_v8bf16:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -16
+; CHECK-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
+; CHECK-NEXT:    vslidedown.vi v9, v8, 4
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v9, v8, 16
-; CHECK-NEXT:    vmv1r.v v8, v10
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 8
+; CHECK-NEXT:    vse16.v v9, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<4 x bfloat>, <4 x bfloat>} @llvm.vector.deinterleave2.v8bf16(<8 x bfloat> %vec)
 ret {<4 x bfloat>, <4 x bfloat>} %retval
@@ -748,10 +1042,18 @@ ret {<4 x bfloat>, <4 x bfloat>} %retval
 define {<2 x float>, <2 x float>} @vector_deinterleave_v2f32_v4f32(<4 x float> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v2f32_v4f32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    li a0, 32
+; CHECK-NEXT:    addi sp, sp, -16
+; CHECK-NEXT:    .cfi_def_cfa_offset 16
+; CHECK-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
+; CHECK-NEXT:    vslidedown.vi v9, v8, 2
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
-; CHECK-NEXT:    vnsrl.wx v9, v8, a0
-; CHECK-NEXT:    vnsrl.wi v8, v8, 0
+; CHECK-NEXT:    vse32.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 8
+; CHECK-NEXT:    vse32.v v9, (a1)
+; CHECK-NEXT:    vlseg2e32.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<2 x float>, <2 x float>} @llvm.vector.deinterleave2.v4f32(<4 x float> %vec)
 ret {<2 x float>, <2 x float>} %retval
@@ -760,11 +1062,18 @@ ret {<2 x float>, <2 x float>} %retval
 define {<8 x half>, <8 x half>} @vector_deinterleave_v8f16_v16f16(<16 x half> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v8f16_v16f16:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 8, e16, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 8
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v11, v8, 16
-; CHECK-NEXT:    vmv.v.v v8, v10
-; CHECK-NEXT:    vmv.v.v v9, v11
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse16.v v10, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<8 x half>, <8 x half>} @llvm.vector.deinterleave2.v16f16(<16 x half> %vec)
 ret {<8 x half>, <8 x half>} %retval
@@ -773,11 +1082,18 @@ ret {<8 x half>, <8 x half>} %retval
 define {<8 x bfloat>, <8 x bfloat>} @vector_deinterleave_v8bf16_v16bf16(<16 x bfloat> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v8bf16_v16bf16:
 ; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 8, e16, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 8
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vnsrl.wi v10, v8, 0
-; CHECK-NEXT:    vnsrl.wi v11, v8, 16
-; CHECK-NEXT:    vmv.v.v v8, v10
-; CHECK-NEXT:    vmv.v.v v9, v11
+; CHECK-NEXT:    vse16.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse16.v v10, (a1)
+; CHECK-NEXT:    vlseg2e16.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<8 x bfloat>, <8 x bfloat>} @llvm.vector.deinterleave2.v16bf16(<16 x bfloat> %vec)
 ret {<8 x bfloat>, <8 x bfloat>} %retval
@@ -786,82 +1102,129 @@ ret {<8 x bfloat>, <8 x bfloat>} %retval
 define {<4 x float>, <4 x float>} @vector_deinterleave_v4f32_v8f32(<8 x float> %vec) {
 ; CHECK-LABEL: vector_deinterleave_v4f32_v8f32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    li a0, 32
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 4
+; CHECK-NEXT:    mv a0, sp
 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; CHECK-NEXT:    vnsrl.wx v10, v8, a0
-; CHECK-NEXT:    vnsrl.wi v11, v8, 0
-; CHECK-NEXT:    vmv.v.v v8, v11
-; CHECK-NEXT:    vmv.v.v v9, v10
+; CHECK-NEXT:    vse32.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse32.v v10, (a1)
+; CHECK-NEXT:    vlseg2e32.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
 ; CHECK-NEXT:    ret
 %retval = call {<4 x float>, <4 x float>} @llvm.vector.deinterleave2.v8f32(<8 x float> %vec)
 ret  {<4 x float>, <4 x float>} %retval
 }
 
 define {<2 x double>, <2 x double>} @vector_deinterleave_v2f64_v4f64(<4 x double> %vec) {
-; V-LABEL: vector_deinterleave_v2f64_v4f64:
-; V:       # %bb.0:
-; V-NEXT:    vsetivli zero, 2, e64, m2, ta, ma
-; V-NEXT:    vslidedown.vi v10, v8, 2
-; V-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
-; V-NEXT:    vmv.v.i v0, 1
-; V-NEXT:    vmv1r.v v9, v10
-; V-NEXT:    vslidedown.vi v9, v8, 1, v0.t
-; V-NEXT:    vslideup.vi v8, v10, 1
-; V-NEXT:    ret
-;
-; ZVZIP-LABEL: vector_deinterleave_v2f64_v4f64:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
-; ZVZIP-NEXT:    vunzipe.v v10, v8
-; ZVZIP-NEXT:    vunzipo.v v11, v8
-; ZVZIP-NEXT:    vmv.v.v v8, v10
-; ZVZIP-NEXT:    vmv.v.v v9, v11
-; ZVZIP-NEXT:    ret
+; CHECK-LABEL: vector_deinterleave_v2f64_v4f64:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    addi sp, sp, -32
+; CHECK-NEXT:    .cfi_def_cfa_offset 32
+; CHECK-NEXT:    vsetivli zero, 2, e64, m2, ta, ma
+; CHECK-NEXT:    vslidedown.vi v10, v8, 2
+; CHECK-NEXT:    mv a0, sp
+; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
+; CHECK-NEXT:    vse64.v v8, (a0)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vse64.v v10, (a1)
+; CHECK-NEXT:    vlseg2e64.v v8, (a0)
+; CHECK-NEXT:    addi sp, sp, 32
+; CHECK-NEXT:    .cfi_def_cfa_offset 0
+; CHECK-NEXT:    ret
 %retval = call {<2 x double>, <2 x double>} @llvm.vector.deinterleave2.v4f64(<4 x double> %vec)
 ret {<2 x double>, <2 x double>} %retval
 }
 
 define {<4 x double>, <4 x double>} @vector_deinterleave_v4f64_v8f64(<8 x double> %vec) {
-; V-LABEL: vector_deinterleave_v4f64_v8f64:
-; V:       # %bb.0:
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v0, 8
-; V-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
-; V-NEXT:    vslidedown.vi v16, v8, 4
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; V-NEXT:    vslideup.vi v12, v16, 2
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v10, 2
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
-; V-NEXT:    vslideup.vi v12, v16, 1, v0.t
-; V-NEXT:    vmv2r.v v14, v8
-; V-NEXT:    vmv1r.v v0, v10
-; V-NEXT:    vslidedown.vi v14, v8, 1, v0.t
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v11, 12
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
-; V-NEXT:    vslidedown.vi v18, v8, 1
-; V-NEXT:    vmv1r.v v0, v11
-; V-NEXT:    vmerge.vvm v12, v14, v12, v0
-; V-NEXT:    vmv1r.v v0, v10
-; V-NEXT:    vslidedown.vi v18, v8, 2, v0.t
-; V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
-; V-NEXT:    vmv.v.i v0, 4
-; V-NEXT:    vmv2r.v v8, v16
-; V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
-; V-NEXT:    vslideup.vi v8, v16, 1, v0.t
-; V-NEXT:    vmv1r.v v0, v11
-; V-NEXT:    vmerge.vvm v10, v18, v8, v0
-; V-NEXT:    vmv2r.v v8, v12
-; V-NEXT:    ret
+; RV32-LABEL: vector_deinterleave_v4f64_v8f64:
+; RV32:       # %bb.0:
+; RV32-NEXT:    addi sp, sp, -96
+; RV32-NEXT:    .cfi_def_cfa_offset 96
+; RV32-NEXT:    sw ra, 92(sp) # 4-byte Folded Spill
+; RV32-NEXT:    sw s0, 88(sp) # 4-byte Folded Spill
+; RV32-NEXT:    .cfi_offset ra, -4
+; RV32-NEXT:    .cfi_offset s0, -8
+; RV32-NEXT:    addi s0, sp, 96
+; RV32-NEXT:    .cfi_def_cfa s0, 0
+; RV32-NEXT:    andi sp, sp, -32
+; RV32-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
+; RV32-NEXT:    vslidedown.vi v12, v8, 4
+; RV32-NEXT:    mv a0, sp
+; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; RV32-NEXT:    vse64.v v8, (a0)
+; RV32-NEXT:    addi a1, sp, 32
+; RV32-NEXT:    vse64.v v12, (a1)
+; RV32-NEXT:    vlseg2e64.v v8, (a0)
+; RV32-NEXT:    addi sp, s0, -96
+; RV32-NEXT:    .cfi_def_cfa sp, 96
+; RV32-NEXT:    lw ra, 92(sp) # 4-byte Folded Reload
+; RV32-NEXT:    lw s0, 88(sp) # 4-byte Folded Reload
+; RV32-NEXT:    .cfi_restore ra
+; RV32-NEXT:    .cfi_restore s0
+; RV32-NEXT:    addi sp, sp, 96
+; RV32-NEXT:    .cfi_def_cfa_offset 0
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: vector_deinterleave_v4f64_v8f64:
+; RV64:       # %bb.0:
+; RV64-NEXT:    addi sp, sp, -96
+; RV64-NEXT:    .cfi_def_cfa_offset 96
+; RV64-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
+; RV64-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
+; RV64-NEXT:    .cfi_offset ra, -8
+; RV64-NEXT:    .cfi_offset s0, -16
+; RV64-NEXT:    addi s0, sp, 96
+; RV64-NEXT:    .cfi_def_cfa s0, 0
+; RV64-NEXT:    andi sp, sp, -32
+; RV64-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
+; RV64-NEXT:    vslidedown.vi v12, v8, 4
+; RV64-NEXT:    mv a0, sp
+; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; RV64-NEXT:    vse64.v v8, (a0)
+; RV64-NEXT:    addi a1, sp, 32
+; RV64-NEXT:    vse64.v v12, (a1)
+; RV64-NEXT:    vlseg2e64.v v8, (a0)
+; RV64-NEXT:    addi sp, s0, -96
+; RV64-NEXT:    .cfi_def_cfa sp, 96
+; RV64-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
+; RV64-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
+; RV64-NEXT:    .cfi_restore ra
+; RV64-NEXT:    .cfi_restore s0
+; RV64-NEXT:    addi sp, sp, 96
+; RV64-NEXT:    .cfi_def_cfa_offset 0
+; RV64-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_deinterleave_v4f64_v8f64:
 ; ZVZIP:       # %bb.0:
+; ZVZIP-NEXT:    addi sp, sp, -96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 96
+; ZVZIP-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    .cfi_offset ra, -8
+; ZVZIP-NEXT:    .cfi_offset s0, -16
+; ZVZIP-NEXT:    addi s0, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa s0, 0
+; ZVZIP-NEXT:    andi sp, sp, -32
+; ZVZIP-NEXT:    vsetivli zero, 4, e64, m4, ta, ma
+; ZVZIP-NEXT:    vslidedown.vi v12, v8, 4
+; ZVZIP-NEXT:    mv a0, sp
 ; ZVZIP-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; ZVZIP-NEXT:    vunzipe.v v12, v8
-; ZVZIP-NEXT:    vunzipo.v v14, v8
-; ZVZIP-NEXT:    vmv.v.v v8, v12
-; ZVZIP-NEXT:    vmv.v.v v10, v14
+; ZVZIP-NEXT:    vse64.v v8, (a0)
+; ZVZIP-NEXT:    addi a1, sp, 32
+; ZVZIP-NEXT:    vse64.v v12, (a1)
+; ZVZIP-NEXT:    vlseg2e64.v v8, (a0)
+; ZVZIP-NEXT:    addi sp, s0, -96
+; ZVZIP-NEXT:    .cfi_def_cfa sp, 96
+; ZVZIP-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    .cfi_restore ra
+; ZVZIP-NEXT:    .cfi_restore s0
+; ZVZIP-NEXT:    addi sp, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 0
 ; ZVZIP-NEXT:    ret
 %retval = call {<4 x double>, <4 x double>} @llvm.vector.deinterleave2.v8f64(<8 x double> %vec)
 ret {<4 x double>, <4 x double>} %retval
@@ -1236,3 +1599,5 @@ define {<1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1
 	   %res = call {<1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>} @llvm.vector.deinterleave8.v8bf16(<8 x bfloat> %v)
 	   ret {<1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>, <1 x bfloat>} %res
 }
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; V: {{.*}}
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-load.ll b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-load.ll
index 23aaec74ce9de..0eaa5d5242d93 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-load.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave-load.ll
@@ -585,7 +585,10 @@ define {<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i
 ; CHECK-NEXT:    vmv.v.v v13, v12
 ; CHECK-NEXT:    vmv.v.v v14, v12
 ; CHECK-NEXT:    vmv.v.v v15, v12
-; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    csrr a1, vlenb
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a1, sp, a1
+; CHECK-NEXT:    addi a1, a1, 16
 ; CHECK-NEXT:    vsseg4e8.v v12, (a1)
 ; CHECK-NEXT:    csrr a2, vlenb
 ; CHECK-NEXT:    add a3, a1, a2
@@ -593,29 +596,27 @@ define {<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i
 ; CHECK-NEXT:    vl1r.v v13, (a1)
 ; CHECK-NEXT:    vmsne.vi v12, v12, 0
 ; CHECK-NEXT:    vmsne.vi v0, v13, 0
-; CHECK-NEXT:    add a3, a3, a2
-; CHECK-NEXT:    vl1r.v v13, (a3)
+; CHECK-NEXT:    slli a4, a2, 1
+; CHECK-NEXT:    add a1, a1, a4
+; CHECK-NEXT:    vl1r.v v13, (a1)
 ; CHECK-NEXT:    srli a1, a2, 2
-; CHECK-NEXT:    srli a4, a2, 3
+; CHECK-NEXT:    srli a2, a2, 3
 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vx v0, v12, a4
+; CHECK-NEXT:    vslideup.vx v0, v12, a2
 ; CHECK-NEXT:    vsetvli a5, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vmsne.vi v12, v13, 0
-; CHECK-NEXT:    add a2, a3, a2
-; CHECK-NEXT:    vl1r.v v13, (a2)
-; CHECK-NEXT:    add a4, a1, a4
-; CHECK-NEXT:    vsetvli zero, a4, e8, mf2, tu, ma
+; CHECK-NEXT:    add a3, a3, a4
+; CHECK-NEXT:    vl1r.v v13, (a3)
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vsetvli zero, a2, e8, mf2, tu, ma
 ; CHECK-NEXT:    vslideup.vx v0, v12, a1
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vmsne.vi v12, v13, 0
 ; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vx v0, v12, a4
+; CHECK-NEXT:    vslideup.vx v0, v12, a2
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, mu
 ; CHECK-NEXT:    vle8.v v8, (a0), v0.t
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 2
-; CHECK-NEXT:    add a0, sp, a0
-; CHECK-NEXT:    addi a0, a0, 16
+; CHECK-NEXT:    addi a0, sp, 16
 ; CHECK-NEXT:    vs4r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vlseg4e8.v v8, (a0)
@@ -633,15 +634,67 @@ define {<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i
 }
 
 define { <8 x float>, <8 x float> } @deinterleave_unrelated(<16 x float> %arg) {
-; CHECK-LABEL: deinterleave_unrelated:
-; CHECK:       # %bb.0: # %entry
-; CHECK-NEXT:    li a0, 32
-; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
-; CHECK-NEXT:    vfabs.v v12, v8
-; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; CHECK-NEXT:    vnsrl.wx v10, v12, a0
-; CHECK-NEXT:    vnsrl.wi v8, v12, 0
-; CHECK-NEXT:    ret
+; RV32-LABEL: deinterleave_unrelated:
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    addi sp, sp, -96
+; RV32-NEXT:    .cfi_def_cfa_offset 96
+; RV32-NEXT:    sw ra, 92(sp) # 4-byte Folded Spill
+; RV32-NEXT:    sw s0, 88(sp) # 4-byte Folded Spill
+; RV32-NEXT:    .cfi_offset ra, -4
+; RV32-NEXT:    .cfi_offset s0, -8
+; RV32-NEXT:    addi s0, sp, 96
+; RV32-NEXT:    .cfi_def_cfa s0, 0
+; RV32-NEXT:    andi sp, sp, -32
+; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
+; RV32-NEXT:    vfabs.v v8, v8
+; RV32-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
+; RV32-NEXT:    vslidedown.vi v12, v8, 8
+; RV32-NEXT:    mv a0, sp
+; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; RV32-NEXT:    vse32.v v8, (a0)
+; RV32-NEXT:    addi a1, sp, 32
+; RV32-NEXT:    vse32.v v12, (a1)
+; RV32-NEXT:    vlseg2e32.v v8, (a0)
+; RV32-NEXT:    addi sp, s0, -96
+; RV32-NEXT:    .cfi_def_cfa sp, 96
+; RV32-NEXT:    lw ra, 92(sp) # 4-byte Folded Reload
+; RV32-NEXT:    lw s0, 88(sp) # 4-byte Folded Reload
+; RV32-NEXT:    .cfi_restore ra
+; RV32-NEXT:    .cfi_restore s0
+; RV32-NEXT:    addi sp, sp, 96
+; RV32-NEXT:    .cfi_def_cfa_offset 0
+; RV32-NEXT:    ret
+;
+; RV64-LABEL: deinterleave_unrelated:
+; RV64:       # %bb.0: # %entry
+; RV64-NEXT:    addi sp, sp, -96
+; RV64-NEXT:    .cfi_def_cfa_offset 96
+; RV64-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
+; RV64-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
+; RV64-NEXT:    .cfi_offset ra, -8
+; RV64-NEXT:    .cfi_offset s0, -16
+; RV64-NEXT:    addi s0, sp, 96
+; RV64-NEXT:    .cfi_def_cfa s0, 0
+; RV64-NEXT:    andi sp, sp, -32
+; RV64-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
+; RV64-NEXT:    vfabs.v v8, v8
+; RV64-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
+; RV64-NEXT:    vslidedown.vi v12, v8, 8
+; RV64-NEXT:    mv a0, sp
+; RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; RV64-NEXT:    vse32.v v8, (a0)
+; RV64-NEXT:    addi a1, sp, 32
+; RV64-NEXT:    vse32.v v12, (a1)
+; RV64-NEXT:    vlseg2e32.v v8, (a0)
+; RV64-NEXT:    addi sp, s0, -96
+; RV64-NEXT:    .cfi_def_cfa sp, 96
+; RV64-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
+; RV64-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
+; RV64-NEXT:    .cfi_restore ra
+; RV64-NEXT:    .cfi_restore s0
+; RV64-NEXT:    addi sp, sp, 96
+; RV64-NEXT:    .cfi_def_cfa_offset 0
+; RV64-NEXT:    ret
 entry:
   %abs = call <16 x float> @llvm.fabs(<16 x float> %arg)
   %res = call { <8 x float>, <8 x float> } @llvm.vector.deinterleave2.v16f32(<16 x float> %abs)
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
index e58ee62d1a90f..c71bfcbaace16 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-deinterleave.ll
@@ -1,4 +1,4 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
 ; RUN: llc < %s -mtriple=riscv32 -mattr=+m,+v,+zvfhmin,+zvfbfmin | FileCheck %s --check-prefixes=CHECK,V
 ; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+v,+zvfhmin,+zvfbfmin | FileCheck %s --check-prefixes=CHECK,V
 ; RUN: llc < %s -mtriple=riscv64 -mattr=+m,+v,+zvfhmin,+zvfbfmin,+experimental-zvzip | FileCheck %s --check-prefixes=CHECK,ZVZIP
@@ -117,14 +117,14 @@ define {<vscale x 5 x i32>, <vscale x 5 x i32>, <vscale x 5 x i32>} @vector_dein
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
 ; CHECK-NEXT:    vmv2r.v v8, v14
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v8, (a1)
 ; CHECK-NEXT:    vlseg3e32.v v12, (a0)
 ; CHECK-NEXT:    vlseg3e32.v v20, (a1)
@@ -696,14 +696,14 @@ define {<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16
 ; CHECK-NEXT:    vmv1r.v v10, v13
 ; CHECK-NEXT:    vmv1r.v v11, v14
 ; CHECK-NEXT:    vmv1r.v v8, v21
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vmv1r.v v9, v12
 ; CHECK-NEXT:    vs8r.v v16, (a0)
 ; CHECK-NEXT:    vmv1r.v v12, v15
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v8, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vlseg5e8.v v8, (a0)
@@ -738,7 +738,10 @@ define {<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -746,10 +749,7 @@ define {<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e8.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e8.v v18, (a1)
@@ -779,7 +779,10 @@ define {<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -787,10 +790,7 @@ define {<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e16.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e16.v v18, (a1)
@@ -820,7 +820,10 @@ define {<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -828,10 +831,7 @@ define {<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e32.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e32.v v18, (a1)
@@ -861,7 +861,10 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -869,10 +872,7 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e64.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e64.v v18, (a1)
@@ -921,7 +921,10 @@ define {<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16
 ; CHECK-NEXT:    sub a0, a0, a1
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vslidedown.vx v0, v9, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v16, (a0)
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmerge.vim v24, v10, 1, v0
@@ -929,10 +932,7 @@ define {<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16
 ; CHECK-NEXT:    vslidedown.vx v0, v8, a1
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmerge.vim v28, v10, 1, v0
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vlseg6e8.v v8, (a0)
@@ -969,16 +969,16 @@ define {<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e8.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e8.v v18, (a1)
@@ -1010,16 +1010,16 @@ define {<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e16.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e16.v v18, (a1)
@@ -1051,16 +1051,16 @@ define {<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e32.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e32.v v18, (a1)
@@ -1092,16 +1092,16 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e64.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e64.v v18, (a1)
@@ -1168,14 +1168,14 @@ define {<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16
 ; CHECK-NEXT:    vmv1r.v v8, v23
 ; CHECK-NEXT:    vmv1r.v v9, v14
 ; CHECK-NEXT:    vmv1r.v v12, v25
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vmv1r.v v13, v26
 ; CHECK-NEXT:    vs8r.v v16, (a0)
 ; CHECK-NEXT:    vmv1r.v v14, v27
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v8, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vlseg7e8.v v8, (a0)
@@ -1215,7 +1215,10 @@ define {<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -1225,10 +1228,7 @@ define {<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e8.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e8.v v22, (a1)
@@ -1262,7 +1262,10 @@ define {<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -1272,10 +1275,7 @@ define {<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e16.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e16.v v22, (a1)
@@ -1309,7 +1309,10 @@ define {<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -1319,10 +1322,7 @@ define {<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e32.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e32.v v22, (a1)
@@ -1356,7 +1356,10 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -1366,10 +1369,7 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e64.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e64.v v22, (a1)
@@ -1431,17 +1431,17 @@ define {<vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16 x i1>, <vscale x 16
 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmerge.vim v28, v10, 1, v0
 ; CHECK-NEXT:    vmv1r.v v0, v8
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v16, (a0)
 ; CHECK-NEXT:    vmerge.vim v24, v10, 1, v0
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vslidedown.vx v0, v8, a1
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmerge.vim v26, v10, 1, v0
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e8.v v18, (a0)
@@ -1483,12 +1483,12 @@ define {<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e8.v v0, (a0)
@@ -1525,12 +1525,12 @@ define {<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e16.v v0, (a0)
@@ -1567,12 +1567,12 @@ define {<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e32.v v0, (a0)
@@ -1609,12 +1609,12 @@ define {<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e64.v v0, (a0)
@@ -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
@@ -2452,13 +2437,6 @@ 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:    slli a0, a0, 2
 ; 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 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
@@ -2499,7 +2477,10 @@ define {<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -2507,10 +2488,7 @@ define {<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e16.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e16.v v18, (a1)
@@ -2539,13 +2517,6 @@ define {<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; 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 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
@@ -2586,7 +2557,10 @@ define {<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -2594,10 +2568,7 @@ define {<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vs
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e16.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e16.v v18, (a1)
@@ -2626,13 +2597,6 @@ define {<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscal
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; 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 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
@@ -2673,7 +2637,10 @@ define {<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscal
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -2681,10 +2648,7 @@ define {<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscal
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e32.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e32.v v18, (a1)
@@ -2733,7 +2697,10 @@ define {<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v26, v15
 ; CHECK-NEXT:    vmv1r.v v27, v16
@@ -2741,10 +2708,7 @@ define {<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vs
 ; CHECK-NEXT:    vmv1r.v v25, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v28, v17
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg5e64.v v12, (a0)
 ; CHECK-NEXT:    vlseg5e64.v v18, (a1)
@@ -2773,15 +2737,6 @@ 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:    slli a0, a0, 2
 ; 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 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:    addi a0, sp, 16
 ; CHECK-NEXT:    vs4r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
@@ -2822,16 +2777,16 @@ define {<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e16.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e16.v v18, (a1)
@@ -2863,15 +2818,6 @@ define {<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; 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 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:    addi a0, sp, 16
 ; CHECK-NEXT:    vs4r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
@@ -2912,16 +2858,16 @@ define {<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e16.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e16.v v18, (a1)
@@ -2953,15 +2899,6 @@ define {<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscal
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; 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 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:    addi a0, sp, 16
 ; CHECK-NEXT:    vs4r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
@@ -3002,16 +2939,16 @@ define {<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscal
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e32.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e32.v v18, (a1)
@@ -3063,16 +3000,16 @@ define {<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vmv2r.v v28, v18
 ; CHECK-NEXT:    vmv2r.v v24, v14
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv2r.v v26, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg6e64.v v24, (a0)
 ; CHECK-NEXT:    vlseg6e64.v v18, (a1)
@@ -3104,15 +3041,6 @@ 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:    slli a0, a0, 2
 ; 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 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:    addi a0, sp, 16
 ; CHECK-NEXT:    vs4r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
@@ -3153,7 +3081,10 @@ define {<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -3163,10 +3094,7 @@ define {<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e16.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e16.v v22, (a1)
@@ -3199,15 +3127,6 @@ define {<vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vscale x 2 x bfloat>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; 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 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:    addi a0, sp, 16
 ; CHECK-NEXT:    vs4r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
@@ -3248,7 +3167,10 @@ define {<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -3258,10 +3180,7 @@ define {<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vs
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e16.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e16.v v22, (a1)
@@ -3294,15 +3213,6 @@ define {<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x float>, <vscal
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; 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 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:    addi a0, sp, 16
 ; CHECK-NEXT:    vs4r.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
@@ -3343,7 +3253,10 @@ define {<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscal
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -3353,10 +3266,7 @@ define {<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscal
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e32.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e32.v v22, (a1)
@@ -3409,7 +3319,10 @@ define {<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v30, v21
 ; CHECK-NEXT:    vmv1r.v v28, v19
@@ -3419,10 +3332,7 @@ define {<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vs
 ; CHECK-NEXT:    vmv1r.v v24, v15
 ; CHECK-NEXT:    vs8r.v v8, (a0)
 ; CHECK-NEXT:    vmv1r.v v25, v16
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v24, (a1)
 ; CHECK-NEXT:    vlseg7e64.v v14, (a0)
 ; CHECK-NEXT:    vlseg7e64.v v22, (a1)
@@ -3495,12 +3405,12 @@ define {<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x half>, <vscale x
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e16.v v0, (a0)
@@ -3577,12 +3487,12 @@ define {<vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vscale x 8 x bfloat>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e16.v v0, (a0)
@@ -3659,12 +3569,12 @@ define {<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>, <vscal
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e32.v v0, (a0)
@@ -3721,12 +3631,12 @@ define {<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>, <vs
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vs8r.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vs8r.v v16, (a1)
 ; CHECK-NEXT:    vsetvli a2, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vlseg8e64.v v0, (a0)
@@ -3822,24 +3732,33 @@ define <vscale x 1 x float> @vector_deinterleave_nxv1f32_nxv8f32_oneactive2(<vsc
 
 
 define { <8 x float>, <8 x float> } @interleave_deinterleave2(<8 x float> %a, <8 x float> %b) {
-; V-LABEL: interleave_deinterleave2:
-; V:       # %bb.0: # %entry
-; V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; V-NEXT:    vwaddu.vv v12, v8, v10
-; V-NEXT:    li a0, -1
-; V-NEXT:    vwmaccu.vx v12, a0, v10
-; V-NEXT:    li a0, 32
-; V-NEXT:    vnsrl.wx v10, v12, a0
-; V-NEXT:    vnsrl.wi v8, v12, 0
-; V-NEXT:    ret
-;
 ; ZVZIP-LABEL: interleave_deinterleave2:
 ; ZVZIP:       # %bb.0: # %entry
-; ZVZIP-NEXT:    li a0, 32
-; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-NEXT:    addi sp, sp, -96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 96
+; ZVZIP-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    .cfi_offset ra, -8
+; ZVZIP-NEXT:    .cfi_offset s0, -16
+; ZVZIP-NEXT:    addi s0, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa s0, 0
+; ZVZIP-NEXT:    andi sp, sp, -32
+; ZVZIP-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
 ; ZVZIP-NEXT:    vzip.vv v12, v8, v10
-; ZVZIP-NEXT:    vnsrl.wx v10, v12, a0
-; ZVZIP-NEXT:    vnsrl.wi v8, v12, 0
+; ZVZIP-NEXT:    addi a0, sp, 32
+; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-NEXT:    vse32.v v14, (a0)
+; ZVZIP-NEXT:    mv a0, sp
+; ZVZIP-NEXT:    vse32.v v12, (a0)
+; ZVZIP-NEXT:    vlseg2e32.v v8, (a0)
+; ZVZIP-NEXT:    addi sp, s0, -96
+; ZVZIP-NEXT:    .cfi_def_cfa sp, 96
+; ZVZIP-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    .cfi_restore ra
+; ZVZIP-NEXT:    .cfi_restore s0
+; ZVZIP-NEXT:    addi sp, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 0
 ; ZVZIP-NEXT:    ret
 entry:
   %0 = call <16 x float> @llvm.vector.interleave2.v16f32(<8 x float> %a, <8 x float> %b)
@@ -3848,24 +3767,40 @@ entry:
 }
 
 define <16 x float> @deinterleave_interleave2(<16 x float> %arg) {
-; V-LABEL: deinterleave_interleave2:
-; V:       # %bb.0: # %entry
-; V-NEXT:    li a0, 32
-; V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; V-NEXT:    vnsrl.wx v12, v8, a0
-; V-NEXT:    vnsrl.wi v14, v8, 0
-; V-NEXT:    vwaddu.vv v8, v14, v12
-; V-NEXT:    li a0, -1
-; V-NEXT:    vwmaccu.vx v8, a0, v12
-; V-NEXT:    ret
-;
 ; ZVZIP-LABEL: deinterleave_interleave2:
 ; ZVZIP:       # %bb.0: # %entry
-; ZVZIP-NEXT:    li a0, 32
+; ZVZIP-NEXT:    addi sp, sp, -96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 96
+; ZVZIP-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
+; ZVZIP-NEXT:    .cfi_offset ra, -8
+; ZVZIP-NEXT:    .cfi_offset s0, -16
+; ZVZIP-NEXT:    addi s0, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa s0, 0
+; ZVZIP-NEXT:    andi sp, sp, -32
+; ZVZIP-NEXT:    vsetivli zero, 8, e32, m4, ta, ma
+; ZVZIP-NEXT:    vslidedown.vi v12, v8, 8
+; ZVZIP-NEXT:    mv a0, sp
 ; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT:    vnsrl.wx v12, v8, a0
-; ZVZIP-NEXT:    vnsrl.wi v14, v8, 0
+; ZVZIP-NEXT:    vse32.v v8, (a0)
+; ZVZIP-NEXT:    addi a1, sp, 32
+; ZVZIP-NEXT:    vse32.v v12, (a1)
+; ZVZIP-NEXT:    vlseg2e32.v v8, (a0)
+; ZVZIP-NEXT:    vmv.v.v v12, v10
+; ZVZIP-NEXT:    vmv.v.v v14, v8
+; ZVZIP-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
 ; ZVZIP-NEXT:    vzip.vv v8, v14, v12
+; ZVZIP-NEXT:    vmv2r.v v12, v10
+; ZVZIP-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v12, 8
+; ZVZIP-NEXT:    addi sp, s0, -96
+; ZVZIP-NEXT:    .cfi_def_cfa sp, 96
+; ZVZIP-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
+; ZVZIP-NEXT:    .cfi_restore ra
+; ZVZIP-NEXT:    .cfi_restore s0
+; ZVZIP-NEXT:    addi sp, sp, 96
+; ZVZIP-NEXT:    .cfi_def_cfa_offset 0
 ; ZVZIP-NEXT:    ret
 entry:
   %0 = call { <8 x float>, <8 x float> } @llvm.vector.deinterleave2.v16f32(<16 x float> %arg)
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll b/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll
index a56bb463dd2c4..9558e6a680a34 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-interleave-fixed.ll
@@ -1,63 +1,69 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvfh,+zvfbfmin | FileCheck -check-prefixes=CHECK %s
-; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvfh,+zvfbfmin | FileCheck -check-prefixes=CHECK %s
-; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvbb,+zvfh,+zvfbfmin | FileCheck %s --check-prefix=ZVBB
-; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvbb,+zvfh,+zvfbfmin | FileCheck %s --check-prefix=ZVBB
-; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvbb,+zvfh,+zvfbfmin,+experimental-zvzip | FileCheck %s --check-prefix=ZVZIP
-; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvbb,+zvfh,+zvfbfmin,+experimental-zvzip | FileCheck %s --check-prefix=ZVZIP
+; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvfh,+zvfbfmin | FileCheck -check-prefixes=CHECK,CHECK-RV32 %s
+; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvfh,+zvfbfmin | FileCheck -check-prefixes=CHECK,CHECK-RV64 %s
+; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvbb,+zvfh,+zvfbfmin | FileCheck %s --check-prefixes=ZVBB,ZVBB-RV32
+; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvbb,+zvfh,+zvfbfmin | FileCheck %s --check-prefixes=ZVBB,ZVBB-RV64
+; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zvbb,+zvfh,+zvfbfmin,+experimental-zvzip | FileCheck %s --check-prefixes=ZVZIP,ZVZIP-RV32
+; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zvbb,+zvfh,+zvfbfmin,+experimental-zvzip | FileCheck %s --check-prefixes=ZVZIP,ZVZIP-RV64
 
 ; Integers
 
 define <32 x i1> @vector_interleave_v32i1_v16i1(<16 x i1> %a, <16 x i1> %b) {
 ; CHECK-LABEL: vector_interleave_v32i1_v16i1:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
-; CHECK-NEXT:    vslideup.vi v0, v8, 2
-; CHECK-NEXT:    li a0, 32
-; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
-; CHECK-NEXT:    vmv.v.i v8, 0
-; CHECK-NEXT:    vmerge.vim v8, v8, 1, v0
-; CHECK-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
-; CHECK-NEXT:    vslidedown.vi v10, v8, 16
 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT:    vwaddu.vv v12, v8, v10
-; CHECK-NEXT:    li a1, -1
-; CHECK-NEXT:    vwmaccu.vx v12, a1, v10
-; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
-; CHECK-NEXT:    vmsne.vi v0, v12, 0
+; CHECK-NEXT:    vmv1r.v v9, v0
+; CHECK-NEXT:    vmv.v.i v10, 0
+; CHECK-NEXT:    vmv1r.v v0, v8
+; CHECK-NEXT:    vmerge.vim v11, v10, 1, v0
+; CHECK-NEXT:    vmv1r.v v0, v9
+; CHECK-NEXT:    vmerge.vim v10, v10, 1, v0
+; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vwaddu.vv v8, v10, v11
+; CHECK-NEXT:    li a0, -1
+; CHECK-NEXT:    vwmaccu.vx v8, a0, v11
+; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-NEXT:    vmsne.vi v9, v9, 0
+; CHECK-NEXT:    vmsne.vi v0, v8, 0
+; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
+; CHECK-NEXT:    vslideup.vi v0, v9, 2
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v32i1_v16i1:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
-; ZVBB-NEXT:    vslideup.vi v0, v8, 2
-; ZVBB-NEXT:    li a0, 32
-; ZVBB-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
-; ZVBB-NEXT:    vmv.v.i v8, 0
-; ZVBB-NEXT:    vmerge.vim v8, v8, 1, v0
-; ZVBB-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
-; ZVBB-NEXT:    vslidedown.vi v10, v8, 16
 ; ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; ZVBB-NEXT:    vwsll.vi v12, v10, 8
-; ZVBB-NEXT:    vwaddu.wv v12, v12, v8
-; ZVBB-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
-; ZVBB-NEXT:    vmsne.vi v0, v12, 0
+; ZVBB-NEXT:    vmv.v.i v9, 0
+; ZVBB-NEXT:    vmerge.vim v10, v9, 1, v0
+; ZVBB-NEXT:    vmv1r.v v0, v8
+; ZVBB-NEXT:    vmerge.vim v11, v9, 1, v0
+; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; ZVBB-NEXT:    vwsll.vi v8, v11, 8
+; ZVBB-NEXT:    vwaddu.wv v8, v8, v10
+; ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVBB-NEXT:    vmsne.vi v9, v9, 0
+; ZVBB-NEXT:    vmsne.vi v0, v8, 0
+; ZVBB-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
+; ZVBB-NEXT:    vslideup.vi v0, v9, 2
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v32i1_v16i1:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v0, v8, 2
-; ZVZIP-NEXT:    li a0, 32
-; ZVZIP-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
-; ZVZIP-NEXT:    vmv.v.i v8, 0
-; ZVZIP-NEXT:    vmerge.vim v8, v8, 1, v0
-; ZVZIP-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
-; ZVZIP-NEXT:    vslidedown.vi v10, v8, 16
 ; ZVZIP-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; ZVZIP-NEXT:    vzip.vv v12, v8, v10
-; ZVZIP-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
-; ZVZIP-NEXT:    vmsne.vi v0, v12, 0
+; ZVZIP-NEXT:    vmv1r.v v9, v0
+; ZVZIP-NEXT:    vmv.v.i v10, 0
+; ZVZIP-NEXT:    vmv1r.v v0, v8
+; ZVZIP-NEXT:    vmerge.vim v8, v10, 1, v0
+; ZVZIP-NEXT:    vmv1r.v v0, v9
+; ZVZIP-NEXT:    vmerge.vim v9, v10, 1, v0
+; ZVZIP-NEXT:    vmv.v.v v10, v8
+; ZVZIP-NEXT:    vmv.v.v v11, v9
+; ZVZIP-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVZIP-NEXT:    vmsne.vi v9, v9, 0
+; ZVZIP-NEXT:    vmsne.vi v0, v8, 0
+; ZVZIP-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v0, v9, 2
 ; ZVZIP-NEXT:    ret
 	   %res = call <32 x i1> @llvm.vector.interleave2.v32i1(<16 x i1> %a, <16 x i1> %b)
 	   ret <32 x i1> %res
@@ -66,29 +72,38 @@ define <32 x i1> @vector_interleave_v32i1_v16i1(<16 x i1> %a, <16 x i1> %b) {
 define <16 x i16> @vector_interleave_v16i16_v8i16(<8 x i16> %a, <8 x i16> %b) {
 ; CHECK-LABEL: vector_interleave_v16i16_v8i16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v10, v9
 ; CHECK-NEXT:    vmv1r.v v11, v8
 ; CHECK-NEXT:    vwaddu.vv v8, v11, v10
 ; CHECK-NEXT:    li a0, -1
 ; CHECK-NEXT:    vwmaccu.vx v8, a0, v10
+; CHECK-NEXT:    vmv1r.v v10, v9
+; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v8, v10, 8
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v16i16_v8i16:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vmv1r.v v10, v9
 ; ZVBB-NEXT:    vmv1r.v v11, v8
 ; ZVBB-NEXT:    vwsll.vi v8, v10, 16
 ; ZVBB-NEXT:    vwaddu.wv v8, v8, v11
+; ZVBB-NEXT:    vmv1r.v v10, v9
+; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-NEXT:    vslideup.vi v8, v10, 8
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v16i16_v8i16:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; ZVZIP-NEXT:    vmv1r.v v10, v9
 ; ZVZIP-NEXT:    vmv1r.v v11, v8
 ; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vmv1r.v v10, v9
+; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
 ; ZVZIP-NEXT:    ret
 	   %res = call <16 x i16> @llvm.vector.interleave2.v16i16(<8 x i16> %a, <8 x i16> %b)
 	   ret <16 x i16> %res
@@ -97,30 +112,39 @@ define <16 x i16> @vector_interleave_v16i16_v8i16(<8 x i16> %a, <8 x i16> %b) {
 define <8 x i32> @vector_interleave_v8i32_v4i32(<4 x i32> %a, <4 x i32> %b) {
 ; CHECK-LABEL: vector_interleave_v8i32_v4i32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v10, v9
 ; CHECK-NEXT:    vmv1r.v v11, v8
 ; CHECK-NEXT:    vwaddu.vv v8, v11, v10
 ; CHECK-NEXT:    li a0, -1
 ; CHECK-NEXT:    vwmaccu.vx v8, a0, v10
+; CHECK-NEXT:    vmv1r.v v10, v9
+; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v8, v10, 4
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v8i32_v4i32:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vmv1r.v v10, v9
 ; ZVBB-NEXT:    vmv1r.v v11, v8
 ; ZVBB-NEXT:    li a0, 32
 ; ZVBB-NEXT:    vwsll.vx v8, v10, a0
 ; ZVBB-NEXT:    vwaddu.wv v8, v8, v11
+; ZVBB-NEXT:    vmv1r.v v10, v9
+; ZVBB-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVBB-NEXT:    vslideup.vi v8, v10, 4
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v8i32_v4i32:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
 ; ZVZIP-NEXT:    vmv1r.v v10, v9
 ; ZVZIP-NEXT:    vmv1r.v v11, v8
 ; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vmv1r.v v10, v9
+; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
 ; ZVZIP-NEXT:    ret
 	   %res = call <8 x i32> @llvm.vector.interleave2.v8i32(<4 x i32> %a, <4 x i32> %b)
 	   ret <8 x i32> %res
@@ -129,40 +153,49 @@ define <8 x i32> @vector_interleave_v8i32_v4i32(<4 x i32> %a, <4 x i32> %b) {
 define <4 x i64> @vector_interleave_v4i64_v2i64(<2 x i64> %a, <2 x i64> %b) {
 ; CHECK-LABEL: vector_interleave_v4i64_v2i64:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; CHECK-NEXT:    vmv1r.v v10, v9
-; CHECK-NEXT:    vslideup.vi v8, v10, 2
-; CHECK-NEXT:    lui a0, 12304
-; CHECK-NEXT:    addi a0, a0, 512
-; CHECK-NEXT:    vmv.s.x v10, a0
-; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vsext.vf2 v12, v10
+; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
+; CHECK-NEXT:    vid.v v10
+; CHECK-NEXT:    vand.vi v11, v10, 1
+; CHECK-NEXT:    vmsne.vi v0, v11, 0
+; CHECK-NEXT:    vsrl.vi v12, v10, 1
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    srli a0, a0, 3
+; CHECK-NEXT:    vadd.vx v12, v12, a0, v0.t
 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
 ; CHECK-NEXT:    vrgatherei16.vv v10, v8, v12
+; CHECK-NEXT:    vmv1r.v v8, v11
+; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v10, v8, 2
 ; CHECK-NEXT:    vmv.v.v v8, v10
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v4i64_v2i64:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; ZVBB-NEXT:    vmv1r.v v10, v9
-; ZVBB-NEXT:    vslideup.vi v8, v10, 2
-; ZVBB-NEXT:    lui a0, 12304
-; ZVBB-NEXT:    addi a0, a0, 512
-; ZVBB-NEXT:    vmv.s.x v10, a0
-; ZVBB-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vsext.vf2 v12, v10
+; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
+; ZVBB-NEXT:    vid.v v10
+; ZVBB-NEXT:    vand.vi v11, v10, 1
+; ZVBB-NEXT:    vmsne.vi v0, v11, 0
+; ZVBB-NEXT:    vsrl.vi v12, v10, 1
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a0, a0, 3
+; ZVBB-NEXT:    vadd.vx v12, v12, a0, v0.t
 ; ZVBB-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
 ; ZVBB-NEXT:    vrgatherei16.vv v10, v8, v12
+; ZVBB-NEXT:    vmv1r.v v8, v11
+; ZVBB-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; ZVBB-NEXT:    vslideup.vi v10, v8, 2
 ; ZVBB-NEXT:    vmv.v.v v8, v10
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v4i64_v2i64:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
 ; ZVZIP-NEXT:    vmv1r.v v10, v9
 ; ZVZIP-NEXT:    vmv1r.v v11, v8
 ; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vmv1r.v v10, v9
+; ZVZIP-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v10, 2
 ; ZVZIP-NEXT:    ret
 	   %res = call <4 x i64> @llvm.vector.interleave2.v4i64(<2 x i64> %a, <2 x i64> %b)
 	   ret <4 x i64> %res
@@ -179,15 +212,15 @@ define <6 x i32> @vector_interleave3_v6i32_v2i32(<2 x i32> %a, <2 x i32> %b, <2
 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; CHECK-NEXT:    vsseg3e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
+; CHECK-NEXT:    srli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
 ; CHECK-NEXT:    vle32.v v9, (a2)
 ; CHECK-NEXT:    vle32.v v8, (a0)
 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    add a1, a2, a1
-; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v10, (a1)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vle32.v v10, (a0)
 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
 ; CHECK-NEXT:    vslideup.vi v8, v10, 4
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -206,15 +239,15 @@ define <6 x i32> @vector_interleave3_v6i32_v2i32(<2 x i32> %a, <2 x i32> %b, <2
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; ZVBB-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
+; ZVBB-NEXT:    srli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
 ; ZVBB-NEXT:    vle32.v v9, (a2)
 ; ZVBB-NEXT:    vle32.v v8, (a0)
 ; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    add a1, a2, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v10, (a1)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vle32.v v10, (a0)
 ; ZVBB-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
 ; ZVBB-NEXT:    vslideup.vi v8, v10, 4
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -233,15 +266,15 @@ define <6 x i32> @vector_interleave3_v6i32_v2i32(<2 x i32> %a, <2 x i32> %b, <2
 ; ZVZIP-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; ZVZIP-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 1
-; ZVZIP-NEXT:    add a2, a0, a1
+; ZVZIP-NEXT:    srli a2, a1, 1
+; ZVZIP-NEXT:    add a2, a0, a2
 ; ZVZIP-NEXT:    vle32.v v9, (a2)
 ; ZVZIP-NEXT:    vle32.v v8, (a0)
 ; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
 ; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vle32.v v10, (a1)
+; ZVZIP-NEXT:    add a0, a0, a1
+; ZVZIP-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; ZVZIP-NEXT:    vle32.v v10, (a0)
 ; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
 ; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
 ; ZVZIP-NEXT:    csrr a0, vlenb
@@ -254,679 +287,2541 @@ define <6 x i32> @vector_interleave3_v6i32_v2i32(<2 x i32> %a, <2 x i32> %b, <2
 }
 
 define <8 x i32> @vector_interleave4_v8i32_v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i32> %d) nounwind {
-; CHECK-LABEL: vector_interleave4_v8i32_v2i32:
+; CHECK-RV32-LABEL: vector_interleave4_v8i32_v2i32:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    addi s0, sp, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV32-NEXT:    vsseg4e32.v v8, (s0)
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    srli a0, s1, 3
+; CHECK-RV32-NEXT:    li a1, 12
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s1, 1
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; CHECK-RV32-NEXT:    vle32.v v9, (a0)
+; CHECK-RV32-NEXT:    add a1, s0, a1
+; CHECK-RV32-NEXT:    vle32.v v10, (a1)
+; CHECK-RV32-NEXT:    vle32.v v8, (s0)
+; CHECK-RV32-NEXT:    add s0, s0, s1
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 2
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV32-NEXT:    vle32.v v10, (s0)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
+;
+; CHECK-RV64-LABEL: vector_interleave4_v8i32_v2i32:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    addi s0, sp, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV64-NEXT:    vsseg4e32.v v8, (s0)
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    srli a0, s1, 3
+; CHECK-RV64-NEXT:    li a1, 12
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s1, 1
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; CHECK-RV64-NEXT:    vle32.v v9, (a0)
+; CHECK-RV64-NEXT:    add a1, s0, a1
+; CHECK-RV64-NEXT:    vle32.v v10, (a1)
+; CHECK-RV64-NEXT:    vle32.v v8, (s0)
+; CHECK-RV64-NEXT:    add s0, s0, s1
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 2
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV64-NEXT:    vle32.v v10, (s0)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
+;
+; ZVBB-RV32-LABEL: vector_interleave4_v8i32_v2i32:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    addi s0, sp, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vsseg4e32.v v8, (s0)
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    srli a0, s1, 3
+; ZVBB-RV32-NEXT:    li a1, 12
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s1, 1
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vle32.v v9, (a0)
+; ZVBB-RV32-NEXT:    add a1, s0, a1
+; ZVBB-RV32-NEXT:    vle32.v v10, (a1)
+; ZVBB-RV32-NEXT:    vle32.v v8, (s0)
+; ZVBB-RV32-NEXT:    add s0, s0, s1
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 2
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vle32.v v10, (s0)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave4_v8i32_v2i32:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    addi s0, sp, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vsseg4e32.v v8, (s0)
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    srli a0, s1, 3
+; ZVBB-RV64-NEXT:    li a1, 12
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s1, 1
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vle32.v v9, (a0)
+; ZVBB-RV64-NEXT:    add a1, s0, a1
+; ZVBB-RV64-NEXT:    vle32.v v10, (a1)
+; ZVBB-RV64-NEXT:    vle32.v v8, (s0)
+; ZVBB-RV64-NEXT:    add s0, s0, s1
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 2
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vle32.v v10, (s0)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave4_v8i32_v2i32:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    addi s0, sp, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg4e32.v v8, (s0)
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    srli a0, s1, 3
+; ZVZIP-RV32-NEXT:    li a1, 12
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s1, 1
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vle32.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add a1, s0, a1
+; ZVZIP-RV32-NEXT:    vle32.v v10, (a1)
+; ZVZIP-RV32-NEXT:    vle32.v v8, (s0)
+; ZVZIP-RV32-NEXT:    add s0, s0, s1
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 2
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vle32.v v10, (s0)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave4_v8i32_v2i32:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    addi s0, sp, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg4e32.v v8, (s0)
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    srli a0, s1, 3
+; ZVZIP-RV64-NEXT:    li a1, 12
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s1, 1
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vle32.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add a1, s0, a1
+; ZVZIP-RV64-NEXT:    vle32.v v10, (a1)
+; ZVZIP-RV64-NEXT:    vle32.v v8, (s0)
+; ZVZIP-RV64-NEXT:    add s0, s0, s1
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 2
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vle32.v v10, (s0)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
+	   %res = call <8 x i32> @llvm.vector.interleave4.v8i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i32> %d)
+	   ret <8 x i32> %res
+}
+
+define <10 x i16> @vector_interleave5_v10i16_v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e) nounwind {
+; CHECK-RV32-LABEL: vector_interleave5_v10i16_v2i16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -48
+; CHECK-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s0, vlenb
+; CHECK-RV32-NEXT:    slli a0, s0, 1
+; CHECK-RV32-NEXT:    add s0, a0, s0
+; CHECK-RV32-NEXT:    add s0, sp, s0
+; CHECK-RV32-NEXT:    addi s0, s0, 32
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    add a0, s0, s1
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 32
+; CHECK-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s1, 2
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 32
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s1, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli s1, s1, 1
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s0, s1
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vle16.v v8, (s0)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    addi a0, sp, 32
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 32
+; CHECK-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 48
+; CHECK-RV32-NEXT:    ret
+;
+; CHECK-RV64-LABEL: vector_interleave5_v10i16_v2i16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -64
+; CHECK-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s0, vlenb
+; CHECK-RV64-NEXT:    slli a0, s0, 1
+; CHECK-RV64-NEXT:    add s0, a0, s0
+; CHECK-RV64-NEXT:    add s0, sp, s0
+; CHECK-RV64-NEXT:    addi s0, s0, 32
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    add a0, s0, s1
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 32
+; CHECK-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s1, 2
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 32
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s1, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli s1, s1, 1
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s0, s1
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vle16.v v8, (s0)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    addi a0, sp, 32
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 32
+; CHECK-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 64
+; CHECK-RV64-NEXT:    ret
+;
+; ZVBB-RV32-LABEL: vector_interleave5_v10i16_v2i16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -48
+; ZVBB-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, s0, 1
+; ZVBB-RV32-NEXT:    add s0, a0, s0
+; ZVBB-RV32-NEXT:    add s0, sp, s0
+; ZVBB-RV32-NEXT:    addi s0, s0, 32
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    add a0, s0, s1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 32
+; ZVBB-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s1, 2
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 32
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s1, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli s1, s1, 1
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s0, s1
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vle16.v v8, (s0)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    addi a0, sp, 32
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 32
+; ZVBB-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 48
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave5_v10i16_v2i16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -64
+; ZVBB-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, s0, 1
+; ZVBB-RV64-NEXT:    add s0, a0, s0
+; ZVBB-RV64-NEXT:    add s0, sp, s0
+; ZVBB-RV64-NEXT:    addi s0, s0, 32
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    add a0, s0, s1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 32
+; ZVBB-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s1, 2
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 32
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s1, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli s1, s1, 1
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s0, s1
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vle16.v v8, (s0)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    addi a0, sp, 32
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 32
+; ZVBB-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 64
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave5_v10i16_v2i16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -48
+; ZVZIP-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, s0, 1
+; ZVZIP-RV32-NEXT:    add s0, a0, s0
+; ZVZIP-RV32-NEXT:    add s0, sp, s0
+; ZVZIP-RV32-NEXT:    addi s0, s0, 32
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    add a0, s0, s1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 32
+; ZVZIP-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s1, 2
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 32
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s1, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli s1, s1, 1
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s0, s1
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s0)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    addi a0, sp, 32
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 32
+; ZVZIP-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 48
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave5_v10i16_v2i16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -64
+; ZVZIP-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, s0, 1
+; ZVZIP-RV64-NEXT:    add s0, a0, s0
+; ZVZIP-RV64-NEXT:    add s0, sp, s0
+; ZVZIP-RV64-NEXT:    addi s0, s0, 32
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    add a0, s0, s1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 32
+; ZVZIP-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s1, 2
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 32
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s1, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli s1, s1, 1
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s0, s1
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s0)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    addi a0, sp, 32
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 32
+; ZVZIP-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 64
+; ZVZIP-RV64-NEXT:    ret
+	   %res = call <10 x i16> @llvm.vector.interleave5.v10i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e)
+	   ret <10 x i16> %res
+}
+
+define <12 x i16> @vector_interleave6_v12i16_v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e, <2 x i16> %f) nounwind {
+; CHECK-RV32-LABEL: vector_interleave6_v12i16_v2i16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli a0, s1, 1
+; CHECK-RV32-NEXT:    add s1, a0, s1
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli a0, s2, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vle16.v v8, (a1)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 10
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (s1)
+; CHECK-RV32-NEXT:    addi a1, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    csrr a1, vlenb
+; CHECK-RV32-NEXT:    add a1, sp, a1
+; CHECK-RV32-NEXT:    addi a1, a1, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    csrr a1, vlenb
+; CHECK-RV32-NEXT:    slli a1, a1, 1
+; CHECK-RV32-NEXT:    add a1, sp, a1
+; CHECK-RV32-NEXT:    addi a1, a1, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s1, s2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
+;
+; CHECK-RV64-LABEL: vector_interleave6_v12i16_v2i16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli a0, s1, 1
+; CHECK-RV64-NEXT:    add s1, a0, s1
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli a0, s2, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vle16.v v8, (a1)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 10
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (s1)
+; CHECK-RV64-NEXT:    addi a1, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    csrr a1, vlenb
+; CHECK-RV64-NEXT:    add a1, sp, a1
+; CHECK-RV64-NEXT:    addi a1, a1, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    csrr a1, vlenb
+; CHECK-RV64-NEXT:    slli a1, a1, 1
+; CHECK-RV64-NEXT:    add a1, sp, a1
+; CHECK-RV64-NEXT:    addi a1, a1, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s1, s2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
+;
+; ZVBB-RV32-LABEL: vector_interleave6_v12i16_v2i16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli a0, s1, 1
+; ZVBB-RV32-NEXT:    add s1, a0, s1
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli a0, s2, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 10
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV32-NEXT:    addi a1, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a1, 1
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s1, s2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave6_v12i16_v2i16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli a0, s1, 1
+; ZVBB-RV64-NEXT:    add s1, a0, s1
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli a0, s2, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 10
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV64-NEXT:    addi a1, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a1, 1
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s1, s2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave6_v12i16_v2i16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, s1, 1
+; ZVZIP-RV32-NEXT:    add s1, a0, s1
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli a0, s2, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 10
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    addi a1, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    csrr a1, vlenb
+; ZVZIP-RV32-NEXT:    add a1, sp, a1
+; ZVZIP-RV32-NEXT:    addi a1, a1, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    csrr a1, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a1, 1
+; ZVZIP-RV32-NEXT:    add a1, sp, a1
+; ZVZIP-RV32-NEXT:    addi a1, a1, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s1, s2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave6_v12i16_v2i16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, s1, 1
+; ZVZIP-RV64-NEXT:    add s1, a0, s1
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli a0, s2, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 10
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    addi a1, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    csrr a1, vlenb
+; ZVZIP-RV64-NEXT:    add a1, sp, a1
+; ZVZIP-RV64-NEXT:    addi a1, a1, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    csrr a1, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a1, 1
+; ZVZIP-RV64-NEXT:    add a1, sp, a1
+; ZVZIP-RV64-NEXT:    addi a1, a1, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s1, s2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
+	   %res = call <12 x i16> @llvm.vector.interleave6.v12i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e, <2 x i16> %f)
+	   ret <12 x i16> %res
+}
+
+define <14 x i8> @vector_interleave7_v14i8_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g) nounwind {
+; CHECK-RV32-LABEL: vector_interleave7_v14i8_v2i8:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli s1, s1, 2
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vsseg7e8.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 3
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a2, a0, 1
+; CHECK-RV32-NEXT:    add a0, a2, a0
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vle8.v v8, (a1)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    add a0, s1, s0
+; CHECK-RV32-NEXT:    vle8.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 5
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (s1)
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle8.v v9, (a0)
+; CHECK-RV32-NEXT:    srli a0, s2, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    csrr a1, vlenb
+; CHECK-RV32-NEXT:    add a1, sp, a1
+; CHECK-RV32-NEXT:    addi a1, a1, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 2
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v10, (a0)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 4
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 1
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 6
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
+;
+; CHECK-RV64-LABEL: vector_interleave7_v14i8_v2i8:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli s1, s1, 2
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vsseg7e8.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 3
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a2, a0, 1
+; CHECK-RV64-NEXT:    add a0, a2, a0
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vle8.v v8, (a1)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    add a0, s1, s0
+; CHECK-RV64-NEXT:    vle8.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 5
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (s1)
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle8.v v9, (a0)
+; CHECK-RV64-NEXT:    srli a0, s2, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    csrr a1, vlenb
+; CHECK-RV64-NEXT:    add a1, sp, a1
+; CHECK-RV64-NEXT:    addi a1, a1, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 2
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v10, (a0)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 4
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 1
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 6
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
+;
+; ZVBB-RV32-LABEL: vector_interleave7_v14i8_v2i8:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli s1, s1, 2
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vsseg7e8.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 3
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a2, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vle8.v v8, (a1)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    add a0, s1, s0
+; ZVBB-RV32-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 5
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (s1)
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle8.v v9, (a0)
+; ZVBB-RV32-NEXT:    srli a0, s2, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 2
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v10, (a0)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 4
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 6
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave7_v14i8_v2i8:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli s1, s1, 2
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vsseg7e8.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 3
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a2, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vle8.v v8, (a1)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    add a0, s1, s0
+; ZVBB-RV64-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 5
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (s1)
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle8.v v9, (a0)
+; ZVBB-RV64-NEXT:    srli a0, s2, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 2
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v10, (a0)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 4
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 6
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave7_v14i8_v2i8:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli s1, s1, 2
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg7e8.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 3
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a2, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a2, a0
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a1)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    add a0, s1, s0
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 5
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (s1)
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle8.v v9, (a0)
+; ZVZIP-RV32-NEXT:    srli a0, s2, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    csrr a1, vlenb
+; ZVZIP-RV32-NEXT:    add a1, sp, a1
+; ZVZIP-RV32-NEXT:    addi a1, a1, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 2
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v10, (a0)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 4
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 6
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave7_v14i8_v2i8:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli s1, s1, 2
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg7e8.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 3
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a2, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a2, a0
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a1)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    add a0, s1, s0
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 5
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (s1)
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle8.v v9, (a0)
+; ZVZIP-RV64-NEXT:    srli a0, s2, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    csrr a1, vlenb
+; ZVZIP-RV64-NEXT:    add a1, sp, a1
+; ZVZIP-RV64-NEXT:    addi a1, a1, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 2
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v10, (a0)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 4
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 6
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
+	   %res = call <14 x i8> @llvm.vector.interleave7.v14i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g)
+	   ret <14 x i8> %res
+}
+
+define <16 x i8> @vector_interleave8_v16i8_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g, <2 x i8> %h) nounwind {
+; CHECK-RV32-LABEL: vector_interleave8_v16i8_v2i8:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 1
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli s1, s1, 1
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vsseg8e8.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 5
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (a0)
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vle8.v v9, (a1)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 7
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a1, s1, s0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (a1)
+; CHECK-RV32-NEXT:    vle8.v v11, (s1)
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle8.v v9, (a0)
+; CHECK-RV32-NEXT:    srli a0, s2, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v11, v8, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 6
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v11, v8, 4
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 3
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV32-NEXT:    vle8.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 6
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 8
+; CHECK-RV32-NEXT:    vmv.v.v v8, v9
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 1
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
+;
+; CHECK-RV64-LABEL: vector_interleave8_v16i8_v2i8:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 1
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli s1, s1, 1
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vsseg8e8.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 5
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (a0)
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vle8.v v9, (a1)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 7
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a1, s1, s0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (a1)
+; CHECK-RV64-NEXT:    vle8.v v11, (s1)
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle8.v v9, (a0)
+; CHECK-RV64-NEXT:    srli a0, s2, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v11, v8, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 6
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v11, v8, 4
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 3
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; CHECK-RV64-NEXT:    vle8.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 6
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 8
+; CHECK-RV64-NEXT:    vmv.v.v v8, v9
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 1
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
+;
+; ZVBB-RV32-LABEL: vector_interleave8_v16i8_v2i8:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli s1, s1, 1
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vsseg8e8.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 5
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vle8.v v9, (a1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 7
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a1, s1, s0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (a1)
+; ZVBB-RV32-NEXT:    vle8.v v11, (s1)
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle8.v v9, (a0)
+; ZVBB-RV32-NEXT:    srli a0, s2, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v11, v8, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 6
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v11, v8, 4
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 3
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV32-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 6
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 8
+; ZVBB-RV32-NEXT:    vmv.v.v v8, v9
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave8_v16i8_v2i8:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli s1, s1, 1
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vsseg8e8.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 5
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vle8.v v9, (a1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 7
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a1, s1, s0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (a1)
+; ZVBB-RV64-NEXT:    vle8.v v11, (s1)
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle8.v v9, (a0)
+; ZVBB-RV64-NEXT:    srli a0, s2, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v11, v8, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 6
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v11, v8, 4
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 3
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVBB-RV64-NEXT:    vle8.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 6
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 8
+; ZVBB-RV64-NEXT:    vmv.v.v v8, v9
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave8_v16i8_v2i8:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli s1, s1, 1
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg8e8.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 5
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vle8.v v9, (a1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 7
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a1, s1, s0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a1)
+; ZVZIP-RV32-NEXT:    vle8.v v11, (s1)
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle8.v v9, (a0)
+; ZVZIP-RV32-NEXT:    srli a0, s2, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v11, v8, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 6
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v11, v8, 4
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 3
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV32-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 6
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 8
+; ZVZIP-RV32-NEXT:    vmv.v.v v8, v9
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave8_v16i8_v2i8:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli s1, s1, 1
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg8e8.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 5
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vle8.v v9, (a1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 7
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a1, s1, s0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a1)
+; ZVZIP-RV64-NEXT:    vle8.v v11, (s1)
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle8.v v9, (a0)
+; ZVZIP-RV64-NEXT:    srli a0, s2, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v11, v8, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 6
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v11, v8, 4
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 3
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
+; ZVZIP-RV64-NEXT:    vle8.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 6
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 8
+; ZVZIP-RV64-NEXT:    vmv.v.v v8, v9
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
+	   %res = call <16 x i8> @llvm.vector.interleave8.v16i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g, <2 x i8> %h)
+	   ret <16 x i8> %res
+}
+
+; Floats
+
+define <4 x half> @vector_interleave_v4f16_v2f16(<2 x half> %a, <2 x half> %b) {
+; CHECK-LABEL: vector_interleave_v4f16_v2f16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vsseg4e32.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vle32.v v9, (a1)
-; CHECK-NEXT:    vle32.v v10, (a2)
-; CHECK-NEXT:    vle32.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 2
-; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v10, (a3)
-; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 2
-; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-NEXT:    vwaddu.vv v10, v8, v9
+; CHECK-NEXT:    li a0, -1
+; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
 ; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    srli a0, a0, 3
+; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-NEXT:    vslidedown.vx v8, v10, a0
+; CHECK-NEXT:    vslideup.vi v10, v8, 2
+; CHECK-NEXT:    vmv1r.v v8, v10
 ; CHECK-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave4_v8i32_v2i32:
+; ZVBB-LABEL: vector_interleave_v4f16_v2f16:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vsseg4e32.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vle32.v v9, (a1)
-; ZVBB-NEXT:    vle32.v v10, (a2)
-; ZVBB-NEXT:    vle32.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v10, (a3)
-; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-NEXT:    vwsll.vi v10, v9, 16
+; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
 ; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
+; ZVBB-NEXT:    srli a0, a0, 3
+; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v8, v10, a0
+; ZVBB-NEXT:    vslideup.vi v10, v8, 2
+; ZVBB-NEXT:    vmv1r.v v8, v10
 ; ZVBB-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave4_v8i32_v2i32:
+; ZVZIP-LABEL: vector_interleave_v4f16_v2f16:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vsseg4e32.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 1
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    add a1, a3, a1
-; ZVZIP-NEXT:    vle32.v v9, (a1)
-; ZVZIP-NEXT:    vle32.v v10, (a2)
-; ZVZIP-NEXT:    vle32.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vle32.v v10, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-NEXT:    vzip.vv v10, v8, v9
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
+; ZVZIP-NEXT:    srli a0, a0, 3
+; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-NEXT:    vslidedown.vx v8, v10, a0
+; ZVZIP-NEXT:    vslideup.vi v10, v8, 2
+; ZVZIP-NEXT:    vmv1r.v v8, v10
 ; ZVZIP-NEXT:    ret
-	   %res = call <8 x i32> @llvm.vector.interleave4.v8i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i32> %d)
-	   ret <8 x i32> %res
+	   %res = call <4 x half> @llvm.vector.interleave2.v4f16(<2 x half> %a, <2 x half> %b)
+	   ret <4 x half> %res
 }
 
-define <10 x i16> @vector_interleave5_v10i16_v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e) nounwind {
-; CHECK-LABEL: vector_interleave5_v10i16_v2i16:
+define <4 x bfloat> @vector_interleave_v4bf16_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b) {
+; CHECK-LABEL: vector_interleave_v4bf16_v2bf16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg5e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    vle16.v v9, (a2)
-; CHECK-NEXT:    add a2, a2, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v11, v10, 2
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v11, 4
-; CHECK-NEXT:    add a1, a3, a1
 ; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a1)
-; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-NEXT:    vwaddu.vv v10, v8, v9
+; CHECK-NEXT:    li a0, -1
+; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
 ; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
+; CHECK-NEXT:    srli a0, a0, 3
+; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-NEXT:    vslidedown.vx v8, v10, a0
+; CHECK-NEXT:    vslideup.vi v10, v8, 2
+; CHECK-NEXT:    vmv1r.v v8, v10
 ; CHECK-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave5_v10i16_v2i16:
+; ZVBB-LABEL: vector_interleave_v4bf16_v2bf16:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg5e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    vle16.v v9, (a2)
-; ZVBB-NEXT:    add a2, a2, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v11, v10, 2
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v11, 4
-; ZVBB-NEXT:    add a1, a3, a1
 ; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a1)
-; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-NEXT:    vwsll.vi v10, v9, 16
+; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
 ; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
+; ZVBB-NEXT:    srli a0, a0, 3
+; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v8, v10, a0
+; ZVBB-NEXT:    vslideup.vi v10, v8, 2
+; ZVBB-NEXT:    vmv1r.v v8, v10
 ; ZVBB-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave5_v10i16_v2i16:
+; ZVZIP-LABEL: vector_interleave_v4bf16_v2bf16:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg5e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    vle16.v v9, (a2)
-; ZVZIP-NEXT:    add a2, a2, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vle16.v v11, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v11, v10, 2
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v11, 4
-; ZVZIP-NEXT:    add a1, a3, a1
 ; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-NEXT:    vzip.vv v10, v8, v9
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
+; ZVZIP-NEXT:    srli a0, a0, 3
+; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-NEXT:    vslidedown.vx v8, v10, a0
+; ZVZIP-NEXT:    vslideup.vi v10, v8, 2
+; ZVZIP-NEXT:    vmv1r.v v8, v10
 ; ZVZIP-NEXT:    ret
-	   %res = call <10 x i16> @llvm.vector.interleave5.v10i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e)
-	   ret <10 x i16> %res
+	   %res = call <4 x bfloat> @llvm.vector.interleave2.v4bf16(<2 x bfloat> %a, <2 x bfloat> %b)
+	   ret <4 x bfloat> %res
 }
 
-define <12 x i16> @vector_interleave6_v12i16_v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e, <2 x i16> %f) nounwind {
-; CHECK-LABEL: vector_interleave6_v12i16_v2i16:
+define <8 x half> @vector_interleave_v8f16_v4f16(<4 x half> %a, <4 x half> %b) {
+; CHECK-LABEL: vector_interleave_v8f16_v4f16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
+; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vwaddu.vv v10, v8, v9
+; CHECK-NEXT:    li a0, -1
+; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
 ; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg6e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    vle16.v v9, (a2)
-; CHECK-NEXT:    add a2, a2, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v11, v10, 2
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a1)
+; CHECK-NEXT:    srli a0, a0, 3
+; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vslidedown.vx v8, v10, a0
 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v11, 4
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 2
-; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 8
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
-;
-; ZVBB-LABEL: vector_interleave6_v12i16_v2i16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg6e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    vle16.v v9, (a2)
-; ZVBB-NEXT:    add a2, a2, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v11, v10, 2
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a1)
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v11, 4
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 8
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
-;
-; ZVZIP-LABEL: vector_interleave6_v12i16_v2i16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg6e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    vle16.v v9, (a2)
-; ZVZIP-NEXT:    add a2, a2, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vle16.v v11, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    add a3, a3, a1
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v11, v10, 2
-; ZVZIP-NEXT:    add a1, a3, a1
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v11, 4
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
-	   %res = call <12 x i16> @llvm.vector.interleave6.v12i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i16> %d, <2 x i16> %e, <2 x i16> %f)
-	   ret <12 x i16> %res
-}
-
-define <14 x i8> @vector_interleave7_v14i8_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g) nounwind {
-; CHECK-LABEL: vector_interleave7_v14i8_v2i8:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
-; CHECK-NEXT:    vsseg7e8.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 3
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle8.v v9, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vle8.v v10, (a2)
-; CHECK-NEXT:    add a2, a3, a1
-; CHECK-NEXT:    add a4, a2, a1
-; CHECK-NEXT:    vle8.v v11, (a4)
-; CHECK-NEXT:    vle8.v v8, (a0)
-; CHECK-NEXT:    vle8.v v12, (a2)
-; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 2
-; CHECK-NEXT:    add a1, a4, a1
-; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; CHECK-NEXT:    vle8.v v10, (a1)
-; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v12, v11, 2
-; CHECK-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v9, 4
-; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; CHECK-NEXT:    vle8.v v9, (a3)
-; CHECK-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v12, v10, 4
-; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v9, 6
-; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v12, 8
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
-;
-; ZVBB-LABEL: vector_interleave7_v14i8_v2i8:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
-; ZVBB-NEXT:    vsseg7e8.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 3
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle8.v v9, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vle8.v v10, (a2)
-; ZVBB-NEXT:    add a2, a3, a1
-; ZVBB-NEXT:    add a4, a2, a1
-; ZVBB-NEXT:    vle8.v v11, (a4)
-; ZVBB-NEXT:    vle8.v v8, (a0)
-; ZVBB-NEXT:    vle8.v v12, (a2)
-; ZVBB-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 2
-; ZVBB-NEXT:    add a1, a4, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVBB-NEXT:    vle8.v v10, (a1)
-; ZVBB-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v12, v11, 2
-; ZVBB-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v9, 4
-; ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVBB-NEXT:    vle8.v v9, (a3)
-; ZVBB-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v12, v10, 4
-; ZVBB-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v9, 6
-; ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v12, 8
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
-;
-; ZVZIP-LABEL: vector_interleave7_v14i8_v2i8:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
-; ZVZIP-NEXT:    vsseg7e8.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 3
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle8.v v9, (a3)
-; ZVZIP-NEXT:    add a3, a3, a1
-; ZVZIP-NEXT:    vle8.v v10, (a2)
-; ZVZIP-NEXT:    add a2, a3, a1
-; ZVZIP-NEXT:    add a4, a2, a1
-; ZVZIP-NEXT:    vle8.v v11, (a4)
-; ZVZIP-NEXT:    vle8.v v8, (a0)
-; ZVZIP-NEXT:    vle8.v v12, (a2)
-; ZVZIP-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 2
-; ZVZIP-NEXT:    add a1, a4, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVZIP-NEXT:    vle8.v v10, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v12, v11, 2
-; ZVZIP-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 4
-; ZVZIP-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVZIP-NEXT:    vle8.v v9, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v12, v10, 4
-; ZVZIP-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 6
-; ZVZIP-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v12, 8
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
-	   %res = call <14 x i8> @llvm.vector.interleave7.v14i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g)
-	   ret <14 x i8> %res
-}
-
-define <16 x i8> @vector_interleave8_v16i8_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g, <2 x i8> %h) nounwind {
-; CHECK-LABEL: vector_interleave8_v16i8_v2i8:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
-; CHECK-NEXT:    vsseg8e8.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 3
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a4, a3, a1
-; CHECK-NEXT:    add a5, a4, a1
-; CHECK-NEXT:    add a6, a5, a1
-; CHECK-NEXT:    vle8.v v9, (a6)
-; CHECK-NEXT:    vle8.v v10, (a5)
-; CHECK-NEXT:    add a6, a6, a1
-; CHECK-NEXT:    vle8.v v11, (a6)
-; CHECK-NEXT:    vle8.v v12, (a2)
-; CHECK-NEXT:    vle8.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; CHECK-NEXT:    vle8.v v9, (a3)
-; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v12, 2
-; CHECK-NEXT:    add a1, a6, a1
-; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; CHECK-NEXT:    vle8.v v12, (a1)
-; CHECK-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v10, v11, 4
-; CHECK-NEXT:    vslideup.vi v8, v9, 4
-; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; CHECK-NEXT:    vle8.v v9, (a4)
-; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v12, 6
-; CHECK-NEXT:    vslideup.vi v8, v9, 6
-; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 8
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
-;
-; ZVBB-LABEL: vector_interleave8_v16i8_v2i8:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
-; ZVBB-NEXT:    vsseg8e8.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 3
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a4, a3, a1
-; ZVBB-NEXT:    add a5, a4, a1
-; ZVBB-NEXT:    add a6, a5, a1
-; ZVBB-NEXT:    vle8.v v9, (a6)
-; ZVBB-NEXT:    vle8.v v10, (a5)
-; ZVBB-NEXT:    add a6, a6, a1
-; ZVBB-NEXT:    vle8.v v11, (a6)
-; ZVBB-NEXT:    vle8.v v12, (a2)
-; ZVBB-NEXT:    vle8.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVBB-NEXT:    vle8.v v9, (a3)
-; ZVBB-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v12, 2
-; ZVBB-NEXT:    add a1, a6, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVBB-NEXT:    vle8.v v12, (a1)
-; ZVBB-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v10, v11, 4
-; ZVBB-NEXT:    vslideup.vi v8, v9, 4
-; ZVBB-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVBB-NEXT:    vle8.v v9, (a4)
-; ZVBB-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v12, 6
-; ZVBB-NEXT:    vslideup.vi v8, v9, 6
-; ZVBB-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 8
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
-;
-; ZVZIP-LABEL: vector_interleave8_v16i8_v2i8:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
-; ZVZIP-NEXT:    vsseg8e8.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 3
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    add a4, a3, a1
-; ZVZIP-NEXT:    add a5, a4, a1
-; ZVZIP-NEXT:    add a6, a5, a1
-; ZVZIP-NEXT:    vle8.v v9, (a6)
-; ZVZIP-NEXT:    vle8.v v10, (a5)
-; ZVZIP-NEXT:    add a6, a6, a1
-; ZVZIP-NEXT:    vle8.v v11, (a6)
-; ZVZIP-NEXT:    vle8.v v12, (a2)
-; ZVZIP-NEXT:    vle8.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVZIP-NEXT:    vle8.v v9, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v12, 2
-; ZVZIP-NEXT:    add a1, a6, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVZIP-NEXT:    vle8.v v12, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v11, 4
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 4
-; ZVZIP-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
-; ZVZIP-NEXT:    vle8.v v9, (a4)
-; ZVZIP-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v12, 6
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 6
-; ZVZIP-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
-	   %res = call <16 x i8> @llvm.vector.interleave8.v16i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g, <2 x i8> %h)
-	   ret <16 x i8> %res
-}
-
-; Floats
-
-define <4 x half> @vector_interleave_v4f16_v2f16(<2 x half> %a, <2 x half> %b) {
-; CHECK-LABEL: vector_interleave_v4f16_v2f16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; CHECK-NEXT:    vwaddu.vv v10, v8, v9
-; CHECK-NEXT:    li a0, -1
-; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
-; CHECK-NEXT:    vmv1r.v v8, v10
-; CHECK-NEXT:    ret
-;
-; ZVBB-LABEL: vector_interleave_v4f16_v2f16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; ZVBB-NEXT:    vwsll.vi v10, v9, 16
-; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
-; ZVBB-NEXT:    vmv1r.v v8, v10
-; ZVBB-NEXT:    ret
-;
-; ZVZIP-LABEL: vector_interleave_v4f16_v2f16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vzip.vv v10, v8, v9
-; ZVZIP-NEXT:    vmv1r.v v8, v10
-; ZVZIP-NEXT:    ret
-	   %res = call <4 x half> @llvm.vector.interleave2.v4f16(<2 x half> %a, <2 x half> %b)
-	   ret <4 x half> %res
-}
-
-define <4 x bfloat> @vector_interleave_v4bf16_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b) {
-; CHECK-LABEL: vector_interleave_v4bf16_v2bf16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; CHECK-NEXT:    vwaddu.vv v10, v8, v9
-; CHECK-NEXT:    li a0, -1
-; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
-; CHECK-NEXT:    vmv1r.v v8, v10
-; CHECK-NEXT:    ret
-;
-; ZVBB-LABEL: vector_interleave_v4bf16_v2bf16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; ZVBB-NEXT:    vwsll.vi v10, v9, 16
-; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
-; ZVBB-NEXT:    vmv1r.v v8, v10
-; ZVBB-NEXT:    ret
-;
-; ZVZIP-LABEL: vector_interleave_v4bf16_v2bf16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vzip.vv v10, v8, v9
-; ZVZIP-NEXT:    vmv1r.v v8, v10
-; ZVZIP-NEXT:    ret
-	   %res = call <4 x bfloat> @llvm.vector.interleave2.v4bf16(<2 x bfloat> %a, <2 x bfloat> %b)
-	   ret <4 x bfloat> %res
-}
-
-define <8 x half> @vector_interleave_v8f16_v4f16(<4 x half> %a, <4 x half> %b) {
-; CHECK-LABEL: vector_interleave_v8f16_v4f16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vwaddu.vv v10, v8, v9
-; CHECK-NEXT:    li a0, -1
-; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
-; CHECK-NEXT:    vmv1r.v v8, v10
+; CHECK-NEXT:    vslideup.vi v10, v8, 4
+; CHECK-NEXT:    vmv.v.v v8, v10
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v8f16_v4f16:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vwsll.vi v10, v9, 16
 ; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
-; ZVBB-NEXT:    vmv1r.v v8, v10
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a0, a0, 3
+; ZVBB-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v8, v10, a0
+; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vi v10, v8, 4
+; ZVBB-NEXT:    vmv.v.v v8, v10
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v8f16_v4f16:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
 ; ZVZIP-NEXT:    vzip.vv v10, v8, v9
-; ZVZIP-NEXT:    vmv1r.v v8, v10
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    srli a0, a0, 2
+; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-NEXT:    vslidedown.vx v8, v10, a0
+; ZVZIP-NEXT:    vslideup.vi v10, v8, 4
+; ZVZIP-NEXT:    vmv.v.v v8, v10
 ; ZVZIP-NEXT:    ret
 	   %res = call <8 x half> @llvm.vector.interleave2.v8f16(<4 x half> %a, <4 x half> %b)
 	   ret <8 x half> %res
@@ -935,26 +2830,43 @@ define <8 x half> @vector_interleave_v8f16_v4f16(<4 x half> %a, <4 x half> %b) {
 define <8 x bfloat> @vector_interleave_v8bf16_v4bf16(<4 x bfloat> %a, <4 x bfloat> %b) {
 ; CHECK-LABEL: vector_interleave_v8bf16_v4bf16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
 ; CHECK-NEXT:    vwaddu.vv v10, v8, v9
 ; CHECK-NEXT:    li a0, -1
 ; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
-; CHECK-NEXT:    vmv1r.v v8, v10
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    srli a0, a0, 3
+; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vslidedown.vx v8, v10, a0
+; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vi v10, v8, 4
+; CHECK-NEXT:    vmv.v.v v8, v10
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v8bf16_v4bf16:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vwsll.vi v10, v9, 16
 ; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
-; ZVBB-NEXT:    vmv1r.v v8, v10
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a0, a0, 3
+; ZVBB-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v8, v10, a0
+; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vi v10, v8, 4
+; ZVBB-NEXT:    vmv.v.v v8, v10
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v8bf16_v4bf16:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
 ; ZVZIP-NEXT:    vzip.vv v10, v8, v9
-; ZVZIP-NEXT:    vmv1r.v v8, v10
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    srli a0, a0, 2
+; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-NEXT:    vslidedown.vx v8, v10, a0
+; ZVZIP-NEXT:    vslideup.vi v10, v8, 4
+; ZVZIP-NEXT:    vmv.v.v v8, v10
 ; ZVZIP-NEXT:    ret
 	   %res = call <8 x bfloat> @llvm.vector.interleave2.v8bf16(<4 x bfloat> %a, <4 x bfloat> %b)
 	   ret <8 x bfloat> %res
@@ -963,27 +2875,42 @@ define <8 x bfloat> @vector_interleave_v8bf16_v4bf16(<4 x bfloat> %a, <4 x bfloa
 define <4 x float> @vector_interleave_v4f32_v2f32(<2 x float> %a, <2 x float> %b) {
 ; CHECK-LABEL: vector_interleave_v4f32_v2f32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
+; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
 ; CHECK-NEXT:    vwaddu.vv v10, v8, v9
 ; CHECK-NEXT:    li a0, -1
 ; CHECK-NEXT:    vwmaccu.vx v10, a0, v9
-; CHECK-NEXT:    vmv1r.v v8, v10
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    srli a0, a0, 3
+; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-NEXT:    vslidedown.vx v8, v10, a0
+; CHECK-NEXT:    vslideup.vi v10, v8, 2
+; CHECK-NEXT:    vmv.v.v v8, v10
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v4f32_v2f32:
 ; ZVBB:       # %bb.0:
 ; ZVBB-NEXT:    li a0, 32
-; ZVBB-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
+; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; ZVBB-NEXT:    vwsll.vx v10, v9, a0
 ; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
-; ZVBB-NEXT:    vmv1r.v v8, v10
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a0, a0, 3
+; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v8, v10, a0
+; ZVBB-NEXT:    vslideup.vi v10, v8, 2
+; ZVBB-NEXT:    vmv.v.v v8, v10
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v4f32_v2f32:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
 ; ZVZIP-NEXT:    vzip.vv v10, v8, v9
-; ZVZIP-NEXT:    vmv1r.v v8, v10
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    srli a0, a0, 3
+; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-NEXT:    vslidedown.vx v8, v10, a0
+; ZVZIP-NEXT:    vslideup.vi v10, v8, 2
+; ZVZIP-NEXT:    vmv.v.v v8, v10
 ; ZVZIP-NEXT:    ret
 	   %res = call <4 x float> @llvm.vector.interleave2.v4f32(<2 x float> %a, <2 x float> %b)
 	   ret <4 x float> %res
@@ -992,29 +2919,38 @@ define <4 x float> @vector_interleave_v4f32_v2f32(<2 x float> %a, <2 x float> %b
 define <16 x half> @vector_interleave_v16f16_v8f16(<8 x half> %a, <8 x half> %b) {
 ; CHECK-LABEL: vector_interleave_v16f16_v8f16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v10, v9
 ; CHECK-NEXT:    vmv1r.v v11, v8
 ; CHECK-NEXT:    vwaddu.vv v8, v11, v10
 ; CHECK-NEXT:    li a0, -1
 ; CHECK-NEXT:    vwmaccu.vx v8, a0, v10
+; CHECK-NEXT:    vmv1r.v v10, v9
+; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v8, v10, 8
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v16f16_v8f16:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vmv1r.v v10, v9
 ; ZVBB-NEXT:    vmv1r.v v11, v8
 ; ZVBB-NEXT:    vwsll.vi v8, v10, 16
 ; ZVBB-NEXT:    vwaddu.wv v8, v8, v11
+; ZVBB-NEXT:    vmv1r.v v10, v9
+; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-NEXT:    vslideup.vi v8, v10, 8
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v16f16_v8f16:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; ZVZIP-NEXT:    vmv1r.v v10, v9
 ; ZVZIP-NEXT:    vmv1r.v v11, v8
 ; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vmv1r.v v10, v9
+; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
 ; ZVZIP-NEXT:    ret
 	   %res = call <16 x half> @llvm.vector.interleave2.v16f16(<8 x half> %a, <8 x half> %b)
 	   ret <16 x half> %res
@@ -1023,29 +2959,38 @@ define <16 x half> @vector_interleave_v16f16_v8f16(<8 x half> %a, <8 x half> %b)
 define <16 x bfloat> @vector_interleave_v16bf16_v8bf16(<8 x bfloat> %a, <8 x bfloat> %b) {
 ; CHECK-LABEL: vector_interleave_v16bf16_v8bf16:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v10, v9
 ; CHECK-NEXT:    vmv1r.v v11, v8
 ; CHECK-NEXT:    vwaddu.vv v8, v11, v10
 ; CHECK-NEXT:    li a0, -1
 ; CHECK-NEXT:    vwmaccu.vx v8, a0, v10
+; CHECK-NEXT:    vmv1r.v v10, v9
+; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v8, v10, 8
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v16bf16_v8bf16:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vmv1r.v v10, v9
 ; ZVBB-NEXT:    vmv1r.v v11, v8
 ; ZVBB-NEXT:    vwsll.vi v8, v10, 16
 ; ZVBB-NEXT:    vwaddu.wv v8, v8, v11
+; ZVBB-NEXT:    vmv1r.v v10, v9
+; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-NEXT:    vslideup.vi v8, v10, 8
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v16bf16_v8bf16:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; ZVZIP-NEXT:    vmv1r.v v10, v9
 ; ZVZIP-NEXT:    vmv1r.v v11, v8
 ; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vmv1r.v v10, v9
+; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
 ; ZVZIP-NEXT:    ret
 	   %res = call <16 x bfloat> @llvm.vector.interleave2.v16bf16(<8 x bfloat> %a, <8 x bfloat> %b)
 	   ret <16 x bfloat> %res
@@ -1054,30 +2999,39 @@ define <16 x bfloat> @vector_interleave_v16bf16_v8bf16(<8 x bfloat> %a, <8 x bfl
 define <8 x float> @vector_interleave_v8f32_v4f32(<4 x float> %a, <4 x float> %b) {
 ; CHECK-LABEL: vector_interleave_v8f32_v4f32:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vmv1r.v v10, v9
 ; CHECK-NEXT:    vmv1r.v v11, v8
 ; CHECK-NEXT:    vwaddu.vv v8, v11, v10
 ; CHECK-NEXT:    li a0, -1
 ; CHECK-NEXT:    vwmaccu.vx v8, a0, v10
+; CHECK-NEXT:    vmv1r.v v10, v9
+; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v8, v10, 4
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v8f32_v4f32:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vmv1r.v v10, v9
 ; ZVBB-NEXT:    vmv1r.v v11, v8
 ; ZVBB-NEXT:    li a0, 32
 ; ZVBB-NEXT:    vwsll.vx v8, v10, a0
 ; ZVBB-NEXT:    vwaddu.wv v8, v8, v11
+; ZVBB-NEXT:    vmv1r.v v10, v9
+; ZVBB-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVBB-NEXT:    vslideup.vi v8, v10, 4
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v8f32_v4f32:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
 ; ZVZIP-NEXT:    vmv1r.v v10, v9
 ; ZVZIP-NEXT:    vmv1r.v v11, v8
 ; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vmv1r.v v10, v9
+; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
 ; ZVZIP-NEXT:    ret
 	   %res = call <8 x float> @llvm.vector.interleave2.v8f32(<4 x float> %a, <4 x float> %b)
 	   ret <8 x float> %res
@@ -1086,40 +3040,49 @@ define <8 x float> @vector_interleave_v8f32_v4f32(<4 x float> %a, <4 x float> %b
 define <4 x double> @vector_interleave_v4f64_v2f64(<2 x double> %a, <2 x double> %b) {
 ; CHECK-LABEL: vector_interleave_v4f64_v2f64:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; CHECK-NEXT:    vmv1r.v v10, v9
-; CHECK-NEXT:    vslideup.vi v8, v10, 2
-; CHECK-NEXT:    lui a0, 12304
-; CHECK-NEXT:    addi a0, a0, 512
-; CHECK-NEXT:    vmv.s.x v10, a0
-; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vsext.vf2 v12, v10
+; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
+; CHECK-NEXT:    vid.v v10
+; CHECK-NEXT:    vand.vi v11, v10, 1
+; CHECK-NEXT:    vmsne.vi v0, v11, 0
+; CHECK-NEXT:    vsrl.vi v12, v10, 1
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    srli a0, a0, 3
+; CHECK-NEXT:    vadd.vx v12, v12, a0, v0.t
 ; CHECK-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
 ; CHECK-NEXT:    vrgatherei16.vv v10, v8, v12
+; CHECK-NEXT:    vmv1r.v v8, v11
+; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; CHECK-NEXT:    vslideup.vi v10, v8, 2
 ; CHECK-NEXT:    vmv.v.v v8, v10
 ; CHECK-NEXT:    ret
 ;
 ; ZVBB-LABEL: vector_interleave_v4f64_v2f64:
 ; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
-; ZVBB-NEXT:    vmv1r.v v10, v9
-; ZVBB-NEXT:    vslideup.vi v8, v10, 2
-; ZVBB-NEXT:    lui a0, 12304
-; ZVBB-NEXT:    addi a0, a0, 512
-; ZVBB-NEXT:    vmv.s.x v10, a0
-; ZVBB-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vsext.vf2 v12, v10
+; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, mu
+; ZVBB-NEXT:    vid.v v10
+; ZVBB-NEXT:    vand.vi v11, v10, 1
+; ZVBB-NEXT:    vmsne.vi v0, v11, 0
+; ZVBB-NEXT:    vsrl.vi v12, v10, 1
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a0, a0, 3
+; ZVBB-NEXT:    vadd.vx v12, v12, a0, v0.t
 ; ZVBB-NEXT:    vsetvli zero, zero, e64, m2, ta, ma
 ; ZVBB-NEXT:    vrgatherei16.vv v10, v8, v12
+; ZVBB-NEXT:    vmv1r.v v8, v11
+; ZVBB-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; ZVBB-NEXT:    vslideup.vi v10, v8, 2
 ; ZVBB-NEXT:    vmv.v.v v8, v10
 ; ZVBB-NEXT:    ret
 ;
 ; ZVZIP-LABEL: vector_interleave_v4f64_v2f64:
 ; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
+; ZVZIP-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
 ; ZVZIP-NEXT:    vmv1r.v v10, v9
 ; ZVZIP-NEXT:    vmv1r.v v11, v8
 ; ZVZIP-NEXT:    vzip.vv v8, v11, v10
+; ZVZIP-NEXT:    vmv1r.v v10, v9
+; ZVZIP-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
+; ZVZIP-NEXT:    vslideup.vi v8, v10, 2
 ; ZVZIP-NEXT:    ret
 	   %res = call <4 x double> @llvm.vector.interleave2.v4f64(<2 x double> %a, <2 x double> %b)
 	   ret <4 x double> %res
@@ -1136,15 +3099,15 @@ define <6 x float> @vector_interleave3_v6f32_v2f32(<2 x float> %a, <2 x float> %
 ; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; CHECK-NEXT:    vsseg3e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
+; CHECK-NEXT:    srli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
 ; CHECK-NEXT:    vle32.v v9, (a2)
 ; CHECK-NEXT:    vle32.v v8, (a0)
 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    add a1, a2, a1
-; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v10, (a1)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vle32.v v10, (a0)
 ; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
 ; CHECK-NEXT:    vslideup.vi v8, v10, 4
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -1163,15 +3126,15 @@ define <6 x float> @vector_interleave3_v6f32_v2f32(<2 x float> %a, <2 x float> %
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; ZVBB-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
+; ZVBB-NEXT:    srli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
 ; ZVBB-NEXT:    vle32.v v9, (a2)
 ; ZVBB-NEXT:    vle32.v v8, (a0)
 ; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    add a1, a2, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v10, (a1)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vle32.v v10, (a0)
 ; ZVBB-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
 ; ZVBB-NEXT:    vslideup.vi v8, v10, 4
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -1190,15 +3153,15 @@ define <6 x float> @vector_interleave3_v6f32_v2f32(<2 x float> %a, <2 x float> %
 ; ZVZIP-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; ZVZIP-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 1
-; ZVZIP-NEXT:    add a2, a0, a1
+; ZVZIP-NEXT:    srli a2, a1, 1
+; ZVZIP-NEXT:    add a2, a0, a2
 ; ZVZIP-NEXT:    vle32.v v9, (a2)
 ; ZVZIP-NEXT:    vle32.v v8, (a0)
 ; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
 ; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vle32.v v10, (a1)
+; ZVZIP-NEXT:    add a0, a0, a1
+; ZVZIP-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; ZVZIP-NEXT:    vle32.v v10, (a0)
 ; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
 ; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
 ; ZVZIP-NEXT:    csrr a0, vlenb
@@ -1211,1114 +3174,4591 @@ define <6 x float> @vector_interleave3_v6f32_v2f32(<2 x float> %a, <2 x float> %
 }
 
 define <8 x float> @vector_interleave4_v8f32_v2f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x float> %d) nounwind {
-; CHECK-LABEL: vector_interleave4_v8f32_v2f32:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vsseg4e32.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vle32.v v9, (a1)
-; CHECK-NEXT:    vle32.v v10, (a2)
-; CHECK-NEXT:    vle32.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 2
-; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v10, (a3)
-; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 2
-; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 4
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave4_v8f32_v2f32:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    addi s0, sp, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV32-NEXT:    vsseg4e32.v v8, (s0)
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    srli a0, s1, 3
+; CHECK-RV32-NEXT:    li a1, 12
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s1, 1
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; CHECK-RV32-NEXT:    vle32.v v9, (a0)
+; CHECK-RV32-NEXT:    add a1, s0, a1
+; CHECK-RV32-NEXT:    vle32.v v10, (a1)
+; CHECK-RV32-NEXT:    vle32.v v8, (s0)
+; CHECK-RV32-NEXT:    add s0, s0, s1
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 2
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV32-NEXT:    vle32.v v10, (s0)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave4_v8f32_v2f32:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vsseg4e32.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vle32.v v9, (a1)
-; ZVBB-NEXT:    vle32.v v10, (a2)
-; ZVBB-NEXT:    vle32.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v10, (a3)
-; ZVBB-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 4
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave4_v8f32_v2f32:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    addi s0, sp, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV64-NEXT:    vsseg4e32.v v8, (s0)
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    srli a0, s1, 3
+; CHECK-RV64-NEXT:    li a1, 12
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s1, 1
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; CHECK-RV64-NEXT:    vle32.v v9, (a0)
+; CHECK-RV64-NEXT:    add a1, s0, a1
+; CHECK-RV64-NEXT:    vle32.v v10, (a1)
+; CHECK-RV64-NEXT:    vle32.v v8, (s0)
+; CHECK-RV64-NEXT:    add s0, s0, s1
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 2
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-RV64-NEXT:    vle32.v v10, (s0)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave4_v8f32_v2f32:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vsseg4e32.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 1
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    add a1, a3, a1
-; ZVZIP-NEXT:    vle32.v v9, (a1)
-; ZVZIP-NEXT:    vle32.v v10, (a2)
-; ZVZIP-NEXT:    vle32.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVZIP-NEXT:    vle32.v v10, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave4_v8f32_v2f32:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    addi s0, sp, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vsseg4e32.v v8, (s0)
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    srli a0, s1, 3
+; ZVBB-RV32-NEXT:    li a1, 12
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s1, 1
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vle32.v v9, (a0)
+; ZVBB-RV32-NEXT:    add a1, s0, a1
+; ZVBB-RV32-NEXT:    vle32.v v10, (a1)
+; ZVBB-RV32-NEXT:    vle32.v v8, (s0)
+; ZVBB-RV32-NEXT:    add s0, s0, s1
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 2
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vle32.v v10, (s0)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave4_v8f32_v2f32:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    addi s0, sp, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vsseg4e32.v v8, (s0)
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    srli a0, s1, 3
+; ZVBB-RV64-NEXT:    li a1, 12
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s1, 1
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vle32.v v9, (a0)
+; ZVBB-RV64-NEXT:    add a1, s0, a1
+; ZVBB-RV64-NEXT:    vle32.v v10, (a1)
+; ZVBB-RV64-NEXT:    vle32.v v8, (s0)
+; ZVBB-RV64-NEXT:    add s0, s0, s1
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 2
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vle32.v v10, (s0)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave4_v8f32_v2f32:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    addi s0, sp, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg4e32.v v8, (s0)
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    srli a0, s1, 3
+; ZVZIP-RV32-NEXT:    li a1, 12
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s1, 1
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vle32.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add a1, s0, a1
+; ZVZIP-RV32-NEXT:    vle32.v v10, (a1)
+; ZVZIP-RV32-NEXT:    vle32.v v8, (s0)
+; ZVZIP-RV32-NEXT:    add s0, s0, s1
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 2
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vle32.v v10, (s0)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave4_v8f32_v2f32:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    addi s0, sp, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg4e32.v v8, (s0)
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    srli a0, s1, 3
+; ZVZIP-RV64-NEXT:    li a1, 12
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s1, 1
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vle32.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add a1, s0, a1
+; ZVZIP-RV64-NEXT:    vle32.v v10, (a1)
+; ZVZIP-RV64-NEXT:    vle32.v v8, (s0)
+; ZVZIP-RV64-NEXT:    add s0, s0, s1
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 2
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vle32.v v10, (s0)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <8 x float> @llvm.vector.interleave4.v8f32(<2 x float> %a, <2 x float> %b, <2 x float> %c, <2 x float> %d)
 	   ret <8 x float> %res
 }
 
 define <10 x half> @vector_interleave5_v10f16_v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x half> %d, <2 x half> %e) nounwind {
-; CHECK-LABEL: vector_interleave5_v10f16_v2f16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg5e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    vle16.v v9, (a2)
-; CHECK-NEXT:    add a2, a2, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v11, v10, 2
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v11, 4
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a1)
-; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 8
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave5_v10f16_v2f16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -48
+; CHECK-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s0, vlenb
+; CHECK-RV32-NEXT:    slli a0, s0, 1
+; CHECK-RV32-NEXT:    add s0, a0, s0
+; CHECK-RV32-NEXT:    add s0, sp, s0
+; CHECK-RV32-NEXT:    addi s0, s0, 32
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    add a0, s0, s1
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 32
+; CHECK-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s1, 2
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 32
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s1, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli s1, s1, 1
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s0, s1
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vle16.v v8, (s0)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    addi a0, sp, 32
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 32
+; CHECK-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 48
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave5_v10f16_v2f16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg5e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    vle16.v v9, (a2)
-; ZVBB-NEXT:    add a2, a2, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v11, v10, 2
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v11, 4
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a1)
-; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 8
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave5_v10f16_v2f16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -64
+; CHECK-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s0, vlenb
+; CHECK-RV64-NEXT:    slli a0, s0, 1
+; CHECK-RV64-NEXT:    add s0, a0, s0
+; CHECK-RV64-NEXT:    add s0, sp, s0
+; CHECK-RV64-NEXT:    addi s0, s0, 32
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    add a0, s0, s1
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 32
+; CHECK-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s1, 2
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 32
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s1, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli s1, s1, 1
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s0, s1
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vle16.v v8, (s0)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    addi a0, sp, 32
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 32
+; CHECK-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 64
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave5_v10f16_v2f16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg5e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    vle16.v v9, (a2)
-; ZVZIP-NEXT:    add a2, a2, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vle16.v v11, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v11, v10, 2
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v11, 4
-; ZVZIP-NEXT:    add a1, a3, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave5_v10f16_v2f16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -48
+; ZVBB-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, s0, 1
+; ZVBB-RV32-NEXT:    add s0, a0, s0
+; ZVBB-RV32-NEXT:    add s0, sp, s0
+; ZVBB-RV32-NEXT:    addi s0, s0, 32
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    add a0, s0, s1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 32
+; ZVBB-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s1, 2
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 32
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s1, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli s1, s1, 1
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s0, s1
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vle16.v v8, (s0)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    addi a0, sp, 32
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 32
+; ZVBB-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 48
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave5_v10f16_v2f16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -64
+; ZVBB-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, s0, 1
+; ZVBB-RV64-NEXT:    add s0, a0, s0
+; ZVBB-RV64-NEXT:    add s0, sp, s0
+; ZVBB-RV64-NEXT:    addi s0, s0, 32
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    add a0, s0, s1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 32
+; ZVBB-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s1, 2
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 32
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s1, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli s1, s1, 1
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s0, s1
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vle16.v v8, (s0)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    addi a0, sp, 32
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 32
+; ZVBB-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 64
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave5_v10f16_v2f16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -48
+; ZVZIP-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, s0, 1
+; ZVZIP-RV32-NEXT:    add s0, a0, s0
+; ZVZIP-RV32-NEXT:    add s0, sp, s0
+; ZVZIP-RV32-NEXT:    addi s0, s0, 32
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    add a0, s0, s1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 32
+; ZVZIP-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s1, 2
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 32
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s1, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli s1, s1, 1
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s0, s1
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s0)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    addi a0, sp, 32
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 32
+; ZVZIP-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 48
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave5_v10f16_v2f16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -64
+; ZVZIP-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, s0, 1
+; ZVZIP-RV64-NEXT:    add s0, a0, s0
+; ZVZIP-RV64-NEXT:    add s0, sp, s0
+; ZVZIP-RV64-NEXT:    addi s0, s0, 32
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    add a0, s0, s1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 32
+; ZVZIP-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s1, 2
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 32
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s1, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli s1, s1, 1
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s0, s1
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s0)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    addi a0, sp, 32
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 32
+; ZVZIP-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 64
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <10 x half> @llvm.vector.interleave5.v10f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x half> %d, <2 x half> %e)
 	   ret <10 x half> %res
 }
 
 define <10 x bfloat> @vector_interleave5_v10bf16_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c, <2 x bfloat> %d, <2 x bfloat> %e) nounwind {
-; CHECK-LABEL: vector_interleave5_v10bf16_v2bf16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg5e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    vle16.v v9, (a2)
-; CHECK-NEXT:    add a2, a2, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v11, v10, 2
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v11, 4
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a1)
-; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 8
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave5_v10bf16_v2bf16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -48
+; CHECK-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s0, vlenb
+; CHECK-RV32-NEXT:    slli a0, s0, 1
+; CHECK-RV32-NEXT:    add s0, a0, s0
+; CHECK-RV32-NEXT:    add s0, sp, s0
+; CHECK-RV32-NEXT:    addi s0, s0, 32
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    add a0, s0, s1
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 32
+; CHECK-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s1, 2
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 32
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s1, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli s1, s1, 1
+; CHECK-RV32-NEXT:    add a0, s0, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s0, s1
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vle16.v v8, (s0)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    addi a0, sp, 32
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 32
+; CHECK-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 48
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave5_v10bf16_v2bf16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg5e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    vle16.v v9, (a2)
-; ZVBB-NEXT:    add a2, a2, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v11, v10, 2
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v11, 4
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a1)
-; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 8
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave5_v10bf16_v2bf16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -64
+; CHECK-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s0, vlenb
+; CHECK-RV64-NEXT:    slli a0, s0, 1
+; CHECK-RV64-NEXT:    add s0, a0, s0
+; CHECK-RV64-NEXT:    add s0, sp, s0
+; CHECK-RV64-NEXT:    addi s0, s0, 32
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    add a0, s0, s1
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 32
+; CHECK-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s1, 2
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 32
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s1, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli s1, s1, 1
+; CHECK-RV64-NEXT:    add a0, s0, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s0, s1
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vle16.v v8, (s0)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    addi a0, sp, 32
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 32
+; CHECK-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 64
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave5_v10bf16_v2bf16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg5e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    vle16.v v9, (a2)
-; ZVZIP-NEXT:    add a2, a2, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vle16.v v11, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v11, v10, 2
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v11, 4
-; ZVZIP-NEXT:    add a1, a3, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave5_v10bf16_v2bf16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -48
+; ZVBB-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, s0, 1
+; ZVBB-RV32-NEXT:    add s0, a0, s0
+; ZVBB-RV32-NEXT:    add s0, sp, s0
+; ZVBB-RV32-NEXT:    addi s0, s0, 32
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    add a0, s0, s1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 32
+; ZVBB-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s1, 2
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 32
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s1, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli s1, s1, 1
+; ZVBB-RV32-NEXT:    add a0, s0, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s0, s1
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vle16.v v8, (s0)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    addi a0, sp, 32
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 32
+; ZVBB-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 48
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave5_v10bf16_v2bf16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -64
+; ZVBB-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, s0, 1
+; ZVBB-RV64-NEXT:    add s0, a0, s0
+; ZVBB-RV64-NEXT:    add s0, sp, s0
+; ZVBB-RV64-NEXT:    addi s0, s0, 32
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    add a0, s0, s1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 32
+; ZVBB-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s1, 2
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 32
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s1, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli s1, s1, 1
+; ZVBB-RV64-NEXT:    add a0, s0, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s0, s1
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vle16.v v8, (s0)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    addi a0, sp, 32
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 32
+; ZVBB-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 64
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave5_v10bf16_v2bf16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -48
+; ZVZIP-RV32-NEXT:    sw ra, 44(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 40(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 36(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, s0, 1
+; ZVZIP-RV32-NEXT:    add s0, a0, s0
+; ZVZIP-RV32-NEXT:    add s0, sp, s0
+; ZVZIP-RV32-NEXT:    addi s0, s0, 32
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg5e16.v v8, (s0)
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    add a0, s0, s1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 32
+; ZVZIP-RV32-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s1, 2
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 32
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s1, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli s1, s1, 1
+; ZVZIP-RV32-NEXT:    add a0, s0, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s0, s1
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s0)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    addi a0, sp, 32
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 32
+; ZVZIP-RV32-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 44(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 40(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 36(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 48
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave5_v10bf16_v2bf16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -64
+; ZVZIP-RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, s0, 1
+; ZVZIP-RV64-NEXT:    add s0, a0, s0
+; ZVZIP-RV64-NEXT:    add s0, sp, s0
+; ZVZIP-RV64-NEXT:    addi s0, s0, 32
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg5e16.v v8, (s0)
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    add a0, s0, s1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 32
+; ZVZIP-RV64-NEXT:    vs2r.v v8, (a0) # vscale x 16-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s1, 2
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 32
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s1, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli s1, s1, 1
+; ZVZIP-RV64-NEXT:    add a0, s0, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s0, s1
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s0)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    addi a0, sp, 32
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 32
+; ZVZIP-RV64-NEXT:    vl2r.v v10, (a0) # vscale x 16-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 64
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <10 x bfloat> @llvm.vector.interleave5.v10bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c, <2 x bfloat> %d, <2 x bfloat> %e)
 	   ret <10 x bfloat> %res
 }
 
 define <12 x half> @vector_interleave6_v12f16_v2f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x half> %d, <2 x half> %e, <2 x half> %f) nounwind {
-; CHECK-LABEL: vector_interleave6_v12f16_v2f16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg6e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    vle16.v v9, (a2)
-; CHECK-NEXT:    add a2, a2, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v11, v10, 2
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a1)
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v11, 4
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 2
-; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 8
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave6_v12f16_v2f16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli a0, s1, 1
+; CHECK-RV32-NEXT:    add s1, a0, s1
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli a0, s2, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vle16.v v8, (a1)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 10
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (s1)
+; CHECK-RV32-NEXT:    addi a1, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    csrr a1, vlenb
+; CHECK-RV32-NEXT:    add a1, sp, a1
+; CHECK-RV32-NEXT:    addi a1, a1, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    csrr a1, vlenb
+; CHECK-RV32-NEXT:    slli a1, a1, 1
+; CHECK-RV32-NEXT:    add a1, sp, a1
+; CHECK-RV32-NEXT:    addi a1, a1, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s1, s2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave6_v12f16_v2f16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg6e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    vle16.v v9, (a2)
-; ZVBB-NEXT:    add a2, a2, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v11, v10, 2
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a1)
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v11, 4
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 8
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave6_v12f16_v2f16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli a0, s1, 1
+; CHECK-RV64-NEXT:    add s1, a0, s1
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli a0, s2, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vle16.v v8, (a1)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 10
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (s1)
+; CHECK-RV64-NEXT:    addi a1, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    csrr a1, vlenb
+; CHECK-RV64-NEXT:    add a1, sp, a1
+; CHECK-RV64-NEXT:    addi a1, a1, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    csrr a1, vlenb
+; CHECK-RV64-NEXT:    slli a1, a1, 1
+; CHECK-RV64-NEXT:    add a1, sp, a1
+; CHECK-RV64-NEXT:    addi a1, a1, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s1, s2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave6_v12f16_v2f16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg6e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    vle16.v v9, (a2)
-; ZVZIP-NEXT:    add a2, a2, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vle16.v v11, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    add a3, a3, a1
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v11, v10, 2
-; ZVZIP-NEXT:    add a1, a3, a1
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v11, 4
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave6_v12f16_v2f16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli a0, s1, 1
+; ZVBB-RV32-NEXT:    add s1, a0, s1
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli a0, s2, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 10
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV32-NEXT:    addi a1, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a1, 1
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s1, s2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave6_v12f16_v2f16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli a0, s1, 1
+; ZVBB-RV64-NEXT:    add s1, a0, s1
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli a0, s2, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 10
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV64-NEXT:    addi a1, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a1, 1
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s1, s2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave6_v12f16_v2f16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, s1, 1
+; ZVZIP-RV32-NEXT:    add s1, a0, s1
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli a0, s2, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 10
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    addi a1, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    csrr a1, vlenb
+; ZVZIP-RV32-NEXT:    add a1, sp, a1
+; ZVZIP-RV32-NEXT:    addi a1, a1, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    csrr a1, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a1, 1
+; ZVZIP-RV32-NEXT:    add a1, sp, a1
+; ZVZIP-RV32-NEXT:    addi a1, a1, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s1, s2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave6_v12f16_v2f16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, s1, 1
+; ZVZIP-RV64-NEXT:    add s1, a0, s1
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli a0, s2, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 10
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    addi a1, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    csrr a1, vlenb
+; ZVZIP-RV64-NEXT:    add a1, sp, a1
+; ZVZIP-RV64-NEXT:    addi a1, a1, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    csrr a1, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a1, 1
+; ZVZIP-RV64-NEXT:    add a1, sp, a1
+; ZVZIP-RV64-NEXT:    addi a1, a1, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s1, s2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <12 x half> @llvm.vector.interleave6.v12f16(<2 x half> %a, <2 x half> %b, <2 x half> %c, <2 x half> %d, <2 x half> %e, <2 x half> %f)
 	   ret <12 x half> %res
 }
 
 define <12 x bfloat> @vector_interleave6_v12bf16_v2bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c, <2 x bfloat> %d, <2 x bfloat> %e, <2 x bfloat> %f) nounwind {
-; CHECK-LABEL: vector_interleave6_v12bf16_v2bf16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg6e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    vle16.v v9, (a2)
-; CHECK-NEXT:    add a2, a2, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v11, v10, 2
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a1)
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v11, 4
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 2
-; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 8
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave6_v12bf16_v2bf16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli a0, s1, 1
+; CHECK-RV32-NEXT:    add s1, a0, s1
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli a0, s2, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vle16.v v8, (a1)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 10
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (s1)
+; CHECK-RV32-NEXT:    addi a1, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    csrr a1, vlenb
+; CHECK-RV32-NEXT:    add a1, sp, a1
+; CHECK-RV32-NEXT:    addi a1, a1, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    csrr a1, vlenb
+; CHECK-RV32-NEXT:    slli a1, a1, 1
+; CHECK-RV32-NEXT:    add a1, sp, a1
+; CHECK-RV32-NEXT:    addi a1, a1, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s1, s2
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 2
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave6_v12bf16_v2bf16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg6e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    vle16.v v9, (a2)
-; ZVBB-NEXT:    add a2, a2, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v11, v10, 2
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a1)
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v11, 4
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 2
-; ZVBB-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 8
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave6_v12bf16_v2bf16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli a0, s1, 1
+; CHECK-RV64-NEXT:    add s1, a0, s1
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli a0, s2, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vle16.v v8, (a1)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 10
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (s1)
+; CHECK-RV64-NEXT:    addi a1, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    csrr a1, vlenb
+; CHECK-RV64-NEXT:    add a1, sp, a1
+; CHECK-RV64-NEXT:    addi a1, a1, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    csrr a1, vlenb
+; CHECK-RV64-NEXT:    slli a1, a1, 1
+; CHECK-RV64-NEXT:    add a1, sp, a1
+; CHECK-RV64-NEXT:    addi a1, a1, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s1, s2
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 8
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 2
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave6_v12bf16_v2bf16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg6e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    vle16.v v9, (a2)
-; ZVZIP-NEXT:    add a2, a2, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vle16.v v11, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    add a3, a3, a1
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v11, v10, 2
-; ZVZIP-NEXT:    add a1, a3, a1
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v11, 4
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 2
-; ZVZIP-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 8
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave6_v12bf16_v2bf16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli a0, s1, 1
+; ZVBB-RV32-NEXT:    add s1, a0, s1
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli a0, s2, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 10
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV32-NEXT:    addi a1, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a1, 1
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s1, s2
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave6_v12bf16_v2bf16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli a0, s1, 1
+; ZVBB-RV64-NEXT:    add s1, a0, s1
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli a0, s2, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 10
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV64-NEXT:    addi a1, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a1, 1
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s1, s2
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave6_v12bf16_v2bf16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, s1, 1
+; ZVZIP-RV32-NEXT:    add s1, a0, s1
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg6e16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli a0, s2, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 10
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    addi a1, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    csrr a1, vlenb
+; ZVZIP-RV32-NEXT:    add a1, sp, a1
+; ZVZIP-RV32-NEXT:    addi a1, a1, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    csrr a1, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a1, 1
+; ZVZIP-RV32-NEXT:    add a1, sp, a1
+; ZVZIP-RV32-NEXT:    addi a1, a1, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s1, s2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 2
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave6_v12bf16_v2bf16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, s1, 1
+; ZVZIP-RV64-NEXT:    add s1, a0, s1
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg6e16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli a0, s2, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 10
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    addi a1, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    csrr a1, vlenb
+; ZVZIP-RV64-NEXT:    add a1, sp, a1
+; ZVZIP-RV64-NEXT:    addi a1, a1, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    csrr a1, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a1, 1
+; ZVZIP-RV64-NEXT:    add a1, sp, a1
+; ZVZIP-RV64-NEXT:    addi a1, a1, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a1) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s1, s2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 8
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 2
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <12 x bfloat> @llvm.vector.interleave6.v12bf16(<2 x bfloat> %a, <2 x bfloat> %b, <2 x bfloat> %c, <2 x bfloat> %d, <2 x bfloat> %e, <2 x bfloat> %f)
 	   ret <12 x bfloat> %res
 }
 
 define <7 x half> @vector_interleave7_v7f16_v1f16(<1 x half> %a, <1 x half> %b, <1 x half> %c, <1 x half> %d, <1 x half> %e, <1 x half> %f, <1 x half> %g) nounwind {
-; CHECK-LABEL: vector_interleave7_v7f16_v1f16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg7e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vle16.v v10, (a2)
-; CHECK-NEXT:    add a2, a3, a1
-; CHECK-NEXT:    add a4, a2, a1
-; CHECK-NEXT:    vle16.v v11, (a4)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vle16.v v12, (a2)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 1
-; CHECK-NEXT:    add a1, a4, a1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a1)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v12, v11, 1
-; CHECK-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v12, v10, 2
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v9, 3
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v12, 4
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave7_v7f16_v1f16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    mv a1, a0
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, a0, a1
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli s1, s1, 2
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg7e16.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a2, a0, 1
+; CHECK-RV32-NEXT:    add a0, a2, a0
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vle16.v v8, (a1)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s2, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 12
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 10
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (s1)
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s1, s2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 1
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 1
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 1
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 3
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    mv a1, a0
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, a0, a1
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave7_v7f16_v1f16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg7e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vle16.v v10, (a2)
-; ZVBB-NEXT:    add a2, a3, a1
-; ZVBB-NEXT:    add a4, a2, a1
-; ZVBB-NEXT:    vle16.v v11, (a4)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vle16.v v12, (a2)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 1
-; ZVBB-NEXT:    add a1, a4, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a1)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v12, v11, 1
-; ZVBB-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v12, v10, 2
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v9, 3
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v12, 4
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave7_v7f16_v1f16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    mv a1, a0
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, a0, a1
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli s1, s1, 2
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg7e16.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a2, a0, 1
+; CHECK-RV64-NEXT:    add a0, a2, a0
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vle16.v v8, (a1)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s2, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 12
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 10
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (s1)
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s1, s2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 1
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 1
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 1
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 3
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    mv a1, a0
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, a0, a1
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave7_v7f16_v1f16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg7e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v9, (a3)
-; ZVZIP-NEXT:    add a3, a3, a1
-; ZVZIP-NEXT:    vle16.v v10, (a2)
-; ZVZIP-NEXT:    add a2, a3, a1
-; ZVZIP-NEXT:    add a4, a2, a1
-; ZVZIP-NEXT:    vle16.v v11, (a4)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    vle16.v v12, (a2)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 1
-; ZVZIP-NEXT:    add a1, a4, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v12, v11, 1
-; ZVZIP-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v12, v10, 2
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 3
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v12, 4
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave7_v7f16_v1f16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    mv a1, a0
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a0, a1
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli s1, s1, 2
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg7e16.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a2, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s2, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 12
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 10
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s1, s2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 1
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 1
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 3
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    mv a1, a0
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a0, a1
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave7_v7f16_v1f16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    mv a1, a0
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a0, a1
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli s1, s1, 2
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg7e16.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a2, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s2, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 12
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 10
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s1, s2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 1
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 1
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 3
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    mv a1, a0
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a0, a1
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave7_v7f16_v1f16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    mv a1, a0
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a0, a1
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli s1, s1, 2
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg7e16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a2, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a2, a0
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s2, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 12
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 10
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s1, s2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 1
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 1
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 3
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    mv a1, a0
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a0, a1
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave7_v7f16_v1f16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    mv a1, a0
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a0, a1
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli s1, s1, 2
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg7e16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a2, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a2, a0
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s2, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 12
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 10
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s1, s2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 1
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 1
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 3
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    mv a1, a0
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a0, a1
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <7 x half> @llvm.vector.interleave7.v7f16(<1 x half> %a, <1 x half> %b, <1 x half> %c, <1 x half> %d, <1 x half> %e, <1 x half> %f, <1 x half> %g)
 	   ret <7 x half> %res
 }
 
 define <7 x bfloat> @vector_interleave7_v7bf16_v1bf16(<1 x bfloat> %a, <1 x bfloat> %b, <1 x bfloat> %c, <1 x bfloat> %d, <1 x bfloat> %e, <1 x bfloat> %f, <1 x bfloat> %g) nounwind {
-; CHECK-LABEL: vector_interleave7_v7bf16_v1bf16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg7e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vle16.v v10, (a2)
-; CHECK-NEXT:    add a2, a3, a1
-; CHECK-NEXT:    add a4, a2, a1
-; CHECK-NEXT:    vle16.v v11, (a4)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vle16.v v12, (a2)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 1
-; CHECK-NEXT:    add a1, a4, a1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a1)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v12, v11, 1
-; CHECK-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v12, v10, 2
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v9, 3
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v12, 4
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave7_v7bf16_v1bf16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    mv a1, a0
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, a0, a1
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli s1, s1, 2
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg7e16.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a2, a0, 1
+; CHECK-RV32-NEXT:    add a0, a2, a0
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vle16.v v8, (a1)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    srli a0, s2, 2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 12
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 10
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (s1)
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    add s1, s1, s2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 1
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v10, (s1)
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 1
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a1, a0, 1
+; CHECK-RV32-NEXT:    add a0, a1, a0
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v9, 3
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    mv a1, a0
+; CHECK-RV32-NEXT:    slli a0, a0, 1
+; CHECK-RV32-NEXT:    add a0, a0, a1
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave7_v7bf16_v1bf16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg7e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vle16.v v10, (a2)
-; ZVBB-NEXT:    add a2, a3, a1
-; ZVBB-NEXT:    add a4, a2, a1
-; ZVBB-NEXT:    vle16.v v11, (a4)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vle16.v v12, (a2)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 1
-; ZVBB-NEXT:    add a1, a4, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a1)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v12, v11, 1
-; ZVBB-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v12, v10, 2
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v9, 3
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v12, 4
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave7_v7bf16_v1bf16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    mv a1, a0
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, a0, a1
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli s1, s1, 2
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg7e16.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a2, a0, 1
+; CHECK-RV64-NEXT:    add a0, a2, a0
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vle16.v v8, (a1)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    srli a0, s2, 2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 12
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 10
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (s1)
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    add s1, s1, s2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 1
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v10, (s1)
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 1
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 2
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a1, a0, 1
+; CHECK-RV64-NEXT:    add a0, a1, a0
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v9, 3
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v8, v10, 4
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    mv a1, a0
+; CHECK-RV64-NEXT:    slli a0, a0, 1
+; CHECK-RV64-NEXT:    add a0, a0, a1
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave7_v7bf16_v1bf16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg7e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    vle16.v v9, (a3)
-; ZVZIP-NEXT:    add a3, a3, a1
-; ZVZIP-NEXT:    vle16.v v10, (a2)
-; ZVZIP-NEXT:    add a2, a3, a1
-; ZVZIP-NEXT:    add a4, a2, a1
-; ZVZIP-NEXT:    vle16.v v11, (a4)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    vle16.v v12, (a2)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 1
-; ZVZIP-NEXT:    add a1, a4, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v10, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v12, v11, 1
-; ZVZIP-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v12, v10, 2
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 3
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v12, 4
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave7_v7bf16_v1bf16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    mv a1, a0
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a0, a1
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli s1, s1, 2
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg7e16.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a2, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    srli a0, s2, 2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 12
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 10
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    add s1, s1, s2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 1
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 1
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v9, 3
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    mv a1, a0
+; ZVBB-RV32-NEXT:    slli a0, a0, 1
+; ZVBB-RV32-NEXT:    add a0, a0, a1
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave7_v7bf16_v1bf16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    mv a1, a0
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a0, a1
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli s1, s1, 2
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg7e16.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a2, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    srli a0, s2, 2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 12
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 10
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (s1)
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    add s1, s1, s2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 1
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v10, (s1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 1
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v9, 3
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    mv a1, a0
+; ZVBB-RV64-NEXT:    slli a0, a0, 1
+; ZVBB-RV64-NEXT:    add a0, a0, a1
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave7_v7bf16_v1bf16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    mv a1, a0
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a0, a1
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli s1, s1, 2
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg7e16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a2, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a2, a0
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    srli a0, s2, 2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 12
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 10
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    add s1, s1, s2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 1
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 1
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a1, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a1, a0
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v9, 3
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    mv a1, a0
+; ZVZIP-RV32-NEXT:    slli a0, a0, 1
+; ZVZIP-RV32-NEXT:    add a0, a0, a1
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave7_v7bf16_v1bf16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    mv a1, a0
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a0, a1
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli s1, s1, 2
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg7e16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a2, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a2, a0
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    srli a0, s2, 2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 12
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v8, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 10
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    add s1, s1, s2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 1
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v10, (s1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 1
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 2
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a1, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a1, a0
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v9, 3
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v8, v10, 4
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    mv a1, a0
+; ZVZIP-RV64-NEXT:    slli a0, a0, 1
+; ZVZIP-RV64-NEXT:    add a0, a0, a1
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <7 x bfloat> @llvm.vector.interleave7.v7bf16(<1 x bfloat> %a, <1 x bfloat> %b, <1 x bfloat> %c, <1 x bfloat> %d, <1 x bfloat> %e, <1 x bfloat> %f, <1 x bfloat> %g)
 	   ret <7 x bfloat> %res
 }
 
 define <8 x half> @vector_interleave8_v8f16_v1f16(<1 x half> %a, <1 x half> %b, <1 x half> %c, <1 x half> %d, <1 x half> %e, <1 x half> %f, <1 x half> %g, <1 x half> %h) nounwind {
-; CHECK-LABEL: vector_interleave8_v8f16_v1f16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg8e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a4, a3, a1
-; CHECK-NEXT:    add a5, a4, a1
-; CHECK-NEXT:    add a6, a5, a1
-; CHECK-NEXT:    vle16.v v9, (a6)
-; CHECK-NEXT:    vle16.v v10, (a5)
-; CHECK-NEXT:    add a6, a6, a1
-; CHECK-NEXT:    vle16.v v11, (a6)
-; CHECK-NEXT:    vle16.v v12, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v12, 1
-; CHECK-NEXT:    add a1, a6, a1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v12, (a1)
-; CHECK-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v10, v11, 2
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v12, 3
-; CHECK-NEXT:    vslideup.vi v8, v9, 3
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 4
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave8_v8f16_v1f16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 2
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli s1, s1, 1
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg8e16.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 10
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a1, s1, s2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    vle16.v v9, (a1)
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 1
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 12
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 14
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 2
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a1)
+; CHECK-RV32-NEXT:    vle16.v v11, (s1)
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    srli a0, s2, 1
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v11, v8, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 3
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v11, v8, 2
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 3
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 4
+; CHECK-RV32-NEXT:    vmv.v.v v8, v9
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 2
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave8_v8f16_v1f16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg8e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a4, a3, a1
-; ZVBB-NEXT:    add a5, a4, a1
-; ZVBB-NEXT:    add a6, a5, a1
-; ZVBB-NEXT:    vle16.v v9, (a6)
-; ZVBB-NEXT:    vle16.v v10, (a5)
-; ZVBB-NEXT:    add a6, a6, a1
-; ZVBB-NEXT:    vle16.v v11, (a6)
-; ZVBB-NEXT:    vle16.v v12, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v12, 1
-; ZVBB-NEXT:    add a1, a6, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v12, (a1)
-; ZVBB-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v10, v11, 2
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v12, 3
-; ZVBB-NEXT:    vslideup.vi v8, v9, 3
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 4
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave8_v8f16_v1f16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 2
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli s1, s1, 1
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg8e16.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 10
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a1, s1, s2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    vle16.v v9, (a1)
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 1
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 12
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 14
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 2
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a1)
+; CHECK-RV64-NEXT:    vle16.v v11, (s1)
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    srli a0, s2, 1
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v11, v8, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 3
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v11, v8, 2
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 3
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 4
+; CHECK-RV64-NEXT:    vmv.v.v v8, v9
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 2
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave8_v8f16_v1f16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg8e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    add a4, a3, a1
-; ZVZIP-NEXT:    add a5, a4, a1
-; ZVZIP-NEXT:    add a6, a5, a1
-; ZVZIP-NEXT:    vle16.v v9, (a6)
-; ZVZIP-NEXT:    vle16.v v10, (a5)
-; ZVZIP-NEXT:    add a6, a6, a1
-; ZVZIP-NEXT:    vle16.v v11, (a6)
-; ZVZIP-NEXT:    vle16.v v12, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v12, 1
-; ZVZIP-NEXT:    add a1, a6, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v12, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v11, 2
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a4)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v12, 3
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 3
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave8_v8f16_v1f16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 2
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli s1, s1, 1
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg8e16.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 10
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a1, s1, s2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    vle16.v v9, (a1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 1
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 12
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 14
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 2
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV32-NEXT:    vle16.v v11, (s1)
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    srli a0, s2, 1
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v11, v8, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 3
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v11, v8, 2
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 3
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 4
+; ZVBB-RV32-NEXT:    vmv.v.v v8, v9
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 2
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave8_v8f16_v1f16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 2
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli s1, s1, 1
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg8e16.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 10
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a1, s1, s2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    vle16.v v9, (a1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 1
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 12
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 14
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 2
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV64-NEXT:    vle16.v v11, (s1)
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    srli a0, s2, 1
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v11, v8, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 3
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v11, v8, 2
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 3
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 4
+; ZVBB-RV64-NEXT:    vmv.v.v v8, v9
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 2
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave8_v8f16_v1f16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 2
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli s1, s1, 1
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg8e16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 10
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a1, s1, s2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 1
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 12
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 14
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 2
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV32-NEXT:    vle16.v v11, (s1)
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    srli a0, s2, 1
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v11, v8, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 3
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v11, v8, 2
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 3
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 4
+; ZVZIP-RV32-NEXT:    vmv.v.v v8, v9
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 2
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave8_v8f16_v1f16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 2
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli s1, s1, 1
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg8e16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 10
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a1, s1, s2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 1
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 12
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 14
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 2
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV64-NEXT:    vle16.v v11, (s1)
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    srli a0, s2, 1
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v11, v8, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 3
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v11, v8, 2
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 3
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 4
+; ZVZIP-RV64-NEXT:    vmv.v.v v8, v9
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 2
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <8 x half> @llvm.vector.interleave8.v8f16(<1 x half> %a, <1 x half> %b, <1 x half> %c, <1 x half> %d, <1 x half> %e, <1 x half> %f, <1 x half> %g, <1 x half> %h)
 	   ret <8 x half> %res
 }
 
 define <8 x bfloat> @vector_interleave8_v8bf16_v1bf16(<1 x bfloat> %a, <1 x bfloat> %b, <1 x bfloat> %c, <1 x bfloat> %d, <1 x bfloat> %e, <1 x bfloat> %f, <1 x bfloat> %g, <1 x bfloat> %h) nounwind {
-; CHECK-LABEL: vector_interleave8_v8bf16_v1bf16:
-; CHECK:       # %bb.0:
-; CHECK-NEXT:    addi sp, sp, -16
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    sub sp, sp, a0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vsseg8e16.v v8, (a0)
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a4, a3, a1
-; CHECK-NEXT:    add a5, a4, a1
-; CHECK-NEXT:    add a6, a5, a1
-; CHECK-NEXT:    vle16.v v9, (a6)
-; CHECK-NEXT:    vle16.v v10, (a5)
-; CHECK-NEXT:    add a6, a6, a1
-; CHECK-NEXT:    vle16.v v11, (a6)
-; CHECK-NEXT:    vle16.v v12, (a2)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v10, v9, 1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v8, v12, 1
-; CHECK-NEXT:    add a1, a6, a1
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v12, (a1)
-; CHECK-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; CHECK-NEXT:    vslideup.vi v10, v11, 2
-; CHECK-NEXT:    vslideup.vi v8, v9, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vi v10, v12, 3
-; CHECK-NEXT:    vslideup.vi v8, v9, 3
-; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vi v8, v10, 4
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    slli a0, a0, 1
-; CHECK-NEXT:    add sp, sp, a0
-; CHECK-NEXT:    addi sp, sp, 16
-; CHECK-NEXT:    ret
+; CHECK-RV32-LABEL: vector_interleave8_v8bf16_v1bf16:
+; CHECK-RV32:       # %bb.0:
+; CHECK-RV32-NEXT:    addi sp, sp, -32
+; CHECK-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 2
+; CHECK-RV32-NEXT:    sub sp, sp, a0
+; CHECK-RV32-NEXT:    csrr s1, vlenb
+; CHECK-RV32-NEXT:    slli s1, s1, 1
+; CHECK-RV32-NEXT:    add s1, sp, s1
+; CHECK-RV32-NEXT:    addi s1, s1, 16
+; CHECK-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vsseg8e16.v v8, (s1)
+; CHECK-RV32-NEXT:    csrr s2, vlenb
+; CHECK-RV32-NEXT:    srli s0, s2, 3
+; CHECK-RV32-NEXT:    li a1, 10
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a1, s1, s2
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    vle16.v v9, (a1)
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 1
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 12
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 2
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 14
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    srli a1, s2, 2
+; CHECK-RV32-NEXT:    add a1, s1, a1
+; CHECK-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a1)
+; CHECK-RV32-NEXT:    vle16.v v11, (s1)
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vle16.v v9, (a0)
+; CHECK-RV32-NEXT:    srli a0, s2, 1
+; CHECK-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v11, v8, 1
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v10, v9, 3
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV32-NEXT:    vslideup.vi v11, v8, 2
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV32-NEXT:    li a1, 6
+; CHECK-RV32-NEXT:    mv a0, s0
+; CHECK-RV32-NEXT:    call __mulsi3
+; CHECK-RV32-NEXT:    add a0, s1, a0
+; CHECK-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV32-NEXT:    vle16.v v8, (a0)
+; CHECK-RV32-NEXT:    addi a0, sp, 16
+; CHECK-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 3
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    add a0, sp, a0
+; CHECK-RV32-NEXT:    addi a0, a0, 16
+; CHECK-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV32-NEXT:    vslideup.vi v9, v8, 4
+; CHECK-RV32-NEXT:    vmv.v.v v8, v9
+; CHECK-RV32-NEXT:    csrr a0, vlenb
+; CHECK-RV32-NEXT:    slli a0, a0, 2
+; CHECK-RV32-NEXT:    add sp, sp, a0
+; CHECK-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; CHECK-RV32-NEXT:    addi sp, sp, 32
+; CHECK-RV32-NEXT:    ret
 ;
-; ZVBB-LABEL: vector_interleave8_v8bf16_v1bf16:
-; ZVBB:       # %bb.0:
-; ZVBB-NEXT:    addi sp, sp, -16
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    sub sp, sp, a0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vsseg8e16.v v8, (a0)
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a4, a3, a1
-; ZVBB-NEXT:    add a5, a4, a1
-; ZVBB-NEXT:    add a6, a5, a1
-; ZVBB-NEXT:    vle16.v v9, (a6)
-; ZVBB-NEXT:    vle16.v v10, (a5)
-; ZVBB-NEXT:    add a6, a6, a1
-; ZVBB-NEXT:    vle16.v v11, (a6)
-; ZVBB-NEXT:    vle16.v v12, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v10, v9, 1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v8, v12, 1
-; ZVBB-NEXT:    add a1, a6, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v12, (a1)
-; ZVBB-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVBB-NEXT:    vslideup.vi v10, v11, 2
-; ZVBB-NEXT:    vslideup.vi v8, v9, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vi v10, v12, 3
-; ZVBB-NEXT:    vslideup.vi v8, v9, 3
-; ZVBB-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vi v8, v10, 4
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    slli a0, a0, 1
-; ZVBB-NEXT:    add sp, sp, a0
-; ZVBB-NEXT:    addi sp, sp, 16
-; ZVBB-NEXT:    ret
+; CHECK-RV64-LABEL: vector_interleave8_v8bf16_v1bf16:
+; CHECK-RV64:       # %bb.0:
+; CHECK-RV64-NEXT:    addi sp, sp, -48
+; CHECK-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 2
+; CHECK-RV64-NEXT:    sub sp, sp, a0
+; CHECK-RV64-NEXT:    csrr s1, vlenb
+; CHECK-RV64-NEXT:    slli s1, s1, 1
+; CHECK-RV64-NEXT:    add s1, sp, s1
+; CHECK-RV64-NEXT:    addi s1, s1, 16
+; CHECK-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vsseg8e16.v v8, (s1)
+; CHECK-RV64-NEXT:    csrr s2, vlenb
+; CHECK-RV64-NEXT:    srli s0, s2, 3
+; CHECK-RV64-NEXT:    li a1, 10
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a1, s1, s2
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    vle16.v v9, (a1)
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 1
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 12
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 2
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 14
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    srli a1, s2, 2
+; CHECK-RV64-NEXT:    add a1, s1, a1
+; CHECK-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a1)
+; CHECK-RV64-NEXT:    vle16.v v11, (s1)
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vle16.v v9, (a0)
+; CHECK-RV64-NEXT:    srli a0, s2, 1
+; CHECK-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v11, v8, 1
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v10, v9, 3
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; CHECK-RV64-NEXT:    vslideup.vi v11, v8, 2
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; CHECK-RV64-NEXT:    li a1, 6
+; CHECK-RV64-NEXT:    mv a0, s0
+; CHECK-RV64-NEXT:    call __muldi3
+; CHECK-RV64-NEXT:    add a0, s1, a0
+; CHECK-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; CHECK-RV64-NEXT:    vle16.v v8, (a0)
+; CHECK-RV64-NEXT:    addi a0, sp, 16
+; CHECK-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 3
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    add a0, sp, a0
+; CHECK-RV64-NEXT:    addi a0, a0, 16
+; CHECK-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; CHECK-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; CHECK-RV64-NEXT:    vslideup.vi v9, v8, 4
+; CHECK-RV64-NEXT:    vmv.v.v v8, v9
+; CHECK-RV64-NEXT:    csrr a0, vlenb
+; CHECK-RV64-NEXT:    slli a0, a0, 2
+; CHECK-RV64-NEXT:    add sp, sp, a0
+; CHECK-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; CHECK-RV64-NEXT:    addi sp, sp, 48
+; CHECK-RV64-NEXT:    ret
 ;
-; ZVZIP-LABEL: vector_interleave8_v8bf16_v1bf16:
-; ZVZIP:       # %bb.0:
-; ZVZIP-NEXT:    addi sp, sp, -16
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    sub sp, sp, a0
-; ZVZIP-NEXT:    addi a0, sp, 16
-; ZVZIP-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vsseg8e16.v v8, (a0)
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    srli a1, a1, 2
-; ZVZIP-NEXT:    add a2, a0, a1
-; ZVZIP-NEXT:    add a3, a2, a1
-; ZVZIP-NEXT:    add a4, a3, a1
-; ZVZIP-NEXT:    add a5, a4, a1
-; ZVZIP-NEXT:    add a6, a5, a1
-; ZVZIP-NEXT:    vle16.v v9, (a6)
-; ZVZIP-NEXT:    vle16.v v10, (a5)
-; ZVZIP-NEXT:    add a6, a6, a1
-; ZVZIP-NEXT:    vle16.v v11, (a6)
-; ZVZIP-NEXT:    vle16.v v12, (a2)
-; ZVZIP-NEXT:    vle16.v v8, (a0)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v9, 1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a3)
-; ZVZIP-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v12, 1
-; ZVZIP-NEXT:    add a1, a6, a1
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v12, (a1)
-; ZVZIP-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v11, 2
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 2
-; ZVZIP-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
-; ZVZIP-NEXT:    vle16.v v9, (a4)
-; ZVZIP-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v10, v12, 3
-; ZVZIP-NEXT:    vslideup.vi v8, v9, 3
-; ZVZIP-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
-; ZVZIP-NEXT:    vslideup.vi v8, v10, 4
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    slli a0, a0, 1
-; ZVZIP-NEXT:    add sp, sp, a0
-; ZVZIP-NEXT:    addi sp, sp, 16
-; ZVZIP-NEXT:    ret
+; ZVBB-RV32-LABEL: vector_interleave8_v8bf16_v1bf16:
+; ZVBB-RV32:       # %bb.0:
+; ZVBB-RV32-NEXT:    addi sp, sp, -32
+; ZVBB-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 2
+; ZVBB-RV32-NEXT:    sub sp, sp, a0
+; ZVBB-RV32-NEXT:    csrr s1, vlenb
+; ZVBB-RV32-NEXT:    slli s1, s1, 1
+; ZVBB-RV32-NEXT:    add s1, sp, s1
+; ZVBB-RV32-NEXT:    addi s1, s1, 16
+; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vsseg8e16.v v8, (s1)
+; ZVBB-RV32-NEXT:    csrr s2, vlenb
+; ZVBB-RV32-NEXT:    srli s0, s2, 3
+; ZVBB-RV32-NEXT:    li a1, 10
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a1, s1, s2
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    vle16.v v9, (a1)
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 1
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 12
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 2
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 14
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    srli a1, s2, 2
+; ZVBB-RV32-NEXT:    add a1, s1, a1
+; ZVBB-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV32-NEXT:    vle16.v v11, (s1)
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV32-NEXT:    srli a0, s2, 1
+; ZVBB-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v11, v8, 1
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v10, v9, 3
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v11, v8, 2
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mv a0, s0
+; ZVBB-RV32-NEXT:    call __mulsi3
+; ZVBB-RV32-NEXT:    add a0, s1, a0
+; ZVBB-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV32-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV32-NEXT:    addi a0, sp, 16
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 3
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 16
+; ZVBB-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV32-NEXT:    vslideup.vi v9, v8, 4
+; ZVBB-RV32-NEXT:    vmv.v.v v8, v9
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a0, a0, 2
+; ZVBB-RV32-NEXT:    add sp, sp, a0
+; ZVBB-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVBB-RV32-NEXT:    addi sp, sp, 32
+; ZVBB-RV32-NEXT:    ret
+;
+; ZVBB-RV64-LABEL: vector_interleave8_v8bf16_v1bf16:
+; ZVBB-RV64:       # %bb.0:
+; ZVBB-RV64-NEXT:    addi sp, sp, -48
+; ZVBB-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 2
+; ZVBB-RV64-NEXT:    sub sp, sp, a0
+; ZVBB-RV64-NEXT:    csrr s1, vlenb
+; ZVBB-RV64-NEXT:    slli s1, s1, 1
+; ZVBB-RV64-NEXT:    add s1, sp, s1
+; ZVBB-RV64-NEXT:    addi s1, s1, 16
+; ZVBB-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vsseg8e16.v v8, (s1)
+; ZVBB-RV64-NEXT:    csrr s2, vlenb
+; ZVBB-RV64-NEXT:    srli s0, s2, 3
+; ZVBB-RV64-NEXT:    li a1, 10
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a1, s1, s2
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    vle16.v v9, (a1)
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 1
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 12
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 2
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 14
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    srli a1, s2, 2
+; ZVBB-RV64-NEXT:    add a1, s1, a1
+; ZVBB-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a1)
+; ZVBB-RV64-NEXT:    vle16.v v11, (s1)
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vle16.v v9, (a0)
+; ZVBB-RV64-NEXT:    srli a0, s2, 1
+; ZVBB-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v11, v8, 1
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v10, v9, 3
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v11, v8, 2
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mv a0, s0
+; ZVBB-RV64-NEXT:    call __muldi3
+; ZVBB-RV64-NEXT:    add a0, s1, a0
+; ZVBB-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVBB-RV64-NEXT:    vle16.v v8, (a0)
+; ZVBB-RV64-NEXT:    addi a0, sp, 16
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 3
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 16
+; ZVBB-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVBB-RV64-NEXT:    vslideup.vi v9, v8, 4
+; ZVBB-RV64-NEXT:    vmv.v.v v8, v9
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a0, a0, 2
+; ZVBB-RV64-NEXT:    add sp, sp, a0
+; ZVBB-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVBB-RV64-NEXT:    addi sp, sp, 48
+; ZVBB-RV64-NEXT:    ret
+;
+; ZVZIP-RV32-LABEL: vector_interleave8_v8bf16_v1bf16:
+; ZVZIP-RV32:       # %bb.0:
+; ZVZIP-RV32-NEXT:    addi sp, sp, -32
+; ZVZIP-RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 2
+; ZVZIP-RV32-NEXT:    sub sp, sp, a0
+; ZVZIP-RV32-NEXT:    csrr s1, vlenb
+; ZVZIP-RV32-NEXT:    slli s1, s1, 1
+; ZVZIP-RV32-NEXT:    add s1, sp, s1
+; ZVZIP-RV32-NEXT:    addi s1, s1, 16
+; ZVZIP-RV32-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vsseg8e16.v v8, (s1)
+; ZVZIP-RV32-NEXT:    csrr s2, vlenb
+; ZVZIP-RV32-NEXT:    srli s0, s2, 3
+; ZVZIP-RV32-NEXT:    li a1, 10
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a1, s1, s2
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a1)
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 1
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 12
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 2
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 14
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    srli a1, s2, 2
+; ZVZIP-RV32-NEXT:    add a1, s1, a1
+; ZVZIP-RV32-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV32-NEXT:    vle16.v v11, (s1)
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV32-NEXT:    srli a0, s2, 1
+; ZVZIP-RV32-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v11, v8, 1
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v10, v9, 3
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v11, v8, 2
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV32-NEXT:    li a1, 6
+; ZVZIP-RV32-NEXT:    mv a0, s0
+; ZVZIP-RV32-NEXT:    call __mulsi3
+; ZVZIP-RV32-NEXT:    add a0, s1, a0
+; ZVZIP-RV32-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV32-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV32-NEXT:    addi a0, sp, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 3
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    add a0, sp, a0
+; ZVZIP-RV32-NEXT:    addi a0, a0, 16
+; ZVZIP-RV32-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV32-NEXT:    vslideup.vi v9, v8, 4
+; ZVZIP-RV32-NEXT:    vmv.v.v v8, v9
+; ZVZIP-RV32-NEXT:    csrr a0, vlenb
+; ZVZIP-RV32-NEXT:    slli a0, a0, 2
+; ZVZIP-RV32-NEXT:    add sp, sp, a0
+; ZVZIP-RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload
+; ZVZIP-RV32-NEXT:    addi sp, sp, 32
+; ZVZIP-RV32-NEXT:    ret
+;
+; ZVZIP-RV64-LABEL: vector_interleave8_v8bf16_v1bf16:
+; ZVZIP-RV64:       # %bb.0:
+; ZVZIP-RV64-NEXT:    addi sp, sp, -48
+; ZVZIP-RV64-NEXT:    sd ra, 40(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s0, 32(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s1, 24(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    sd s2, 16(sp) # 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 2
+; ZVZIP-RV64-NEXT:    sub sp, sp, a0
+; ZVZIP-RV64-NEXT:    csrr s1, vlenb
+; ZVZIP-RV64-NEXT:    slli s1, s1, 1
+; ZVZIP-RV64-NEXT:    add s1, sp, s1
+; ZVZIP-RV64-NEXT:    addi s1, s1, 16
+; ZVZIP-RV64-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vsseg8e16.v v8, (s1)
+; ZVZIP-RV64-NEXT:    csrr s2, vlenb
+; ZVZIP-RV64-NEXT:    srli s0, s2, 3
+; ZVZIP-RV64-NEXT:    li a1, 10
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a1, s1, s2
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a1)
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 1
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 12
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 2
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v9, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 14
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    srli a1, s2, 2
+; ZVZIP-RV64-NEXT:    add a1, s1, a1
+; ZVZIP-RV64-NEXT:    vsetvli a2, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a1)
+; ZVZIP-RV64-NEXT:    vle16.v v11, (s1)
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vle16.v v9, (a0)
+; ZVZIP-RV64-NEXT:    srli a0, s2, 1
+; ZVZIP-RV64-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v11, v8, 1
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v10, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v10, v9, 3
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v10, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v11, v8, 2
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vs1r.v v11, (a0) # vscale x 8-byte Folded Spill
+; ZVZIP-RV64-NEXT:    li a1, 6
+; ZVZIP-RV64-NEXT:    mv a0, s0
+; ZVZIP-RV64-NEXT:    call __muldi3
+; ZVZIP-RV64-NEXT:    add a0, s1, a0
+; ZVZIP-RV64-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
+; ZVZIP-RV64-NEXT:    vle16.v v8, (a0)
+; ZVZIP-RV64-NEXT:    addi a0, sp, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v9, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 3
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    add a0, sp, a0
+; ZVZIP-RV64-NEXT:    addi a0, a0, 16
+; ZVZIP-RV64-NEXT:    vl1r.v v8, (a0) # vscale x 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
+; ZVZIP-RV64-NEXT:    vslideup.vi v9, v8, 4
+; ZVZIP-RV64-NEXT:    vmv.v.v v8, v9
+; ZVZIP-RV64-NEXT:    csrr a0, vlenb
+; ZVZIP-RV64-NEXT:    slli a0, a0, 2
+; ZVZIP-RV64-NEXT:    add sp, sp, a0
+; ZVZIP-RV64-NEXT:    ld ra, 40(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s0, 32(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s1, 24(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    ld s2, 16(sp) # 8-byte Folded Reload
+; ZVZIP-RV64-NEXT:    addi sp, sp, 48
+; ZVZIP-RV64-NEXT:    ret
 	   %res = call <8 x bfloat> @llvm.vector.interleave8.v8bf16(<1 x bfloat> %a, <1 x bfloat> %b, <1 x bfloat> %c, <1 x bfloat> %d, <1 x bfloat> %e, <1 x bfloat> %f, <1 x bfloat> %g, <1 x bfloat> %h)
 	   ret <8 x bfloat> %res
 }
diff --git a/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll b/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
index b4053654e42f2..ba91f6677b7f1 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vector-interleave.ll
@@ -494,13 +494,14 @@ define <vscale x 48 x i1> @vector_interleave_nxv48i1_nxv16i1(<vscale x 16 x i1>
 ; CHECK-NEXT:    vsseg3e8.v v14, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    slli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    vl2r.v v8, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2r.v v8, (a2)
 ; CHECK-NEXT:    vmsne.vi v10, v8, 0
 ; CHECK-NEXT:    vl2r.v v8, (a0)
-; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a0, a0, a2
 ; CHECK-NEXT:    vmsne.vi v0, v8, 0
-; CHECK-NEXT:    vl2r.v v8, (a2)
+; CHECK-NEXT:    vl2r.v v8, (a0)
 ; CHECK-NEXT:    vmsne.vi v11, v8, 0
 ; CHECK-NEXT:    srli a0, a1, 2
 ; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
@@ -535,13 +536,14 @@ define <vscale x 48 x i1> @vector_interleave_nxv48i1_nxv16i1(<vscale x 16 x i1>
 ; ZVBB-NEXT:    vsseg3e8.v v14, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    slli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    vl2r.v v8, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2r.v v8, (a2)
 ; ZVBB-NEXT:    vmsne.vi v10, v8, 0
 ; ZVBB-NEXT:    vl2r.v v8, (a0)
-; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a0, a0, a2
 ; ZVBB-NEXT:    vmsne.vi v0, v8, 0
-; ZVBB-NEXT:    vl2r.v v8, (a2)
+; ZVBB-NEXT:    vl2r.v v8, (a0)
 ; ZVBB-NEXT:    vmsne.vi v11, v8, 0
 ; ZVBB-NEXT:    srli a0, a1, 2
 ; ZVBB-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
@@ -573,9 +575,10 @@ define <vscale x 48 x i8> @vector_interleave_nxv48i8_nxv16i8(<vscale x 16 x i8>
 ; CHECK-NEXT:    vsseg3e8.v v8, (a0)
 ; CHECK-NEXT:    vl2r.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2r.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2r.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2r.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -597,9 +600,10 @@ define <vscale x 48 x i8> @vector_interleave_nxv48i8_nxv16i8(<vscale x 16 x i8>
 ; ZVBB-NEXT:    vsseg3e8.v v8, (a0)
 ; ZVBB-NEXT:    vl2r.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2r.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2r.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2r.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -626,9 +630,10 @@ define <vscale x 24 x i16> @vector_interleave_nxv24i16_nxv8i16(<vscale x 8 x i16
 ; CHECK-NEXT:    vsseg3e16.v v8, (a0)
 ; CHECK-NEXT:    vl2re16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2re16.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re16.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2re16.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -650,9 +655,10 @@ define <vscale x 24 x i16> @vector_interleave_nxv24i16_nxv8i16(<vscale x 8 x i16
 ; ZVBB-NEXT:    vsseg3e16.v v8, (a0)
 ; ZVBB-NEXT:    vl2re16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2re16.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re16.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2re16.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -679,9 +685,10 @@ define <vscale x 12 x i32> @vector_interleave_nxv12i32_nxv4i32(<vscale x 4 x i32
 ; CHECK-NEXT:    vsseg3e32.v v8, (a0)
 ; CHECK-NEXT:    vl2re32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2re32.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re32.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2re32.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -703,9 +710,10 @@ define <vscale x 12 x i32> @vector_interleave_nxv12i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVBB-NEXT:    vl2re32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2re32.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re32.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2re32.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -732,9 +740,10 @@ define <vscale x 6 x i64> @vector_interleave_nxv6i64_nxv2i64(<vscale x 2 x i64>
 ; CHECK-NEXT:    vsseg3e64.v v8, (a0)
 ; CHECK-NEXT:    vl2re64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2re64.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re64.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2re64.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -756,9 +765,10 @@ define <vscale x 6 x i64> @vector_interleave_nxv6i64_nxv2i64(<vscale x 2 x i64>
 ; ZVBB-NEXT:    vsseg3e64.v v8, (a0)
 ; ZVBB-NEXT:    vl2re64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2re64.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re64.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2re64.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -793,14 +803,16 @@ define <vscale x 64 x i1> @vector_interleave_nxv64i1_nxv16i1(<vscale x 16 x i1>
 ; CHECK-NEXT:    vsseg4e8.v v14, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    slli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    slli a3, a1, 2
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a2, a4, a2
-; CHECK-NEXT:    vl2r.v v8, (a2)
-; CHECK-NEXT:    vmsne.vi v10, v8, 0
+; CHECK-NEXT:    add a4, a0, a4
 ; CHECK-NEXT:    vl2r.v v8, (a4)
-; CHECK-NEXT:    vmsne.vi v11, v8, 0
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vmsne.vi v10, v8, 0
 ; CHECK-NEXT:    vl2r.v v8, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vmsne.vi v11, v8, 0
+; CHECK-NEXT:    vl2r.v v8, (a2)
 ; CHECK-NEXT:    vmsne.vi v12, v8, 0
 ; CHECK-NEXT:    vl2r.v v8, (a0)
 ; CHECK-NEXT:    vmsne.vi v0, v8, 0
@@ -838,14 +850,16 @@ define <vscale x 64 x i1> @vector_interleave_nxv64i1_nxv16i1(<vscale x 16 x i1>
 ; ZVBB-NEXT:    vsseg4e8.v v14, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    slli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    slli a3, a1, 2
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a2, a4, a2
-; ZVBB-NEXT:    vl2r.v v8, (a2)
-; ZVBB-NEXT:    vmsne.vi v10, v8, 0
+; ZVBB-NEXT:    add a4, a0, a4
 ; ZVBB-NEXT:    vl2r.v v8, (a4)
-; ZVBB-NEXT:    vmsne.vi v11, v8, 0
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vmsne.vi v10, v8, 0
 ; ZVBB-NEXT:    vl2r.v v8, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vmsne.vi v11, v8, 0
+; ZVBB-NEXT:    vl2r.v v8, (a2)
 ; ZVBB-NEXT:    vmsne.vi v12, v8, 0
 ; ZVBB-NEXT:    vl2r.v v8, (a0)
 ; ZVBB-NEXT:    vmsne.vi v0, v8, 0
@@ -877,14 +891,16 @@ define <vscale x 64 x i8> @vector_interleave_nxv64i8_nxv16i8(<vscale x 16 x i8>
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vsseg4e8.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl2r.v v12, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl2r.v v14, (a1)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2r.v v14, (a2)
 ; CHECK-NEXT:    vl2r.v v8, (a0)
-; CHECK-NEXT:    vl2r.v v10, (a2)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl2r.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -901,14 +917,16 @@ define <vscale x 64 x i8> @vector_interleave_nxv64i8_nxv16i8(<vscale x 16 x i8>
 ; ZVBB-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
 ; ZVBB-NEXT:    vsseg4e8.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl2r.v v12, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl2r.v v14, (a1)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2r.v v14, (a2)
 ; ZVBB-NEXT:    vl2r.v v8, (a0)
-; ZVBB-NEXT:    vl2r.v v10, (a2)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl2r.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -929,13 +947,14 @@ define <vscale x 32 x i8> @vector_interleave_nxv32i8_nxv8i8(<vscale x 8 x i8> %a
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vsseg4e8.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1r.v v10, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1r.v v11, (a1)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1r.v v11, (a2)
 ; CHECK-NEXT:    vl1r.v v8, (a0)
-; CHECK-NEXT:    vl1r.v v9, (a2)
+; CHECK-NEXT:    vl1r.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -952,13 +971,14 @@ define <vscale x 32 x i8> @vector_interleave_nxv32i8_nxv8i8(<vscale x 8 x i8> %a
 ; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; ZVBB-NEXT:    vsseg4e8.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1r.v v10, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1r.v v11, (a1)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1r.v v11, (a2)
 ; ZVBB-NEXT:    vl1r.v v8, (a0)
-; ZVBB-NEXT:    vl1r.v v9, (a2)
+; ZVBB-NEXT:    vl1r.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -980,14 +1000,16 @@ define <vscale x 16 x i32> @vector_interleave_nxv16i32_nxv4i32(<vscale x 4 x i32
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
 ; CHECK-NEXT:    vsseg4e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl2re32.v v12, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl2re32.v v14, (a1)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re32.v v14, (a2)
 ; CHECK-NEXT:    vl2re32.v v8, (a0)
-; CHECK-NEXT:    vl2re32.v v10, (a2)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl2re32.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -1004,14 +1026,16 @@ define <vscale x 16 x i32> @vector_interleave_nxv16i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
 ; ZVBB-NEXT:    vsseg4e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl2re32.v v12, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl2re32.v v14, (a1)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re32.v v14, (a2)
 ; ZVBB-NEXT:    vl2re32.v v8, (a0)
-; ZVBB-NEXT:    vl2re32.v v10, (a2)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl2re32.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -1033,14 +1057,16 @@ define <vscale x 8 x i64> @vector_interleave_nxv8i64_nxv2i64(<vscale x 2 x i64>
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
 ; CHECK-NEXT:    vsseg4e64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl2re64.v v12, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl2re64.v v14, (a1)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re64.v v14, (a2)
 ; CHECK-NEXT:    vl2re64.v v8, (a0)
-; CHECK-NEXT:    vl2re64.v v10, (a2)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl2re64.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -1057,14 +1083,16 @@ define <vscale x 8 x i64> @vector_interleave_nxv8i64_nxv2i64(<vscale x 2 x i64>
 ; ZVBB-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
 ; ZVBB-NEXT:    vsseg4e64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl2re64.v v12, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl2re64.v v14, (a1)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re64.v v14, (a2)
 ; ZVBB-NEXT:    vl2re64.v v8, (a0)
-; ZVBB-NEXT:    vl2re64.v v10, (a2)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl2re64.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -1097,51 +1125,54 @@ define <vscale x 80 x i1> @vector_interleave_nxv80i1_nxv16i1(<vscale x 16 x i1>
 ; CHECK-NEXT:    vmv1r.v v22, v14
 ; CHECK-NEXT:    vmv1r.v v23, v8
 ; CHECK-NEXT:    vmerge.vim v24, v16, 1, v0
-; CHECK-NEXT:    addi a0, sp, 16
-; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
-; CHECK-NEXT:    vsseg5e8.v v20, (a0)
-; CHECK-NEXT:    vmv1r.v v14, v19
-; CHECK-NEXT:    vmv1r.v v16, v9
-; CHECK-NEXT:    vmv1r.v v17, v25
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a2, a1, 2
-; CHECK-NEXT:    add a1, a2, a1
+; CHECK-NEXT:    slli a0, a1, 2
+; CHECK-NEXT:    add a1, a0, a1
 ; CHECK-NEXT:    add a1, sp, a1
 ; CHECK-NEXT:    addi a1, a1, 16
-; CHECK-NEXT:    vsseg5e8.v v13, (a1)
-; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vsseg5e8.v v20, (a1)
+; CHECK-NEXT:    vmv1r.v v14, v19
+; CHECK-NEXT:    vmv1r.v v16, v9
+; CHECK-NEXT:    vmv1r.v v17, v25
+; CHECK-NEXT:    addi a2, sp, 16
+; CHECK-NEXT:    vsseg5e8.v v13, (a2)
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a3, a0, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1r.v v8, (a4)
-; CHECK-NEXT:    add a4, a4, a2
-; CHECK-NEXT:    vl1r.v v9, (a4)
-; CHECK-NEXT:    vl1r.v v10, (a0)
-; CHECK-NEXT:    vl1r.v v11, (a3)
-; CHECK-NEXT:    add a0, a1, a2
-; CHECK-NEXT:    vsetvli a3, zero, e8, m2, ta, ma
+; CHECK-NEXT:    add a4, a3, a0
+; CHECK-NEXT:    add a5, a1, a4
+; CHECK-NEXT:    vl1r.v v9, (a5)
+; CHECK-NEXT:    vl1r.v v10, (a1)
+; CHECK-NEXT:    add a5, a1, a0
+; CHECK-NEXT:    vl1r.v v11, (a5)
+; CHECK-NEXT:    add a5, a2, a0
+; CHECK-NEXT:    vsetvli a6, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmsne.vi v12, v8, 0
-; CHECK-NEXT:    vl1r.v v8, (a0)
-; CHECK-NEXT:    add a0, a0, a2
-; CHECK-NEXT:    vl1r.v v9, (a0)
+; CHECK-NEXT:    vl1r.v v8, (a5)
+; CHECK-NEXT:    add a3, a2, a3
+; CHECK-NEXT:    vl1r.v v9, (a3)
 ; CHECK-NEXT:    vmsne.vi v0, v10, 0
-; CHECK-NEXT:    add a4, a4, a2
-; CHECK-NEXT:    vl1r.v v10, (a4)
+; CHECK-NEXT:    slli a3, a0, 2
+; CHECK-NEXT:    add a1, a1, a3
+; CHECK-NEXT:    vl1r.v v10, (a1)
 ; CHECK-NEXT:    vmsne.vi v13, v8, 0
-; CHECK-NEXT:    vl1r.v v11, (a1)
+; CHECK-NEXT:    vl1r.v v11, (a2)
 ; CHECK-NEXT:    vmsne.vi v9, v10, 0
-; CHECK-NEXT:    add a0, a0, a2
-; CHECK-NEXT:    vl1r.v v10, (a0)
-; CHECK-NEXT:    add a0, a0, a2
-; CHECK-NEXT:    srli a1, a2, 2
-; CHECK-NEXT:    vl1r.v v11, (a0)
-; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
+; CHECK-NEXT:    add a4, a2, a4
+; CHECK-NEXT:    vl1r.v v10, (a4)
+; CHECK-NEXT:    add a2, a2, a3
+; CHECK-NEXT:    srli a1, a0, 2
+; CHECK-NEXT:    vl1r.v v11, (a2)
+; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
 ; CHECK-NEXT:    vslideup.vx v0, v12, a1
 ; CHECK-NEXT:    vslideup.vx v9, v13, a1
-; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
+; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmsne.vi v8, v10, 0
-; CHECK-NEXT:    srli a2, a2, 1
-; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v0, v9, a2
+; CHECK-NEXT:    srli a0, a0, 1
+; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v0, v9, a0
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    li a1, 10
 ; CHECK-NEXT:    mul a0, a0, a1
@@ -1171,51 +1202,54 @@ define <vscale x 80 x i1> @vector_interleave_nxv80i1_nxv16i1(<vscale x 16 x i1>
 ; ZVBB-NEXT:    vmv1r.v v22, v14
 ; ZVBB-NEXT:    vmv1r.v v23, v8
 ; ZVBB-NEXT:    vmerge.vim v24, v16, 1, v0
-; ZVBB-NEXT:    addi a0, sp, 16
-; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
-; ZVBB-NEXT:    vsseg5e8.v v20, (a0)
-; ZVBB-NEXT:    vmv1r.v v14, v19
-; ZVBB-NEXT:    vmv1r.v v16, v9
-; ZVBB-NEXT:    vmv1r.v v17, v25
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a2, a1, 2
-; ZVBB-NEXT:    add a1, a2, a1
+; ZVBB-NEXT:    slli a0, a1, 2
+; ZVBB-NEXT:    add a1, a0, a1
 ; ZVBB-NEXT:    add a1, sp, a1
 ; ZVBB-NEXT:    addi a1, a1, 16
-; ZVBB-NEXT:    vsseg5e8.v v13, (a1)
-; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; ZVBB-NEXT:    vsseg5e8.v v20, (a1)
+; ZVBB-NEXT:    vmv1r.v v14, v19
+; ZVBB-NEXT:    vmv1r.v v16, v9
+; ZVBB-NEXT:    vmv1r.v v17, v25
+; ZVBB-NEXT:    addi a2, sp, 16
+; ZVBB-NEXT:    vsseg5e8.v v13, (a2)
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a3, a0, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1r.v v8, (a4)
-; ZVBB-NEXT:    add a4, a4, a2
-; ZVBB-NEXT:    vl1r.v v9, (a4)
-; ZVBB-NEXT:    vl1r.v v10, (a0)
-; ZVBB-NEXT:    vl1r.v v11, (a3)
-; ZVBB-NEXT:    add a0, a1, a2
-; ZVBB-NEXT:    vsetvli a3, zero, e8, m2, ta, ma
+; ZVBB-NEXT:    add a4, a3, a0
+; ZVBB-NEXT:    add a5, a1, a4
+; ZVBB-NEXT:    vl1r.v v9, (a5)
+; ZVBB-NEXT:    vl1r.v v10, (a1)
+; ZVBB-NEXT:    add a5, a1, a0
+; ZVBB-NEXT:    vl1r.v v11, (a5)
+; ZVBB-NEXT:    add a5, a2, a0
+; ZVBB-NEXT:    vsetvli a6, zero, e8, m2, ta, ma
 ; ZVBB-NEXT:    vmsne.vi v12, v8, 0
-; ZVBB-NEXT:    vl1r.v v8, (a0)
-; ZVBB-NEXT:    add a0, a0, a2
-; ZVBB-NEXT:    vl1r.v v9, (a0)
+; ZVBB-NEXT:    vl1r.v v8, (a5)
+; ZVBB-NEXT:    add a3, a2, a3
+; ZVBB-NEXT:    vl1r.v v9, (a3)
 ; ZVBB-NEXT:    vmsne.vi v0, v10, 0
-; ZVBB-NEXT:    add a4, a4, a2
-; ZVBB-NEXT:    vl1r.v v10, (a4)
+; ZVBB-NEXT:    slli a3, a0, 2
+; ZVBB-NEXT:    add a1, a1, a3
+; ZVBB-NEXT:    vl1r.v v10, (a1)
 ; ZVBB-NEXT:    vmsne.vi v13, v8, 0
-; ZVBB-NEXT:    vl1r.v v11, (a1)
+; ZVBB-NEXT:    vl1r.v v11, (a2)
 ; ZVBB-NEXT:    vmsne.vi v9, v10, 0
-; ZVBB-NEXT:    add a0, a0, a2
-; ZVBB-NEXT:    vl1r.v v10, (a0)
-; ZVBB-NEXT:    add a0, a0, a2
-; ZVBB-NEXT:    srli a1, a2, 2
-; ZVBB-NEXT:    vl1r.v v11, (a0)
-; ZVBB-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
+; ZVBB-NEXT:    add a4, a2, a4
+; ZVBB-NEXT:    vl1r.v v10, (a4)
+; ZVBB-NEXT:    add a2, a2, a3
+; ZVBB-NEXT:    srli a1, a0, 2
+; ZVBB-NEXT:    vl1r.v v11, (a2)
+; ZVBB-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v0, v12, a1
 ; ZVBB-NEXT:    vslideup.vx v9, v13, a1
-; ZVBB-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
+; ZVBB-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
 ; ZVBB-NEXT:    vmsne.vi v8, v10, 0
-; ZVBB-NEXT:    srli a2, a2, 1
-; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v0, v9, a2
+; ZVBB-NEXT:    srli a0, a0, 1
+; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v0, v9, a0
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    li a1, 10
 ; ZVBB-NEXT:    mul a0, a0, a1
@@ -1249,35 +1283,38 @@ define <vscale x 80 x i8> @vector_interleave_nxv80i8_nxv16i8(<vscale x 16 x i8>
 ; RV32-NEXT:    vmv1r.v v26, v20
 ; RV32-NEXT:    vmv1r.v v23, v10
 ; RV32-NEXT:    vmv1r.v v25, v14
-; RV32-NEXT:    addi a0, sp, 64
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a0, a1, a0
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 64
 ; RV32-NEXT:    vsseg5e8.v v22, (a0)
 ; RV32-NEXT:    vmv1r.v v18, v11
 ; RV32-NEXT:    vmv1r.v v20, v15
-; RV32-NEXT:    csrr a1, vlenb
-; RV32-NEXT:    slli a2, a1, 2
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a1, sp, a1
-; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsseg5e8.v v17, (a1)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a3, a0, a2
-; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    slli a3, a2, 1
+; RV32-NEXT:    add a4, a0, a3
 ; RV32-NEXT:    vl1r.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1r.v v11, (a4)
+; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    add a5, a0, a4
+; RV32-NEXT:    vl1r.v v11, (a5)
 ; RV32-NEXT:    vl1r.v v8, (a0)
-; RV32-NEXT:    vl1r.v v9, (a3)
-; RV32-NEXT:    add a0, a1, a2
-; RV32-NEXT:    vl1r.v v14, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1r.v v15, (a0)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1r.v v12, (a4)
+; RV32-NEXT:    add a5, a0, a2
+; RV32-NEXT:    vl1r.v v9, (a5)
+; RV32-NEXT:    add a5, a1, a2
+; RV32-NEXT:    vl1r.v v14, (a5)
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1r.v v15, (a3)
+; RV32-NEXT:    slli a3, a2, 2
+; RV32-NEXT:    add a0, a0, a3
+; RV32-NEXT:    vl1r.v v12, (a0)
 ; RV32-NEXT:    vl1r.v v13, (a1)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1r.v v16, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1r.v v17, (a0)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1r.v v16, (a4)
+; RV32-NEXT:    add a1, a1, a3
+; RV32-NEXT:    vl1r.v v17, (a1)
 ; RV32-NEXT:    slli a2, a2, 3
 ; RV32-NEXT:    csrr a0, vlenb
 ; RV32-NEXT:    li a1, 10
@@ -1315,35 +1352,38 @@ define <vscale x 80 x i8> @vector_interleave_nxv80i8_nxv16i8(<vscale x 16 x i8>
 ; RV64-NEXT:    vmv1r.v v26, v20
 ; RV64-NEXT:    vmv1r.v v23, v10
 ; RV64-NEXT:    vmv1r.v v25, v14
-; RV64-NEXT:    addi a0, sp, 64
+; RV64-NEXT:    csrr a0, vlenb
+; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a0, a1, a0
+; RV64-NEXT:    add a0, sp, a0
+; RV64-NEXT:    addi a0, a0, 64
 ; RV64-NEXT:    vsseg5e8.v v22, (a0)
 ; RV64-NEXT:    vmv1r.v v18, v11
 ; RV64-NEXT:    vmv1r.v v20, v15
-; RV64-NEXT:    csrr a1, vlenb
-; RV64-NEXT:    slli a2, a1, 2
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    add a1, sp, a1
-; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    addi a1, sp, 64
 ; RV64-NEXT:    vsseg5e8.v v17, (a1)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a3, a0, a2
-; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    slli a3, a2, 1
+; RV64-NEXT:    add a4, a0, a3
 ; RV64-NEXT:    vl1r.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1r.v v11, (a4)
+; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    add a5, a0, a4
+; RV64-NEXT:    vl1r.v v11, (a5)
 ; RV64-NEXT:    vl1r.v v8, (a0)
-; RV64-NEXT:    vl1r.v v9, (a3)
-; RV64-NEXT:    add a0, a1, a2
-; RV64-NEXT:    vl1r.v v14, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1r.v v15, (a0)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1r.v v12, (a4)
+; RV64-NEXT:    add a5, a0, a2
+; RV64-NEXT:    vl1r.v v9, (a5)
+; RV64-NEXT:    add a5, a1, a2
+; RV64-NEXT:    vl1r.v v14, (a5)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1r.v v15, (a3)
+; RV64-NEXT:    slli a3, a2, 2
+; RV64-NEXT:    add a0, a0, a3
+; RV64-NEXT:    vl1r.v v12, (a0)
 ; RV64-NEXT:    vl1r.v v13, (a1)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1r.v v16, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1r.v v17, (a0)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1r.v v16, (a4)
+; RV64-NEXT:    add a1, a1, a3
+; RV64-NEXT:    vl1r.v v17, (a1)
 ; RV64-NEXT:    slli a2, a2, 3
 ; RV64-NEXT:    csrr a0, vlenb
 ; RV64-NEXT:    li a1, 10
@@ -1381,35 +1421,38 @@ define <vscale x 80 x i8> @vector_interleave_nxv80i8_nxv16i8(<vscale x 16 x i8>
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV32-NEXT:    addi a0, sp, 64
-; ZVBB-RV32-NEXT:    vsseg5e8.v v22, (a0)
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    vsseg5e8.v v22, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV32-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV32-NEXT:    csrr a1, vlenb
-; ZVBB-RV32-NEXT:    slli a2, a1, 2
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    add a1, sp, a1
-; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg5e8.v v17, (a1)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a3, a0, a2
-; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    slli a3, a2, 1
+; ZVBB-RV32-NEXT:    add a4, a0, a3
 ; ZVBB-RV32-NEXT:    vl1r.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1r.v v11, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    add a5, a0, a4
+; ZVBB-RV32-NEXT:    vl1r.v v11, (a5)
 ; ZVBB-RV32-NEXT:    vl1r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl1r.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a1, a2
-; ZVBB-RV32-NEXT:    vl1r.v v14, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1r.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1r.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a2
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a5)
+; ZVBB-RV32-NEXT:    add a5, a1, a2
+; ZVBB-RV32-NEXT:    vl1r.v v14, (a5)
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1r.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a2, 2
+; ZVBB-RV32-NEXT:    add a0, a0, a3
+; ZVBB-RV32-NEXT:    vl1r.v v12, (a0)
 ; ZVBB-RV32-NEXT:    vl1r.v v13, (a1)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1r.v v16, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1r.v v17, (a0)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1r.v v16, (a4)
+; ZVBB-RV32-NEXT:    add a1, a1, a3
+; ZVBB-RV32-NEXT:    vl1r.v v17, (a1)
 ; ZVBB-RV32-NEXT:    slli a2, a2, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
 ; ZVBB-RV32-NEXT:    li a1, 10
@@ -1447,35 +1490,38 @@ define <vscale x 80 x i8> @vector_interleave_nxv80i8_nxv16i8(<vscale x 16 x i8>
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV64-NEXT:    addi a0, sp, 64
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 64
 ; ZVBB-RV64-NEXT:    vsseg5e8.v v22, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV64-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV64-NEXT:    csrr a1, vlenb
-; ZVBB-RV64-NEXT:    slli a2, a1, 2
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    add a1, sp, a1
-; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg5e8.v v17, (a1)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a3, a0, a2
-; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    slli a3, a2, 1
+; ZVBB-RV64-NEXT:    add a4, a0, a3
 ; ZVBB-RV64-NEXT:    vl1r.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1r.v v11, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    add a5, a0, a4
+; ZVBB-RV64-NEXT:    vl1r.v v11, (a5)
 ; ZVBB-RV64-NEXT:    vl1r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl1r.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a1, a2
-; ZVBB-RV64-NEXT:    vl1r.v v14, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1r.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1r.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a2
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a5)
+; ZVBB-RV64-NEXT:    add a5, a1, a2
+; ZVBB-RV64-NEXT:    vl1r.v v14, (a5)
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1r.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a2, 2
+; ZVBB-RV64-NEXT:    add a0, a0, a3
+; ZVBB-RV64-NEXT:    vl1r.v v12, (a0)
 ; ZVBB-RV64-NEXT:    vl1r.v v13, (a1)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1r.v v16, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1r.v v17, (a0)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1r.v v16, (a4)
+; ZVBB-RV64-NEXT:    add a1, a1, a3
+; ZVBB-RV64-NEXT:    vl1r.v v17, (a1)
 ; ZVBB-RV64-NEXT:    slli a2, a2, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
 ; ZVBB-RV64-NEXT:    li a1, 10
@@ -1513,35 +1559,38 @@ define <vscale x 80 x i8> @vector_interleave_nxv80i8_nxv16i8(<vscale x 16 x i8>
 ; ZVZIP-NEXT:    vmv1r.v v26, v20
 ; ZVZIP-NEXT:    vmv1r.v v23, v10
 ; ZVZIP-NEXT:    vmv1r.v v25, v14
-; ZVZIP-NEXT:    addi a0, sp, 64
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a0, a1, a0
+; ZVZIP-NEXT:    add a0, sp, a0
+; ZVZIP-NEXT:    addi a0, a0, 64
 ; ZVZIP-NEXT:    vsseg5e8.v v22, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v18, v11
 ; ZVZIP-NEXT:    vmv1r.v v20, v15
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    slli a2, a1, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    add a1, sp, a1
-; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    addi a1, sp, 64
 ; ZVZIP-NEXT:    vsseg5e8.v v17, (a1)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a3, a0, a2
-; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    slli a3, a2, 1
+; ZVZIP-NEXT:    add a4, a0, a3
 ; ZVZIP-NEXT:    vl1r.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1r.v v11, (a4)
+; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    add a5, a0, a4
+; ZVZIP-NEXT:    vl1r.v v11, (a5)
 ; ZVZIP-NEXT:    vl1r.v v8, (a0)
-; ZVZIP-NEXT:    vl1r.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a1, a2
-; ZVZIP-NEXT:    vl1r.v v14, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1r.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1r.v v12, (a4)
+; ZVZIP-NEXT:    add a5, a0, a2
+; ZVZIP-NEXT:    vl1r.v v9, (a5)
+; ZVZIP-NEXT:    add a5, a1, a2
+; ZVZIP-NEXT:    vl1r.v v14, (a5)
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1r.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a2, 2
+; ZVZIP-NEXT:    add a0, a0, a3
+; ZVZIP-NEXT:    vl1r.v v12, (a0)
 ; ZVZIP-NEXT:    vl1r.v v13, (a1)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1r.v v16, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1r.v v17, (a0)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1r.v v16, (a4)
+; ZVZIP-NEXT:    add a1, a1, a3
+; ZVZIP-NEXT:    vl1r.v v17, (a1)
 ; ZVZIP-NEXT:    slli a2, a2, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
 ; ZVZIP-NEXT:    li a1, 10
@@ -1575,15 +1624,17 @@ define <vscale x 40 x i8> @vector_interleave_nxv40i8_nxv8i8(<vscale x 8 x i8> %a
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vsseg5e8.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1r.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1r.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1r.v v11, (a2)
 ; CHECK-NEXT:    vl1r.v v8, (a0)
-; CHECK-NEXT:    vl1r.v v9, (a2)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1r.v v12, (a1)
+; CHECK-NEXT:    vl1r.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1r.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 2
 ; CHECK-NEXT:    add a0, a1, a0
@@ -1602,15 +1653,17 @@ define <vscale x 40 x i8> @vector_interleave_nxv40i8_nxv8i8(<vscale x 8 x i8> %a
 ; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; ZVBB-NEXT:    vsseg5e8.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1r.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1r.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1r.v v11, (a2)
 ; ZVBB-NEXT:    vl1r.v v8, (a0)
-; ZVBB-NEXT:    vl1r.v v9, (a2)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1r.v v12, (a1)
+; ZVBB-NEXT:    vl1r.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1r.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 2
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -1644,35 +1697,38 @@ define <vscale x 20 x i32> @vector_interleave_nxv20i32_nxv4i32(<vscale x 4 x i32
 ; RV32-NEXT:    vmv1r.v v26, v20
 ; RV32-NEXT:    vmv1r.v v23, v10
 ; RV32-NEXT:    vmv1r.v v25, v14
-; RV32-NEXT:    addi a0, sp, 64
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a0, a1, a0
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 64
 ; RV32-NEXT:    vsseg5e32.v v22, (a0)
 ; RV32-NEXT:    vmv1r.v v18, v11
 ; RV32-NEXT:    vmv1r.v v20, v15
-; RV32-NEXT:    csrr a1, vlenb
-; RV32-NEXT:    slli a2, a1, 2
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a1, sp, a1
-; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsseg5e32.v v17, (a1)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a3, a0, a2
-; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    slli a3, a2, 1
+; RV32-NEXT:    add a4, a0, a3
 ; RV32-NEXT:    vl1re32.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re32.v v11, (a4)
+; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    add a5, a0, a4
+; RV32-NEXT:    vl1re32.v v11, (a5)
 ; RV32-NEXT:    vl1re32.v v8, (a0)
-; RV32-NEXT:    vl1re32.v v9, (a3)
-; RV32-NEXT:    add a0, a1, a2
-; RV32-NEXT:    vl1re32.v v14, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re32.v v15, (a0)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re32.v v12, (a4)
+; RV32-NEXT:    add a5, a0, a2
+; RV32-NEXT:    vl1re32.v v9, (a5)
+; RV32-NEXT:    add a5, a1, a2
+; RV32-NEXT:    vl1re32.v v14, (a5)
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re32.v v15, (a3)
+; RV32-NEXT:    slli a3, a2, 2
+; RV32-NEXT:    add a0, a0, a3
+; RV32-NEXT:    vl1re32.v v12, (a0)
 ; RV32-NEXT:    vl1re32.v v13, (a1)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re32.v v16, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re32.v v17, (a0)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re32.v v16, (a4)
+; RV32-NEXT:    add a1, a1, a3
+; RV32-NEXT:    vl1re32.v v17, (a1)
 ; RV32-NEXT:    slli a2, a2, 3
 ; RV32-NEXT:    csrr a0, vlenb
 ; RV32-NEXT:    li a1, 10
@@ -1710,35 +1766,38 @@ define <vscale x 20 x i32> @vector_interleave_nxv20i32_nxv4i32(<vscale x 4 x i32
 ; RV64-NEXT:    vmv1r.v v26, v20
 ; RV64-NEXT:    vmv1r.v v23, v10
 ; RV64-NEXT:    vmv1r.v v25, v14
-; RV64-NEXT:    addi a0, sp, 64
+; RV64-NEXT:    csrr a0, vlenb
+; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a0, a1, a0
+; RV64-NEXT:    add a0, sp, a0
+; RV64-NEXT:    addi a0, a0, 64
 ; RV64-NEXT:    vsseg5e32.v v22, (a0)
 ; RV64-NEXT:    vmv1r.v v18, v11
 ; RV64-NEXT:    vmv1r.v v20, v15
-; RV64-NEXT:    csrr a1, vlenb
-; RV64-NEXT:    slli a2, a1, 2
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    add a1, sp, a1
-; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    addi a1, sp, 64
 ; RV64-NEXT:    vsseg5e32.v v17, (a1)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a3, a0, a2
-; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    slli a3, a2, 1
+; RV64-NEXT:    add a4, a0, a3
 ; RV64-NEXT:    vl1re32.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re32.v v11, (a4)
+; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    add a5, a0, a4
+; RV64-NEXT:    vl1re32.v v11, (a5)
 ; RV64-NEXT:    vl1re32.v v8, (a0)
-; RV64-NEXT:    vl1re32.v v9, (a3)
-; RV64-NEXT:    add a0, a1, a2
-; RV64-NEXT:    vl1re32.v v14, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re32.v v15, (a0)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re32.v v12, (a4)
+; RV64-NEXT:    add a5, a0, a2
+; RV64-NEXT:    vl1re32.v v9, (a5)
+; RV64-NEXT:    add a5, a1, a2
+; RV64-NEXT:    vl1re32.v v14, (a5)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re32.v v15, (a3)
+; RV64-NEXT:    slli a3, a2, 2
+; RV64-NEXT:    add a0, a0, a3
+; RV64-NEXT:    vl1re32.v v12, (a0)
 ; RV64-NEXT:    vl1re32.v v13, (a1)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re32.v v16, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re32.v v17, (a0)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re32.v v16, (a4)
+; RV64-NEXT:    add a1, a1, a3
+; RV64-NEXT:    vl1re32.v v17, (a1)
 ; RV64-NEXT:    slli a2, a2, 3
 ; RV64-NEXT:    csrr a0, vlenb
 ; RV64-NEXT:    li a1, 10
@@ -1776,35 +1835,38 @@ define <vscale x 20 x i32> @vector_interleave_nxv20i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV32-NEXT:    addi a0, sp, 64
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 64
 ; ZVBB-RV32-NEXT:    vsseg5e32.v v22, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV32-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV32-NEXT:    csrr a1, vlenb
-; ZVBB-RV32-NEXT:    slli a2, a1, 2
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    add a1, sp, a1
-; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg5e32.v v17, (a1)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a3, a0, a2
-; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    slli a3, a2, 1
+; ZVBB-RV32-NEXT:    add a4, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v11, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    add a5, a0, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v11, (a5)
 ; ZVBB-RV32-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a1, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v14, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a2
+; ZVBB-RV32-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV32-NEXT:    add a5, a1, a2
+; ZVBB-RV32-NEXT:    vl1re32.v v14, (a5)
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a2, 2
+; ZVBB-RV32-NEXT:    add a0, a0, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v12, (a0)
 ; ZVBB-RV32-NEXT:    vl1re32.v v13, (a1)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v16, (a4)
+; ZVBB-RV32-NEXT:    add a1, a1, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v17, (a1)
 ; ZVBB-RV32-NEXT:    slli a2, a2, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
 ; ZVBB-RV32-NEXT:    li a1, 10
@@ -1842,35 +1904,38 @@ define <vscale x 20 x i32> @vector_interleave_nxv20i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV64-NEXT:    addi a0, sp, 64
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 64
 ; ZVBB-RV64-NEXT:    vsseg5e32.v v22, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV64-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV64-NEXT:    csrr a1, vlenb
-; ZVBB-RV64-NEXT:    slli a2, a1, 2
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    add a1, sp, a1
-; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg5e32.v v17, (a1)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a3, a0, a2
-; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    slli a3, a2, 1
+; ZVBB-RV64-NEXT:    add a4, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v11, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    add a5, a0, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v11, (a5)
 ; ZVBB-RV64-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a1, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v14, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a2
+; ZVBB-RV64-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV64-NEXT:    add a5, a1, a2
+; ZVBB-RV64-NEXT:    vl1re32.v v14, (a5)
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a2, 2
+; ZVBB-RV64-NEXT:    add a0, a0, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v12, (a0)
 ; ZVBB-RV64-NEXT:    vl1re32.v v13, (a1)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v16, (a4)
+; ZVBB-RV64-NEXT:    add a1, a1, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v17, (a1)
 ; ZVBB-RV64-NEXT:    slli a2, a2, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
 ; ZVBB-RV64-NEXT:    li a1, 10
@@ -1908,35 +1973,38 @@ define <vscale x 20 x i32> @vector_interleave_nxv20i32_nxv4i32(<vscale x 4 x i32
 ; ZVZIP-NEXT:    vmv1r.v v26, v20
 ; ZVZIP-NEXT:    vmv1r.v v23, v10
 ; ZVZIP-NEXT:    vmv1r.v v25, v14
-; ZVZIP-NEXT:    addi a0, sp, 64
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a0, a1, a0
+; ZVZIP-NEXT:    add a0, sp, a0
+; ZVZIP-NEXT:    addi a0, a0, 64
 ; ZVZIP-NEXT:    vsseg5e32.v v22, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v18, v11
 ; ZVZIP-NEXT:    vmv1r.v v20, v15
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    slli a2, a1, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    add a1, sp, a1
-; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    addi a1, sp, 64
 ; ZVZIP-NEXT:    vsseg5e32.v v17, (a1)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a3, a0, a2
-; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    slli a3, a2, 1
+; ZVZIP-NEXT:    add a4, a0, a3
 ; ZVZIP-NEXT:    vl1re32.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re32.v v11, (a4)
+; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    add a5, a0, a4
+; ZVZIP-NEXT:    vl1re32.v v11, (a5)
 ; ZVZIP-NEXT:    vl1re32.v v8, (a0)
-; ZVZIP-NEXT:    vl1re32.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a1, a2
-; ZVZIP-NEXT:    vl1re32.v v14, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re32.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re32.v v12, (a4)
+; ZVZIP-NEXT:    add a5, a0, a2
+; ZVZIP-NEXT:    vl1re32.v v9, (a5)
+; ZVZIP-NEXT:    add a5, a1, a2
+; ZVZIP-NEXT:    vl1re32.v v14, (a5)
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re32.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a2, 2
+; ZVZIP-NEXT:    add a0, a0, a3
+; ZVZIP-NEXT:    vl1re32.v v12, (a0)
 ; ZVZIP-NEXT:    vl1re32.v v13, (a1)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re32.v v16, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re32.v v17, (a0)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re32.v v16, (a4)
+; ZVZIP-NEXT:    add a1, a1, a3
+; ZVZIP-NEXT:    vl1re32.v v17, (a1)
 ; ZVZIP-NEXT:    slli a2, a2, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
 ; ZVZIP-NEXT:    li a1, 10
@@ -1980,35 +2048,38 @@ define <vscale x 10 x i64> @vector_interleave_nxv10i64_nxv2i64(<vscale x 2 x i64
 ; RV32-NEXT:    vmv1r.v v26, v20
 ; RV32-NEXT:    vmv1r.v v23, v10
 ; RV32-NEXT:    vmv1r.v v25, v14
-; RV32-NEXT:    addi a0, sp, 64
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a0, a1, a0
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 64
 ; RV32-NEXT:    vsseg5e64.v v22, (a0)
 ; RV32-NEXT:    vmv1r.v v18, v11
 ; RV32-NEXT:    vmv1r.v v20, v15
-; RV32-NEXT:    csrr a1, vlenb
-; RV32-NEXT:    slli a2, a1, 2
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a1, sp, a1
-; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsseg5e64.v v17, (a1)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a3, a0, a2
-; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    slli a3, a2, 1
+; RV32-NEXT:    add a4, a0, a3
 ; RV32-NEXT:    vl1re64.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re64.v v11, (a4)
+; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    add a5, a0, a4
+; RV32-NEXT:    vl1re64.v v11, (a5)
 ; RV32-NEXT:    vl1re64.v v8, (a0)
-; RV32-NEXT:    vl1re64.v v9, (a3)
-; RV32-NEXT:    add a0, a1, a2
-; RV32-NEXT:    vl1re64.v v14, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re64.v v15, (a0)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re64.v v12, (a4)
+; RV32-NEXT:    add a5, a0, a2
+; RV32-NEXT:    vl1re64.v v9, (a5)
+; RV32-NEXT:    add a5, a1, a2
+; RV32-NEXT:    vl1re64.v v14, (a5)
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re64.v v15, (a3)
+; RV32-NEXT:    slli a3, a2, 2
+; RV32-NEXT:    add a0, a0, a3
+; RV32-NEXT:    vl1re64.v v12, (a0)
 ; RV32-NEXT:    vl1re64.v v13, (a1)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re64.v v16, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re64.v v17, (a0)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re64.v v16, (a4)
+; RV32-NEXT:    add a1, a1, a3
+; RV32-NEXT:    vl1re64.v v17, (a1)
 ; RV32-NEXT:    slli a2, a2, 3
 ; RV32-NEXT:    csrr a0, vlenb
 ; RV32-NEXT:    li a1, 10
@@ -2046,35 +2117,38 @@ define <vscale x 10 x i64> @vector_interleave_nxv10i64_nxv2i64(<vscale x 2 x i64
 ; RV64-NEXT:    vmv1r.v v26, v20
 ; RV64-NEXT:    vmv1r.v v23, v10
 ; RV64-NEXT:    vmv1r.v v25, v14
-; RV64-NEXT:    addi a0, sp, 64
+; RV64-NEXT:    csrr a0, vlenb
+; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a0, a1, a0
+; RV64-NEXT:    add a0, sp, a0
+; RV64-NEXT:    addi a0, a0, 64
 ; RV64-NEXT:    vsseg5e64.v v22, (a0)
 ; RV64-NEXT:    vmv1r.v v18, v11
 ; RV64-NEXT:    vmv1r.v v20, v15
-; RV64-NEXT:    csrr a1, vlenb
-; RV64-NEXT:    slli a2, a1, 2
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    add a1, sp, a1
-; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    addi a1, sp, 64
 ; RV64-NEXT:    vsseg5e64.v v17, (a1)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a3, a0, a2
-; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    slli a3, a2, 1
+; RV64-NEXT:    add a4, a0, a3
 ; RV64-NEXT:    vl1re64.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re64.v v11, (a4)
+; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    add a5, a0, a4
+; RV64-NEXT:    vl1re64.v v11, (a5)
 ; RV64-NEXT:    vl1re64.v v8, (a0)
-; RV64-NEXT:    vl1re64.v v9, (a3)
-; RV64-NEXT:    add a0, a1, a2
-; RV64-NEXT:    vl1re64.v v14, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re64.v v15, (a0)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re64.v v12, (a4)
+; RV64-NEXT:    add a5, a0, a2
+; RV64-NEXT:    vl1re64.v v9, (a5)
+; RV64-NEXT:    add a5, a1, a2
+; RV64-NEXT:    vl1re64.v v14, (a5)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re64.v v15, (a3)
+; RV64-NEXT:    slli a3, a2, 2
+; RV64-NEXT:    add a0, a0, a3
+; RV64-NEXT:    vl1re64.v v12, (a0)
 ; RV64-NEXT:    vl1re64.v v13, (a1)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re64.v v16, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re64.v v17, (a0)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re64.v v16, (a4)
+; RV64-NEXT:    add a1, a1, a3
+; RV64-NEXT:    vl1re64.v v17, (a1)
 ; RV64-NEXT:    slli a2, a2, 3
 ; RV64-NEXT:    csrr a0, vlenb
 ; RV64-NEXT:    li a1, 10
@@ -2112,35 +2186,38 @@ define <vscale x 10 x i64> @vector_interleave_nxv10i64_nxv2i64(<vscale x 2 x i64
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV32-NEXT:    addi a0, sp, 64
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 64
 ; ZVBB-RV32-NEXT:    vsseg5e64.v v22, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV32-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV32-NEXT:    csrr a1, vlenb
-; ZVBB-RV32-NEXT:    slli a2, a1, 2
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    add a1, sp, a1
-; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg5e64.v v17, (a1)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a3, a0, a2
-; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    slli a3, a2, 1
+; ZVBB-RV32-NEXT:    add a4, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v11, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    add a5, a0, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v11, (a5)
 ; ZVBB-RV32-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a1, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v14, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a2
+; ZVBB-RV32-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV32-NEXT:    add a5, a1, a2
+; ZVBB-RV32-NEXT:    vl1re64.v v14, (a5)
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a2, 2
+; ZVBB-RV32-NEXT:    add a0, a0, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v12, (a0)
 ; ZVBB-RV32-NEXT:    vl1re64.v v13, (a1)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v16, (a4)
+; ZVBB-RV32-NEXT:    add a1, a1, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v17, (a1)
 ; ZVBB-RV32-NEXT:    slli a2, a2, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
 ; ZVBB-RV32-NEXT:    li a1, 10
@@ -2178,35 +2255,38 @@ define <vscale x 10 x i64> @vector_interleave_nxv10i64_nxv2i64(<vscale x 2 x i64
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV64-NEXT:    addi a0, sp, 64
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 64
 ; ZVBB-RV64-NEXT:    vsseg5e64.v v22, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV64-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV64-NEXT:    csrr a1, vlenb
-; ZVBB-RV64-NEXT:    slli a2, a1, 2
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    add a1, sp, a1
-; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg5e64.v v17, (a1)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a3, a0, a2
-; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    slli a3, a2, 1
+; ZVBB-RV64-NEXT:    add a4, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v11, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    add a5, a0, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v11, (a5)
 ; ZVBB-RV64-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a1, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v14, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a2
+; ZVBB-RV64-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV64-NEXT:    add a5, a1, a2
+; ZVBB-RV64-NEXT:    vl1re64.v v14, (a5)
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a2, 2
+; ZVBB-RV64-NEXT:    add a0, a0, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v12, (a0)
 ; ZVBB-RV64-NEXT:    vl1re64.v v13, (a1)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v16, (a4)
+; ZVBB-RV64-NEXT:    add a1, a1, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v17, (a1)
 ; ZVBB-RV64-NEXT:    slli a2, a2, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
 ; ZVBB-RV64-NEXT:    li a1, 10
@@ -2244,35 +2324,38 @@ define <vscale x 10 x i64> @vector_interleave_nxv10i64_nxv2i64(<vscale x 2 x i64
 ; ZVZIP-NEXT:    vmv1r.v v26, v20
 ; ZVZIP-NEXT:    vmv1r.v v23, v10
 ; ZVZIP-NEXT:    vmv1r.v v25, v14
-; ZVZIP-NEXT:    addi a0, sp, 64
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a0, a1, a0
+; ZVZIP-NEXT:    add a0, sp, a0
+; ZVZIP-NEXT:    addi a0, a0, 64
 ; ZVZIP-NEXT:    vsseg5e64.v v22, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v18, v11
 ; ZVZIP-NEXT:    vmv1r.v v20, v15
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    slli a2, a1, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    add a1, sp, a1
-; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    addi a1, sp, 64
 ; ZVZIP-NEXT:    vsseg5e64.v v17, (a1)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a3, a0, a2
-; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    slli a3, a2, 1
+; ZVZIP-NEXT:    add a4, a0, a3
 ; ZVZIP-NEXT:    vl1re64.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re64.v v11, (a4)
+; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    add a5, a0, a4
+; ZVZIP-NEXT:    vl1re64.v v11, (a5)
 ; ZVZIP-NEXT:    vl1re64.v v8, (a0)
-; ZVZIP-NEXT:    vl1re64.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a1, a2
-; ZVZIP-NEXT:    vl1re64.v v14, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re64.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re64.v v12, (a4)
+; ZVZIP-NEXT:    add a5, a0, a2
+; ZVZIP-NEXT:    vl1re64.v v9, (a5)
+; ZVZIP-NEXT:    add a5, a1, a2
+; ZVZIP-NEXT:    vl1re64.v v14, (a5)
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re64.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a2, 2
+; ZVZIP-NEXT:    add a0, a0, a3
+; ZVZIP-NEXT:    vl1re64.v v12, (a0)
 ; ZVZIP-NEXT:    vl1re64.v v13, (a1)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re64.v v16, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re64.v v17, (a0)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re64.v v16, (a4)
+; ZVZIP-NEXT:    add a1, a1, a3
+; ZVZIP-NEXT:    vl1re64.v v17, (a1)
 ; ZVZIP-NEXT:    slli a2, a2, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
 ; ZVZIP-NEXT:    li a1, 10
@@ -2319,60 +2402,64 @@ define <vscale x 96 x i1> @vector_interleave_nxv96i1_nxv16i1(<vscale x 16 x i1>
 ; CHECK-NEXT:    vmv1r.v v18, v25
 ; CHECK-NEXT:    vmv1r.v v19, v11
 ; CHECK-NEXT:    vmv1r.v v20, v13
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    li a0, 6
-; CHECK-NEXT:    mul a1, a1, a0
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
-; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; CHECK-NEXT:    vsseg6e8.v v15, (a1)
+; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vsseg6e8.v v15, (a0)
 ; CHECK-NEXT:    vmv1r.v v15, v22
 ; CHECK-NEXT:    vmv1r.v v16, v8
 ; CHECK-NEXT:    vmv1r.v v17, v24
 ; CHECK-NEXT:    vmv1r.v v18, v10
 ; CHECK-NEXT:    vmv1r.v v19, v12
-; CHECK-NEXT:    addi a2, sp, 16
+; CHECK-NEXT:    csrr a2, vlenb
+; CHECK-NEXT:    li a1, 6
+; CHECK-NEXT:    mul a2, a2, a1
+; CHECK-NEXT:    add a2, sp, a2
+; CHECK-NEXT:    addi a2, a2, 16
 ; CHECK-NEXT:    vsseg6e8.v v14, (a2)
-; CHECK-NEXT:    vl1r.v v8, (a1)
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    add a1, a1, a0
-; CHECK-NEXT:    add a3, a2, a0
-; CHECK-NEXT:    vl1r.v v9, (a1)
-; CHECK-NEXT:    add a4, a3, a0
-; CHECK-NEXT:    add a5, a4, a0
-; CHECK-NEXT:    add a6, a5, a0
-; CHECK-NEXT:    vl1r.v v10, (a6)
-; CHECK-NEXT:    add a6, a6, a0
-; CHECK-NEXT:    vl1r.v v11, (a6)
-; CHECK-NEXT:    vl1r.v v12, (a4)
-; CHECK-NEXT:    vsetvli a4, zero, e8, m2, ta, ma
+; CHECK-NEXT:    vl1r.v v8, (a0)
+; CHECK-NEXT:    csrr a1, vlenb
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    vl1r.v v9, (a3)
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    add a4, a2, a3
+; CHECK-NEXT:    vl1r.v v10, (a4)
+; CHECK-NEXT:    add a4, a3, a1
+; CHECK-NEXT:    add a5, a2, a4
+; CHECK-NEXT:    vl1r.v v11, (a5)
+; CHECK-NEXT:    slli a5, a1, 1
+; CHECK-NEXT:    add a6, a2, a5
+; CHECK-NEXT:    vl1r.v v12, (a6)
+; CHECK-NEXT:    add a6, a5, a1
+; CHECK-NEXT:    vsetvli a7, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmsne.vi v14, v8, 0
-; CHECK-NEXT:    vl1r.v v13, (a5)
+; CHECK-NEXT:    add a7, a2, a6
+; CHECK-NEXT:    vl1r.v v13, (a7)
 ; CHECK-NEXT:    vmsne.vi v15, v10, 0
 ; CHECK-NEXT:    vl1r.v v8, (a2)
-; CHECK-NEXT:    add a1, a1, a0
-; CHECK-NEXT:    vl1r.v v9, (a3)
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    vl1r.v v9, (a2)
 ; CHECK-NEXT:    vmsne.vi v16, v12, 0
-; CHECK-NEXT:    add a2, a1, a0
-; CHECK-NEXT:    add a3, a2, a0
+; CHECK-NEXT:    add a3, a0, a3
 ; CHECK-NEXT:    vl1r.v v10, (a3)
 ; CHECK-NEXT:    vmsne.vi v0, v8, 0
-; CHECK-NEXT:    add a3, a3, a0
-; CHECK-NEXT:    vl1r.v v11, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1r.v v11, (a4)
+; CHECK-NEXT:    add a5, a0, a5
 ; CHECK-NEXT:    vmsne.vi v9, v10, 0
-; CHECK-NEXT:    vl1r.v v10, (a1)
-; CHECK-NEXT:    srli a1, a0, 2
-; CHECK-NEXT:    vl1r.v v11, (a2)
-; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vx v15, v14, a1
-; CHECK-NEXT:    vslideup.vx v0, v16, a1
-; CHECK-NEXT:    vsetvli a2, zero, e8, m2, ta, ma
+; CHECK-NEXT:    vl1r.v v10, (a5)
+; CHECK-NEXT:    add a0, a0, a6
+; CHECK-NEXT:    srli a2, a1, 2
+; CHECK-NEXT:    vl1r.v v11, (a0)
+; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
+; CHECK-NEXT:    vslideup.vx v15, v14, a2
+; CHECK-NEXT:    vslideup.vx v0, v16, a2
+; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmsne.vi v8, v10, 0
-; CHECK-NEXT:    srli a0, a0, 1
-; CHECK-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v0, v15, a0
+; CHECK-NEXT:    srli a1, a1, 1
+; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v0, v15, a1
 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v9, a1
+; CHECK-NEXT:    vslideup.vx v8, v9, a2
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    li a1, 12
 ; CHECK-NEXT:    mul a0, a0, a1
@@ -2405,60 +2492,64 @@ define <vscale x 96 x i1> @vector_interleave_nxv96i1_nxv16i1(<vscale x 16 x i1>
 ; ZVBB-NEXT:    vmv1r.v v18, v25
 ; ZVBB-NEXT:    vmv1r.v v19, v11
 ; ZVBB-NEXT:    vmv1r.v v20, v13
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    li a0, 6
-; ZVBB-NEXT:    mul a1, a1, a0
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
-; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; ZVBB-NEXT:    vsseg6e8.v v15, (a1)
+; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
+; ZVBB-NEXT:    vsseg6e8.v v15, (a0)
 ; ZVBB-NEXT:    vmv1r.v v15, v22
 ; ZVBB-NEXT:    vmv1r.v v16, v8
 ; ZVBB-NEXT:    vmv1r.v v17, v24
 ; ZVBB-NEXT:    vmv1r.v v18, v10
 ; ZVBB-NEXT:    vmv1r.v v19, v12
-; ZVBB-NEXT:    addi a2, sp, 16
+; ZVBB-NEXT:    csrr a2, vlenb
+; ZVBB-NEXT:    li a1, 6
+; ZVBB-NEXT:    mul a2, a2, a1
+; ZVBB-NEXT:    add a2, sp, a2
+; ZVBB-NEXT:    addi a2, a2, 16
 ; ZVBB-NEXT:    vsseg6e8.v v14, (a2)
-; ZVBB-NEXT:    vl1r.v v8, (a1)
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    add a1, a1, a0
-; ZVBB-NEXT:    add a3, a2, a0
-; ZVBB-NEXT:    vl1r.v v9, (a1)
-; ZVBB-NEXT:    add a4, a3, a0
-; ZVBB-NEXT:    add a5, a4, a0
-; ZVBB-NEXT:    add a6, a5, a0
-; ZVBB-NEXT:    vl1r.v v10, (a6)
-; ZVBB-NEXT:    add a6, a6, a0
-; ZVBB-NEXT:    vl1r.v v11, (a6)
-; ZVBB-NEXT:    vl1r.v v12, (a4)
-; ZVBB-NEXT:    vsetvli a4, zero, e8, m2, ta, ma
+; ZVBB-NEXT:    vl1r.v v8, (a0)
+; ZVBB-NEXT:    csrr a1, vlenb
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    vl1r.v v9, (a3)
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    add a4, a2, a3
+; ZVBB-NEXT:    vl1r.v v10, (a4)
+; ZVBB-NEXT:    add a4, a3, a1
+; ZVBB-NEXT:    add a5, a2, a4
+; ZVBB-NEXT:    vl1r.v v11, (a5)
+; ZVBB-NEXT:    slli a5, a1, 1
+; ZVBB-NEXT:    add a6, a2, a5
+; ZVBB-NEXT:    vl1r.v v12, (a6)
+; ZVBB-NEXT:    add a6, a5, a1
+; ZVBB-NEXT:    vsetvli a7, zero, e8, m2, ta, ma
 ; ZVBB-NEXT:    vmsne.vi v14, v8, 0
-; ZVBB-NEXT:    vl1r.v v13, (a5)
+; ZVBB-NEXT:    add a7, a2, a6
+; ZVBB-NEXT:    vl1r.v v13, (a7)
 ; ZVBB-NEXT:    vmsne.vi v15, v10, 0
 ; ZVBB-NEXT:    vl1r.v v8, (a2)
-; ZVBB-NEXT:    add a1, a1, a0
-; ZVBB-NEXT:    vl1r.v v9, (a3)
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    vl1r.v v9, (a2)
 ; ZVBB-NEXT:    vmsne.vi v16, v12, 0
-; ZVBB-NEXT:    add a2, a1, a0
-; ZVBB-NEXT:    add a3, a2, a0
+; ZVBB-NEXT:    add a3, a0, a3
 ; ZVBB-NEXT:    vl1r.v v10, (a3)
 ; ZVBB-NEXT:    vmsne.vi v0, v8, 0
-; ZVBB-NEXT:    add a3, a3, a0
-; ZVBB-NEXT:    vl1r.v v11, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1r.v v11, (a4)
+; ZVBB-NEXT:    add a5, a0, a5
 ; ZVBB-NEXT:    vmsne.vi v9, v10, 0
-; ZVBB-NEXT:    vl1r.v v10, (a1)
-; ZVBB-NEXT:    srli a1, a0, 2
-; ZVBB-NEXT:    vl1r.v v11, (a2)
-; ZVBB-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vx v15, v14, a1
-; ZVBB-NEXT:    vslideup.vx v0, v16, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e8, m2, ta, ma
+; ZVBB-NEXT:    vl1r.v v10, (a5)
+; ZVBB-NEXT:    add a0, a0, a6
+; ZVBB-NEXT:    srli a2, a1, 2
+; ZVBB-NEXT:    vl1r.v v11, (a0)
+; ZVBB-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
+; ZVBB-NEXT:    vslideup.vx v15, v14, a2
+; ZVBB-NEXT:    vslideup.vx v0, v16, a2
+; ZVBB-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
 ; ZVBB-NEXT:    vmsne.vi v8, v10, 0
-; ZVBB-NEXT:    srli a0, a0, 1
-; ZVBB-NEXT:    vsetvli a2, zero, e8, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v0, v15, a0
+; ZVBB-NEXT:    srli a1, a1, 1
+; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v0, v15, a1
 ; ZVBB-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v9, a1
+; ZVBB-NEXT:    vslideup.vx v8, v9, a2
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    li a1, 12
 ; ZVBB-NEXT:    mul a0, a0, a1
@@ -2489,52 +2580,56 @@ define <vscale x 96 x i8> @vector_interleave_nxv96i8_nxv16i8(<vscale x 16 x i8>
 ; RV32-NEXT:    vmv1r.v v24, v15
 ; RV32-NEXT:    vmv1r.v v25, v17
 ; RV32-NEXT:    vmv1r.v v26, v19
-; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 6
-; RV32-NEXT:    mul a0, a0, a1
-; RV32-NEXT:    add a0, sp, a0
-; RV32-NEXT:    addi a0, a0, 64
+; RV32-NEXT:    addi a0, sp, 64
 ; RV32-NEXT:    vsseg6e8.v v21, (a0)
 ; RV32-NEXT:    vmv1r.v v21, v10
 ; RV32-NEXT:    vmv1r.v v22, v12
 ; RV32-NEXT:    vmv1r.v v23, v14
 ; RV32-NEXT:    vmv1r.v v24, v16
 ; RV32-NEXT:    vmv1r.v v25, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg6e8.v v20, (a1)
-; RV32-NEXT:    vl1r.v v14, (a0)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a3, a1, a2
-; RV32-NEXT:    vl1r.v v15, (a0)
-; RV32-NEXT:    add a4, a3, a2
-; RV32-NEXT:    add a5, a4, a2
-; RV32-NEXT:    add a6, a5, a2
-; RV32-NEXT:    vl1r.v v12, (a6)
-; RV32-NEXT:    add a6, a6, a2
-; RV32-NEXT:    vl1r.v v13, (a6)
-; RV32-NEXT:    vl1r.v v10, (a4)
-; RV32-NEXT:    vl1r.v v11, (a5)
-; RV32-NEXT:    vl1r.v v8, (a1)
-; RV32-NEXT:    vl1r.v v9, (a3)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a1, a0, a2
-; RV32-NEXT:    add a3, a1, a2
+; RV32-NEXT:    li a1, 6
+; RV32-NEXT:    mul a2, a2, a1
+; RV32-NEXT:    add a2, sp, a2
+; RV32-NEXT:    addi a2, a2, 64
+; RV32-NEXT:    vsseg6e8.v v20, (a2)
+; RV32-NEXT:    vl1r.v v14, (a0)
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    add a3, a0, a1
+; RV32-NEXT:    vl1r.v v15, (a3)
+; RV32-NEXT:    slli a3, a1, 2
+; RV32-NEXT:    add a4, a2, a3
+; RV32-NEXT:    vl1r.v v12, (a4)
+; RV32-NEXT:    add a4, a3, a1
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1r.v v13, (a5)
+; RV32-NEXT:    slli a5, a1, 1
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1r.v v10, (a6)
+; RV32-NEXT:    add a6, a5, a1
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1r.v v11, (a7)
+; RV32-NEXT:    vl1r.v v8, (a2)
+; RV32-NEXT:    add a2, a2, a1
+; RV32-NEXT:    vl1r.v v9, (a2)
+; RV32-NEXT:    add a3, a0, a3
 ; RV32-NEXT:    vl1r.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a2
-; RV32-NEXT:    vl1r.v v19, (a3)
-; RV32-NEXT:    vl1r.v v16, (a0)
-; RV32-NEXT:    vl1r.v v17, (a1)
-; RV32-NEXT:    slli a2, a2, 3
+; RV32-NEXT:    add a4, a0, a4
+; RV32-NEXT:    vl1r.v v19, (a4)
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    vl1r.v v16, (a5)
+; RV32-NEXT:    add a0, a0, a6
+; RV32-NEXT:    vl1r.v v17, (a0)
+; RV32-NEXT:    slli a1, a1, 3
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 12
-; RV32-NEXT:    mul a0, a0, a1
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a0, a0, a2
 ; RV32-NEXT:    add a0, sp, a0
 ; RV32-NEXT:    addi a0, a0, 64
-; RV32-NEXT:    add a2, a0, a2
-; RV32-NEXT:    vs4r.v v16, (a2)
+; RV32-NEXT:    add a1, a0, a1
+; RV32-NEXT:    vs4r.v v16, (a1)
 ; RV32-NEXT:    vs8r.v v8, (a0)
-; RV32-NEXT:    vl8r.v v16, (a2)
+; RV32-NEXT:    vl8r.v v16, (a1)
 ; RV32-NEXT:    vl8r.v v8, (a0)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -2560,52 +2655,56 @@ define <vscale x 96 x i8> @vector_interleave_nxv96i8_nxv16i8(<vscale x 16 x i8>
 ; RV64-NEXT:    vmv1r.v v24, v15
 ; RV64-NEXT:    vmv1r.v v25, v17
 ; RV64-NEXT:    vmv1r.v v26, v19
-; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 6
-; RV64-NEXT:    mul a0, a0, a1
-; RV64-NEXT:    add a0, sp, a0
-; RV64-NEXT:    addi a0, a0, 64
+; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsseg6e8.v v21, (a0)
 ; RV64-NEXT:    vmv1r.v v21, v10
 ; RV64-NEXT:    vmv1r.v v22, v12
 ; RV64-NEXT:    vmv1r.v v23, v14
 ; RV64-NEXT:    vmv1r.v v24, v16
 ; RV64-NEXT:    vmv1r.v v25, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg6e8.v v20, (a1)
-; RV64-NEXT:    vl1r.v v14, (a0)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a3, a1, a2
-; RV64-NEXT:    vl1r.v v15, (a0)
-; RV64-NEXT:    add a4, a3, a2
-; RV64-NEXT:    add a5, a4, a2
-; RV64-NEXT:    add a6, a5, a2
-; RV64-NEXT:    vl1r.v v12, (a6)
-; RV64-NEXT:    add a6, a6, a2
-; RV64-NEXT:    vl1r.v v13, (a6)
-; RV64-NEXT:    vl1r.v v10, (a4)
-; RV64-NEXT:    vl1r.v v11, (a5)
-; RV64-NEXT:    vl1r.v v8, (a1)
-; RV64-NEXT:    vl1r.v v9, (a3)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a1, a0, a2
-; RV64-NEXT:    add a3, a1, a2
+; RV64-NEXT:    li a1, 6
+; RV64-NEXT:    mul a2, a2, a1
+; RV64-NEXT:    add a2, sp, a2
+; RV64-NEXT:    addi a2, a2, 64
+; RV64-NEXT:    vsseg6e8.v v20, (a2)
+; RV64-NEXT:    vl1r.v v14, (a0)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    add a3, a0, a1
+; RV64-NEXT:    vl1r.v v15, (a3)
+; RV64-NEXT:    slli a3, a1, 2
+; RV64-NEXT:    add a4, a2, a3
+; RV64-NEXT:    vl1r.v v12, (a4)
+; RV64-NEXT:    add a4, a3, a1
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1r.v v13, (a5)
+; RV64-NEXT:    slli a5, a1, 1
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1r.v v10, (a6)
+; RV64-NEXT:    add a6, a5, a1
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1r.v v11, (a7)
+; RV64-NEXT:    vl1r.v v8, (a2)
+; RV64-NEXT:    add a2, a2, a1
+; RV64-NEXT:    vl1r.v v9, (a2)
+; RV64-NEXT:    add a3, a0, a3
 ; RV64-NEXT:    vl1r.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a2
-; RV64-NEXT:    vl1r.v v19, (a3)
-; RV64-NEXT:    vl1r.v v16, (a0)
-; RV64-NEXT:    vl1r.v v17, (a1)
-; RV64-NEXT:    slli a2, a2, 3
+; RV64-NEXT:    add a4, a0, a4
+; RV64-NEXT:    vl1r.v v19, (a4)
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    vl1r.v v16, (a5)
+; RV64-NEXT:    add a0, a0, a6
+; RV64-NEXT:    vl1r.v v17, (a0)
+; RV64-NEXT:    slli a1, a1, 3
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 12
-; RV64-NEXT:    mul a0, a0, a1
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a0, a0, a2
 ; RV64-NEXT:    add a0, sp, a0
 ; RV64-NEXT:    addi a0, a0, 64
-; RV64-NEXT:    add a2, a0, a2
-; RV64-NEXT:    vs4r.v v16, (a2)
+; RV64-NEXT:    add a1, a0, a1
+; RV64-NEXT:    vs4r.v v16, (a1)
 ; RV64-NEXT:    vs8r.v v8, (a0)
-; RV64-NEXT:    vl8r.v v16, (a2)
+; RV64-NEXT:    vl8r.v v16, (a1)
 ; RV64-NEXT:    vl8r.v v8, (a0)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -2631,52 +2730,56 @@ define <vscale x 96 x i8> @vector_interleave_nxv96i8_nxv16i8(<vscale x 16 x i8>
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 6
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
-; ZVBB-RV32-NEXT:    add a0, sp, a0
-; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    addi a0, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg6e8.v v21, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg6e8.v v20, (a1)
-; ZVBB-RV32-NEXT:    vl1r.v v14, (a0)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
-; ZVBB-RV32-NEXT:    vl1r.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a3, a2
-; ZVBB-RV32-NEXT:    add a5, a4, a2
-; ZVBB-RV32-NEXT:    add a6, a5, a2
-; ZVBB-RV32-NEXT:    vl1r.v v12, (a6)
-; ZVBB-RV32-NEXT:    add a6, a6, a2
-; ZVBB-RV32-NEXT:    vl1r.v v13, (a6)
-; ZVBB-RV32-NEXT:    vl1r.v v10, (a4)
-; ZVBB-RV32-NEXT:    vl1r.v v11, (a5)
-; ZVBB-RV32-NEXT:    vl1r.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1r.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a1, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mul a2, a2, a1
+; ZVBB-RV32-NEXT:    add a2, sp, a2
+; ZVBB-RV32-NEXT:    addi a2, a2, 64
+; ZVBB-RV32-NEXT:    vsseg6e8.v v20, (a2)
+; ZVBB-RV32-NEXT:    vl1r.v v14, (a0)
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a3, a0, a1
+; ZVBB-RV32-NEXT:    vl1r.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a1, 2
+; ZVBB-RV32-NEXT:    add a4, a2, a3
+; ZVBB-RV32-NEXT:    vl1r.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a1
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1r.v v13, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a1, 1
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1r.v v10, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a1
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1r.v v11, (a7)
+; ZVBB-RV32-NEXT:    vl1r.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a2, a2, a1
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a2)
+; ZVBB-RV32-NEXT:    add a3, a0, a3
 ; ZVBB-RV32-NEXT:    vl1r.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a2
-; ZVBB-RV32-NEXT:    vl1r.v v19, (a3)
-; ZVBB-RV32-NEXT:    vl1r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl1r.v v17, (a1)
-; ZVBB-RV32-NEXT:    slli a2, a2, 3
+; ZVBB-RV32-NEXT:    add a4, a0, a4
+; ZVBB-RV32-NEXT:    vl1r.v v19, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    vl1r.v v16, (a5)
+; ZVBB-RV32-NEXT:    add a0, a0, a6
+; ZVBB-RV32-NEXT:    vl1r.v v17, (a0)
+; ZVBB-RV32-NEXT:    slli a1, a1, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 12
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
+; ZVBB-RV32-NEXT:    li a2, 12
+; ZVBB-RV32-NEXT:    mul a0, a0, a2
 ; ZVBB-RV32-NEXT:    add a0, sp, a0
 ; ZVBB-RV32-NEXT:    addi a0, a0, 64
-; ZVBB-RV32-NEXT:    add a2, a0, a2
-; ZVBB-RV32-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV32-NEXT:    add a1, a0, a1
+; ZVBB-RV32-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl8r.v v16, (a2)
+; ZVBB-RV32-NEXT:    vl8r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vl8r.v v8, (a0)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -2702,52 +2805,56 @@ define <vscale x 96 x i8> @vector_interleave_nxv96i8_nxv16i8(<vscale x 16 x i8>
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 6
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
-; ZVBB-RV64-NEXT:    add a0, sp, a0
-; ZVBB-RV64-NEXT:    addi a0, a0, 64
+; ZVBB-RV64-NEXT:    addi a0, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg6e8.v v21, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg6e8.v v20, (a1)
-; ZVBB-RV64-NEXT:    vl1r.v v14, (a0)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
-; ZVBB-RV64-NEXT:    vl1r.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a3, a2
-; ZVBB-RV64-NEXT:    add a5, a4, a2
-; ZVBB-RV64-NEXT:    add a6, a5, a2
-; ZVBB-RV64-NEXT:    vl1r.v v12, (a6)
-; ZVBB-RV64-NEXT:    add a6, a6, a2
-; ZVBB-RV64-NEXT:    vl1r.v v13, (a6)
-; ZVBB-RV64-NEXT:    vl1r.v v10, (a4)
-; ZVBB-RV64-NEXT:    vl1r.v v11, (a5)
-; ZVBB-RV64-NEXT:    vl1r.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1r.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a1, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mul a2, a2, a1
+; ZVBB-RV64-NEXT:    add a2, sp, a2
+; ZVBB-RV64-NEXT:    addi a2, a2, 64
+; ZVBB-RV64-NEXT:    vsseg6e8.v v20, (a2)
+; ZVBB-RV64-NEXT:    vl1r.v v14, (a0)
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a3, a0, a1
+; ZVBB-RV64-NEXT:    vl1r.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a1, 2
+; ZVBB-RV64-NEXT:    add a4, a2, a3
+; ZVBB-RV64-NEXT:    vl1r.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a1
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1r.v v13, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a1, 1
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1r.v v10, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a1
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1r.v v11, (a7)
+; ZVBB-RV64-NEXT:    vl1r.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a2, a2, a1
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a2)
+; ZVBB-RV64-NEXT:    add a3, a0, a3
 ; ZVBB-RV64-NEXT:    vl1r.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a2
-; ZVBB-RV64-NEXT:    vl1r.v v19, (a3)
-; ZVBB-RV64-NEXT:    vl1r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl1r.v v17, (a1)
-; ZVBB-RV64-NEXT:    slli a2, a2, 3
+; ZVBB-RV64-NEXT:    add a4, a0, a4
+; ZVBB-RV64-NEXT:    vl1r.v v19, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    vl1r.v v16, (a5)
+; ZVBB-RV64-NEXT:    add a0, a0, a6
+; ZVBB-RV64-NEXT:    vl1r.v v17, (a0)
+; ZVBB-RV64-NEXT:    slli a1, a1, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 12
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
+; ZVBB-RV64-NEXT:    li a2, 12
+; ZVBB-RV64-NEXT:    mul a0, a0, a2
 ; ZVBB-RV64-NEXT:    add a0, sp, a0
 ; ZVBB-RV64-NEXT:    addi a0, a0, 64
-; ZVBB-RV64-NEXT:    add a2, a0, a2
-; ZVBB-RV64-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV64-NEXT:    add a1, a0, a1
+; ZVBB-RV64-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl8r.v v16, (a2)
+; ZVBB-RV64-NEXT:    vl8r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vl8r.v v8, (a0)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -2773,52 +2880,56 @@ define <vscale x 96 x i8> @vector_interleave_nxv96i8_nxv16i8(<vscale x 16 x i8>
 ; ZVZIP-NEXT:    vmv1r.v v24, v15
 ; ZVZIP-NEXT:    vmv1r.v v25, v17
 ; ZVZIP-NEXT:    vmv1r.v v26, v19
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 6
-; ZVZIP-NEXT:    mul a0, a0, a1
-; ZVZIP-NEXT:    add a0, sp, a0
-; ZVZIP-NEXT:    addi a0, a0, 64
+; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsseg6e8.v v21, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v21, v10
 ; ZVZIP-NEXT:    vmv1r.v v22, v12
 ; ZVZIP-NEXT:    vmv1r.v v23, v14
 ; ZVZIP-NEXT:    vmv1r.v v24, v16
 ; ZVZIP-NEXT:    vmv1r.v v25, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg6e8.v v20, (a1)
-; ZVZIP-NEXT:    vl1r.v v14, (a0)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
-; ZVZIP-NEXT:    vl1r.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a3, a2
-; ZVZIP-NEXT:    add a5, a4, a2
-; ZVZIP-NEXT:    add a6, a5, a2
-; ZVZIP-NEXT:    vl1r.v v12, (a6)
-; ZVZIP-NEXT:    add a6, a6, a2
-; ZVZIP-NEXT:    vl1r.v v13, (a6)
-; ZVZIP-NEXT:    vl1r.v v10, (a4)
-; ZVZIP-NEXT:    vl1r.v v11, (a5)
-; ZVZIP-NEXT:    vl1r.v v8, (a1)
-; ZVZIP-NEXT:    vl1r.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a1, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
+; ZVZIP-NEXT:    li a1, 6
+; ZVZIP-NEXT:    mul a2, a2, a1
+; ZVZIP-NEXT:    add a2, sp, a2
+; ZVZIP-NEXT:    addi a2, a2, 64
+; ZVZIP-NEXT:    vsseg6e8.v v20, (a2)
+; ZVZIP-NEXT:    vl1r.v v14, (a0)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    add a3, a0, a1
+; ZVZIP-NEXT:    vl1r.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a1, 2
+; ZVZIP-NEXT:    add a4, a2, a3
+; ZVZIP-NEXT:    vl1r.v v12, (a4)
+; ZVZIP-NEXT:    add a4, a3, a1
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1r.v v13, (a5)
+; ZVZIP-NEXT:    slli a5, a1, 1
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1r.v v10, (a6)
+; ZVZIP-NEXT:    add a6, a5, a1
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1r.v v11, (a7)
+; ZVZIP-NEXT:    vl1r.v v8, (a2)
+; ZVZIP-NEXT:    add a2, a2, a1
+; ZVZIP-NEXT:    vl1r.v v9, (a2)
+; ZVZIP-NEXT:    add a3, a0, a3
 ; ZVZIP-NEXT:    vl1r.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a2
-; ZVZIP-NEXT:    vl1r.v v19, (a3)
-; ZVZIP-NEXT:    vl1r.v v16, (a0)
-; ZVZIP-NEXT:    vl1r.v v17, (a1)
-; ZVZIP-NEXT:    slli a2, a2, 3
+; ZVZIP-NEXT:    add a4, a0, a4
+; ZVZIP-NEXT:    vl1r.v v19, (a4)
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    vl1r.v v16, (a5)
+; ZVZIP-NEXT:    add a0, a0, a6
+; ZVZIP-NEXT:    vl1r.v v17, (a0)
+; ZVZIP-NEXT:    slli a1, a1, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 12
-; ZVZIP-NEXT:    mul a0, a0, a1
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a0, a0, a2
 ; ZVZIP-NEXT:    add a0, sp, a0
 ; ZVZIP-NEXT:    addi a0, a0, 64
-; ZVZIP-NEXT:    add a2, a0, a2
-; ZVZIP-NEXT:    vs4r.v v16, (a2)
+; ZVZIP-NEXT:    add a1, a0, a1
+; ZVZIP-NEXT:    vs4r.v v16, (a1)
 ; ZVZIP-NEXT:    vs8r.v v8, (a0)
-; ZVZIP-NEXT:    vl8r.v v16, (a2)
+; ZVZIP-NEXT:    vl8r.v v16, (a1)
 ; ZVZIP-NEXT:    vl8r.v v8, (a0)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -2841,15 +2952,17 @@ define <vscale x 48 x i8> @vector_interleave_nxv48i8_nxv8i8(<vscale x 8 x i8> %a
 ; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; CHECK-NEXT:    vsseg6e8.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1r.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1r.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1r.v v11, (a2)
 ; CHECK-NEXT:    vl1r.v v8, (a0)
-; CHECK-NEXT:    vl1r.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1r.v v12, (a3)
+; CHECK-NEXT:    vl1r.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1r.v v12, (a0)
 ; CHECK-NEXT:    add a1, a3, a1
 ; CHECK-NEXT:    vl1r.v v13, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -2870,15 +2983,17 @@ define <vscale x 48 x i8> @vector_interleave_nxv48i8_nxv8i8(<vscale x 8 x i8> %a
 ; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
 ; ZVBB-NEXT:    vsseg6e8.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1r.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1r.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1r.v v11, (a2)
 ; ZVBB-NEXT:    vl1r.v v8, (a0)
-; ZVBB-NEXT:    vl1r.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1r.v v12, (a3)
+; ZVBB-NEXT:    vl1r.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1r.v v12, (a0)
 ; ZVBB-NEXT:    add a1, a3, a1
 ; ZVBB-NEXT:    vl1r.v v13, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -2911,52 +3026,56 @@ define <vscale x 24 x i32> @vector_interleave_nxv24i32_nxv4i32(<vscale x 4 x i32
 ; RV32-NEXT:    vmv1r.v v24, v15
 ; RV32-NEXT:    vmv1r.v v25, v17
 ; RV32-NEXT:    vmv1r.v v26, v19
-; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 6
-; RV32-NEXT:    mul a0, a0, a1
-; RV32-NEXT:    add a0, sp, a0
-; RV32-NEXT:    addi a0, a0, 64
+; RV32-NEXT:    addi a0, sp, 64
 ; RV32-NEXT:    vsseg6e32.v v21, (a0)
 ; RV32-NEXT:    vmv1r.v v21, v10
 ; RV32-NEXT:    vmv1r.v v22, v12
 ; RV32-NEXT:    vmv1r.v v23, v14
 ; RV32-NEXT:    vmv1r.v v24, v16
 ; RV32-NEXT:    vmv1r.v v25, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg6e32.v v20, (a1)
-; RV32-NEXT:    vl1re32.v v14, (a0)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a3, a1, a2
-; RV32-NEXT:    vl1re32.v v15, (a0)
-; RV32-NEXT:    add a4, a3, a2
-; RV32-NEXT:    add a5, a4, a2
-; RV32-NEXT:    add a6, a5, a2
-; RV32-NEXT:    vl1re32.v v12, (a6)
-; RV32-NEXT:    add a6, a6, a2
-; RV32-NEXT:    vl1re32.v v13, (a6)
-; RV32-NEXT:    vl1re32.v v10, (a4)
-; RV32-NEXT:    vl1re32.v v11, (a5)
-; RV32-NEXT:    vl1re32.v v8, (a1)
-; RV32-NEXT:    vl1re32.v v9, (a3)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a1, a0, a2
-; RV32-NEXT:    add a3, a1, a2
+; RV32-NEXT:    li a1, 6
+; RV32-NEXT:    mul a2, a2, a1
+; RV32-NEXT:    add a2, sp, a2
+; RV32-NEXT:    addi a2, a2, 64
+; RV32-NEXT:    vsseg6e32.v v20, (a2)
+; RV32-NEXT:    vl1re32.v v14, (a0)
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    add a3, a0, a1
+; RV32-NEXT:    vl1re32.v v15, (a3)
+; RV32-NEXT:    slli a3, a1, 2
+; RV32-NEXT:    add a4, a2, a3
+; RV32-NEXT:    vl1re32.v v12, (a4)
+; RV32-NEXT:    add a4, a3, a1
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re32.v v13, (a5)
+; RV32-NEXT:    slli a5, a1, 1
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re32.v v10, (a6)
+; RV32-NEXT:    add a6, a5, a1
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re32.v v11, (a7)
+; RV32-NEXT:    vl1re32.v v8, (a2)
+; RV32-NEXT:    add a2, a2, a1
+; RV32-NEXT:    vl1re32.v v9, (a2)
+; RV32-NEXT:    add a3, a0, a3
 ; RV32-NEXT:    vl1re32.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a2
-; RV32-NEXT:    vl1re32.v v19, (a3)
-; RV32-NEXT:    vl1re32.v v16, (a0)
-; RV32-NEXT:    vl1re32.v v17, (a1)
-; RV32-NEXT:    slli a2, a2, 3
+; RV32-NEXT:    add a4, a0, a4
+; RV32-NEXT:    vl1re32.v v19, (a4)
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    vl1re32.v v16, (a5)
+; RV32-NEXT:    add a0, a0, a6
+; RV32-NEXT:    vl1re32.v v17, (a0)
+; RV32-NEXT:    slli a1, a1, 3
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 12
-; RV32-NEXT:    mul a0, a0, a1
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a0, a0, a2
 ; RV32-NEXT:    add a0, sp, a0
 ; RV32-NEXT:    addi a0, a0, 64
-; RV32-NEXT:    add a2, a0, a2
-; RV32-NEXT:    vs4r.v v16, (a2)
+; RV32-NEXT:    add a1, a0, a1
+; RV32-NEXT:    vs4r.v v16, (a1)
 ; RV32-NEXT:    vs8r.v v8, (a0)
-; RV32-NEXT:    vl8re32.v v16, (a2)
+; RV32-NEXT:    vl8re32.v v16, (a1)
 ; RV32-NEXT:    vl8re32.v v8, (a0)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -2982,52 +3101,56 @@ define <vscale x 24 x i32> @vector_interleave_nxv24i32_nxv4i32(<vscale x 4 x i32
 ; RV64-NEXT:    vmv1r.v v24, v15
 ; RV64-NEXT:    vmv1r.v v25, v17
 ; RV64-NEXT:    vmv1r.v v26, v19
-; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 6
-; RV64-NEXT:    mul a0, a0, a1
-; RV64-NEXT:    add a0, sp, a0
-; RV64-NEXT:    addi a0, a0, 64
+; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsseg6e32.v v21, (a0)
 ; RV64-NEXT:    vmv1r.v v21, v10
 ; RV64-NEXT:    vmv1r.v v22, v12
 ; RV64-NEXT:    vmv1r.v v23, v14
 ; RV64-NEXT:    vmv1r.v v24, v16
 ; RV64-NEXT:    vmv1r.v v25, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg6e32.v v20, (a1)
-; RV64-NEXT:    vl1re32.v v14, (a0)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a3, a1, a2
-; RV64-NEXT:    vl1re32.v v15, (a0)
-; RV64-NEXT:    add a4, a3, a2
-; RV64-NEXT:    add a5, a4, a2
-; RV64-NEXT:    add a6, a5, a2
-; RV64-NEXT:    vl1re32.v v12, (a6)
-; RV64-NEXT:    add a6, a6, a2
-; RV64-NEXT:    vl1re32.v v13, (a6)
-; RV64-NEXT:    vl1re32.v v10, (a4)
-; RV64-NEXT:    vl1re32.v v11, (a5)
-; RV64-NEXT:    vl1re32.v v8, (a1)
-; RV64-NEXT:    vl1re32.v v9, (a3)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a1, a0, a2
-; RV64-NEXT:    add a3, a1, a2
+; RV64-NEXT:    li a1, 6
+; RV64-NEXT:    mul a2, a2, a1
+; RV64-NEXT:    add a2, sp, a2
+; RV64-NEXT:    addi a2, a2, 64
+; RV64-NEXT:    vsseg6e32.v v20, (a2)
+; RV64-NEXT:    vl1re32.v v14, (a0)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    add a3, a0, a1
+; RV64-NEXT:    vl1re32.v v15, (a3)
+; RV64-NEXT:    slli a3, a1, 2
+; RV64-NEXT:    add a4, a2, a3
+; RV64-NEXT:    vl1re32.v v12, (a4)
+; RV64-NEXT:    add a4, a3, a1
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re32.v v13, (a5)
+; RV64-NEXT:    slli a5, a1, 1
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re32.v v10, (a6)
+; RV64-NEXT:    add a6, a5, a1
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re32.v v11, (a7)
+; RV64-NEXT:    vl1re32.v v8, (a2)
+; RV64-NEXT:    add a2, a2, a1
+; RV64-NEXT:    vl1re32.v v9, (a2)
+; RV64-NEXT:    add a3, a0, a3
 ; RV64-NEXT:    vl1re32.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a2
-; RV64-NEXT:    vl1re32.v v19, (a3)
-; RV64-NEXT:    vl1re32.v v16, (a0)
-; RV64-NEXT:    vl1re32.v v17, (a1)
-; RV64-NEXT:    slli a2, a2, 3
+; RV64-NEXT:    add a4, a0, a4
+; RV64-NEXT:    vl1re32.v v19, (a4)
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    vl1re32.v v16, (a5)
+; RV64-NEXT:    add a0, a0, a6
+; RV64-NEXT:    vl1re32.v v17, (a0)
+; RV64-NEXT:    slli a1, a1, 3
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 12
-; RV64-NEXT:    mul a0, a0, a1
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a0, a0, a2
 ; RV64-NEXT:    add a0, sp, a0
 ; RV64-NEXT:    addi a0, a0, 64
-; RV64-NEXT:    add a2, a0, a2
-; RV64-NEXT:    vs4r.v v16, (a2)
+; RV64-NEXT:    add a1, a0, a1
+; RV64-NEXT:    vs4r.v v16, (a1)
 ; RV64-NEXT:    vs8r.v v8, (a0)
-; RV64-NEXT:    vl8re32.v v16, (a2)
+; RV64-NEXT:    vl8re32.v v16, (a1)
 ; RV64-NEXT:    vl8re32.v v8, (a0)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -3053,52 +3176,56 @@ define <vscale x 24 x i32> @vector_interleave_nxv24i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 6
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
-; ZVBB-RV32-NEXT:    add a0, sp, a0
-; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    addi a0, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg6e32.v v21, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg6e32.v v20, (a1)
-; ZVBB-RV32-NEXT:    vl1re32.v v14, (a0)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a3, a2
-; ZVBB-RV32-NEXT:    add a5, a4, a2
-; ZVBB-RV32-NEXT:    add a6, a5, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v12, (a6)
-; ZVBB-RV32-NEXT:    add a6, a6, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v13, (a6)
-; ZVBB-RV32-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV32-NEXT:    vl1re32.v v11, (a5)
-; ZVBB-RV32-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a1, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mul a2, a2, a1
+; ZVBB-RV32-NEXT:    add a2, sp, a2
+; ZVBB-RV32-NEXT:    addi a2, a2, 64
+; ZVBB-RV32-NEXT:    vsseg6e32.v v20, (a2)
+; ZVBB-RV32-NEXT:    vl1re32.v v14, (a0)
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a3, a0, a1
+; ZVBB-RV32-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a1, 2
+; ZVBB-RV32-NEXT:    add a4, a2, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a1
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v13, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a1, 1
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v10, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a1
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v11, (a7)
+; ZVBB-RV32-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a2, a2, a1
+; ZVBB-RV32-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-RV32-NEXT:    add a3, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v19, (a3)
-; ZVBB-RV32-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV32-NEXT:    slli a2, a2, 3
+; ZVBB-RV32-NEXT:    add a4, a0, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v19, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v16, (a5)
+; ZVBB-RV32-NEXT:    add a0, a0, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV32-NEXT:    slli a1, a1, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 12
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
+; ZVBB-RV32-NEXT:    li a2, 12
+; ZVBB-RV32-NEXT:    mul a0, a0, a2
 ; ZVBB-RV32-NEXT:    add a0, sp, a0
 ; ZVBB-RV32-NEXT:    addi a0, a0, 64
-; ZVBB-RV32-NEXT:    add a2, a0, a2
-; ZVBB-RV32-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV32-NEXT:    add a1, a0, a1
+; ZVBB-RV32-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl8re32.v v16, (a2)
+; ZVBB-RV32-NEXT:    vl8re32.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vl8re32.v v8, (a0)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -3124,52 +3251,56 @@ define <vscale x 24 x i32> @vector_interleave_nxv24i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 6
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
-; ZVBB-RV64-NEXT:    add a0, sp, a0
-; ZVBB-RV64-NEXT:    addi a0, a0, 64
+; ZVBB-RV64-NEXT:    addi a0, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg6e32.v v21, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg6e32.v v20, (a1)
-; ZVBB-RV64-NEXT:    vl1re32.v v14, (a0)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a3, a2
-; ZVBB-RV64-NEXT:    add a5, a4, a2
-; ZVBB-RV64-NEXT:    add a6, a5, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v12, (a6)
-; ZVBB-RV64-NEXT:    add a6, a6, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v13, (a6)
-; ZVBB-RV64-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV64-NEXT:    vl1re32.v v11, (a5)
-; ZVBB-RV64-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a1, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mul a2, a2, a1
+; ZVBB-RV64-NEXT:    add a2, sp, a2
+; ZVBB-RV64-NEXT:    addi a2, a2, 64
+; ZVBB-RV64-NEXT:    vsseg6e32.v v20, (a2)
+; ZVBB-RV64-NEXT:    vl1re32.v v14, (a0)
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a3, a0, a1
+; ZVBB-RV64-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a1, 2
+; ZVBB-RV64-NEXT:    add a4, a2, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a1
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v13, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a1, 1
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v10, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a1
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v11, (a7)
+; ZVBB-RV64-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a2, a2, a1
+; ZVBB-RV64-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-RV64-NEXT:    add a3, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v19, (a3)
-; ZVBB-RV64-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV64-NEXT:    slli a2, a2, 3
+; ZVBB-RV64-NEXT:    add a4, a0, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v19, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v16, (a5)
+; ZVBB-RV64-NEXT:    add a0, a0, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV64-NEXT:    slli a1, a1, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 12
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
+; ZVBB-RV64-NEXT:    li a2, 12
+; ZVBB-RV64-NEXT:    mul a0, a0, a2
 ; ZVBB-RV64-NEXT:    add a0, sp, a0
 ; ZVBB-RV64-NEXT:    addi a0, a0, 64
-; ZVBB-RV64-NEXT:    add a2, a0, a2
-; ZVBB-RV64-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV64-NEXT:    add a1, a0, a1
+; ZVBB-RV64-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl8re32.v v16, (a2)
+; ZVBB-RV64-NEXT:    vl8re32.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vl8re32.v v8, (a0)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -3195,52 +3326,56 @@ define <vscale x 24 x i32> @vector_interleave_nxv24i32_nxv4i32(<vscale x 4 x i32
 ; ZVZIP-NEXT:    vmv1r.v v24, v15
 ; ZVZIP-NEXT:    vmv1r.v v25, v17
 ; ZVZIP-NEXT:    vmv1r.v v26, v19
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 6
-; ZVZIP-NEXT:    mul a0, a0, a1
-; ZVZIP-NEXT:    add a0, sp, a0
-; ZVZIP-NEXT:    addi a0, a0, 64
+; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsseg6e32.v v21, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v21, v10
 ; ZVZIP-NEXT:    vmv1r.v v22, v12
 ; ZVZIP-NEXT:    vmv1r.v v23, v14
 ; ZVZIP-NEXT:    vmv1r.v v24, v16
 ; ZVZIP-NEXT:    vmv1r.v v25, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg6e32.v v20, (a1)
-; ZVZIP-NEXT:    vl1re32.v v14, (a0)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
-; ZVZIP-NEXT:    vl1re32.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a3, a2
-; ZVZIP-NEXT:    add a5, a4, a2
-; ZVZIP-NEXT:    add a6, a5, a2
-; ZVZIP-NEXT:    vl1re32.v v12, (a6)
-; ZVZIP-NEXT:    add a6, a6, a2
-; ZVZIP-NEXT:    vl1re32.v v13, (a6)
-; ZVZIP-NEXT:    vl1re32.v v10, (a4)
-; ZVZIP-NEXT:    vl1re32.v v11, (a5)
-; ZVZIP-NEXT:    vl1re32.v v8, (a1)
-; ZVZIP-NEXT:    vl1re32.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a1, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
+; ZVZIP-NEXT:    li a1, 6
+; ZVZIP-NEXT:    mul a2, a2, a1
+; ZVZIP-NEXT:    add a2, sp, a2
+; ZVZIP-NEXT:    addi a2, a2, 64
+; ZVZIP-NEXT:    vsseg6e32.v v20, (a2)
+; ZVZIP-NEXT:    vl1re32.v v14, (a0)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    add a3, a0, a1
+; ZVZIP-NEXT:    vl1re32.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a1, 2
+; ZVZIP-NEXT:    add a4, a2, a3
+; ZVZIP-NEXT:    vl1re32.v v12, (a4)
+; ZVZIP-NEXT:    add a4, a3, a1
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re32.v v13, (a5)
+; ZVZIP-NEXT:    slli a5, a1, 1
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re32.v v10, (a6)
+; ZVZIP-NEXT:    add a6, a5, a1
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re32.v v11, (a7)
+; ZVZIP-NEXT:    vl1re32.v v8, (a2)
+; ZVZIP-NEXT:    add a2, a2, a1
+; ZVZIP-NEXT:    vl1re32.v v9, (a2)
+; ZVZIP-NEXT:    add a3, a0, a3
 ; ZVZIP-NEXT:    vl1re32.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a2
-; ZVZIP-NEXT:    vl1re32.v v19, (a3)
-; ZVZIP-NEXT:    vl1re32.v v16, (a0)
-; ZVZIP-NEXT:    vl1re32.v v17, (a1)
-; ZVZIP-NEXT:    slli a2, a2, 3
+; ZVZIP-NEXT:    add a4, a0, a4
+; ZVZIP-NEXT:    vl1re32.v v19, (a4)
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    vl1re32.v v16, (a5)
+; ZVZIP-NEXT:    add a0, a0, a6
+; ZVZIP-NEXT:    vl1re32.v v17, (a0)
+; ZVZIP-NEXT:    slli a1, a1, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 12
-; ZVZIP-NEXT:    mul a0, a0, a1
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a0, a0, a2
 ; ZVZIP-NEXT:    add a0, sp, a0
 ; ZVZIP-NEXT:    addi a0, a0, 64
-; ZVZIP-NEXT:    add a2, a0, a2
-; ZVZIP-NEXT:    vs4r.v v16, (a2)
+; ZVZIP-NEXT:    add a1, a0, a1
+; ZVZIP-NEXT:    vs4r.v v16, (a1)
 ; ZVZIP-NEXT:    vs8r.v v8, (a0)
-; ZVZIP-NEXT:    vl8re32.v v16, (a2)
+; ZVZIP-NEXT:    vl8re32.v v16, (a1)
 ; ZVZIP-NEXT:    vl8re32.v v8, (a0)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -3271,52 +3406,56 @@ define <vscale x 12 x i64> @vector_interleave_nxv12i64_nxv2i64(<vscale x 2 x i64
 ; RV32-NEXT:    vmv1r.v v24, v15
 ; RV32-NEXT:    vmv1r.v v25, v17
 ; RV32-NEXT:    vmv1r.v v26, v19
-; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 6
-; RV32-NEXT:    mul a0, a0, a1
-; RV32-NEXT:    add a0, sp, a0
-; RV32-NEXT:    addi a0, a0, 64
+; RV32-NEXT:    addi a0, sp, 64
 ; RV32-NEXT:    vsseg6e64.v v21, (a0)
 ; RV32-NEXT:    vmv1r.v v21, v10
 ; RV32-NEXT:    vmv1r.v v22, v12
 ; RV32-NEXT:    vmv1r.v v23, v14
 ; RV32-NEXT:    vmv1r.v v24, v16
 ; RV32-NEXT:    vmv1r.v v25, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg6e64.v v20, (a1)
-; RV32-NEXT:    vl1re64.v v14, (a0)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a3, a1, a2
-; RV32-NEXT:    vl1re64.v v15, (a0)
-; RV32-NEXT:    add a4, a3, a2
-; RV32-NEXT:    add a5, a4, a2
-; RV32-NEXT:    add a6, a5, a2
-; RV32-NEXT:    vl1re64.v v12, (a6)
-; RV32-NEXT:    add a6, a6, a2
-; RV32-NEXT:    vl1re64.v v13, (a6)
-; RV32-NEXT:    vl1re64.v v10, (a4)
-; RV32-NEXT:    vl1re64.v v11, (a5)
-; RV32-NEXT:    vl1re64.v v8, (a1)
-; RV32-NEXT:    vl1re64.v v9, (a3)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a1, a0, a2
-; RV32-NEXT:    add a3, a1, a2
+; RV32-NEXT:    li a1, 6
+; RV32-NEXT:    mul a2, a2, a1
+; RV32-NEXT:    add a2, sp, a2
+; RV32-NEXT:    addi a2, a2, 64
+; RV32-NEXT:    vsseg6e64.v v20, (a2)
+; RV32-NEXT:    vl1re64.v v14, (a0)
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    add a3, a0, a1
+; RV32-NEXT:    vl1re64.v v15, (a3)
+; RV32-NEXT:    slli a3, a1, 2
+; RV32-NEXT:    add a4, a2, a3
+; RV32-NEXT:    vl1re64.v v12, (a4)
+; RV32-NEXT:    add a4, a3, a1
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re64.v v13, (a5)
+; RV32-NEXT:    slli a5, a1, 1
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re64.v v10, (a6)
+; RV32-NEXT:    add a6, a5, a1
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re64.v v11, (a7)
+; RV32-NEXT:    vl1re64.v v8, (a2)
+; RV32-NEXT:    add a2, a2, a1
+; RV32-NEXT:    vl1re64.v v9, (a2)
+; RV32-NEXT:    add a3, a0, a3
 ; RV32-NEXT:    vl1re64.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a2
-; RV32-NEXT:    vl1re64.v v19, (a3)
-; RV32-NEXT:    vl1re64.v v16, (a0)
-; RV32-NEXT:    vl1re64.v v17, (a1)
-; RV32-NEXT:    slli a2, a2, 3
+; RV32-NEXT:    add a4, a0, a4
+; RV32-NEXT:    vl1re64.v v19, (a4)
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    vl1re64.v v16, (a5)
+; RV32-NEXT:    add a0, a0, a6
+; RV32-NEXT:    vl1re64.v v17, (a0)
+; RV32-NEXT:    slli a1, a1, 3
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 12
-; RV32-NEXT:    mul a0, a0, a1
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a0, a0, a2
 ; RV32-NEXT:    add a0, sp, a0
 ; RV32-NEXT:    addi a0, a0, 64
-; RV32-NEXT:    add a2, a0, a2
-; RV32-NEXT:    vs4r.v v16, (a2)
+; RV32-NEXT:    add a1, a0, a1
+; RV32-NEXT:    vs4r.v v16, (a1)
 ; RV32-NEXT:    vs8r.v v8, (a0)
-; RV32-NEXT:    vl8re64.v v16, (a2)
+; RV32-NEXT:    vl8re64.v v16, (a1)
 ; RV32-NEXT:    vl8re64.v v8, (a0)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -3342,52 +3481,56 @@ define <vscale x 12 x i64> @vector_interleave_nxv12i64_nxv2i64(<vscale x 2 x i64
 ; RV64-NEXT:    vmv1r.v v24, v15
 ; RV64-NEXT:    vmv1r.v v25, v17
 ; RV64-NEXT:    vmv1r.v v26, v19
-; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 6
-; RV64-NEXT:    mul a0, a0, a1
-; RV64-NEXT:    add a0, sp, a0
-; RV64-NEXT:    addi a0, a0, 64
+; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsseg6e64.v v21, (a0)
 ; RV64-NEXT:    vmv1r.v v21, v10
 ; RV64-NEXT:    vmv1r.v v22, v12
 ; RV64-NEXT:    vmv1r.v v23, v14
 ; RV64-NEXT:    vmv1r.v v24, v16
 ; RV64-NEXT:    vmv1r.v v25, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg6e64.v v20, (a1)
-; RV64-NEXT:    vl1re64.v v14, (a0)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a3, a1, a2
-; RV64-NEXT:    vl1re64.v v15, (a0)
-; RV64-NEXT:    add a4, a3, a2
-; RV64-NEXT:    add a5, a4, a2
-; RV64-NEXT:    add a6, a5, a2
-; RV64-NEXT:    vl1re64.v v12, (a6)
-; RV64-NEXT:    add a6, a6, a2
-; RV64-NEXT:    vl1re64.v v13, (a6)
-; RV64-NEXT:    vl1re64.v v10, (a4)
-; RV64-NEXT:    vl1re64.v v11, (a5)
-; RV64-NEXT:    vl1re64.v v8, (a1)
-; RV64-NEXT:    vl1re64.v v9, (a3)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a1, a0, a2
-; RV64-NEXT:    add a3, a1, a2
+; RV64-NEXT:    li a1, 6
+; RV64-NEXT:    mul a2, a2, a1
+; RV64-NEXT:    add a2, sp, a2
+; RV64-NEXT:    addi a2, a2, 64
+; RV64-NEXT:    vsseg6e64.v v20, (a2)
+; RV64-NEXT:    vl1re64.v v14, (a0)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    add a3, a0, a1
+; RV64-NEXT:    vl1re64.v v15, (a3)
+; RV64-NEXT:    slli a3, a1, 2
+; RV64-NEXT:    add a4, a2, a3
+; RV64-NEXT:    vl1re64.v v12, (a4)
+; RV64-NEXT:    add a4, a3, a1
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re64.v v13, (a5)
+; RV64-NEXT:    slli a5, a1, 1
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re64.v v10, (a6)
+; RV64-NEXT:    add a6, a5, a1
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re64.v v11, (a7)
+; RV64-NEXT:    vl1re64.v v8, (a2)
+; RV64-NEXT:    add a2, a2, a1
+; RV64-NEXT:    vl1re64.v v9, (a2)
+; RV64-NEXT:    add a3, a0, a3
 ; RV64-NEXT:    vl1re64.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a2
-; RV64-NEXT:    vl1re64.v v19, (a3)
-; RV64-NEXT:    vl1re64.v v16, (a0)
-; RV64-NEXT:    vl1re64.v v17, (a1)
-; RV64-NEXT:    slli a2, a2, 3
+; RV64-NEXT:    add a4, a0, a4
+; RV64-NEXT:    vl1re64.v v19, (a4)
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    vl1re64.v v16, (a5)
+; RV64-NEXT:    add a0, a0, a6
+; RV64-NEXT:    vl1re64.v v17, (a0)
+; RV64-NEXT:    slli a1, a1, 3
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 12
-; RV64-NEXT:    mul a0, a0, a1
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a0, a0, a2
 ; RV64-NEXT:    add a0, sp, a0
 ; RV64-NEXT:    addi a0, a0, 64
-; RV64-NEXT:    add a2, a0, a2
-; RV64-NEXT:    vs4r.v v16, (a2)
+; RV64-NEXT:    add a1, a0, a1
+; RV64-NEXT:    vs4r.v v16, (a1)
 ; RV64-NEXT:    vs8r.v v8, (a0)
-; RV64-NEXT:    vl8re64.v v16, (a2)
+; RV64-NEXT:    vl8re64.v v16, (a1)
 ; RV64-NEXT:    vl8re64.v v8, (a0)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -3413,52 +3556,56 @@ define <vscale x 12 x i64> @vector_interleave_nxv12i64_nxv2i64(<vscale x 2 x i64
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 6
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
-; ZVBB-RV32-NEXT:    add a0, sp, a0
-; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    addi a0, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg6e64.v v21, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg6e64.v v20, (a1)
-; ZVBB-RV32-NEXT:    vl1re64.v v14, (a0)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a3, a2
-; ZVBB-RV32-NEXT:    add a5, a4, a2
-; ZVBB-RV32-NEXT:    add a6, a5, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v12, (a6)
-; ZVBB-RV32-NEXT:    add a6, a6, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v13, (a6)
-; ZVBB-RV32-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV32-NEXT:    vl1re64.v v11, (a5)
-; ZVBB-RV32-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a1, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mul a2, a2, a1
+; ZVBB-RV32-NEXT:    add a2, sp, a2
+; ZVBB-RV32-NEXT:    addi a2, a2, 64
+; ZVBB-RV32-NEXT:    vsseg6e64.v v20, (a2)
+; ZVBB-RV32-NEXT:    vl1re64.v v14, (a0)
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a3, a0, a1
+; ZVBB-RV32-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a1, 2
+; ZVBB-RV32-NEXT:    add a4, a2, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a1
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v13, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a1, 1
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v10, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a1
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v11, (a7)
+; ZVBB-RV32-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a2, a2, a1
+; ZVBB-RV32-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-RV32-NEXT:    add a3, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v19, (a3)
-; ZVBB-RV32-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV32-NEXT:    slli a2, a2, 3
+; ZVBB-RV32-NEXT:    add a4, a0, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v19, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v16, (a5)
+; ZVBB-RV32-NEXT:    add a0, a0, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV32-NEXT:    slli a1, a1, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 12
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
+; ZVBB-RV32-NEXT:    li a2, 12
+; ZVBB-RV32-NEXT:    mul a0, a0, a2
 ; ZVBB-RV32-NEXT:    add a0, sp, a0
 ; ZVBB-RV32-NEXT:    addi a0, a0, 64
-; ZVBB-RV32-NEXT:    add a2, a0, a2
-; ZVBB-RV32-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV32-NEXT:    add a1, a0, a1
+; ZVBB-RV32-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl8re64.v v16, (a2)
+; ZVBB-RV32-NEXT:    vl8re64.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vl8re64.v v8, (a0)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -3483,53 +3630,57 @@ define <vscale x 12 x i64> @vector_interleave_nxv12i64_nxv2i64(<vscale x 2 x i64
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v13
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v17
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 6
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
-; ZVBB-RV64-NEXT:    add a0, sp, a0
-; ZVBB-RV64-NEXT:    addi a0, a0, 64
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a0, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg6e64.v v21, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg6e64.v v20, (a1)
-; ZVBB-RV64-NEXT:    vl1re64.v v14, (a0)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a3, a2
-; ZVBB-RV64-NEXT:    add a5, a4, a2
-; ZVBB-RV64-NEXT:    add a6, a5, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v12, (a6)
-; ZVBB-RV64-NEXT:    add a6, a6, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v13, (a6)
-; ZVBB-RV64-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV64-NEXT:    vl1re64.v v11, (a5)
-; ZVBB-RV64-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a1, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mul a2, a2, a1
+; ZVBB-RV64-NEXT:    add a2, sp, a2
+; ZVBB-RV64-NEXT:    addi a2, a2, 64
+; ZVBB-RV64-NEXT:    vsseg6e64.v v20, (a2)
+; ZVBB-RV64-NEXT:    vl1re64.v v14, (a0)
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a3, a0, a1
+; ZVBB-RV64-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a1, 2
+; ZVBB-RV64-NEXT:    add a4, a2, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a1
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v13, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a1, 1
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v10, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a1
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v11, (a7)
+; ZVBB-RV64-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a2, a2, a1
+; ZVBB-RV64-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-RV64-NEXT:    add a3, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v19, (a3)
-; ZVBB-RV64-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV64-NEXT:    slli a2, a2, 3
+; ZVBB-RV64-NEXT:    add a4, a0, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v19, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v16, (a5)
+; ZVBB-RV64-NEXT:    add a0, a0, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV64-NEXT:    slli a1, a1, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 12
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
+; ZVBB-RV64-NEXT:    li a2, 12
+; ZVBB-RV64-NEXT:    mul a0, a0, a2
 ; ZVBB-RV64-NEXT:    add a0, sp, a0
 ; ZVBB-RV64-NEXT:    addi a0, a0, 64
-; ZVBB-RV64-NEXT:    add a2, a0, a2
-; ZVBB-RV64-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV64-NEXT:    add a1, a0, a1
+; ZVBB-RV64-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl8re64.v v16, (a2)
+; ZVBB-RV64-NEXT:    vl8re64.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vl8re64.v v8, (a0)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -3555,52 +3706,56 @@ define <vscale x 12 x i64> @vector_interleave_nxv12i64_nxv2i64(<vscale x 2 x i64
 ; ZVZIP-NEXT:    vmv1r.v v24, v15
 ; ZVZIP-NEXT:    vmv1r.v v25, v17
 ; ZVZIP-NEXT:    vmv1r.v v26, v19
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 6
-; ZVZIP-NEXT:    mul a0, a0, a1
-; ZVZIP-NEXT:    add a0, sp, a0
-; ZVZIP-NEXT:    addi a0, a0, 64
+; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsseg6e64.v v21, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v21, v10
 ; ZVZIP-NEXT:    vmv1r.v v22, v12
 ; ZVZIP-NEXT:    vmv1r.v v23, v14
 ; ZVZIP-NEXT:    vmv1r.v v24, v16
 ; ZVZIP-NEXT:    vmv1r.v v25, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg6e64.v v20, (a1)
-; ZVZIP-NEXT:    vl1re64.v v14, (a0)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
-; ZVZIP-NEXT:    vl1re64.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a3, a2
-; ZVZIP-NEXT:    add a5, a4, a2
-; ZVZIP-NEXT:    add a6, a5, a2
-; ZVZIP-NEXT:    vl1re64.v v12, (a6)
-; ZVZIP-NEXT:    add a6, a6, a2
-; ZVZIP-NEXT:    vl1re64.v v13, (a6)
-; ZVZIP-NEXT:    vl1re64.v v10, (a4)
-; ZVZIP-NEXT:    vl1re64.v v11, (a5)
-; ZVZIP-NEXT:    vl1re64.v v8, (a1)
-; ZVZIP-NEXT:    vl1re64.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a1, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
+; ZVZIP-NEXT:    li a1, 6
+; ZVZIP-NEXT:    mul a2, a2, a1
+; ZVZIP-NEXT:    add a2, sp, a2
+; ZVZIP-NEXT:    addi a2, a2, 64
+; ZVZIP-NEXT:    vsseg6e64.v v20, (a2)
+; ZVZIP-NEXT:    vl1re64.v v14, (a0)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    add a3, a0, a1
+; ZVZIP-NEXT:    vl1re64.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a1, 2
+; ZVZIP-NEXT:    add a4, a2, a3
+; ZVZIP-NEXT:    vl1re64.v v12, (a4)
+; ZVZIP-NEXT:    add a4, a3, a1
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re64.v v13, (a5)
+; ZVZIP-NEXT:    slli a5, a1, 1
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re64.v v10, (a6)
+; ZVZIP-NEXT:    add a6, a5, a1
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re64.v v11, (a7)
+; ZVZIP-NEXT:    vl1re64.v v8, (a2)
+; ZVZIP-NEXT:    add a2, a2, a1
+; ZVZIP-NEXT:    vl1re64.v v9, (a2)
+; ZVZIP-NEXT:    add a3, a0, a3
 ; ZVZIP-NEXT:    vl1re64.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a2
-; ZVZIP-NEXT:    vl1re64.v v19, (a3)
-; ZVZIP-NEXT:    vl1re64.v v16, (a0)
-; ZVZIP-NEXT:    vl1re64.v v17, (a1)
-; ZVZIP-NEXT:    slli a2, a2, 3
+; ZVZIP-NEXT:    add a4, a0, a4
+; ZVZIP-NEXT:    vl1re64.v v19, (a4)
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    vl1re64.v v16, (a5)
+; ZVZIP-NEXT:    add a0, a0, a6
+; ZVZIP-NEXT:    vl1re64.v v17, (a0)
+; ZVZIP-NEXT:    slli a1, a1, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 12
-; ZVZIP-NEXT:    mul a0, a0, a1
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a0, a0, a2
 ; ZVZIP-NEXT:    add a0, sp, a0
 ; ZVZIP-NEXT:    addi a0, a0, 64
-; ZVZIP-NEXT:    add a2, a0, a2
-; ZVZIP-NEXT:    vs4r.v v16, (a2)
+; ZVZIP-NEXT:    add a1, a0, a1
+; ZVZIP-NEXT:    vs4r.v v16, (a1)
 ; ZVZIP-NEXT:    vs8r.v v8, (a0)
-; ZVZIP-NEXT:    vl8re64.v v16, (a2)
+; ZVZIP-NEXT:    vl8re64.v v16, (a1)
 ; ZVZIP-NEXT:    vl8re64.v v8, (a0)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -3640,53 +3795,58 @@ define <vscale x 112 x i1> @vector_interleave_nxv112i1_nxv16i1(<vscale x 16 x i1
 ; CHECK-NEXT:    vmv1r.v v24, v18
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmerge.vim v26, v30, 1, v0
-; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    csrr a3, vlenb
+; CHECK-NEXT:    slli a0, a3, 3
+; CHECK-NEXT:    sub a3, a0, a3
+; CHECK-NEXT:    add a3, sp, a3
+; CHECK-NEXT:    addi a3, a3, 16
 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; CHECK-NEXT:    vsseg7e8.v v20, (a1)
+; CHECK-NEXT:    vsseg7e8.v v20, (a3)
 ; CHECK-NEXT:    vmv1r.v v16, v29
 ; CHECK-NEXT:    vmv1r.v v18, v9
 ; CHECK-NEXT:    vmv1r.v v20, v11
 ; CHECK-NEXT:    vmv1r.v v21, v27
-; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    slli a0, a2, 3
-; CHECK-NEXT:    sub a2, a0, a2
-; CHECK-NEXT:    add a2, sp, a2
-; CHECK-NEXT:    addi a2, a2, 16
-; CHECK-NEXT:    vsseg7e8.v v15, (a2)
+; CHECK-NEXT:    addi a1, sp, 16
+; CHECK-NEXT:    vsseg7e8.v v15, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    add a3, a1, a0
-; CHECK-NEXT:    add a4, a3, a0
+; CHECK-NEXT:    slli a2, a0, 1
+; CHECK-NEXT:    add a4, a3, a2
 ; CHECK-NEXT:    vl1r.v v8, (a4)
-; CHECK-NEXT:    add a4, a4, a0
-; CHECK-NEXT:    vl1r.v v9, (a4)
-; CHECK-NEXT:    vl1r.v v10, (a1)
-; CHECK-NEXT:    vl1r.v v11, (a3)
-; CHECK-NEXT:    add a4, a4, a0
-; CHECK-NEXT:    vl1r.v v12, (a4)
-; CHECK-NEXT:    add a4, a4, a0
-; CHECK-NEXT:    vl1r.v v13, (a4)
-; CHECK-NEXT:    add a4, a4, a0
-; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
+; CHECK-NEXT:    add a4, a2, a0
+; CHECK-NEXT:    add a5, a3, a4
+; CHECK-NEXT:    vl1r.v v9, (a5)
+; CHECK-NEXT:    vl1r.v v10, (a3)
+; CHECK-NEXT:    add a5, a3, a0
+; CHECK-NEXT:    vl1r.v v11, (a5)
+; CHECK-NEXT:    slli a5, a0, 2
+; CHECK-NEXT:    add a6, a3, a5
+; CHECK-NEXT:    vl1r.v v12, (a6)
+; CHECK-NEXT:    add a6, a5, a0
+; CHECK-NEXT:    add a7, a3, a6
+; CHECK-NEXT:    vl1r.v v13, (a7)
+; CHECK-NEXT:    add a7, a5, a2
+; CHECK-NEXT:    add a3, a3, a7
+; CHECK-NEXT:    vsetvli t0, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmsne.vi v14, v8, 0
-; CHECK-NEXT:    vl1r.v v8, (a4)
-; CHECK-NEXT:    add a1, a2, a0
-; CHECK-NEXT:    vl1r.v v9, (a2)
+; CHECK-NEXT:    vl1r.v v8, (a3)
+; CHECK-NEXT:    vl1r.v v9, (a1)
 ; CHECK-NEXT:    vmsne.vi v0, v10, 0
-; CHECK-NEXT:    add a2, a1, a0
-; CHECK-NEXT:    add a3, a2, a0
-; CHECK-NEXT:    vl1r.v v10, (a3)
+; CHECK-NEXT:    add a4, a1, a4
+; CHECK-NEXT:    vl1r.v v10, (a4)
 ; CHECK-NEXT:    vmsne.vi v15, v12, 0
-; CHECK-NEXT:    add a3, a3, a0
-; CHECK-NEXT:    vl1r.v v11, (a3)
+; CHECK-NEXT:    add a5, a1, a5
+; CHECK-NEXT:    vl1r.v v11, (a5)
+; CHECK-NEXT:    add a3, a1, a0
 ; CHECK-NEXT:    vmsne.vi v16, v8, 0
-; CHECK-NEXT:    vl1r.v v12, (a1)
+; CHECK-NEXT:    vl1r.v v12, (a3)
+; CHECK-NEXT:    add a2, a1, a2
 ; CHECK-NEXT:    vl1r.v v13, (a2)
 ; CHECK-NEXT:    vmsne.vi v9, v10, 0
-; CHECK-NEXT:    add a3, a3, a0
-; CHECK-NEXT:    vl1r.v v10, (a3)
+; CHECK-NEXT:    add a6, a1, a6
+; CHECK-NEXT:    vl1r.v v10, (a6)
 ; CHECK-NEXT:    vmsne.vi v8, v12, 0
-; CHECK-NEXT:    add a3, a3, a0
-; CHECK-NEXT:    vl1r.v v11, (a3)
+; CHECK-NEXT:    add a1, a1, a7
+; CHECK-NEXT:    vl1r.v v11, (a1)
 ; CHECK-NEXT:    vmsne.vi v12, v10, 0
 ; CHECK-NEXT:    srli a1, a0, 2
 ; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
@@ -3732,53 +3892,58 @@ define <vscale x 112 x i1> @vector_interleave_nxv112i1_nxv16i1(<vscale x 16 x i1
 ; ZVBB-NEXT:    vmv1r.v v24, v18
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmerge.vim v26, v30, 1, v0
-; ZVBB-NEXT:    addi a1, sp, 16
+; ZVBB-NEXT:    csrr a3, vlenb
+; ZVBB-NEXT:    slli a0, a3, 3
+; ZVBB-NEXT:    sub a3, a0, a3
+; ZVBB-NEXT:    add a3, sp, a3
+; ZVBB-NEXT:    addi a3, a3, 16
 ; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; ZVBB-NEXT:    vsseg7e8.v v20, (a1)
+; ZVBB-NEXT:    vsseg7e8.v v20, (a3)
 ; ZVBB-NEXT:    vmv1r.v v16, v29
 ; ZVBB-NEXT:    vmv1r.v v18, v9
 ; ZVBB-NEXT:    vmv1r.v v20, v11
 ; ZVBB-NEXT:    vmv1r.v v21, v27
-; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    slli a0, a2, 3
-; ZVBB-NEXT:    sub a2, a0, a2
-; ZVBB-NEXT:    add a2, sp, a2
-; ZVBB-NEXT:    addi a2, a2, 16
-; ZVBB-NEXT:    vsseg7e8.v v15, (a2)
+; ZVBB-NEXT:    addi a1, sp, 16
+; ZVBB-NEXT:    vsseg7e8.v v15, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    add a3, a1, a0
-; ZVBB-NEXT:    add a4, a3, a0
+; ZVBB-NEXT:    slli a2, a0, 1
+; ZVBB-NEXT:    add a4, a3, a2
 ; ZVBB-NEXT:    vl1r.v v8, (a4)
-; ZVBB-NEXT:    add a4, a4, a0
-; ZVBB-NEXT:    vl1r.v v9, (a4)
-; ZVBB-NEXT:    vl1r.v v10, (a1)
-; ZVBB-NEXT:    vl1r.v v11, (a3)
-; ZVBB-NEXT:    add a4, a4, a0
-; ZVBB-NEXT:    vl1r.v v12, (a4)
-; ZVBB-NEXT:    add a4, a4, a0
-; ZVBB-NEXT:    vl1r.v v13, (a4)
-; ZVBB-NEXT:    add a4, a4, a0
-; ZVBB-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
+; ZVBB-NEXT:    add a4, a2, a0
+; ZVBB-NEXT:    add a5, a3, a4
+; ZVBB-NEXT:    vl1r.v v9, (a5)
+; ZVBB-NEXT:    vl1r.v v10, (a3)
+; ZVBB-NEXT:    add a5, a3, a0
+; ZVBB-NEXT:    vl1r.v v11, (a5)
+; ZVBB-NEXT:    slli a5, a0, 2
+; ZVBB-NEXT:    add a6, a3, a5
+; ZVBB-NEXT:    vl1r.v v12, (a6)
+; ZVBB-NEXT:    add a6, a5, a0
+; ZVBB-NEXT:    add a7, a3, a6
+; ZVBB-NEXT:    vl1r.v v13, (a7)
+; ZVBB-NEXT:    add a7, a5, a2
+; ZVBB-NEXT:    add a3, a3, a7
+; ZVBB-NEXT:    vsetvli t0, zero, e8, m2, ta, ma
 ; ZVBB-NEXT:    vmsne.vi v14, v8, 0
-; ZVBB-NEXT:    vl1r.v v8, (a4)
-; ZVBB-NEXT:    add a1, a2, a0
-; ZVBB-NEXT:    vl1r.v v9, (a2)
+; ZVBB-NEXT:    vl1r.v v8, (a3)
+; ZVBB-NEXT:    vl1r.v v9, (a1)
 ; ZVBB-NEXT:    vmsne.vi v0, v10, 0
-; ZVBB-NEXT:    add a2, a1, a0
-; ZVBB-NEXT:    add a3, a2, a0
-; ZVBB-NEXT:    vl1r.v v10, (a3)
+; ZVBB-NEXT:    add a4, a1, a4
+; ZVBB-NEXT:    vl1r.v v10, (a4)
 ; ZVBB-NEXT:    vmsne.vi v15, v12, 0
-; ZVBB-NEXT:    add a3, a3, a0
-; ZVBB-NEXT:    vl1r.v v11, (a3)
+; ZVBB-NEXT:    add a5, a1, a5
+; ZVBB-NEXT:    vl1r.v v11, (a5)
+; ZVBB-NEXT:    add a3, a1, a0
 ; ZVBB-NEXT:    vmsne.vi v16, v8, 0
-; ZVBB-NEXT:    vl1r.v v12, (a1)
+; ZVBB-NEXT:    vl1r.v v12, (a3)
+; ZVBB-NEXT:    add a2, a1, a2
 ; ZVBB-NEXT:    vl1r.v v13, (a2)
 ; ZVBB-NEXT:    vmsne.vi v9, v10, 0
-; ZVBB-NEXT:    add a3, a3, a0
-; ZVBB-NEXT:    vl1r.v v10, (a3)
+; ZVBB-NEXT:    add a6, a1, a6
+; ZVBB-NEXT:    vl1r.v v10, (a6)
 ; ZVBB-NEXT:    vmsne.vi v8, v12, 0
-; ZVBB-NEXT:    add a3, a3, a0
-; ZVBB-NEXT:    vl1r.v v11, (a3)
+; ZVBB-NEXT:    add a1, a1, a7
+; ZVBB-NEXT:    vl1r.v v11, (a1)
 ; ZVBB-NEXT:    vmsne.vi v12, v10, 0
 ; ZVBB-NEXT:    srli a1, a0, 2
 ; ZVBB-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
@@ -3824,59 +3989,63 @@ define <vscale x 112 x i8> @vector_interleave_nxv112i8_nxv16i8(<vscale x 16 x i8
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e8.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e8.v v21, (a2)
+; RV32-NEXT:    vsseg7e8.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e8.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1r.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1r.v v11, (a4)
-; RV32-NEXT:    vl1r.v v8, (a1)
-; RV32-NEXT:    vl1r.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1r.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1r.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1r.v v14, (a4)
-; RV32-NEXT:    vl1r.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1r.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1r.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1r.v v11, (a5)
+; RV32-NEXT:    vl1r.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1r.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1r.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1r.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1r.v v14, (a2)
+; RV32-NEXT:    vl1r.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1r.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1r.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1r.v v16, (a2)
-; RV32-NEXT:    vl1r.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1r.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1r.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1r.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1r.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1r.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8r.v v16, (a0)
-; RV32-NEXT:    vl8r.v v8, (a2)
+; RV32-NEXT:    vl8r.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -3905,59 +4074,63 @@ define <vscale x 112 x i8> @vector_interleave_nxv112i8_nxv16i8(<vscale x 16 x i8
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e8.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e8.v v21, (a2)
+; RV64-NEXT:    vsseg7e8.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e8.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1r.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1r.v v11, (a4)
-; RV64-NEXT:    vl1r.v v8, (a1)
-; RV64-NEXT:    vl1r.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1r.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1r.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1r.v v14, (a4)
-; RV64-NEXT:    vl1r.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1r.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1r.v v19, (a3)
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1r.v v11, (a5)
+; RV64-NEXT:    vl1r.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1r.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1r.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1r.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1r.v v14, (a2)
+; RV64-NEXT:    vl1r.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1r.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1r.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
 ; RV64-NEXT:    vl1r.v v16, (a2)
-; RV64-NEXT:    vl1r.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1r.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1r.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1r.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1r.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1r.v v21, (a1)
 ; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8r.v v16, (a0)
-; RV64-NEXT:    vl8r.v v8, (a2)
+; RV64-NEXT:    vl8r.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -3986,59 +4159,63 @@ define <vscale x 112 x i8> @vector_interleave_nxv112i8_nxv16i8(<vscale x 16 x i8
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e8.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e8.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e8.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e8.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1r.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1r.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1r.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1r.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1r.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1r.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1r.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1r.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1r.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1r.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1r.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1r.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1r.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1r.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1r.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1r.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1r.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1r.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1r.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1r.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1r.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1r.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1r.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1r.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1r.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1r.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -4067,59 +4244,63 @@ define <vscale x 112 x i8> @vector_interleave_nxv112i8_nxv16i8(<vscale x 16 x i8
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e8.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e8.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e8.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e8.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1r.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1r.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1r.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1r.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1r.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1r.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1r.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1r.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1r.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1r.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1r.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1r.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1r.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1r.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1r.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1r.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1r.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1r.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1r.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1r.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1r.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1r.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1r.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1r.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1r.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1r.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -4148,59 +4329,63 @@ define <vscale x 112 x i8> @vector_interleave_nxv112i8_nxv16i8(<vscale x 16 x i8
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
 ; ZVZIP-NEXT:    vmv1r.v v4, v14
 ; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e8.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e8.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e8.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e8.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1r.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1r.v v11, (a4)
-; ZVZIP-NEXT:    vl1r.v v8, (a1)
-; ZVZIP-NEXT:    vl1r.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1r.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1r.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1r.v v14, (a4)
-; ZVZIP-NEXT:    vl1r.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1r.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1r.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1r.v v11, (a5)
+; ZVZIP-NEXT:    vl1r.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1r.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1r.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1r.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1r.v v14, (a2)
+; ZVZIP-NEXT:    vl1r.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1r.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1r.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1r.v v16, (a2)
-; ZVZIP-NEXT:    vl1r.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1r.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1r.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1r.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1r.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1r.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8r.v v16, (a0)
-; ZVZIP-NEXT:    vl8r.v v8, (a2)
+; ZVZIP-NEXT:    vl8r.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -4235,59 +4420,63 @@ define <vscale x 56 x i16> @vector_interleave_nxv56i16_nxv8i16(<vscale x 8 x i16
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e16.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e16.v v21, (a2)
+; RV32-NEXT:    vsseg7e16.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e16.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1re16.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v11, (a4)
-; RV32-NEXT:    vl1re16.v v8, (a1)
-; RV32-NEXT:    vl1re16.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v14, (a4)
-; RV32-NEXT:    vl1re16.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1re16.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re16.v v11, (a5)
+; RV32-NEXT:    vl1re16.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1re16.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re16.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re16.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1re16.v v14, (a2)
+; RV32-NEXT:    vl1re16.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re16.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1re16.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1re16.v v16, (a2)
-; RV32-NEXT:    vl1re16.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re16.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1re16.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1re16.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8re16.v v16, (a0)
-; RV32-NEXT:    vl8re16.v v8, (a2)
+; RV32-NEXT:    vl8re16.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -4316,59 +4505,63 @@ define <vscale x 56 x i16> @vector_interleave_nxv56i16_nxv8i16(<vscale x 8 x i16
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e16.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e16.v v21, (a2)
+; RV64-NEXT:    vsseg7e16.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e16.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1re16.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v11, (a4)
-; RV64-NEXT:    vl1re16.v v8, (a1)
-; RV64-NEXT:    vl1re16.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v14, (a4)
-; RV64-NEXT:    vl1re16.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1re16.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v19, (a3)
-; RV64-NEXT:    vl1re16.v v16, (a2)
-; RV64-NEXT:    vl1re16.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
-; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re16.v v11, (a5)
+; RV64-NEXT:    vl1re16.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1re16.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re16.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re16.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1re16.v v14, (a2)
+; RV64-NEXT:    vl1re16.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re16.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1re16.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
+; RV64-NEXT:    vl1re16.v v16, (a2)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re16.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1re16.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1re16.v v21, (a1)
+; RV64-NEXT:    slli a0, a0, 3
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8re16.v v16, (a0)
-; RV64-NEXT:    vl8re16.v v8, (a2)
+; RV64-NEXT:    vl8re16.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -4397,59 +4590,63 @@ define <vscale x 56 x i16> @vector_interleave_nxv56i16_nxv8i16(<vscale x 8 x i16
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e16.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e16.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e16.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1re16.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1re16.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1re16.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1re16.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8re16.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8re16.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -4478,59 +4675,63 @@ define <vscale x 56 x i16> @vector_interleave_nxv56i16_nxv8i16(<vscale x 8 x i16
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e16.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e16.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e16.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1re16.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1re16.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1re16.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1re16.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8re16.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8re16.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -4559,59 +4760,63 @@ define <vscale x 56 x i16> @vector_interleave_nxv56i16_nxv8i16(<vscale x 8 x i16
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
 ; ZVZIP-NEXT:    vmv1r.v v4, v14
 ; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e16.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e16.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e16.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1re16.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v11, (a4)
-; ZVZIP-NEXT:    vl1re16.v v8, (a1)
-; ZVZIP-NEXT:    vl1re16.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v14, (a4)
-; ZVZIP-NEXT:    vl1re16.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1re16.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re16.v v11, (a5)
+; ZVZIP-NEXT:    vl1re16.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1re16.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re16.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re16.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1re16.v v14, (a2)
+; ZVZIP-NEXT:    vl1re16.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re16.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1re16.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1re16.v v16, (a2)
-; ZVZIP-NEXT:    vl1re16.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re16.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1re16.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1re16.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8re16.v v16, (a0)
-; ZVZIP-NEXT:    vl8re16.v v8, (a2)
+; ZVZIP-NEXT:    vl8re16.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -4646,59 +4851,63 @@ define <vscale x 28 x i32> @vector_interleave_nxv28i32_nxv4i32(<vscale x 4 x i32
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e32.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e32.v v21, (a2)
+; RV32-NEXT:    vsseg7e32.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e32.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1re32.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v11, (a4)
-; RV32-NEXT:    vl1re32.v v8, (a1)
-; RV32-NEXT:    vl1re32.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v14, (a4)
-; RV32-NEXT:    vl1re32.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1re32.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re32.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re32.v v11, (a5)
+; RV32-NEXT:    vl1re32.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1re32.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re32.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re32.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1re32.v v14, (a2)
+; RV32-NEXT:    vl1re32.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re32.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1re32.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1re32.v v16, (a2)
-; RV32-NEXT:    vl1re32.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re32.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re32.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re32.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1re32.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1re32.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8re32.v v16, (a0)
-; RV32-NEXT:    vl8re32.v v8, (a2)
+; RV32-NEXT:    vl8re32.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -4727,59 +4936,63 @@ define <vscale x 28 x i32> @vector_interleave_nxv28i32_nxv4i32(<vscale x 4 x i32
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e32.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e32.v v21, (a2)
+; RV64-NEXT:    vsseg7e32.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e32.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1re32.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v11, (a4)
-; RV64-NEXT:    vl1re32.v v8, (a1)
-; RV64-NEXT:    vl1re32.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v14, (a4)
-; RV64-NEXT:    vl1re32.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1re32.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re32.v v19, (a3)
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re32.v v11, (a5)
+; RV64-NEXT:    vl1re32.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1re32.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re32.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re32.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1re32.v v14, (a2)
+; RV64-NEXT:    vl1re32.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re32.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1re32.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
 ; RV64-NEXT:    vl1re32.v v16, (a2)
-; RV64-NEXT:    vl1re32.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re32.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re32.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re32.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1re32.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1re32.v v21, (a1)
 ; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8re32.v v16, (a0)
-; RV64-NEXT:    vl8re32.v v8, (a2)
+; RV64-NEXT:    vl8re32.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -4808,59 +5021,63 @@ define <vscale x 28 x i32> @vector_interleave_nxv28i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e32.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e32.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e32.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e32.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1re32.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1re32.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1re32.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1re32.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1re32.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8re32.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8re32.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8re32.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -4889,59 +5106,63 @@ define <vscale x 28 x i32> @vector_interleave_nxv28i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e32.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e32.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e32.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e32.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1re32.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1re32.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1re32.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1re32.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1re32.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8re32.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8re32.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8re32.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -4970,59 +5191,63 @@ define <vscale x 28 x i32> @vector_interleave_nxv28i32_nxv4i32(<vscale x 4 x i32
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
 ; ZVZIP-NEXT:    vmv1r.v v4, v14
 ; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e32.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e32.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e32.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e32.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1re32.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v11, (a4)
-; ZVZIP-NEXT:    vl1re32.v v8, (a1)
-; ZVZIP-NEXT:    vl1re32.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v14, (a4)
-; ZVZIP-NEXT:    vl1re32.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1re32.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re32.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re32.v v11, (a5)
+; ZVZIP-NEXT:    vl1re32.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1re32.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re32.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re32.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1re32.v v14, (a2)
+; ZVZIP-NEXT:    vl1re32.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re32.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1re32.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1re32.v v16, (a2)
-; ZVZIP-NEXT:    vl1re32.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re32.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re32.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re32.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1re32.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1re32.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8re32.v v16, (a0)
-; ZVZIP-NEXT:    vl8re32.v v8, (a2)
+; ZVZIP-NEXT:    vl8re32.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -5056,59 +5281,63 @@ define <vscale x 14 x i64> @vector_interleave_nxv14i64_nxv2i64(<vscale x 2 x i64
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e64.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e64.v v21, (a2)
+; RV32-NEXT:    vsseg7e64.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e64.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1re64.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v11, (a4)
-; RV32-NEXT:    vl1re64.v v8, (a1)
-; RV32-NEXT:    vl1re64.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v14, (a4)
-; RV32-NEXT:    vl1re64.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1re64.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re64.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re64.v v11, (a5)
+; RV32-NEXT:    vl1re64.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1re64.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re64.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re64.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1re64.v v14, (a2)
+; RV32-NEXT:    vl1re64.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re64.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1re64.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1re64.v v16, (a2)
-; RV32-NEXT:    vl1re64.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re64.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re64.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re64.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1re64.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1re64.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8re64.v v16, (a0)
-; RV32-NEXT:    vl8re64.v v8, (a2)
+; RV32-NEXT:    vl8re64.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -5137,59 +5366,63 @@ define <vscale x 14 x i64> @vector_interleave_nxv14i64_nxv2i64(<vscale x 2 x i64
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e64.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e64.v v21, (a2)
+; RV64-NEXT:    vsseg7e64.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e64.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1re64.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v11, (a4)
-; RV64-NEXT:    vl1re64.v v8, (a1)
-; RV64-NEXT:    vl1re64.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v14, (a4)
-; RV64-NEXT:    vl1re64.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1re64.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re64.v v19, (a3)
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re64.v v11, (a5)
+; RV64-NEXT:    vl1re64.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1re64.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re64.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re64.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1re64.v v14, (a2)
+; RV64-NEXT:    vl1re64.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re64.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1re64.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
 ; RV64-NEXT:    vl1re64.v v16, (a2)
-; RV64-NEXT:    vl1re64.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re64.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re64.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re64.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1re64.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1re64.v v21, (a1)
 ; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8re64.v v16, (a0)
-; RV64-NEXT:    vl8re64.v v8, (a2)
+; RV64-NEXT:    vl8re64.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -5218,59 +5451,63 @@ define <vscale x 14 x i64> @vector_interleave_nxv14i64_nxv2i64(<vscale x 2 x i64
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e64.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e64.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e64.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e64.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1re64.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1re64.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1re64.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1re64.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1re64.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8re64.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8re64.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8re64.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -5299,59 +5536,63 @@ define <vscale x 14 x i64> @vector_interleave_nxv14i64_nxv2i64(<vscale x 2 x i64
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e64.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e64.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e64.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e64.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1re64.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1re64.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1re64.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1re64.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1re64.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8re64.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8re64.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8re64.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -5380,59 +5621,63 @@ define <vscale x 14 x i64> @vector_interleave_nxv14i64_nxv2i64(<vscale x 2 x i64
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
 ; ZVZIP-NEXT:    vmv1r.v v4, v14
 ; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e64.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e64.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e64.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e64.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1re64.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v11, (a4)
-; ZVZIP-NEXT:    vl1re64.v v8, (a1)
-; ZVZIP-NEXT:    vl1re64.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v14, (a4)
-; ZVZIP-NEXT:    vl1re64.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1re64.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re64.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re64.v v11, (a5)
+; ZVZIP-NEXT:    vl1re64.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1re64.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re64.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re64.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1re64.v v14, (a2)
+; ZVZIP-NEXT:    vl1re64.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re64.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1re64.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1re64.v v16, (a2)
-; ZVZIP-NEXT:    vl1re64.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re64.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re64.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re64.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1re64.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1re64.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8re64.v v16, (a0)
-; ZVZIP-NEXT:    vl8re64.v v8, (a2)
+; ZVZIP-NEXT:    vl8re64.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -5474,68 +5719,75 @@ define <vscale x 128 x i1> @vector_interleave_nxv128i1_nxv16i1(<vscale x 16 x i1
 ; CHECK-NEXT:    vmv1r.v v6, v11
 ; CHECK-NEXT:    vmv1r.v v7, v23
 ; CHECK-NEXT:    vmv1r.v v8, v13
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
-; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; CHECK-NEXT:    vsseg8e8.v v1, (a1)
+; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vsseg8e8.v v1, (a0)
 ; CHECK-NEXT:    vmv1r.v v17, v24
 ; CHECK-NEXT:    vmv1r.v v19, v28
 ; CHECK-NEXT:    vmv1r.v v21, v10
 ; CHECK-NEXT:    vmv1r.v v23, v12
-; CHECK-NEXT:    addi a2, sp, 16
+; CHECK-NEXT:    csrr a2, vlenb
+; CHECK-NEXT:    slli a2, a2, 3
+; CHECK-NEXT:    add a2, sp, a2
+; CHECK-NEXT:    addi a2, a2, 16
 ; CHECK-NEXT:    vsseg8e8.v v16, (a2)
-; CHECK-NEXT:    csrr a0, vlenb
-; CHECK-NEXT:    add a3, a1, a0
-; CHECK-NEXT:    add a4, a3, a0
-; CHECK-NEXT:    vl1r.v v8, (a4)
-; CHECK-NEXT:    add a4, a4, a0
-; CHECK-NEXT:    vl1r.v v9, (a4)
-; CHECK-NEXT:    vl1r.v v10, (a1)
-; CHECK-NEXT:    add a4, a4, a0
-; CHECK-NEXT:    vl1r.v v11, (a3)
-; CHECK-NEXT:    add a1, a4, a0
-; CHECK-NEXT:    add a3, a1, a0
-; CHECK-NEXT:    vl1r.v v12, (a3)
-; CHECK-NEXT:    add a3, a3, a0
-; CHECK-NEXT:    vl1r.v v13, (a3)
-; CHECK-NEXT:    add a3, a2, a0
-; CHECK-NEXT:    add a5, a3, a0
-; CHECK-NEXT:    vl1r.v v14, (a5)
-; CHECK-NEXT:    vsetvli a6, zero, e8, m2, ta, ma
+; CHECK-NEXT:    csrr a1, vlenb
+; CHECK-NEXT:    slli a4, a1, 1
+; CHECK-NEXT:    add a3, a0, a4
+; CHECK-NEXT:    vl1r.v v8, (a3)
+; CHECK-NEXT:    add a5, a4, a1
+; CHECK-NEXT:    add a3, a0, a5
+; CHECK-NEXT:    vl1r.v v9, (a3)
+; CHECK-NEXT:    vl1r.v v10, (a0)
+; CHECK-NEXT:    add a6, a0, a1
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    vl1r.v v11, (a6)
+; CHECK-NEXT:    add a6, a3, a4
+; CHECK-NEXT:    add a7, a0, a6
+; CHECK-NEXT:    slli t0, a1, 3
+; CHECK-NEXT:    vl1r.v v12, (a7)
+; CHECK-NEXT:    sub a7, t0, a1
+; CHECK-NEXT:    add t0, a0, a7
+; CHECK-NEXT:    vl1r.v v13, (t0)
+; CHECK-NEXT:    add a4, a2, a4
+; CHECK-NEXT:    vl1r.v v14, (a4)
+; CHECK-NEXT:    vsetvli a4, zero, e8, m2, ta, ma
 ; CHECK-NEXT:    vmsne.vi v16, v8, 0
-; CHECK-NEXT:    add a5, a5, a0
+; CHECK-NEXT:    add a5, a2, a5
 ; CHECK-NEXT:    vl1r.v v15, (a5)
 ; CHECK-NEXT:    vmsne.vi v8, v10, 0
 ; CHECK-NEXT:    vl1r.v v10, (a2)
-; CHECK-NEXT:    add a5, a5, a0
-; CHECK-NEXT:    vl1r.v v11, (a3)
+; CHECK-NEXT:    add a4, a2, a1
+; CHECK-NEXT:    vl1r.v v11, (a4)
 ; CHECK-NEXT:    vmsne.vi v9, v12, 0
-; CHECK-NEXT:    add a2, a5, a0
-; CHECK-NEXT:    add a3, a2, a0
-; CHECK-NEXT:    vl1r.v v12, (a3)
+; CHECK-NEXT:    add a6, a2, a6
+; CHECK-NEXT:    vl1r.v v12, (a6)
 ; CHECK-NEXT:    vmsne.vi v17, v14, 0
-; CHECK-NEXT:    add a3, a3, a0
-; CHECK-NEXT:    vl1r.v v13, (a3)
+; CHECK-NEXT:    add a7, a2, a7
+; CHECK-NEXT:    vl1r.v v13, (a7)
+; CHECK-NEXT:    add a4, a2, a3
 ; CHECK-NEXT:    vmsne.vi v0, v10, 0
-; CHECK-NEXT:    vl1r.v v10, (a5)
+; CHECK-NEXT:    vl1r.v v10, (a4)
+; CHECK-NEXT:    add a4, a3, a1
+; CHECK-NEXT:    add a2, a2, a4
 ; CHECK-NEXT:    vl1r.v v11, (a2)
 ; CHECK-NEXT:    vmsne.vi v14, v12, 0
-; CHECK-NEXT:    vl1r.v v12, (a4)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1r.v v12, (a3)
+; CHECK-NEXT:    add a0, a0, a4
 ; CHECK-NEXT:    vmsne.vi v15, v10, 0
-; CHECK-NEXT:    vl1r.v v13, (a1)
+; CHECK-NEXT:    vl1r.v v13, (a0)
 ; CHECK-NEXT:    vmsne.vi v10, v12, 0
-; CHECK-NEXT:    srli a1, a0, 2
+; CHECK-NEXT:    srli a0, a1, 2
 ; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
-; CHECK-NEXT:    vslideup.vx v15, v14, a1
-; CHECK-NEXT:    vslideup.vx v0, v17, a1
-; CHECK-NEXT:    vslideup.vx v10, v9, a1
-; CHECK-NEXT:    vslideup.vx v8, v16, a1
-; CHECK-NEXT:    srli a0, a0, 1
-; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v0, v15, a0
-; CHECK-NEXT:    vslideup.vx v8, v10, a0
+; CHECK-NEXT:    vslideup.vx v15, v14, a0
+; CHECK-NEXT:    vslideup.vx v0, v17, a0
+; CHECK-NEXT:    vslideup.vx v10, v9, a0
+; CHECK-NEXT:    vslideup.vx v8, v16, a0
+; CHECK-NEXT:    srli a1, a1, 1
+; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v0, v15, a1
+; CHECK-NEXT:    vslideup.vx v8, v10, a1
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -5573,68 +5825,75 @@ define <vscale x 128 x i1> @vector_interleave_nxv128i1_nxv16i1(<vscale x 16 x i1
 ; ZVBB-NEXT:    vmv1r.v v6, v11
 ; ZVBB-NEXT:    vmv1r.v v7, v23
 ; ZVBB-NEXT:    vmv1r.v v8, v13
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
-; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
-; ZVBB-NEXT:    vsseg8e8.v v1, (a1)
+; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
+; ZVBB-NEXT:    vsseg8e8.v v1, (a0)
 ; ZVBB-NEXT:    vmv1r.v v17, v24
 ; ZVBB-NEXT:    vmv1r.v v19, v28
 ; ZVBB-NEXT:    vmv1r.v v21, v10
 ; ZVBB-NEXT:    vmv1r.v v23, v12
-; ZVBB-NEXT:    addi a2, sp, 16
+; ZVBB-NEXT:    csrr a2, vlenb
+; ZVBB-NEXT:    slli a2, a2, 3
+; ZVBB-NEXT:    add a2, sp, a2
+; ZVBB-NEXT:    addi a2, a2, 16
 ; ZVBB-NEXT:    vsseg8e8.v v16, (a2)
-; ZVBB-NEXT:    csrr a0, vlenb
-; ZVBB-NEXT:    add a3, a1, a0
-; ZVBB-NEXT:    add a4, a3, a0
-; ZVBB-NEXT:    vl1r.v v8, (a4)
-; ZVBB-NEXT:    add a4, a4, a0
-; ZVBB-NEXT:    vl1r.v v9, (a4)
-; ZVBB-NEXT:    vl1r.v v10, (a1)
-; ZVBB-NEXT:    add a4, a4, a0
-; ZVBB-NEXT:    vl1r.v v11, (a3)
-; ZVBB-NEXT:    add a1, a4, a0
-; ZVBB-NEXT:    add a3, a1, a0
-; ZVBB-NEXT:    vl1r.v v12, (a3)
-; ZVBB-NEXT:    add a3, a3, a0
-; ZVBB-NEXT:    vl1r.v v13, (a3)
-; ZVBB-NEXT:    add a3, a2, a0
-; ZVBB-NEXT:    add a5, a3, a0
-; ZVBB-NEXT:    vl1r.v v14, (a5)
-; ZVBB-NEXT:    vsetvli a6, zero, e8, m2, ta, ma
+; ZVBB-NEXT:    csrr a1, vlenb
+; ZVBB-NEXT:    slli a4, a1, 1
+; ZVBB-NEXT:    add a3, a0, a4
+; ZVBB-NEXT:    vl1r.v v8, (a3)
+; ZVBB-NEXT:    add a5, a4, a1
+; ZVBB-NEXT:    add a3, a0, a5
+; ZVBB-NEXT:    vl1r.v v9, (a3)
+; ZVBB-NEXT:    vl1r.v v10, (a0)
+; ZVBB-NEXT:    add a6, a0, a1
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    vl1r.v v11, (a6)
+; ZVBB-NEXT:    add a6, a3, a4
+; ZVBB-NEXT:    add a7, a0, a6
+; ZVBB-NEXT:    slli t0, a1, 3
+; ZVBB-NEXT:    vl1r.v v12, (a7)
+; ZVBB-NEXT:    sub a7, t0, a1
+; ZVBB-NEXT:    add t0, a0, a7
+; ZVBB-NEXT:    vl1r.v v13, (t0)
+; ZVBB-NEXT:    add a4, a2, a4
+; ZVBB-NEXT:    vl1r.v v14, (a4)
+; ZVBB-NEXT:    vsetvli a4, zero, e8, m2, ta, ma
 ; ZVBB-NEXT:    vmsne.vi v16, v8, 0
-; ZVBB-NEXT:    add a5, a5, a0
+; ZVBB-NEXT:    add a5, a2, a5
 ; ZVBB-NEXT:    vl1r.v v15, (a5)
 ; ZVBB-NEXT:    vmsne.vi v8, v10, 0
 ; ZVBB-NEXT:    vl1r.v v10, (a2)
-; ZVBB-NEXT:    add a5, a5, a0
-; ZVBB-NEXT:    vl1r.v v11, (a3)
+; ZVBB-NEXT:    add a4, a2, a1
+; ZVBB-NEXT:    vl1r.v v11, (a4)
 ; ZVBB-NEXT:    vmsne.vi v9, v12, 0
-; ZVBB-NEXT:    add a2, a5, a0
-; ZVBB-NEXT:    add a3, a2, a0
-; ZVBB-NEXT:    vl1r.v v12, (a3)
+; ZVBB-NEXT:    add a6, a2, a6
+; ZVBB-NEXT:    vl1r.v v12, (a6)
 ; ZVBB-NEXT:    vmsne.vi v17, v14, 0
-; ZVBB-NEXT:    add a3, a3, a0
-; ZVBB-NEXT:    vl1r.v v13, (a3)
+; ZVBB-NEXT:    add a7, a2, a7
+; ZVBB-NEXT:    vl1r.v v13, (a7)
+; ZVBB-NEXT:    add a4, a2, a3
 ; ZVBB-NEXT:    vmsne.vi v0, v10, 0
-; ZVBB-NEXT:    vl1r.v v10, (a5)
+; ZVBB-NEXT:    vl1r.v v10, (a4)
+; ZVBB-NEXT:    add a4, a3, a1
+; ZVBB-NEXT:    add a2, a2, a4
 ; ZVBB-NEXT:    vl1r.v v11, (a2)
 ; ZVBB-NEXT:    vmsne.vi v14, v12, 0
-; ZVBB-NEXT:    vl1r.v v12, (a4)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1r.v v12, (a3)
+; ZVBB-NEXT:    add a0, a0, a4
 ; ZVBB-NEXT:    vmsne.vi v15, v10, 0
-; ZVBB-NEXT:    vl1r.v v13, (a1)
+; ZVBB-NEXT:    vl1r.v v13, (a0)
 ; ZVBB-NEXT:    vmsne.vi v10, v12, 0
-; ZVBB-NEXT:    srli a1, a0, 2
+; ZVBB-NEXT:    srli a0, a1, 2
 ; ZVBB-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
-; ZVBB-NEXT:    vslideup.vx v15, v14, a1
-; ZVBB-NEXT:    vslideup.vx v0, v17, a1
-; ZVBB-NEXT:    vslideup.vx v10, v9, a1
-; ZVBB-NEXT:    vslideup.vx v8, v16, a1
-; ZVBB-NEXT:    srli a0, a0, 1
-; ZVBB-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v0, v15, a0
-; ZVBB-NEXT:    vslideup.vx v8, v10, a0
+; ZVBB-NEXT:    vslideup.vx v15, v14, a0
+; ZVBB-NEXT:    vslideup.vx v0, v17, a0
+; ZVBB-NEXT:    vslideup.vx v10, v9, a0
+; ZVBB-NEXT:    vslideup.vx v8, v16, a0
+; ZVBB-NEXT:    srli a1, a1, 1
+; ZVBB-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v0, v15, a1
+; ZVBB-NEXT:    vslideup.vx v8, v10, a1
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -5666,48 +5925,55 @@ define <vscale x 128 x i8> @vector_interleave_nxv128i8_nxv16i8(<vscale x 16 x i8
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e8.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e8.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1r.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1r.v v23, (t0)
-; CHECK-NEXT:    vl1r.v v20, (a6)
-; CHECK-NEXT:    vl1r.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1r.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1r.v v19, (a5)
 ; CHECK-NEXT:    vl1r.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1r.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1r.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1r.v v15, (a2)
-; CHECK-NEXT:    vl1r.v v12, (a3)
-; CHECK-NEXT:    vl1r.v v13, (a6)
-; CHECK-NEXT:    vl1r.v v10, (a4)
-; CHECK-NEXT:    vl1r.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1r.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1r.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1r.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1r.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1r.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1r.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1r.v v11, (a4)
 ; CHECK-NEXT:    vl1r.v v8, (a0)
-; CHECK-NEXT:    vl1r.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1r.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1r.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1r.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1r.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1r.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -5733,48 +5999,55 @@ define <vscale x 128 x i8> @vector_interleave_nxv128i8_nxv16i8(<vscale x 16 x i8
 ; ZVBB-NEXT:    vmv1r.v v6, v19
 ; ZVBB-NEXT:    vmv1r.v v7, v31
 ; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e8.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e8.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1r.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1r.v v23, (t0)
-; ZVBB-NEXT:    vl1r.v v20, (a6)
-; ZVBB-NEXT:    vl1r.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1r.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1r.v v19, (a5)
 ; ZVBB-NEXT:    vl1r.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1r.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1r.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1r.v v15, (a2)
-; ZVBB-NEXT:    vl1r.v v12, (a3)
-; ZVBB-NEXT:    vl1r.v v13, (a6)
-; ZVBB-NEXT:    vl1r.v v10, (a4)
-; ZVBB-NEXT:    vl1r.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1r.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1r.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1r.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1r.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1r.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1r.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1r.v v11, (a4)
 ; ZVBB-NEXT:    vl1r.v v8, (a0)
-; ZVBB-NEXT:    vl1r.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1r.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1r.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1r.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1r.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1r.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -5806,48 +6079,55 @@ define <vscale x 64 x i16> @vector_interleave_nxv64i16_nxv8i16(<vscale x 8 x i16
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e16.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e16.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1re16.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1re16.v v23, (t0)
-; CHECK-NEXT:    vl1re16.v v20, (a6)
-; CHECK-NEXT:    vl1re16.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1re16.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1re16.v v19, (a5)
 ; CHECK-NEXT:    vl1re16.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1re16.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1re16.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1re16.v v15, (a2)
-; CHECK-NEXT:    vl1re16.v v12, (a3)
-; CHECK-NEXT:    vl1re16.v v13, (a6)
-; CHECK-NEXT:    vl1re16.v v10, (a4)
-; CHECK-NEXT:    vl1re16.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1re16.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1re16.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1re16.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1re16.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1re16.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1re16.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re16.v v11, (a4)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1re16.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1re16.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1re16.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1re16.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -5873,48 +6153,55 @@ define <vscale x 64 x i16> @vector_interleave_nxv64i16_nxv8i16(<vscale x 8 x i16
 ; ZVBB-NEXT:    vmv1r.v v6, v19
 ; ZVBB-NEXT:    vmv1r.v v7, v31
 ; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e16.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e16.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1re16.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1re16.v v23, (t0)
-; ZVBB-NEXT:    vl1re16.v v20, (a6)
-; ZVBB-NEXT:    vl1re16.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1re16.v v19, (a5)
 ; ZVBB-NEXT:    vl1re16.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1re16.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1re16.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-NEXT:    vl1re16.v v12, (a3)
-; ZVBB-NEXT:    vl1re16.v v13, (a6)
-; ZVBB-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1re16.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1re16.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1re16.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1re16.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1re16.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1re16.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re16.v v11, (a4)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1re16.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1re16.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1re16.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1re16.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -5946,48 +6233,55 @@ define <vscale x 32 x i32> @vector_interleave_nxv32i32_nxv4i32(<vscale x 4 x i32
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e32.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e32.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1re32.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1re32.v v23, (t0)
-; CHECK-NEXT:    vl1re32.v v20, (a6)
-; CHECK-NEXT:    vl1re32.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1re32.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1re32.v v19, (a5)
 ; CHECK-NEXT:    vl1re32.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1re32.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1re32.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1re32.v v15, (a2)
-; CHECK-NEXT:    vl1re32.v v12, (a3)
-; CHECK-NEXT:    vl1re32.v v13, (a6)
-; CHECK-NEXT:    vl1re32.v v10, (a4)
-; CHECK-NEXT:    vl1re32.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1re32.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1re32.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1re32.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1re32.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1re32.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1re32.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re32.v v11, (a4)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
-; CHECK-NEXT:    vl1re32.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1re32.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1re32.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1re32.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1re32.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1re32.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -6013,48 +6307,55 @@ define <vscale x 32 x i32> @vector_interleave_nxv32i32_nxv4i32(<vscale x 4 x i32
 ; ZVBB-NEXT:    vmv1r.v v6, v19
 ; ZVBB-NEXT:    vmv1r.v v7, v31
 ; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e32.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e32.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1re32.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1re32.v v23, (t0)
-; ZVBB-NEXT:    vl1re32.v v20, (a6)
-; ZVBB-NEXT:    vl1re32.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1re32.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1re32.v v19, (a5)
 ; ZVBB-NEXT:    vl1re32.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1re32.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1re32.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1re32.v v15, (a2)
-; ZVBB-NEXT:    vl1re32.v v12, (a3)
-; ZVBB-NEXT:    vl1re32.v v13, (a6)
-; ZVBB-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-NEXT:    vl1re32.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1re32.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1re32.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1re32.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1re32.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1re32.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1re32.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re32.v v11, (a4)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-NEXT:    vl1re32.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1re32.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1re32.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1re32.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1re32.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -6085,48 +6386,55 @@ define <vscale x 16 x i64> @vector_interleave_nxv16i64_nxv2i64(<vscale x 2 x i64
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e64.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e64.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1re64.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1re64.v v23, (t0)
-; CHECK-NEXT:    vl1re64.v v20, (a6)
-; CHECK-NEXT:    vl1re64.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1re64.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1re64.v v19, (a5)
 ; CHECK-NEXT:    vl1re64.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1re64.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1re64.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1re64.v v15, (a2)
-; CHECK-NEXT:    vl1re64.v v12, (a3)
-; CHECK-NEXT:    vl1re64.v v13, (a6)
-; CHECK-NEXT:    vl1re64.v v10, (a4)
-; CHECK-NEXT:    vl1re64.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1re64.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1re64.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1re64.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1re64.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1re64.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1re64.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re64.v v11, (a4)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
-; CHECK-NEXT:    vl1re64.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1re64.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1re64.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1re64.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1re64.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1re64.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -6150,50 +6458,57 @@ define <vscale x 16 x i64> @vector_interleave_nxv16i64_nxv2i64(<vscale x 2 x i64
 ; ZVBB-NEXT:    vmv1r.v v4, v15
 ; ZVBB-NEXT:    vmv1r.v v5, v29
 ; ZVBB-NEXT:    vmv1r.v v6, v19
-; ZVBB-NEXT:    vmv1r.v v7, v31
-; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    vmv1r.v v7, v31
+; ZVBB-NEXT:    vmv1r.v v8, v23
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e64.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e64.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1re64.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1re64.v v23, (t0)
-; ZVBB-NEXT:    vl1re64.v v20, (a6)
-; ZVBB-NEXT:    vl1re64.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1re64.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1re64.v v19, (a5)
 ; ZVBB-NEXT:    vl1re64.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1re64.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1re64.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1re64.v v15, (a2)
-; ZVBB-NEXT:    vl1re64.v v12, (a3)
-; ZVBB-NEXT:    vl1re64.v v13, (a6)
-; ZVBB-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-NEXT:    vl1re64.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1re64.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1re64.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1re64.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1re64.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1re64.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1re64.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re64.v v11, (a4)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-NEXT:    vl1re64.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1re64.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1re64.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1re64.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1re64.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -6213,9 +6528,11 @@ define <vscale x 4 x bfloat> @vector_interleave_nxv4bf16_nxv2bf16(<vscale x 2 x
 ; V-NEXT:    li a0, -1
 ; V-NEXT:    vwmaccu.vx v10, a0, v9
 ; V-NEXT:    csrr a0, vlenb
+; V-NEXT:    srli a1, a0, 3
+; V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; V-NEXT:    vslidedown.vx v8, v10, a1
 ; V-NEXT:    srli a0, a0, 2
 ; V-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; V-NEXT:    vslidedown.vx v8, v10, a0
 ; V-NEXT:    vslideup.vx v10, v8, a0
 ; V-NEXT:    vmv.v.v v8, v10
 ; V-NEXT:    ret
@@ -6226,9 +6543,11 @@ define <vscale x 4 x bfloat> @vector_interleave_nxv4bf16_nxv2bf16(<vscale x 2 x
 ; ZVBB-NEXT:    vwsll.vi v10, v9, 16
 ; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
 ; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a1, a0, 3
+; ZVBB-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v8, v10, a1
 ; ZVBB-NEXT:    srli a0, a0, 2
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslidedown.vx v8, v10, a0
 ; ZVBB-NEXT:    vslideup.vx v10, v8, a0
 ; ZVBB-NEXT:    vmv.v.v v8, v10
 ; ZVBB-NEXT:    ret
@@ -6287,9 +6606,11 @@ define <vscale x 4 x half> @vector_interleave_nxv4f16_nxv2f16(<vscale x 2 x half
 ; V-NEXT:    li a0, -1
 ; V-NEXT:    vwmaccu.vx v10, a0, v9
 ; V-NEXT:    csrr a0, vlenb
+; V-NEXT:    srli a1, a0, 3
+; V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; V-NEXT:    vslidedown.vx v8, v10, a1
 ; V-NEXT:    srli a0, a0, 2
 ; V-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; V-NEXT:    vslidedown.vx v8, v10, a0
 ; V-NEXT:    vslideup.vx v10, v8, a0
 ; V-NEXT:    vmv.v.v v8, v10
 ; V-NEXT:    ret
@@ -6300,9 +6621,11 @@ define <vscale x 4 x half> @vector_interleave_nxv4f16_nxv2f16(<vscale x 2 x half
 ; ZVBB-NEXT:    vwsll.vi v10, v9, 16
 ; ZVBB-NEXT:    vwaddu.wv v10, v10, v8
 ; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a1, a0, 3
+; ZVBB-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v8, v10, a1
 ; ZVBB-NEXT:    srli a0, a0, 2
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslidedown.vx v8, v10, a0
 ; ZVBB-NEXT:    vslideup.vx v10, v8, a0
 ; ZVBB-NEXT:    vmv.v.v v8, v10
 ; ZVBB-NEXT:    ret
@@ -6699,15 +7022,15 @@ define <vscale x 6 x half> @vector_interleave_nxv6f16_nxv2f16(<vscale x 2 x half
 ; CHECK-NEXT:    vsseg3e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v9, a1
-; CHECK-NEXT:    add a2, a3, a2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    add a2, a0, a2
 ; CHECK-NEXT:    vle16.v v9, (a2)
+; CHECK-NEXT:    vle16.v v8, (a0)
+; CHECK-NEXT:    srli a2, a1, 2
+; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v8, v9, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v9, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 1
 ; CHECK-NEXT:    add sp, sp, a0
@@ -6725,15 +7048,15 @@ define <vscale x 6 x half> @vector_interleave_nxv6f16_nxv2f16(<vscale x 2 x half
 ; ZVBB-NEXT:    vsseg3e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v9, a1
-; ZVBB-NEXT:    add a2, a3, a2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    add a2, a0, a2
 ; ZVBB-NEXT:    vle16.v v9, (a2)
+; ZVBB-NEXT:    vle16.v v8, (a0)
+; ZVBB-NEXT:    srli a2, a1, 2
+; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v8, v9, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v9, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 1
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -6756,8 +7079,9 @@ define <vscale x 12 x half> @vector_interleave_nxv12f16_nxv4f16(<vscale x 4 x ha
 ; CHECK-NEXT:    vsseg3e16.v v8, (a0)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl1re16.v v9, (a0)
+; CHECK-NEXT:    add a2, a0, a1
+; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    slli a1, a1, 1
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl1re16.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -6779,8 +7103,9 @@ define <vscale x 12 x half> @vector_interleave_nxv12f16_nxv4f16(<vscale x 4 x ha
 ; ZVBB-NEXT:    vsseg3e16.v v8, (a0)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl1re16.v v9, (a0)
+; ZVBB-NEXT:    add a2, a0, a1
+; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    slli a1, a1, 1
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl1re16.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -6806,9 +7131,10 @@ define <vscale x 24 x half> @vector_interleave_nxv24f16_nxv8f16(<vscale x 8 x ha
 ; CHECK-NEXT:    vsseg3e16.v v8, (a0)
 ; CHECK-NEXT:    vl2re16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2re16.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re16.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2re16.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -6830,9 +7156,10 @@ define <vscale x 24 x half> @vector_interleave_nxv24f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-NEXT:    vsseg3e16.v v8, (a0)
 ; ZVBB-NEXT:    vl2re16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2re16.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re16.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2re16.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -6857,15 +7184,15 @@ define <vscale x 6 x bfloat> @vector_interleave_nxv6bf16_nxv2bf16(<vscale x 2 x
 ; CHECK-NEXT:    vsseg3e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    vle16.v v9, (a3)
-; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v9, a1
-; CHECK-NEXT:    add a2, a3, a2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    add a2, a0, a2
 ; CHECK-NEXT:    vle16.v v9, (a2)
+; CHECK-NEXT:    vle16.v v8, (a0)
+; CHECK-NEXT:    srli a2, a1, 2
+; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v8, v9, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v9, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 1
 ; CHECK-NEXT:    add sp, sp, a0
@@ -6883,15 +7210,15 @@ define <vscale x 6 x bfloat> @vector_interleave_nxv6bf16_nxv2bf16(<vscale x 2 x
 ; ZVBB-NEXT:    vsseg3e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    vle16.v v9, (a3)
-; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v9, a1
-; ZVBB-NEXT:    add a2, a3, a2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    add a2, a0, a2
 ; ZVBB-NEXT:    vle16.v v9, (a2)
+; ZVBB-NEXT:    vle16.v v8, (a0)
+; ZVBB-NEXT:    srli a2, a1, 2
+; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v8, v9, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v9, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 1
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -6914,8 +7241,9 @@ define <vscale x 12 x bfloat> @vector_interleave_nxv12bf16_nxv4bf16(<vscale x 4
 ; CHECK-NEXT:    vsseg3e16.v v8, (a0)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl1re16.v v9, (a0)
+; CHECK-NEXT:    add a2, a0, a1
+; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    slli a1, a1, 1
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl1re16.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -6937,8 +7265,9 @@ define <vscale x 12 x bfloat> @vector_interleave_nxv12bf16_nxv4bf16(<vscale x 4
 ; ZVBB-NEXT:    vsseg3e16.v v8, (a0)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl1re16.v v9, (a0)
+; ZVBB-NEXT:    add a2, a0, a1
+; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    slli a1, a1, 1
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl1re16.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -6964,9 +7293,10 @@ define <vscale x 24 x bfloat> @vector_interleave_nxv24bf16_nxv8bf16(<vscale x 8
 ; CHECK-NEXT:    vsseg3e16.v v8, (a0)
 ; CHECK-NEXT:    vl2re16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2re16.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re16.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2re16.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -6988,9 +7318,10 @@ define <vscale x 24 x bfloat> @vector_interleave_nxv24bf16_nxv8bf16(<vscale x 8
 ; ZVBB-NEXT:    vsseg3e16.v v8, (a0)
 ; ZVBB-NEXT:    vl2re16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2re16.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re16.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2re16.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -7015,15 +7346,15 @@ define <vscale x 3 x float> @vector_interleave_nxv3f32_nxv1f32(<vscale x 1 x flo
 ; CHECK-NEXT:    vsseg3e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    vle32.v v9, (a3)
-; CHECK-NEXT:    vle32.v v8, (a0)
-; CHECK-NEXT:    srli a1, a1, 3
-; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v9, a1
-; CHECK-NEXT:    add a2, a3, a2
-; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    add a2, a0, a2
 ; CHECK-NEXT:    vle32.v v9, (a2)
+; CHECK-NEXT:    vle32.v v8, (a0)
+; CHECK-NEXT:    srli a2, a1, 3
+; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v8, v9, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vle32.v v9, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 1
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7041,15 +7372,15 @@ define <vscale x 3 x float> @vector_interleave_nxv3f32_nxv1f32(<vscale x 1 x flo
 ; ZVBB-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    vle32.v v9, (a3)
-; ZVBB-NEXT:    vle32.v v8, (a0)
-; ZVBB-NEXT:    srli a1, a1, 3
-; ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v9, a1
-; ZVBB-NEXT:    add a2, a3, a2
-; ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    add a2, a0, a2
 ; ZVBB-NEXT:    vle32.v v9, (a2)
+; ZVBB-NEXT:    vle32.v v8, (a0)
+; ZVBB-NEXT:    srli a2, a1, 3
+; ZVBB-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v8, v9, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vle32.v v9, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 1
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7072,8 +7403,9 @@ define <vscale x 6 x float> @vector_interleave_nxv6f32_nxv2f32(<vscale x 2 x flo
 ; CHECK-NEXT:    vsseg3e32.v v8, (a0)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl1re32.v v9, (a0)
+; CHECK-NEXT:    add a2, a0, a1
+; CHECK-NEXT:    vl1re32.v v9, (a2)
+; CHECK-NEXT:    slli a1, a1, 1
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl1re32.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -7095,8 +7427,9 @@ define <vscale x 6 x float> @vector_interleave_nxv6f32_nxv2f32(<vscale x 2 x flo
 ; ZVBB-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl1re32.v v9, (a0)
+; ZVBB-NEXT:    add a2, a0, a1
+; ZVBB-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-NEXT:    slli a1, a1, 1
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl1re32.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -7122,9 +7455,10 @@ define <vscale x 12 x float> @vector_interleave_nxv12f32_nxv4f32(<vscale x 4 x f
 ; CHECK-NEXT:    vsseg3e32.v v8, (a0)
 ; CHECK-NEXT:    vl2re32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2re32.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re32.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2re32.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -7146,9 +7480,10 @@ define <vscale x 12 x float> @vector_interleave_nxv12f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-NEXT:    vsseg3e32.v v8, (a0)
 ; ZVBB-NEXT:    vl2re32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2re32.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re32.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2re32.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -7174,8 +7509,9 @@ define <vscale x 3 x double> @vector_interleave_nxv3f64_nxv1f64(<vscale x 1 x do
 ; CHECK-NEXT:    vsseg3e64.v v8, (a0)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl1re64.v v9, (a0)
+; CHECK-NEXT:    add a2, a0, a1
+; CHECK-NEXT:    vl1re64.v v9, (a2)
+; CHECK-NEXT:    slli a1, a1, 1
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl1re64.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -7197,8 +7533,9 @@ define <vscale x 3 x double> @vector_interleave_nxv3f64_nxv1f64(<vscale x 1 x do
 ; ZVBB-NEXT:    vsseg3e64.v v8, (a0)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl1re64.v v9, (a0)
+; ZVBB-NEXT:    add a2, a0, a1
+; ZVBB-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-NEXT:    slli a1, a1, 1
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl1re64.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -7224,9 +7561,10 @@ define <vscale x 6 x double> @vector_interleave_nxv6f64_nxv2f64(<vscale x 2 x do
 ; CHECK-NEXT:    vsseg3e64.v v8, (a0)
 ; CHECK-NEXT:    vl2re64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a0, a0, a1
-; CHECK-NEXT:    vl2re64.v v10, (a0)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re64.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 2
 ; CHECK-NEXT:    add a0, a0, a1
 ; CHECK-NEXT:    vl2re64.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -7248,9 +7586,10 @@ define <vscale x 6 x double> @vector_interleave_nxv6f64_nxv2f64(<vscale x 2 x do
 ; ZVBB-NEXT:    vsseg3e64.v v8, (a0)
 ; ZVBB-NEXT:    vl2re64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a0, a0, a1
-; ZVBB-NEXT:    vl2re64.v v10, (a0)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re64.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 2
 ; ZVBB-NEXT:    add a0, a0, a1
 ; ZVBB-NEXT:    vl2re64.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -7275,12 +7614,12 @@ define <vscale x 8 x half> @vector_interleave_nxv8f16_nxv2f16(<vscale x 2 x half
 ; CHECK-NEXT:    vsseg4e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    add a3, a0, a1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a2, a4, a2
-; CHECK-NEXT:    vle16.v v8, (a2)
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v10, (a3)
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    vle16.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v10, (a2)
 ; CHECK-NEXT:    srli a1, a1, 2
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v8, a1
@@ -7305,12 +7644,12 @@ define <vscale x 8 x half> @vector_interleave_nxv8f16_nxv2f16(<vscale x 2 x half
 ; ZVBB-NEXT:    vsseg4e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    add a3, a0, a1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a2, a4, a2
-; ZVBB-NEXT:    vle16.v v8, (a2)
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v10, (a3)
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    vle16.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v10, (a2)
 ; ZVBB-NEXT:    srli a1, a1, 2
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v8, a1
@@ -7338,13 +7677,14 @@ define <vscale x 16 x half> @vector_interleave_nxv16f16_nxv4f16(<vscale x 4 x ha
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg4e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a1)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    vl1re16.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7361,13 +7701,14 @@ define <vscale x 16 x half> @vector_interleave_nxv16f16_nxv4f16(<vscale x 4 x ha
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg4e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a1)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    vl1re16.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7388,14 +7729,16 @@ define <vscale x 32 x half> @vector_interleave_nxv32f16_nxv8f16(<vscale x 8 x ha
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
 ; CHECK-NEXT:    vsseg4e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl2re16.v v12, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl2re16.v v14, (a1)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re16.v v14, (a2)
 ; CHECK-NEXT:    vl2re16.v v8, (a0)
-; CHECK-NEXT:    vl2re16.v v10, (a2)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl2re16.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7412,14 +7755,16 @@ define <vscale x 32 x half> @vector_interleave_nxv32f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
 ; ZVBB-NEXT:    vsseg4e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl2re16.v v12, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl2re16.v v14, (a1)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re16.v v14, (a2)
 ; ZVBB-NEXT:    vl2re16.v v8, (a0)
-; ZVBB-NEXT:    vl2re16.v v10, (a2)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl2re16.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7441,12 +7786,12 @@ define <vscale x 8 x bfloat> @vector_interleave_nxv8bf16_nxv2bf16(<vscale x 2 x
 ; CHECK-NEXT:    vsseg4e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    add a3, a0, a1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a2, a4, a2
-; CHECK-NEXT:    vle16.v v8, (a2)
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v10, (a3)
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    vle16.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v10, (a2)
 ; CHECK-NEXT:    srli a1, a1, 2
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v8, a1
@@ -7471,12 +7816,12 @@ define <vscale x 8 x bfloat> @vector_interleave_nxv8bf16_nxv2bf16(<vscale x 2 x
 ; ZVBB-NEXT:    vsseg4e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    add a3, a0, a1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a2, a4, a2
-; ZVBB-NEXT:    vle16.v v8, (a2)
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v10, (a3)
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    vle16.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v10, (a2)
 ; ZVBB-NEXT:    srli a1, a1, 2
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v8, a1
@@ -7504,13 +7849,14 @@ define <vscale x 16 x bfloat> @vector_interleave_nxv16bf16_nxv4bf16(<vscale x 4
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg4e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a1)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    vl1re16.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7527,13 +7873,14 @@ define <vscale x 16 x bfloat> @vector_interleave_nxv16bf16_nxv4bf16(<vscale x 4
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg4e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a1)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    vl1re16.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7554,14 +7901,16 @@ define <vscale x 32 x bfloat> @vector_interleave_nxv32bf16_nxv8bf16(<vscale x 8
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
 ; CHECK-NEXT:    vsseg4e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl2re16.v v12, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl2re16.v v14, (a1)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re16.v v14, (a2)
 ; CHECK-NEXT:    vl2re16.v v8, (a0)
-; CHECK-NEXT:    vl2re16.v v10, (a2)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl2re16.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7578,14 +7927,16 @@ define <vscale x 32 x bfloat> @vector_interleave_nxv32bf16_nxv8bf16(<vscale x 8
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
 ; ZVBB-NEXT:    vsseg4e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl2re16.v v12, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl2re16.v v14, (a1)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re16.v v14, (a2)
 ; ZVBB-NEXT:    vl2re16.v v8, (a0)
-; ZVBB-NEXT:    vl2re16.v v10, (a2)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl2re16.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7607,12 +7958,12 @@ define <vscale x 4 x float> @vector_interleave_nxv4f32_nxv1f32(<vscale x 1 x flo
 ; CHECK-NEXT:    vsseg4e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    add a3, a0, a1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a2, a4, a2
-; CHECK-NEXT:    vle32.v v8, (a2)
-; CHECK-NEXT:    vle32.v v9, (a4)
-; CHECK-NEXT:    vle32.v v10, (a3)
+; CHECK-NEXT:    vle32.v v8, (a4)
+; CHECK-NEXT:    vle32.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle32.v v10, (a2)
 ; CHECK-NEXT:    srli a1, a1, 3
 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v8, a1
@@ -7637,12 +7988,12 @@ define <vscale x 4 x float> @vector_interleave_nxv4f32_nxv1f32(<vscale x 1 x flo
 ; ZVBB-NEXT:    vsseg4e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    add a3, a0, a1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a2, a4, a2
-; ZVBB-NEXT:    vle32.v v8, (a2)
-; ZVBB-NEXT:    vle32.v v9, (a4)
-; ZVBB-NEXT:    vle32.v v10, (a3)
+; ZVBB-NEXT:    vle32.v v8, (a4)
+; ZVBB-NEXT:    vle32.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle32.v v10, (a2)
 ; ZVBB-NEXT:    srli a1, a1, 3
 ; ZVBB-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v8, a1
@@ -7670,13 +8021,14 @@ define <vscale x 8 x float> @vector_interleave_nxv8f32_nxv2f32(<vscale x 2 x flo
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vsseg4e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re32.v v10, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re32.v v11, (a1)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re32.v v11, (a2)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
-; CHECK-NEXT:    vl1re32.v v9, (a2)
+; CHECK-NEXT:    vl1re32.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7693,13 +8045,14 @@ define <vscale x 8 x float> @vector_interleave_nxv8f32_nxv2f32(<vscale x 2 x flo
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vsseg4e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re32.v v10, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re32.v v11, (a1)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re32.v v11, (a2)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-NEXT:    vl1re32.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7720,14 +8073,16 @@ define <vscale x 16 x float> @vector_interleave_nxv16f32_nxv4f32(<vscale x 4 x f
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
 ; CHECK-NEXT:    vsseg4e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl2re32.v v12, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl2re32.v v14, (a1)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re32.v v14, (a2)
 ; CHECK-NEXT:    vl2re32.v v8, (a0)
-; CHECK-NEXT:    vl2re32.v v10, (a2)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl2re32.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7744,14 +8099,16 @@ define <vscale x 16 x float> @vector_interleave_nxv16f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
 ; ZVBB-NEXT:    vsseg4e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl2re32.v v12, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl2re32.v v14, (a1)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re32.v v14, (a2)
 ; ZVBB-NEXT:    vl2re32.v v8, (a0)
-; ZVBB-NEXT:    vl2re32.v v10, (a2)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl2re32.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7772,13 +8129,14 @@ define <vscale x 4 x double> @vector_interleave_nxv4f64_nxv1f64(<vscale x 1 x do
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vsseg4e64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re64.v v10, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re64.v v11, (a1)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re64.v v11, (a2)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
-; CHECK-NEXT:    vl1re64.v v9, (a2)
+; CHECK-NEXT:    vl1re64.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7795,13 +8153,14 @@ define <vscale x 4 x double> @vector_interleave_nxv4f64_nxv1f64(<vscale x 1 x do
 ; ZVBB-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; ZVBB-NEXT:    vsseg4e64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re64.v v10, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re64.v v11, (a1)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re64.v v11, (a2)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-NEXT:    vl1re64.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7822,14 +8181,16 @@ define <vscale x 8 x double> @vector_interleave_nxv8f64_nxv2f64(<vscale x 2 x do
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
 ; CHECK-NEXT:    vsseg4e64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 1
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 2
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl2re64.v v12, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl2re64.v v14, (a1)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    add a2, a2, a1
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl2re64.v v14, (a2)
 ; CHECK-NEXT:    vl2re64.v v8, (a0)
-; CHECK-NEXT:    vl2re64.v v10, (a2)
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl2re64.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -7846,14 +8207,16 @@ define <vscale x 8 x double> @vector_interleave_nxv8f64_nxv2f64(<vscale x 2 x do
 ; ZVBB-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
 ; ZVBB-NEXT:    vsseg4e64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 1
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 2
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl2re64.v v12, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl2re64.v v14, (a1)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    add a2, a2, a1
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl2re64.v v14, (a2)
 ; ZVBB-NEXT:    vl2re64.v v8, (a0)
-; ZVBB-NEXT:    vl2re64.v v10, (a2)
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl2re64.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -7876,22 +8239,23 @@ define <vscale x 10 x half> @vector_interleave_nxv10f16_nxv2f16(<vscale x 2 x ha
 ; CHECK-NEXT:    vsseg5e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    add a3, a0, a1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vle16.v v8, (a5)
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    srli a1, a1, 2
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    vle16.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v10, (a2)
+; CHECK-NEXT:    srli a2, a1, 2
 ; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v9, v8, a1
+; CHECK-NEXT:    vslideup.vx v9, v8, a2
 ; CHECK-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v10, a1
-; CHECK-NEXT:    add a2, a5, a2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v8, v10, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 1
 ; CHECK-NEXT:    add a0, a1, a0
@@ -7911,22 +8275,23 @@ define <vscale x 10 x half> @vector_interleave_nxv10f16_nxv2f16(<vscale x 2 x ha
 ; ZVBB-NEXT:    vsseg5e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    add a3, a0, a1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vle16.v v8, (a5)
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    srli a1, a1, 2
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    vle16.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v10, (a2)
+; ZVBB-NEXT:    srli a2, a1, 2
 ; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v9, v8, a1
+; ZVBB-NEXT:    vslideup.vx v9, v8, a2
 ; ZVBB-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v10, a1
-; ZVBB-NEXT:    add a2, a5, a2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v8, v10, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 1
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -7949,15 +8314,17 @@ define <vscale x 20 x half> @vector_interleave_nxv20f16_nxv4f16(<vscale x 4 x ha
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg5e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re16.v v12, (a1)
+; CHECK-NEXT:    vl1re16.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re16.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 2
 ; CHECK-NEXT:    add a0, a1, a0
@@ -7976,15 +8343,17 @@ define <vscale x 20 x half> @vector_interleave_nxv20f16_nxv4f16(<vscale x 4 x ha
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg5e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re16.v v12, (a1)
+; ZVBB-NEXT:    vl1re16.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 2
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -8016,35 +8385,38 @@ define <vscale x 40 x half> @vector_interleave_nxv40f16_nxv8f16(<vscale x 8 x ha
 ; RV32-NEXT:    vmv1r.v v26, v20
 ; RV32-NEXT:    vmv1r.v v23, v10
 ; RV32-NEXT:    vmv1r.v v25, v14
-; RV32-NEXT:    addi a0, sp, 64
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a0, a1, a0
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 64
 ; RV32-NEXT:    vsseg5e16.v v22, (a0)
 ; RV32-NEXT:    vmv1r.v v18, v11
 ; RV32-NEXT:    vmv1r.v v20, v15
-; RV32-NEXT:    csrr a1, vlenb
-; RV32-NEXT:    slli a2, a1, 2
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a1, sp, a1
-; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsseg5e16.v v17, (a1)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a3, a0, a2
-; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    slli a3, a2, 1
+; RV32-NEXT:    add a4, a0, a3
 ; RV32-NEXT:    vl1re16.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re16.v v11, (a4)
+; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    add a5, a0, a4
+; RV32-NEXT:    vl1re16.v v11, (a5)
 ; RV32-NEXT:    vl1re16.v v8, (a0)
-; RV32-NEXT:    vl1re16.v v9, (a3)
-; RV32-NEXT:    add a0, a1, a2
-; RV32-NEXT:    vl1re16.v v14, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re16.v v15, (a0)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re16.v v12, (a4)
+; RV32-NEXT:    add a5, a0, a2
+; RV32-NEXT:    vl1re16.v v9, (a5)
+; RV32-NEXT:    add a5, a1, a2
+; RV32-NEXT:    vl1re16.v v14, (a5)
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re16.v v15, (a3)
+; RV32-NEXT:    slli a3, a2, 2
+; RV32-NEXT:    add a0, a0, a3
+; RV32-NEXT:    vl1re16.v v12, (a0)
 ; RV32-NEXT:    vl1re16.v v13, (a1)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re16.v v16, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re16.v v17, (a0)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re16.v v16, (a4)
+; RV32-NEXT:    add a1, a1, a3
+; RV32-NEXT:    vl1re16.v v17, (a1)
 ; RV32-NEXT:    slli a2, a2, 3
 ; RV32-NEXT:    csrr a0, vlenb
 ; RV32-NEXT:    li a1, 10
@@ -8082,35 +8454,38 @@ define <vscale x 40 x half> @vector_interleave_nxv40f16_nxv8f16(<vscale x 8 x ha
 ; RV64-NEXT:    vmv1r.v v26, v20
 ; RV64-NEXT:    vmv1r.v v23, v10
 ; RV64-NEXT:    vmv1r.v v25, v14
-; RV64-NEXT:    addi a0, sp, 64
+; RV64-NEXT:    csrr a0, vlenb
+; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a0, a1, a0
+; RV64-NEXT:    add a0, sp, a0
+; RV64-NEXT:    addi a0, a0, 64
 ; RV64-NEXT:    vsseg5e16.v v22, (a0)
 ; RV64-NEXT:    vmv1r.v v18, v11
 ; RV64-NEXT:    vmv1r.v v20, v15
-; RV64-NEXT:    csrr a1, vlenb
-; RV64-NEXT:    slli a2, a1, 2
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    add a1, sp, a1
-; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    addi a1, sp, 64
 ; RV64-NEXT:    vsseg5e16.v v17, (a1)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a3, a0, a2
-; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    slli a3, a2, 1
+; RV64-NEXT:    add a4, a0, a3
 ; RV64-NEXT:    vl1re16.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re16.v v11, (a4)
+; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    add a5, a0, a4
+; RV64-NEXT:    vl1re16.v v11, (a5)
 ; RV64-NEXT:    vl1re16.v v8, (a0)
-; RV64-NEXT:    vl1re16.v v9, (a3)
-; RV64-NEXT:    add a0, a1, a2
-; RV64-NEXT:    vl1re16.v v14, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re16.v v15, (a0)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re16.v v12, (a4)
+; RV64-NEXT:    add a5, a0, a2
+; RV64-NEXT:    vl1re16.v v9, (a5)
+; RV64-NEXT:    add a5, a1, a2
+; RV64-NEXT:    vl1re16.v v14, (a5)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re16.v v15, (a3)
+; RV64-NEXT:    slli a3, a2, 2
+; RV64-NEXT:    add a0, a0, a3
+; RV64-NEXT:    vl1re16.v v12, (a0)
 ; RV64-NEXT:    vl1re16.v v13, (a1)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re16.v v16, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re16.v v17, (a0)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re16.v v16, (a4)
+; RV64-NEXT:    add a1, a1, a3
+; RV64-NEXT:    vl1re16.v v17, (a1)
 ; RV64-NEXT:    slli a2, a2, 3
 ; RV64-NEXT:    csrr a0, vlenb
 ; RV64-NEXT:    li a1, 10
@@ -8148,35 +8523,38 @@ define <vscale x 40 x half> @vector_interleave_nxv40f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV32-NEXT:    addi a0, sp, 64
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 64
 ; ZVBB-RV32-NEXT:    vsseg5e16.v v22, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV32-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV32-NEXT:    csrr a1, vlenb
-; ZVBB-RV32-NEXT:    slli a2, a1, 2
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    add a1, sp, a1
-; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg5e16.v v17, (a1)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a3, a0, a2
-; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    slli a3, a2, 1
+; ZVBB-RV32-NEXT:    add a4, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v11, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    add a5, a0, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v11, (a5)
 ; ZVBB-RV32-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a1, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v14, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a2
+; ZVBB-RV32-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV32-NEXT:    add a5, a1, a2
+; ZVBB-RV32-NEXT:    vl1re16.v v14, (a5)
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a2, 2
+; ZVBB-RV32-NEXT:    add a0, a0, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-RV32-NEXT:    vl1re16.v v13, (a1)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v16, (a4)
+; ZVBB-RV32-NEXT:    add a1, a1, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v17, (a1)
 ; ZVBB-RV32-NEXT:    slli a2, a2, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
 ; ZVBB-RV32-NEXT:    li a1, 10
@@ -8214,35 +8592,38 @@ define <vscale x 40 x half> @vector_interleave_nxv40f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV64-NEXT:    addi a0, sp, 64
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 64
 ; ZVBB-RV64-NEXT:    vsseg5e16.v v22, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV64-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV64-NEXT:    csrr a1, vlenb
-; ZVBB-RV64-NEXT:    slli a2, a1, 2
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    add a1, sp, a1
-; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg5e16.v v17, (a1)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a3, a0, a2
-; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    slli a3, a2, 1
+; ZVBB-RV64-NEXT:    add a4, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v11, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    add a5, a0, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v11, (a5)
 ; ZVBB-RV64-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a1, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v14, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a2
+; ZVBB-RV64-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV64-NEXT:    add a5, a1, a2
+; ZVBB-RV64-NEXT:    vl1re16.v v14, (a5)
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a2, 2
+; ZVBB-RV64-NEXT:    add a0, a0, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-RV64-NEXT:    vl1re16.v v13, (a1)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v16, (a4)
+; ZVBB-RV64-NEXT:    add a1, a1, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v17, (a1)
 ; ZVBB-RV64-NEXT:    slli a2, a2, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
 ; ZVBB-RV64-NEXT:    li a1, 10
@@ -8280,35 +8661,38 @@ define <vscale x 40 x half> @vector_interleave_nxv40f16_nxv8f16(<vscale x 8 x ha
 ; ZVZIP-NEXT:    vmv1r.v v26, v20
 ; ZVZIP-NEXT:    vmv1r.v v23, v10
 ; ZVZIP-NEXT:    vmv1r.v v25, v14
-; ZVZIP-NEXT:    addi a0, sp, 64
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a0, a1, a0
+; ZVZIP-NEXT:    add a0, sp, a0
+; ZVZIP-NEXT:    addi a0, a0, 64
 ; ZVZIP-NEXT:    vsseg5e16.v v22, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v18, v11
 ; ZVZIP-NEXT:    vmv1r.v v20, v15
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    slli a2, a1, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    add a1, sp, a1
-; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    addi a1, sp, 64
 ; ZVZIP-NEXT:    vsseg5e16.v v17, (a1)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a3, a0, a2
-; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    slli a3, a2, 1
+; ZVZIP-NEXT:    add a4, a0, a3
 ; ZVZIP-NEXT:    vl1re16.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re16.v v11, (a4)
+; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    add a5, a0, a4
+; ZVZIP-NEXT:    vl1re16.v v11, (a5)
 ; ZVZIP-NEXT:    vl1re16.v v8, (a0)
-; ZVZIP-NEXT:    vl1re16.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a1, a2
-; ZVZIP-NEXT:    vl1re16.v v14, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re16.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re16.v v12, (a4)
+; ZVZIP-NEXT:    add a5, a0, a2
+; ZVZIP-NEXT:    vl1re16.v v9, (a5)
+; ZVZIP-NEXT:    add a5, a1, a2
+; ZVZIP-NEXT:    vl1re16.v v14, (a5)
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re16.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a2, 2
+; ZVZIP-NEXT:    add a0, a0, a3
+; ZVZIP-NEXT:    vl1re16.v v12, (a0)
 ; ZVZIP-NEXT:    vl1re16.v v13, (a1)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re16.v v16, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re16.v v17, (a0)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re16.v v16, (a4)
+; ZVZIP-NEXT:    add a1, a1, a3
+; ZVZIP-NEXT:    vl1re16.v v17, (a1)
 ; ZVZIP-NEXT:    slli a2, a2, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
 ; ZVZIP-NEXT:    li a1, 10
@@ -8342,22 +8726,23 @@ define <vscale x 10 x bfloat> @vector_interleave_nxv10bf16_nxv2bf16(<vscale x 2
 ; CHECK-NEXT:    vsseg5e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    add a3, a0, a1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vle16.v v8, (a5)
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v10, (a3)
-; CHECK-NEXT:    srli a1, a1, 2
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    vle16.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v10, (a2)
+; CHECK-NEXT:    srli a2, a1, 2
 ; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v9, v8, a1
+; CHECK-NEXT:    vslideup.vx v9, v8, a2
 ; CHECK-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; CHECK-NEXT:    vle16.v v8, (a0)
-; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v10, a1
-; CHECK-NEXT:    add a2, a5, a2
-; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v8, v10, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 1
 ; CHECK-NEXT:    add a0, a1, a0
@@ -8377,22 +8762,23 @@ define <vscale x 10 x bfloat> @vector_interleave_nxv10bf16_nxv2bf16(<vscale x 2
 ; ZVBB-NEXT:    vsseg5e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    add a3, a0, a1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vle16.v v8, (a5)
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v10, (a3)
-; ZVBB-NEXT:    srli a1, a1, 2
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    vle16.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v10, (a2)
+; ZVBB-NEXT:    srli a2, a1, 2
 ; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v9, v8, a1
+; ZVBB-NEXT:    vslideup.vx v9, v8, a2
 ; ZVBB-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vle16.v v8, (a0)
-; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v10, a1
-; ZVBB-NEXT:    add a2, a5, a2
-; ZVBB-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v8, v10, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 1
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -8415,15 +8801,17 @@ define <vscale x 20 x bfloat> @vector_interleave_nxv20bf16_nxv4bf16(<vscale x 4
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg5e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re16.v v12, (a1)
+; CHECK-NEXT:    vl1re16.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re16.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 2
 ; CHECK-NEXT:    add a0, a1, a0
@@ -8442,15 +8830,17 @@ define <vscale x 20 x bfloat> @vector_interleave_nxv20bf16_nxv4bf16(<vscale x 4
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg5e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re16.v v12, (a1)
+; ZVBB-NEXT:    vl1re16.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 2
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -8482,35 +8872,38 @@ define <vscale x 40 x bfloat> @vector_interleave_nxv40bf16_nxv8bf16(<vscale x 8
 ; RV32-NEXT:    vmv1r.v v26, v20
 ; RV32-NEXT:    vmv1r.v v23, v10
 ; RV32-NEXT:    vmv1r.v v25, v14
-; RV32-NEXT:    addi a0, sp, 64
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a0, a1, a0
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 64
 ; RV32-NEXT:    vsseg5e16.v v22, (a0)
 ; RV32-NEXT:    vmv1r.v v18, v11
 ; RV32-NEXT:    vmv1r.v v20, v15
-; RV32-NEXT:    csrr a1, vlenb
-; RV32-NEXT:    slli a2, a1, 2
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a1, sp, a1
-; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsseg5e16.v v17, (a1)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a3, a0, a2
-; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    slli a3, a2, 1
+; RV32-NEXT:    add a4, a0, a3
 ; RV32-NEXT:    vl1re16.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re16.v v11, (a4)
+; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    add a5, a0, a4
+; RV32-NEXT:    vl1re16.v v11, (a5)
 ; RV32-NEXT:    vl1re16.v v8, (a0)
-; RV32-NEXT:    vl1re16.v v9, (a3)
-; RV32-NEXT:    add a0, a1, a2
-; RV32-NEXT:    vl1re16.v v14, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re16.v v15, (a0)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re16.v v12, (a4)
+; RV32-NEXT:    add a5, a0, a2
+; RV32-NEXT:    vl1re16.v v9, (a5)
+; RV32-NEXT:    add a5, a1, a2
+; RV32-NEXT:    vl1re16.v v14, (a5)
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re16.v v15, (a3)
+; RV32-NEXT:    slli a3, a2, 2
+; RV32-NEXT:    add a0, a0, a3
+; RV32-NEXT:    vl1re16.v v12, (a0)
 ; RV32-NEXT:    vl1re16.v v13, (a1)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re16.v v16, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re16.v v17, (a0)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re16.v v16, (a4)
+; RV32-NEXT:    add a1, a1, a3
+; RV32-NEXT:    vl1re16.v v17, (a1)
 ; RV32-NEXT:    slli a2, a2, 3
 ; RV32-NEXT:    csrr a0, vlenb
 ; RV32-NEXT:    li a1, 10
@@ -8548,35 +8941,38 @@ define <vscale x 40 x bfloat> @vector_interleave_nxv40bf16_nxv8bf16(<vscale x 8
 ; RV64-NEXT:    vmv1r.v v26, v20
 ; RV64-NEXT:    vmv1r.v v23, v10
 ; RV64-NEXT:    vmv1r.v v25, v14
-; RV64-NEXT:    addi a0, sp, 64
+; RV64-NEXT:    csrr a0, vlenb
+; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a0, a1, a0
+; RV64-NEXT:    add a0, sp, a0
+; RV64-NEXT:    addi a0, a0, 64
 ; RV64-NEXT:    vsseg5e16.v v22, (a0)
 ; RV64-NEXT:    vmv1r.v v18, v11
 ; RV64-NEXT:    vmv1r.v v20, v15
-; RV64-NEXT:    csrr a1, vlenb
-; RV64-NEXT:    slli a2, a1, 2
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    add a1, sp, a1
-; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    addi a1, sp, 64
 ; RV64-NEXT:    vsseg5e16.v v17, (a1)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a3, a0, a2
-; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    slli a3, a2, 1
+; RV64-NEXT:    add a4, a0, a3
 ; RV64-NEXT:    vl1re16.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re16.v v11, (a4)
+; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    add a5, a0, a4
+; RV64-NEXT:    vl1re16.v v11, (a5)
 ; RV64-NEXT:    vl1re16.v v8, (a0)
-; RV64-NEXT:    vl1re16.v v9, (a3)
-; RV64-NEXT:    add a0, a1, a2
-; RV64-NEXT:    vl1re16.v v14, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re16.v v15, (a0)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re16.v v12, (a4)
+; RV64-NEXT:    add a5, a0, a2
+; RV64-NEXT:    vl1re16.v v9, (a5)
+; RV64-NEXT:    add a5, a1, a2
+; RV64-NEXT:    vl1re16.v v14, (a5)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re16.v v15, (a3)
+; RV64-NEXT:    slli a3, a2, 2
+; RV64-NEXT:    add a0, a0, a3
+; RV64-NEXT:    vl1re16.v v12, (a0)
 ; RV64-NEXT:    vl1re16.v v13, (a1)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re16.v v16, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re16.v v17, (a0)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re16.v v16, (a4)
+; RV64-NEXT:    add a1, a1, a3
+; RV64-NEXT:    vl1re16.v v17, (a1)
 ; RV64-NEXT:    slli a2, a2, 3
 ; RV64-NEXT:    csrr a0, vlenb
 ; RV64-NEXT:    li a1, 10
@@ -8614,35 +9010,38 @@ define <vscale x 40 x bfloat> @vector_interleave_nxv40bf16_nxv8bf16(<vscale x 8
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV32-NEXT:    addi a0, sp, 64
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 64
 ; ZVBB-RV32-NEXT:    vsseg5e16.v v22, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV32-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV32-NEXT:    csrr a1, vlenb
-; ZVBB-RV32-NEXT:    slli a2, a1, 2
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    add a1, sp, a1
-; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg5e16.v v17, (a1)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a3, a0, a2
-; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    slli a3, a2, 1
+; ZVBB-RV32-NEXT:    add a4, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v11, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    add a5, a0, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v11, (a5)
 ; ZVBB-RV32-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a1, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v14, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a2
+; ZVBB-RV32-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV32-NEXT:    add a5, a1, a2
+; ZVBB-RV32-NEXT:    vl1re16.v v14, (a5)
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a2, 2
+; ZVBB-RV32-NEXT:    add a0, a0, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-RV32-NEXT:    vl1re16.v v13, (a1)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v16, (a4)
+; ZVBB-RV32-NEXT:    add a1, a1, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v17, (a1)
 ; ZVBB-RV32-NEXT:    slli a2, a2, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
 ; ZVBB-RV32-NEXT:    li a1, 10
@@ -8680,35 +9079,38 @@ define <vscale x 40 x bfloat> @vector_interleave_nxv40bf16_nxv8bf16(<vscale x 8
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV64-NEXT:    addi a0, sp, 64
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 64
 ; ZVBB-RV64-NEXT:    vsseg5e16.v v22, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV64-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV64-NEXT:    csrr a1, vlenb
-; ZVBB-RV64-NEXT:    slli a2, a1, 2
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    add a1, sp, a1
-; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg5e16.v v17, (a1)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a3, a0, a2
-; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    slli a3, a2, 1
+; ZVBB-RV64-NEXT:    add a4, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v11, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    add a5, a0, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v11, (a5)
 ; ZVBB-RV64-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a1, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v14, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a2
+; ZVBB-RV64-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV64-NEXT:    add a5, a1, a2
+; ZVBB-RV64-NEXT:    vl1re16.v v14, (a5)
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a2, 2
+; ZVBB-RV64-NEXT:    add a0, a0, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-RV64-NEXT:    vl1re16.v v13, (a1)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v16, (a4)
+; ZVBB-RV64-NEXT:    add a1, a1, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v17, (a1)
 ; ZVBB-RV64-NEXT:    slli a2, a2, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
 ; ZVBB-RV64-NEXT:    li a1, 10
@@ -8746,35 +9148,38 @@ define <vscale x 40 x bfloat> @vector_interleave_nxv40bf16_nxv8bf16(<vscale x 8
 ; ZVZIP-NEXT:    vmv1r.v v26, v20
 ; ZVZIP-NEXT:    vmv1r.v v23, v10
 ; ZVZIP-NEXT:    vmv1r.v v25, v14
-; ZVZIP-NEXT:    addi a0, sp, 64
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a0, a1, a0
+; ZVZIP-NEXT:    add a0, sp, a0
+; ZVZIP-NEXT:    addi a0, a0, 64
 ; ZVZIP-NEXT:    vsseg5e16.v v22, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v18, v11
 ; ZVZIP-NEXT:    vmv1r.v v20, v15
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    slli a2, a1, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    add a1, sp, a1
-; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    addi a1, sp, 64
 ; ZVZIP-NEXT:    vsseg5e16.v v17, (a1)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a3, a0, a2
-; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    slli a3, a2, 1
+; ZVZIP-NEXT:    add a4, a0, a3
 ; ZVZIP-NEXT:    vl1re16.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re16.v v11, (a4)
+; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    add a5, a0, a4
+; ZVZIP-NEXT:    vl1re16.v v11, (a5)
 ; ZVZIP-NEXT:    vl1re16.v v8, (a0)
-; ZVZIP-NEXT:    vl1re16.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a1, a2
-; ZVZIP-NEXT:    vl1re16.v v14, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re16.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re16.v v12, (a4)
+; ZVZIP-NEXT:    add a5, a0, a2
+; ZVZIP-NEXT:    vl1re16.v v9, (a5)
+; ZVZIP-NEXT:    add a5, a1, a2
+; ZVZIP-NEXT:    vl1re16.v v14, (a5)
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re16.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a2, 2
+; ZVZIP-NEXT:    add a0, a0, a3
+; ZVZIP-NEXT:    vl1re16.v v12, (a0)
 ; ZVZIP-NEXT:    vl1re16.v v13, (a1)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re16.v v16, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re16.v v17, (a0)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re16.v v16, (a4)
+; ZVZIP-NEXT:    add a1, a1, a3
+; ZVZIP-NEXT:    vl1re16.v v17, (a1)
 ; ZVZIP-NEXT:    slli a2, a2, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
 ; ZVZIP-NEXT:    li a1, 10
@@ -8808,22 +9213,23 @@ define <vscale x 5 x float> @vector_interleave_nxv5f32_nxv1f32(<vscale x 1 x flo
 ; CHECK-NEXT:    vsseg5e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    add a3, a0, a1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vle32.v v8, (a5)
-; CHECK-NEXT:    vle32.v v9, (a4)
-; CHECK-NEXT:    vle32.v v10, (a3)
-; CHECK-NEXT:    srli a1, a1, 3
+; CHECK-NEXT:    vle32.v v8, (a4)
+; CHECK-NEXT:    vle32.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle32.v v10, (a2)
+; CHECK-NEXT:    srli a2, a1, 3
 ; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v9, v8, a1
+; CHECK-NEXT:    vslideup.vx v9, v8, a2
 ; CHECK-NEXT:    vsetvli a3, zero, e32, mf2, ta, ma
 ; CHECK-NEXT:    vle32.v v8, (a0)
-; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v10, a1
-; CHECK-NEXT:    add a2, a5, a2
-; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v10, (a2)
+; CHECK-NEXT:    slli a1, a1, 1
+; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v8, v10, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vle32.v v10, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 1
 ; CHECK-NEXT:    add a0, a1, a0
@@ -8843,22 +9249,23 @@ define <vscale x 5 x float> @vector_interleave_nxv5f32_nxv1f32(<vscale x 1 x flo
 ; ZVBB-NEXT:    vsseg5e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    add a3, a0, a1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vle32.v v8, (a5)
-; ZVBB-NEXT:    vle32.v v9, (a4)
-; ZVBB-NEXT:    vle32.v v10, (a3)
-; ZVBB-NEXT:    srli a1, a1, 3
+; ZVBB-NEXT:    vle32.v v8, (a4)
+; ZVBB-NEXT:    vle32.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle32.v v10, (a2)
+; ZVBB-NEXT:    srli a2, a1, 3
 ; ZVBB-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v9, v8, a1
+; ZVBB-NEXT:    vslideup.vx v9, v8, a2
 ; ZVBB-NEXT:    vsetvli a3, zero, e32, mf2, ta, ma
 ; ZVBB-NEXT:    vle32.v v8, (a0)
-; ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v10, a1
-; ZVBB-NEXT:    add a2, a5, a2
-; ZVBB-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v10, (a2)
+; ZVBB-NEXT:    slli a1, a1, 1
+; ZVBB-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v8, v10, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vle32.v v10, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 1
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -8881,15 +9288,17 @@ define <vscale x 10 x float> @vector_interleave_nxv10f32_nxv2f32(<vscale x 2 x f
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vsseg5e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re32.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re32.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re32.v v11, (a2)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
-; CHECK-NEXT:    vl1re32.v v9, (a2)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re32.v v12, (a1)
+; CHECK-NEXT:    vl1re32.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re32.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 2
 ; CHECK-NEXT:    add a0, a1, a0
@@ -8908,15 +9317,17 @@ define <vscale x 10 x float> @vector_interleave_nxv10f32_nxv2f32(<vscale x 2 x f
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vsseg5e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re32.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re32.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re32.v v11, (a2)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-NEXT:    vl1re32.v v9, (a2)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re32.v v12, (a1)
+; ZVBB-NEXT:    vl1re32.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re32.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 2
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -8948,35 +9359,38 @@ define <vscale x 20 x float> @vector_interleave_nxv20f32_nxv4f32(<vscale x 4 x f
 ; RV32-NEXT:    vmv1r.v v26, v20
 ; RV32-NEXT:    vmv1r.v v23, v10
 ; RV32-NEXT:    vmv1r.v v25, v14
-; RV32-NEXT:    addi a0, sp, 64
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a0, a1, a0
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 64
 ; RV32-NEXT:    vsseg5e32.v v22, (a0)
 ; RV32-NEXT:    vmv1r.v v18, v11
 ; RV32-NEXT:    vmv1r.v v20, v15
-; RV32-NEXT:    csrr a1, vlenb
-; RV32-NEXT:    slli a2, a1, 2
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a1, sp, a1
-; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsseg5e32.v v17, (a1)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a3, a0, a2
-; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    slli a3, a2, 1
+; RV32-NEXT:    add a4, a0, a3
 ; RV32-NEXT:    vl1re32.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re32.v v11, (a4)
+; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    add a5, a0, a4
+; RV32-NEXT:    vl1re32.v v11, (a5)
 ; RV32-NEXT:    vl1re32.v v8, (a0)
-; RV32-NEXT:    vl1re32.v v9, (a3)
-; RV32-NEXT:    add a0, a1, a2
-; RV32-NEXT:    vl1re32.v v14, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re32.v v15, (a0)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re32.v v12, (a4)
+; RV32-NEXT:    add a5, a0, a2
+; RV32-NEXT:    vl1re32.v v9, (a5)
+; RV32-NEXT:    add a5, a1, a2
+; RV32-NEXT:    vl1re32.v v14, (a5)
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re32.v v15, (a3)
+; RV32-NEXT:    slli a3, a2, 2
+; RV32-NEXT:    add a0, a0, a3
+; RV32-NEXT:    vl1re32.v v12, (a0)
 ; RV32-NEXT:    vl1re32.v v13, (a1)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re32.v v16, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re32.v v17, (a0)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re32.v v16, (a4)
+; RV32-NEXT:    add a1, a1, a3
+; RV32-NEXT:    vl1re32.v v17, (a1)
 ; RV32-NEXT:    slli a2, a2, 3
 ; RV32-NEXT:    csrr a0, vlenb
 ; RV32-NEXT:    li a1, 10
@@ -9014,35 +9428,38 @@ define <vscale x 20 x float> @vector_interleave_nxv20f32_nxv4f32(<vscale x 4 x f
 ; RV64-NEXT:    vmv1r.v v26, v20
 ; RV64-NEXT:    vmv1r.v v23, v10
 ; RV64-NEXT:    vmv1r.v v25, v14
-; RV64-NEXT:    addi a0, sp, 64
+; RV64-NEXT:    csrr a0, vlenb
+; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a0, a1, a0
+; RV64-NEXT:    add a0, sp, a0
+; RV64-NEXT:    addi a0, a0, 64
 ; RV64-NEXT:    vsseg5e32.v v22, (a0)
 ; RV64-NEXT:    vmv1r.v v18, v11
 ; RV64-NEXT:    vmv1r.v v20, v15
-; RV64-NEXT:    csrr a1, vlenb
-; RV64-NEXT:    slli a2, a1, 2
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    add a1, sp, a1
-; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    addi a1, sp, 64
 ; RV64-NEXT:    vsseg5e32.v v17, (a1)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a3, a0, a2
-; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    slli a3, a2, 1
+; RV64-NEXT:    add a4, a0, a3
 ; RV64-NEXT:    vl1re32.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re32.v v11, (a4)
+; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    add a5, a0, a4
+; RV64-NEXT:    vl1re32.v v11, (a5)
 ; RV64-NEXT:    vl1re32.v v8, (a0)
-; RV64-NEXT:    vl1re32.v v9, (a3)
-; RV64-NEXT:    add a0, a1, a2
-; RV64-NEXT:    vl1re32.v v14, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re32.v v15, (a0)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re32.v v12, (a4)
+; RV64-NEXT:    add a5, a0, a2
+; RV64-NEXT:    vl1re32.v v9, (a5)
+; RV64-NEXT:    add a5, a1, a2
+; RV64-NEXT:    vl1re32.v v14, (a5)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re32.v v15, (a3)
+; RV64-NEXT:    slli a3, a2, 2
+; RV64-NEXT:    add a0, a0, a3
+; RV64-NEXT:    vl1re32.v v12, (a0)
 ; RV64-NEXT:    vl1re32.v v13, (a1)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re32.v v16, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re32.v v17, (a0)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re32.v v16, (a4)
+; RV64-NEXT:    add a1, a1, a3
+; RV64-NEXT:    vl1re32.v v17, (a1)
 ; RV64-NEXT:    slli a2, a2, 3
 ; RV64-NEXT:    csrr a0, vlenb
 ; RV64-NEXT:    li a1, 10
@@ -9080,35 +9497,38 @@ define <vscale x 20 x float> @vector_interleave_nxv20f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV32-NEXT:    addi a0, sp, 64
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 64
 ; ZVBB-RV32-NEXT:    vsseg5e32.v v22, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV32-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV32-NEXT:    csrr a1, vlenb
-; ZVBB-RV32-NEXT:    slli a2, a1, 2
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    add a1, sp, a1
-; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg5e32.v v17, (a1)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a3, a0, a2
-; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    slli a3, a2, 1
+; ZVBB-RV32-NEXT:    add a4, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v11, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    add a5, a0, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v11, (a5)
 ; ZVBB-RV32-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a1, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v14, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a2
+; ZVBB-RV32-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV32-NEXT:    add a5, a1, a2
+; ZVBB-RV32-NEXT:    vl1re32.v v14, (a5)
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a2, 2
+; ZVBB-RV32-NEXT:    add a0, a0, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v12, (a0)
 ; ZVBB-RV32-NEXT:    vl1re32.v v13, (a1)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v16, (a4)
+; ZVBB-RV32-NEXT:    add a1, a1, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v17, (a1)
 ; ZVBB-RV32-NEXT:    slli a2, a2, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
 ; ZVBB-RV32-NEXT:    li a1, 10
@@ -9146,35 +9566,38 @@ define <vscale x 20 x float> @vector_interleave_nxv20f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV64-NEXT:    addi a0, sp, 64
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 64
 ; ZVBB-RV64-NEXT:    vsseg5e32.v v22, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV64-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV64-NEXT:    csrr a1, vlenb
-; ZVBB-RV64-NEXT:    slli a2, a1, 2
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    add a1, sp, a1
-; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg5e32.v v17, (a1)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a3, a0, a2
-; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    slli a3, a2, 1
+; ZVBB-RV64-NEXT:    add a4, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v11, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    add a5, a0, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v11, (a5)
 ; ZVBB-RV64-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a1, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v14, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a2
+; ZVBB-RV64-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV64-NEXT:    add a5, a1, a2
+; ZVBB-RV64-NEXT:    vl1re32.v v14, (a5)
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a2, 2
+; ZVBB-RV64-NEXT:    add a0, a0, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v12, (a0)
 ; ZVBB-RV64-NEXT:    vl1re32.v v13, (a1)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v16, (a4)
+; ZVBB-RV64-NEXT:    add a1, a1, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v17, (a1)
 ; ZVBB-RV64-NEXT:    slli a2, a2, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
 ; ZVBB-RV64-NEXT:    li a1, 10
@@ -9212,35 +9635,38 @@ define <vscale x 20 x float> @vector_interleave_nxv20f32_nxv4f32(<vscale x 4 x f
 ; ZVZIP-NEXT:    vmv1r.v v26, v20
 ; ZVZIP-NEXT:    vmv1r.v v23, v10
 ; ZVZIP-NEXT:    vmv1r.v v25, v14
-; ZVZIP-NEXT:    addi a0, sp, 64
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a0, a1, a0
+; ZVZIP-NEXT:    add a0, sp, a0
+; ZVZIP-NEXT:    addi a0, a0, 64
 ; ZVZIP-NEXT:    vsseg5e32.v v22, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v18, v11
 ; ZVZIP-NEXT:    vmv1r.v v20, v15
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    slli a2, a1, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    add a1, sp, a1
-; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    addi a1, sp, 64
 ; ZVZIP-NEXT:    vsseg5e32.v v17, (a1)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a3, a0, a2
-; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    slli a3, a2, 1
+; ZVZIP-NEXT:    add a4, a0, a3
 ; ZVZIP-NEXT:    vl1re32.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re32.v v11, (a4)
+; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    add a5, a0, a4
+; ZVZIP-NEXT:    vl1re32.v v11, (a5)
 ; ZVZIP-NEXT:    vl1re32.v v8, (a0)
-; ZVZIP-NEXT:    vl1re32.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a1, a2
-; ZVZIP-NEXT:    vl1re32.v v14, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re32.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re32.v v12, (a4)
+; ZVZIP-NEXT:    add a5, a0, a2
+; ZVZIP-NEXT:    vl1re32.v v9, (a5)
+; ZVZIP-NEXT:    add a5, a1, a2
+; ZVZIP-NEXT:    vl1re32.v v14, (a5)
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re32.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a2, 2
+; ZVZIP-NEXT:    add a0, a0, a3
+; ZVZIP-NEXT:    vl1re32.v v12, (a0)
 ; ZVZIP-NEXT:    vl1re32.v v13, (a1)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re32.v v16, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re32.v v17, (a0)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re32.v v16, (a4)
+; ZVZIP-NEXT:    add a1, a1, a3
+; ZVZIP-NEXT:    vl1re32.v v17, (a1)
 ; ZVZIP-NEXT:    slli a2, a2, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
 ; ZVZIP-NEXT:    li a1, 10
@@ -9273,15 +9699,17 @@ define <vscale x 5 x double> @vector_interleave_nxv5f64_nxv1f64(<vscale x 1 x do
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vsseg5e64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re64.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re64.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re64.v v11, (a2)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
-; CHECK-NEXT:    vl1re64.v v9, (a2)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re64.v v12, (a1)
+; CHECK-NEXT:    vl1re64.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re64.v v12, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 2
 ; CHECK-NEXT:    add a0, a1, a0
@@ -9300,15 +9728,17 @@ define <vscale x 5 x double> @vector_interleave_nxv5f64_nxv1f64(<vscale x 1 x do
 ; ZVBB-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; ZVBB-NEXT:    vsseg5e64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re64.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re64.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re64.v v11, (a2)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-NEXT:    vl1re64.v v9, (a2)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re64.v v12, (a1)
+; ZVBB-NEXT:    vl1re64.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re64.v v12, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 2
 ; ZVBB-NEXT:    add a0, a1, a0
@@ -9340,35 +9770,38 @@ define <vscale x 10 x double> @vector_interleave_nxv10f64_nxv2f64(<vscale x 2 x
 ; RV32-NEXT:    vmv1r.v v26, v20
 ; RV32-NEXT:    vmv1r.v v23, v10
 ; RV32-NEXT:    vmv1r.v v25, v14
-; RV32-NEXT:    addi a0, sp, 64
+; RV32-NEXT:    csrr a0, vlenb
+; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a0, a1, a0
+; RV32-NEXT:    add a0, sp, a0
+; RV32-NEXT:    addi a0, a0, 64
 ; RV32-NEXT:    vsseg5e64.v v22, (a0)
 ; RV32-NEXT:    vmv1r.v v18, v11
 ; RV32-NEXT:    vmv1r.v v20, v15
-; RV32-NEXT:    csrr a1, vlenb
-; RV32-NEXT:    slli a2, a1, 2
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a1, sp, a1
-; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    addi a1, sp, 64
 ; RV32-NEXT:    vsseg5e64.v v17, (a1)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a3, a0, a2
-; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    slli a3, a2, 1
+; RV32-NEXT:    add a4, a0, a3
 ; RV32-NEXT:    vl1re64.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re64.v v11, (a4)
+; RV32-NEXT:    add a4, a3, a2
+; RV32-NEXT:    add a5, a0, a4
+; RV32-NEXT:    vl1re64.v v11, (a5)
 ; RV32-NEXT:    vl1re64.v v8, (a0)
-; RV32-NEXT:    vl1re64.v v9, (a3)
-; RV32-NEXT:    add a0, a1, a2
-; RV32-NEXT:    vl1re64.v v14, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re64.v v15, (a0)
-; RV32-NEXT:    add a4, a4, a2
-; RV32-NEXT:    vl1re64.v v12, (a4)
+; RV32-NEXT:    add a5, a0, a2
+; RV32-NEXT:    vl1re64.v v9, (a5)
+; RV32-NEXT:    add a5, a1, a2
+; RV32-NEXT:    vl1re64.v v14, (a5)
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re64.v v15, (a3)
+; RV32-NEXT:    slli a3, a2, 2
+; RV32-NEXT:    add a0, a0, a3
+; RV32-NEXT:    vl1re64.v v12, (a0)
 ; RV32-NEXT:    vl1re64.v v13, (a1)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re64.v v16, (a0)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    vl1re64.v v17, (a0)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re64.v v16, (a4)
+; RV32-NEXT:    add a1, a1, a3
+; RV32-NEXT:    vl1re64.v v17, (a1)
 ; RV32-NEXT:    slli a2, a2, 3
 ; RV32-NEXT:    csrr a0, vlenb
 ; RV32-NEXT:    li a1, 10
@@ -9406,35 +9839,38 @@ define <vscale x 10 x double> @vector_interleave_nxv10f64_nxv2f64(<vscale x 2 x
 ; RV64-NEXT:    vmv1r.v v26, v20
 ; RV64-NEXT:    vmv1r.v v23, v10
 ; RV64-NEXT:    vmv1r.v v25, v14
-; RV64-NEXT:    addi a0, sp, 64
+; RV64-NEXT:    csrr a0, vlenb
+; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a0, a1, a0
+; RV64-NEXT:    add a0, sp, a0
+; RV64-NEXT:    addi a0, a0, 64
 ; RV64-NEXT:    vsseg5e64.v v22, (a0)
 ; RV64-NEXT:    vmv1r.v v18, v11
 ; RV64-NEXT:    vmv1r.v v20, v15
-; RV64-NEXT:    csrr a1, vlenb
-; RV64-NEXT:    slli a2, a1, 2
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    add a1, sp, a1
-; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    addi a1, sp, 64
 ; RV64-NEXT:    vsseg5e64.v v17, (a1)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a3, a0, a2
-; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    slli a3, a2, 1
+; RV64-NEXT:    add a4, a0, a3
 ; RV64-NEXT:    vl1re64.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re64.v v11, (a4)
+; RV64-NEXT:    add a4, a3, a2
+; RV64-NEXT:    add a5, a0, a4
+; RV64-NEXT:    vl1re64.v v11, (a5)
 ; RV64-NEXT:    vl1re64.v v8, (a0)
-; RV64-NEXT:    vl1re64.v v9, (a3)
-; RV64-NEXT:    add a0, a1, a2
-; RV64-NEXT:    vl1re64.v v14, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re64.v v15, (a0)
-; RV64-NEXT:    add a4, a4, a2
-; RV64-NEXT:    vl1re64.v v12, (a4)
+; RV64-NEXT:    add a5, a0, a2
+; RV64-NEXT:    vl1re64.v v9, (a5)
+; RV64-NEXT:    add a5, a1, a2
+; RV64-NEXT:    vl1re64.v v14, (a5)
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re64.v v15, (a3)
+; RV64-NEXT:    slli a3, a2, 2
+; RV64-NEXT:    add a0, a0, a3
+; RV64-NEXT:    vl1re64.v v12, (a0)
 ; RV64-NEXT:    vl1re64.v v13, (a1)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re64.v v16, (a0)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    vl1re64.v v17, (a0)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re64.v v16, (a4)
+; RV64-NEXT:    add a1, a1, a3
+; RV64-NEXT:    vl1re64.v v17, (a1)
 ; RV64-NEXT:    slli a2, a2, 3
 ; RV64-NEXT:    csrr a0, vlenb
 ; RV64-NEXT:    li a1, 10
@@ -9472,35 +9908,38 @@ define <vscale x 10 x double> @vector_interleave_nxv10f64_nxv2f64(<vscale x 2 x
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV32-NEXT:    addi a0, sp, 64
+; ZVBB-RV32-NEXT:    csrr a0, vlenb
+; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a0, a1, a0
+; ZVBB-RV32-NEXT:    add a0, sp, a0
+; ZVBB-RV32-NEXT:    addi a0, a0, 64
 ; ZVBB-RV32-NEXT:    vsseg5e64.v v22, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV32-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV32-NEXT:    csrr a1, vlenb
-; ZVBB-RV32-NEXT:    slli a2, a1, 2
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    add a1, sp, a1
-; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg5e64.v v17, (a1)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a3, a0, a2
-; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    slli a3, a2, 1
+; ZVBB-RV32-NEXT:    add a4, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v11, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a2
+; ZVBB-RV32-NEXT:    add a5, a0, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v11, (a5)
 ; ZVBB-RV32-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a1, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v14, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a4, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a2
+; ZVBB-RV32-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV32-NEXT:    add a5, a1, a2
+; ZVBB-RV32-NEXT:    vl1re64.v v14, (a5)
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a2, 2
+; ZVBB-RV32-NEXT:    add a0, a0, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v12, (a0)
 ; ZVBB-RV32-NEXT:    vl1re64.v v13, (a1)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v16, (a4)
+; ZVBB-RV32-NEXT:    add a1, a1, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v17, (a1)
 ; ZVBB-RV32-NEXT:    slli a2, a2, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
 ; ZVBB-RV32-NEXT:    li a1, 10
@@ -9538,35 +9977,38 @@ define <vscale x 10 x double> @vector_interleave_nxv10f64_nxv2f64(<vscale x 2 x
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v20
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v14
-; ZVBB-RV64-NEXT:    addi a0, sp, 64
+; ZVBB-RV64-NEXT:    csrr a0, vlenb
+; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a0, a1, a0
+; ZVBB-RV64-NEXT:    add a0, sp, a0
+; ZVBB-RV64-NEXT:    addi a0, a0, 64
 ; ZVBB-RV64-NEXT:    vsseg5e64.v v22, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v18, v11
 ; ZVBB-RV64-NEXT:    vmv1r.v v20, v15
-; ZVBB-RV64-NEXT:    csrr a1, vlenb
-; ZVBB-RV64-NEXT:    slli a2, a1, 2
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    add a1, sp, a1
-; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg5e64.v v17, (a1)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a3, a0, a2
-; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    slli a3, a2, 1
+; ZVBB-RV64-NEXT:    add a4, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v11, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a2
+; ZVBB-RV64-NEXT:    add a5, a0, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v11, (a5)
 ; ZVBB-RV64-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a1, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v14, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a4, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a2
+; ZVBB-RV64-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV64-NEXT:    add a5, a1, a2
+; ZVBB-RV64-NEXT:    vl1re64.v v14, (a5)
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a2, 2
+; ZVBB-RV64-NEXT:    add a0, a0, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v12, (a0)
 ; ZVBB-RV64-NEXT:    vl1re64.v v13, (a1)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v16, (a4)
+; ZVBB-RV64-NEXT:    add a1, a1, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v17, (a1)
 ; ZVBB-RV64-NEXT:    slli a2, a2, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
 ; ZVBB-RV64-NEXT:    li a1, 10
@@ -9604,35 +10046,38 @@ define <vscale x 10 x double> @vector_interleave_nxv10f64_nxv2f64(<vscale x 2 x
 ; ZVZIP-NEXT:    vmv1r.v v26, v20
 ; ZVZIP-NEXT:    vmv1r.v v23, v10
 ; ZVZIP-NEXT:    vmv1r.v v25, v14
-; ZVZIP-NEXT:    addi a0, sp, 64
+; ZVZIP-NEXT:    csrr a0, vlenb
+; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a0, a1, a0
+; ZVZIP-NEXT:    add a0, sp, a0
+; ZVZIP-NEXT:    addi a0, a0, 64
 ; ZVZIP-NEXT:    vsseg5e64.v v22, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v18, v11
 ; ZVZIP-NEXT:    vmv1r.v v20, v15
-; ZVZIP-NEXT:    csrr a1, vlenb
-; ZVZIP-NEXT:    slli a2, a1, 2
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    add a1, sp, a1
-; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    addi a1, sp, 64
 ; ZVZIP-NEXT:    vsseg5e64.v v17, (a1)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a3, a0, a2
-; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    slli a3, a2, 1
+; ZVZIP-NEXT:    add a4, a0, a3
 ; ZVZIP-NEXT:    vl1re64.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re64.v v11, (a4)
+; ZVZIP-NEXT:    add a4, a3, a2
+; ZVZIP-NEXT:    add a5, a0, a4
+; ZVZIP-NEXT:    vl1re64.v v11, (a5)
 ; ZVZIP-NEXT:    vl1re64.v v8, (a0)
-; ZVZIP-NEXT:    vl1re64.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a1, a2
-; ZVZIP-NEXT:    vl1re64.v v14, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re64.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a4, a2
-; ZVZIP-NEXT:    vl1re64.v v12, (a4)
+; ZVZIP-NEXT:    add a5, a0, a2
+; ZVZIP-NEXT:    vl1re64.v v9, (a5)
+; ZVZIP-NEXT:    add a5, a1, a2
+; ZVZIP-NEXT:    vl1re64.v v14, (a5)
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re64.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a2, 2
+; ZVZIP-NEXT:    add a0, a0, a3
+; ZVZIP-NEXT:    vl1re64.v v12, (a0)
 ; ZVZIP-NEXT:    vl1re64.v v13, (a1)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re64.v v16, (a0)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    vl1re64.v v17, (a0)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re64.v v16, (a4)
+; ZVZIP-NEXT:    add a1, a1, a3
+; ZVZIP-NEXT:    vl1re64.v v17, (a1)
 ; ZVZIP-NEXT:    slli a2, a2, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
 ; ZVZIP-NEXT:    li a1, 10
@@ -9666,20 +10111,22 @@ define <vscale x 12 x half> @vector_interleave_nxv12f16_nxv2f16(<vscale x 2 x ha
 ; CHECK-NEXT:    vsseg6e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    slli a3, a1, 1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a2, a6, a2
-; CHECK-NEXT:    vle16.v v8, (a2)
-; CHECK-NEXT:    vle16.v v10, (a6)
-; CHECK-NEXT:    vle16.v v11, (a5)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vle16.v v10, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vle16.v v11, (a4)
 ; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a4, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v10, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v12, (a3)
+; CHECK-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v12, (a2)
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v11, a1
 ; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -9705,20 +10152,22 @@ define <vscale x 12 x half> @vector_interleave_nxv12f16_nxv2f16(<vscale x 2 x ha
 ; ZVBB-NEXT:    vsseg6e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    slli a3, a1, 1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a2, a6, a2
-; ZVBB-NEXT:    vle16.v v8, (a2)
-; ZVBB-NEXT:    vle16.v v10, (a6)
-; ZVBB-NEXT:    vle16.v v11, (a5)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vle16.v v10, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vle16.v v11, (a4)
 ; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a4, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v10, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v12, (a3)
+; ZVBB-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v12, (a2)
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v11, a1
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -9747,15 +10196,17 @@ define <vscale x 24 x half> @vector_interleave_nxv24f16_nxv4f16(<vscale x 4 x ha
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg6e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v12, (a3)
+; CHECK-NEXT:    vl1re16.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re16.v v12, (a0)
 ; CHECK-NEXT:    add a1, a3, a1
 ; CHECK-NEXT:    vl1re16.v v13, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -9776,15 +10227,17 @@ define <vscale x 24 x half> @vector_interleave_nxv24f16_nxv4f16(<vscale x 4 x ha
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg6e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v12, (a3)
+; ZVBB-NEXT:    vl1re16.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-NEXT:    add a1, a3, a1
 ; ZVBB-NEXT:    vl1re16.v v13, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -9816,52 +10269,56 @@ define <vscale x 48 x half> @vector_interleave_nxv48f16_nxv8f16(<vscale x 8 x ha
 ; RV32-NEXT:    vmv1r.v v24, v15
 ; RV32-NEXT:    vmv1r.v v25, v17
 ; RV32-NEXT:    vmv1r.v v26, v19
-; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 6
-; RV32-NEXT:    mul a0, a0, a1
-; RV32-NEXT:    add a0, sp, a0
-; RV32-NEXT:    addi a0, a0, 64
+; RV32-NEXT:    addi a0, sp, 64
 ; RV32-NEXT:    vsseg6e16.v v21, (a0)
 ; RV32-NEXT:    vmv1r.v v21, v10
 ; RV32-NEXT:    vmv1r.v v22, v12
 ; RV32-NEXT:    vmv1r.v v23, v14
 ; RV32-NEXT:    vmv1r.v v24, v16
 ; RV32-NEXT:    vmv1r.v v25, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg6e16.v v20, (a1)
-; RV32-NEXT:    vl1re16.v v14, (a0)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a3, a1, a2
-; RV32-NEXT:    vl1re16.v v15, (a0)
-; RV32-NEXT:    add a4, a3, a2
-; RV32-NEXT:    add a5, a4, a2
-; RV32-NEXT:    add a6, a5, a2
-; RV32-NEXT:    vl1re16.v v12, (a6)
-; RV32-NEXT:    add a6, a6, a2
-; RV32-NEXT:    vl1re16.v v13, (a6)
-; RV32-NEXT:    vl1re16.v v10, (a4)
-; RV32-NEXT:    vl1re16.v v11, (a5)
-; RV32-NEXT:    vl1re16.v v8, (a1)
-; RV32-NEXT:    vl1re16.v v9, (a3)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a1, a0, a2
-; RV32-NEXT:    add a3, a1, a2
+; RV32-NEXT:    li a1, 6
+; RV32-NEXT:    mul a2, a2, a1
+; RV32-NEXT:    add a2, sp, a2
+; RV32-NEXT:    addi a2, a2, 64
+; RV32-NEXT:    vsseg6e16.v v20, (a2)
+; RV32-NEXT:    vl1re16.v v14, (a0)
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    add a3, a0, a1
+; RV32-NEXT:    vl1re16.v v15, (a3)
+; RV32-NEXT:    slli a3, a1, 2
+; RV32-NEXT:    add a4, a2, a3
+; RV32-NEXT:    vl1re16.v v12, (a4)
+; RV32-NEXT:    add a4, a3, a1
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re16.v v13, (a5)
+; RV32-NEXT:    slli a5, a1, 1
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re16.v v10, (a6)
+; RV32-NEXT:    add a6, a5, a1
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re16.v v11, (a7)
+; RV32-NEXT:    vl1re16.v v8, (a2)
+; RV32-NEXT:    add a2, a2, a1
+; RV32-NEXT:    vl1re16.v v9, (a2)
+; RV32-NEXT:    add a3, a0, a3
 ; RV32-NEXT:    vl1re16.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a2
-; RV32-NEXT:    vl1re16.v v19, (a3)
-; RV32-NEXT:    vl1re16.v v16, (a0)
-; RV32-NEXT:    vl1re16.v v17, (a1)
-; RV32-NEXT:    slli a2, a2, 3
+; RV32-NEXT:    add a4, a0, a4
+; RV32-NEXT:    vl1re16.v v19, (a4)
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    vl1re16.v v16, (a5)
+; RV32-NEXT:    add a0, a0, a6
+; RV32-NEXT:    vl1re16.v v17, (a0)
+; RV32-NEXT:    slli a1, a1, 3
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 12
-; RV32-NEXT:    mul a0, a0, a1
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a0, a0, a2
 ; RV32-NEXT:    add a0, sp, a0
 ; RV32-NEXT:    addi a0, a0, 64
-; RV32-NEXT:    add a2, a0, a2
-; RV32-NEXT:    vs4r.v v16, (a2)
+; RV32-NEXT:    add a1, a0, a1
+; RV32-NEXT:    vs4r.v v16, (a1)
 ; RV32-NEXT:    vs8r.v v8, (a0)
-; RV32-NEXT:    vl8re16.v v16, (a2)
+; RV32-NEXT:    vl8re16.v v16, (a1)
 ; RV32-NEXT:    vl8re16.v v8, (a0)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -9887,52 +10344,56 @@ define <vscale x 48 x half> @vector_interleave_nxv48f16_nxv8f16(<vscale x 8 x ha
 ; RV64-NEXT:    vmv1r.v v24, v15
 ; RV64-NEXT:    vmv1r.v v25, v17
 ; RV64-NEXT:    vmv1r.v v26, v19
-; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 6
-; RV64-NEXT:    mul a0, a0, a1
-; RV64-NEXT:    add a0, sp, a0
-; RV64-NEXT:    addi a0, a0, 64
+; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsseg6e16.v v21, (a0)
 ; RV64-NEXT:    vmv1r.v v21, v10
 ; RV64-NEXT:    vmv1r.v v22, v12
 ; RV64-NEXT:    vmv1r.v v23, v14
 ; RV64-NEXT:    vmv1r.v v24, v16
 ; RV64-NEXT:    vmv1r.v v25, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg6e16.v v20, (a1)
-; RV64-NEXT:    vl1re16.v v14, (a0)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a3, a1, a2
-; RV64-NEXT:    vl1re16.v v15, (a0)
-; RV64-NEXT:    add a4, a3, a2
-; RV64-NEXT:    add a5, a4, a2
-; RV64-NEXT:    add a6, a5, a2
-; RV64-NEXT:    vl1re16.v v12, (a6)
-; RV64-NEXT:    add a6, a6, a2
-; RV64-NEXT:    vl1re16.v v13, (a6)
-; RV64-NEXT:    vl1re16.v v10, (a4)
-; RV64-NEXT:    vl1re16.v v11, (a5)
-; RV64-NEXT:    vl1re16.v v8, (a1)
-; RV64-NEXT:    vl1re16.v v9, (a3)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a1, a0, a2
-; RV64-NEXT:    add a3, a1, a2
+; RV64-NEXT:    li a1, 6
+; RV64-NEXT:    mul a2, a2, a1
+; RV64-NEXT:    add a2, sp, a2
+; RV64-NEXT:    addi a2, a2, 64
+; RV64-NEXT:    vsseg6e16.v v20, (a2)
+; RV64-NEXT:    vl1re16.v v14, (a0)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    add a3, a0, a1
+; RV64-NEXT:    vl1re16.v v15, (a3)
+; RV64-NEXT:    slli a3, a1, 2
+; RV64-NEXT:    add a4, a2, a3
+; RV64-NEXT:    vl1re16.v v12, (a4)
+; RV64-NEXT:    add a4, a3, a1
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re16.v v13, (a5)
+; RV64-NEXT:    slli a5, a1, 1
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re16.v v10, (a6)
+; RV64-NEXT:    add a6, a5, a1
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re16.v v11, (a7)
+; RV64-NEXT:    vl1re16.v v8, (a2)
+; RV64-NEXT:    add a2, a2, a1
+; RV64-NEXT:    vl1re16.v v9, (a2)
+; RV64-NEXT:    add a3, a0, a3
 ; RV64-NEXT:    vl1re16.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a2
-; RV64-NEXT:    vl1re16.v v19, (a3)
-; RV64-NEXT:    vl1re16.v v16, (a0)
-; RV64-NEXT:    vl1re16.v v17, (a1)
-; RV64-NEXT:    slli a2, a2, 3
+; RV64-NEXT:    add a4, a0, a4
+; RV64-NEXT:    vl1re16.v v19, (a4)
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    vl1re16.v v16, (a5)
+; RV64-NEXT:    add a0, a0, a6
+; RV64-NEXT:    vl1re16.v v17, (a0)
+; RV64-NEXT:    slli a1, a1, 3
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 12
-; RV64-NEXT:    mul a0, a0, a1
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a0, a0, a2
 ; RV64-NEXT:    add a0, sp, a0
 ; RV64-NEXT:    addi a0, a0, 64
-; RV64-NEXT:    add a2, a0, a2
-; RV64-NEXT:    vs4r.v v16, (a2)
+; RV64-NEXT:    add a1, a0, a1
+; RV64-NEXT:    vs4r.v v16, (a1)
 ; RV64-NEXT:    vs8r.v v8, (a0)
-; RV64-NEXT:    vl8re16.v v16, (a2)
+; RV64-NEXT:    vl8re16.v v16, (a1)
 ; RV64-NEXT:    vl8re16.v v8, (a0)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -9958,52 +10419,56 @@ define <vscale x 48 x half> @vector_interleave_nxv48f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 6
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
-; ZVBB-RV32-NEXT:    add a0, sp, a0
-; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    addi a0, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg6e16.v v21, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg6e16.v v20, (a1)
-; ZVBB-RV32-NEXT:    vl1re16.v v14, (a0)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a3, a2
-; ZVBB-RV32-NEXT:    add a5, a4, a2
-; ZVBB-RV32-NEXT:    add a6, a5, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v12, (a6)
-; ZVBB-RV32-NEXT:    add a6, a6, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v13, (a6)
-; ZVBB-RV32-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v11, (a5)
-; ZVBB-RV32-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a1, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mul a2, a2, a1
+; ZVBB-RV32-NEXT:    add a2, sp, a2
+; ZVBB-RV32-NEXT:    addi a2, a2, 64
+; ZVBB-RV32-NEXT:    vsseg6e16.v v20, (a2)
+; ZVBB-RV32-NEXT:    vl1re16.v v14, (a0)
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a3, a0, a1
+; ZVBB-RV32-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a1, 2
+; ZVBB-RV32-NEXT:    add a4, a2, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a1
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v13, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a1, 1
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v10, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a1
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v11, (a7)
+; ZVBB-RV32-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a2, a2, a1
+; ZVBB-RV32-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-RV32-NEXT:    add a3, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v19, (a3)
-; ZVBB-RV32-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV32-NEXT:    slli a2, a2, 3
+; ZVBB-RV32-NEXT:    add a4, a0, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v19, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v16, (a5)
+; ZVBB-RV32-NEXT:    add a0, a0, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV32-NEXT:    slli a1, a1, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 12
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
+; ZVBB-RV32-NEXT:    li a2, 12
+; ZVBB-RV32-NEXT:    mul a0, a0, a2
 ; ZVBB-RV32-NEXT:    add a0, sp, a0
 ; ZVBB-RV32-NEXT:    addi a0, a0, 64
-; ZVBB-RV32-NEXT:    add a2, a0, a2
-; ZVBB-RV32-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV32-NEXT:    add a1, a0, a1
+; ZVBB-RV32-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl8re16.v v16, (a2)
+; ZVBB-RV32-NEXT:    vl8re16.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vl8re16.v v8, (a0)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -10029,52 +10494,56 @@ define <vscale x 48 x half> @vector_interleave_nxv48f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 6
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
-; ZVBB-RV64-NEXT:    add a0, sp, a0
-; ZVBB-RV64-NEXT:    addi a0, a0, 64
+; ZVBB-RV64-NEXT:    addi a0, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg6e16.v v21, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg6e16.v v20, (a1)
-; ZVBB-RV64-NEXT:    vl1re16.v v14, (a0)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a3, a2
-; ZVBB-RV64-NEXT:    add a5, a4, a2
-; ZVBB-RV64-NEXT:    add a6, a5, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v12, (a6)
-; ZVBB-RV64-NEXT:    add a6, a6, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v13, (a6)
-; ZVBB-RV64-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v11, (a5)
-; ZVBB-RV64-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a1, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mul a2, a2, a1
+; ZVBB-RV64-NEXT:    add a2, sp, a2
+; ZVBB-RV64-NEXT:    addi a2, a2, 64
+; ZVBB-RV64-NEXT:    vsseg6e16.v v20, (a2)
+; ZVBB-RV64-NEXT:    vl1re16.v v14, (a0)
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a3, a0, a1
+; ZVBB-RV64-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a1, 2
+; ZVBB-RV64-NEXT:    add a4, a2, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a1
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v13, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a1, 1
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v10, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a1
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v11, (a7)
+; ZVBB-RV64-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a2, a2, a1
+; ZVBB-RV64-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-RV64-NEXT:    add a3, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v19, (a3)
-; ZVBB-RV64-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV64-NEXT:    slli a2, a2, 3
+; ZVBB-RV64-NEXT:    add a4, a0, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v19, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v16, (a5)
+; ZVBB-RV64-NEXT:    add a0, a0, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV64-NEXT:    slli a1, a1, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 12
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
+; ZVBB-RV64-NEXT:    li a2, 12
+; ZVBB-RV64-NEXT:    mul a0, a0, a2
 ; ZVBB-RV64-NEXT:    add a0, sp, a0
 ; ZVBB-RV64-NEXT:    addi a0, a0, 64
-; ZVBB-RV64-NEXT:    add a2, a0, a2
-; ZVBB-RV64-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV64-NEXT:    add a1, a0, a1
+; ZVBB-RV64-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl8re16.v v16, (a2)
+; ZVBB-RV64-NEXT:    vl8re16.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vl8re16.v v8, (a0)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -10100,52 +10569,56 @@ define <vscale x 48 x half> @vector_interleave_nxv48f16_nxv8f16(<vscale x 8 x ha
 ; ZVZIP-NEXT:    vmv1r.v v24, v15
 ; ZVZIP-NEXT:    vmv1r.v v25, v17
 ; ZVZIP-NEXT:    vmv1r.v v26, v19
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 6
-; ZVZIP-NEXT:    mul a0, a0, a1
-; ZVZIP-NEXT:    add a0, sp, a0
-; ZVZIP-NEXT:    addi a0, a0, 64
+; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsseg6e16.v v21, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v21, v10
 ; ZVZIP-NEXT:    vmv1r.v v22, v12
 ; ZVZIP-NEXT:    vmv1r.v v23, v14
 ; ZVZIP-NEXT:    vmv1r.v v24, v16
 ; ZVZIP-NEXT:    vmv1r.v v25, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg6e16.v v20, (a1)
-; ZVZIP-NEXT:    vl1re16.v v14, (a0)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
-; ZVZIP-NEXT:    vl1re16.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a3, a2
-; ZVZIP-NEXT:    add a5, a4, a2
-; ZVZIP-NEXT:    add a6, a5, a2
-; ZVZIP-NEXT:    vl1re16.v v12, (a6)
-; ZVZIP-NEXT:    add a6, a6, a2
-; ZVZIP-NEXT:    vl1re16.v v13, (a6)
-; ZVZIP-NEXT:    vl1re16.v v10, (a4)
-; ZVZIP-NEXT:    vl1re16.v v11, (a5)
-; ZVZIP-NEXT:    vl1re16.v v8, (a1)
-; ZVZIP-NEXT:    vl1re16.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a1, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
+; ZVZIP-NEXT:    li a1, 6
+; ZVZIP-NEXT:    mul a2, a2, a1
+; ZVZIP-NEXT:    add a2, sp, a2
+; ZVZIP-NEXT:    addi a2, a2, 64
+; ZVZIP-NEXT:    vsseg6e16.v v20, (a2)
+; ZVZIP-NEXT:    vl1re16.v v14, (a0)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    add a3, a0, a1
+; ZVZIP-NEXT:    vl1re16.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a1, 2
+; ZVZIP-NEXT:    add a4, a2, a3
+; ZVZIP-NEXT:    vl1re16.v v12, (a4)
+; ZVZIP-NEXT:    add a4, a3, a1
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re16.v v13, (a5)
+; ZVZIP-NEXT:    slli a5, a1, 1
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re16.v v10, (a6)
+; ZVZIP-NEXT:    add a6, a5, a1
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re16.v v11, (a7)
+; ZVZIP-NEXT:    vl1re16.v v8, (a2)
+; ZVZIP-NEXT:    add a2, a2, a1
+; ZVZIP-NEXT:    vl1re16.v v9, (a2)
+; ZVZIP-NEXT:    add a3, a0, a3
 ; ZVZIP-NEXT:    vl1re16.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a2
-; ZVZIP-NEXT:    vl1re16.v v19, (a3)
-; ZVZIP-NEXT:    vl1re16.v v16, (a0)
-; ZVZIP-NEXT:    vl1re16.v v17, (a1)
-; ZVZIP-NEXT:    slli a2, a2, 3
+; ZVZIP-NEXT:    add a4, a0, a4
+; ZVZIP-NEXT:    vl1re16.v v19, (a4)
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    vl1re16.v v16, (a5)
+; ZVZIP-NEXT:    add a0, a0, a6
+; ZVZIP-NEXT:    vl1re16.v v17, (a0)
+; ZVZIP-NEXT:    slli a1, a1, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 12
-; ZVZIP-NEXT:    mul a0, a0, a1
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a0, a0, a2
 ; ZVZIP-NEXT:    add a0, sp, a0
 ; ZVZIP-NEXT:    addi a0, a0, 64
-; ZVZIP-NEXT:    add a2, a0, a2
-; ZVZIP-NEXT:    vs4r.v v16, (a2)
+; ZVZIP-NEXT:    add a1, a0, a1
+; ZVZIP-NEXT:    vs4r.v v16, (a1)
 ; ZVZIP-NEXT:    vs8r.v v8, (a0)
-; ZVZIP-NEXT:    vl8re16.v v16, (a2)
+; ZVZIP-NEXT:    vl8re16.v v16, (a1)
 ; ZVZIP-NEXT:    vl8re16.v v8, (a0)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -10169,20 +10642,22 @@ define <vscale x 12 x bfloat> @vector_interleave_nxv12bf16_nxv2bf16(<vscale x 2
 ; CHECK-NEXT:    vsseg6e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    slli a3, a1, 1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a2, a6, a2
-; CHECK-NEXT:    vle16.v v8, (a2)
-; CHECK-NEXT:    vle16.v v10, (a6)
-; CHECK-NEXT:    vle16.v v11, (a5)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vle16.v v10, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vle16.v v11, (a4)
 ; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a4, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v10, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v12, (a3)
+; CHECK-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v12, (a2)
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v11, a1
 ; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -10208,20 +10683,22 @@ define <vscale x 12 x bfloat> @vector_interleave_nxv12bf16_nxv2bf16(<vscale x 2
 ; ZVBB-NEXT:    vsseg6e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    slli a3, a1, 1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a2, a6, a2
-; ZVBB-NEXT:    vle16.v v8, (a2)
-; ZVBB-NEXT:    vle16.v v10, (a6)
-; ZVBB-NEXT:    vle16.v v11, (a5)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vle16.v v10, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vle16.v v11, (a4)
 ; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a4, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v10, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v12, (a3)
+; ZVBB-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v12, (a2)
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v11, a1
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -10250,15 +10727,17 @@ define <vscale x 24 x bfloat> @vector_interleave_nxv24bf16_nxv4bf16(<vscale x 4
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg6e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v12, (a3)
+; CHECK-NEXT:    vl1re16.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re16.v v12, (a0)
 ; CHECK-NEXT:    add a1, a3, a1
 ; CHECK-NEXT:    vl1re16.v v13, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -10279,15 +10758,17 @@ define <vscale x 24 x bfloat> @vector_interleave_nxv24bf16_nxv4bf16(<vscale x 4
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg6e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v12, (a3)
+; ZVBB-NEXT:    vl1re16.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re16.v v12, (a0)
 ; ZVBB-NEXT:    add a1, a3, a1
 ; ZVBB-NEXT:    vl1re16.v v13, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -10319,52 +10800,56 @@ define <vscale x 48 x bfloat> @vector_interleave_nxv48bf16_nxv8bf16(<vscale x 8
 ; RV32-NEXT:    vmv1r.v v24, v15
 ; RV32-NEXT:    vmv1r.v v25, v17
 ; RV32-NEXT:    vmv1r.v v26, v19
-; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 6
-; RV32-NEXT:    mul a0, a0, a1
-; RV32-NEXT:    add a0, sp, a0
-; RV32-NEXT:    addi a0, a0, 64
+; RV32-NEXT:    addi a0, sp, 64
 ; RV32-NEXT:    vsseg6e16.v v21, (a0)
 ; RV32-NEXT:    vmv1r.v v21, v10
 ; RV32-NEXT:    vmv1r.v v22, v12
 ; RV32-NEXT:    vmv1r.v v23, v14
 ; RV32-NEXT:    vmv1r.v v24, v16
 ; RV32-NEXT:    vmv1r.v v25, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg6e16.v v20, (a1)
-; RV32-NEXT:    vl1re16.v v14, (a0)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a3, a1, a2
-; RV32-NEXT:    vl1re16.v v15, (a0)
-; RV32-NEXT:    add a4, a3, a2
-; RV32-NEXT:    add a5, a4, a2
-; RV32-NEXT:    add a6, a5, a2
-; RV32-NEXT:    vl1re16.v v12, (a6)
-; RV32-NEXT:    add a6, a6, a2
-; RV32-NEXT:    vl1re16.v v13, (a6)
-; RV32-NEXT:    vl1re16.v v10, (a4)
-; RV32-NEXT:    vl1re16.v v11, (a5)
-; RV32-NEXT:    vl1re16.v v8, (a1)
-; RV32-NEXT:    vl1re16.v v9, (a3)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a1, a0, a2
-; RV32-NEXT:    add a3, a1, a2
+; RV32-NEXT:    li a1, 6
+; RV32-NEXT:    mul a2, a2, a1
+; RV32-NEXT:    add a2, sp, a2
+; RV32-NEXT:    addi a2, a2, 64
+; RV32-NEXT:    vsseg6e16.v v20, (a2)
+; RV32-NEXT:    vl1re16.v v14, (a0)
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    add a3, a0, a1
+; RV32-NEXT:    vl1re16.v v15, (a3)
+; RV32-NEXT:    slli a3, a1, 2
+; RV32-NEXT:    add a4, a2, a3
+; RV32-NEXT:    vl1re16.v v12, (a4)
+; RV32-NEXT:    add a4, a3, a1
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re16.v v13, (a5)
+; RV32-NEXT:    slli a5, a1, 1
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re16.v v10, (a6)
+; RV32-NEXT:    add a6, a5, a1
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re16.v v11, (a7)
+; RV32-NEXT:    vl1re16.v v8, (a2)
+; RV32-NEXT:    add a2, a2, a1
+; RV32-NEXT:    vl1re16.v v9, (a2)
+; RV32-NEXT:    add a3, a0, a3
 ; RV32-NEXT:    vl1re16.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a2
-; RV32-NEXT:    vl1re16.v v19, (a3)
-; RV32-NEXT:    vl1re16.v v16, (a0)
-; RV32-NEXT:    vl1re16.v v17, (a1)
-; RV32-NEXT:    slli a2, a2, 3
+; RV32-NEXT:    add a4, a0, a4
+; RV32-NEXT:    vl1re16.v v19, (a4)
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    vl1re16.v v16, (a5)
+; RV32-NEXT:    add a0, a0, a6
+; RV32-NEXT:    vl1re16.v v17, (a0)
+; RV32-NEXT:    slli a1, a1, 3
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 12
-; RV32-NEXT:    mul a0, a0, a1
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a0, a0, a2
 ; RV32-NEXT:    add a0, sp, a0
 ; RV32-NEXT:    addi a0, a0, 64
-; RV32-NEXT:    add a2, a0, a2
-; RV32-NEXT:    vs4r.v v16, (a2)
+; RV32-NEXT:    add a1, a0, a1
+; RV32-NEXT:    vs4r.v v16, (a1)
 ; RV32-NEXT:    vs8r.v v8, (a0)
-; RV32-NEXT:    vl8re16.v v16, (a2)
+; RV32-NEXT:    vl8re16.v v16, (a1)
 ; RV32-NEXT:    vl8re16.v v8, (a0)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -10390,52 +10875,56 @@ define <vscale x 48 x bfloat> @vector_interleave_nxv48bf16_nxv8bf16(<vscale x 8
 ; RV64-NEXT:    vmv1r.v v24, v15
 ; RV64-NEXT:    vmv1r.v v25, v17
 ; RV64-NEXT:    vmv1r.v v26, v19
-; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 6
-; RV64-NEXT:    mul a0, a0, a1
-; RV64-NEXT:    add a0, sp, a0
-; RV64-NEXT:    addi a0, a0, 64
+; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsseg6e16.v v21, (a0)
 ; RV64-NEXT:    vmv1r.v v21, v10
 ; RV64-NEXT:    vmv1r.v v22, v12
 ; RV64-NEXT:    vmv1r.v v23, v14
 ; RV64-NEXT:    vmv1r.v v24, v16
 ; RV64-NEXT:    vmv1r.v v25, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg6e16.v v20, (a1)
-; RV64-NEXT:    vl1re16.v v14, (a0)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a3, a1, a2
-; RV64-NEXT:    vl1re16.v v15, (a0)
-; RV64-NEXT:    add a4, a3, a2
-; RV64-NEXT:    add a5, a4, a2
-; RV64-NEXT:    add a6, a5, a2
-; RV64-NEXT:    vl1re16.v v12, (a6)
-; RV64-NEXT:    add a6, a6, a2
-; RV64-NEXT:    vl1re16.v v13, (a6)
-; RV64-NEXT:    vl1re16.v v10, (a4)
-; RV64-NEXT:    vl1re16.v v11, (a5)
-; RV64-NEXT:    vl1re16.v v8, (a1)
-; RV64-NEXT:    vl1re16.v v9, (a3)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a1, a0, a2
-; RV64-NEXT:    add a3, a1, a2
+; RV64-NEXT:    li a1, 6
+; RV64-NEXT:    mul a2, a2, a1
+; RV64-NEXT:    add a2, sp, a2
+; RV64-NEXT:    addi a2, a2, 64
+; RV64-NEXT:    vsseg6e16.v v20, (a2)
+; RV64-NEXT:    vl1re16.v v14, (a0)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    add a3, a0, a1
+; RV64-NEXT:    vl1re16.v v15, (a3)
+; RV64-NEXT:    slli a3, a1, 2
+; RV64-NEXT:    add a4, a2, a3
+; RV64-NEXT:    vl1re16.v v12, (a4)
+; RV64-NEXT:    add a4, a3, a1
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re16.v v13, (a5)
+; RV64-NEXT:    slli a5, a1, 1
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re16.v v10, (a6)
+; RV64-NEXT:    add a6, a5, a1
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re16.v v11, (a7)
+; RV64-NEXT:    vl1re16.v v8, (a2)
+; RV64-NEXT:    add a2, a2, a1
+; RV64-NEXT:    vl1re16.v v9, (a2)
+; RV64-NEXT:    add a3, a0, a3
 ; RV64-NEXT:    vl1re16.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a2
-; RV64-NEXT:    vl1re16.v v19, (a3)
-; RV64-NEXT:    vl1re16.v v16, (a0)
-; RV64-NEXT:    vl1re16.v v17, (a1)
-; RV64-NEXT:    slli a2, a2, 3
+; RV64-NEXT:    add a4, a0, a4
+; RV64-NEXT:    vl1re16.v v19, (a4)
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    vl1re16.v v16, (a5)
+; RV64-NEXT:    add a0, a0, a6
+; RV64-NEXT:    vl1re16.v v17, (a0)
+; RV64-NEXT:    slli a1, a1, 3
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 12
-; RV64-NEXT:    mul a0, a0, a1
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a0, a0, a2
 ; RV64-NEXT:    add a0, sp, a0
 ; RV64-NEXT:    addi a0, a0, 64
-; RV64-NEXT:    add a2, a0, a2
-; RV64-NEXT:    vs4r.v v16, (a2)
+; RV64-NEXT:    add a1, a0, a1
+; RV64-NEXT:    vs4r.v v16, (a1)
 ; RV64-NEXT:    vs8r.v v8, (a0)
-; RV64-NEXT:    vl8re16.v v16, (a2)
+; RV64-NEXT:    vl8re16.v v16, (a1)
 ; RV64-NEXT:    vl8re16.v v8, (a0)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -10457,56 +10946,60 @@ define <vscale x 48 x bfloat> @vector_interleave_nxv48bf16_nxv8bf16(<vscale x 8
 ; ZVBB-RV32-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
 ; ZVBB-RV32-NEXT:    vmv2r.v v20, v8
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v23, v13
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 6
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
-; ZVBB-RV32-NEXT:    add a0, sp, a0
-; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    vmv1r.v v23, v13
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a0, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg6e16.v v21, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg6e16.v v20, (a1)
-; ZVBB-RV32-NEXT:    vl1re16.v v14, (a0)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a3, a2
-; ZVBB-RV32-NEXT:    add a5, a4, a2
-; ZVBB-RV32-NEXT:    add a6, a5, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v12, (a6)
-; ZVBB-RV32-NEXT:    add a6, a6, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v13, (a6)
-; ZVBB-RV32-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v11, (a5)
-; ZVBB-RV32-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a1, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mul a2, a2, a1
+; ZVBB-RV32-NEXT:    add a2, sp, a2
+; ZVBB-RV32-NEXT:    addi a2, a2, 64
+; ZVBB-RV32-NEXT:    vsseg6e16.v v20, (a2)
+; ZVBB-RV32-NEXT:    vl1re16.v v14, (a0)
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a3, a0, a1
+; ZVBB-RV32-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a1, 2
+; ZVBB-RV32-NEXT:    add a4, a2, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a1
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v13, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a1, 1
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v10, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a1
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v11, (a7)
+; ZVBB-RV32-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a2, a2, a1
+; ZVBB-RV32-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-RV32-NEXT:    add a3, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a2
-; ZVBB-RV32-NEXT:    vl1re16.v v19, (a3)
-; ZVBB-RV32-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV32-NEXT:    slli a2, a2, 3
+; ZVBB-RV32-NEXT:    add a4, a0, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v19, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v16, (a5)
+; ZVBB-RV32-NEXT:    add a0, a0, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV32-NEXT:    slli a1, a1, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 12
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
+; ZVBB-RV32-NEXT:    li a2, 12
+; ZVBB-RV32-NEXT:    mul a0, a0, a2
 ; ZVBB-RV32-NEXT:    add a0, sp, a0
 ; ZVBB-RV32-NEXT:    addi a0, a0, 64
-; ZVBB-RV32-NEXT:    add a2, a0, a2
-; ZVBB-RV32-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV32-NEXT:    add a1, a0, a1
+; ZVBB-RV32-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl8re16.v v16, (a2)
+; ZVBB-RV32-NEXT:    vl8re16.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vl8re16.v v8, (a0)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -10532,52 +11025,56 @@ define <vscale x 48 x bfloat> @vector_interleave_nxv48bf16_nxv8bf16(<vscale x 8
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 6
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
-; ZVBB-RV64-NEXT:    add a0, sp, a0
-; ZVBB-RV64-NEXT:    addi a0, a0, 64
+; ZVBB-RV64-NEXT:    addi a0, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg6e16.v v21, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg6e16.v v20, (a1)
-; ZVBB-RV64-NEXT:    vl1re16.v v14, (a0)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a3, a2
-; ZVBB-RV64-NEXT:    add a5, a4, a2
-; ZVBB-RV64-NEXT:    add a6, a5, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v12, (a6)
-; ZVBB-RV64-NEXT:    add a6, a6, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v13, (a6)
-; ZVBB-RV64-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v11, (a5)
-; ZVBB-RV64-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a1, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mul a2, a2, a1
+; ZVBB-RV64-NEXT:    add a2, sp, a2
+; ZVBB-RV64-NEXT:    addi a2, a2, 64
+; ZVBB-RV64-NEXT:    vsseg6e16.v v20, (a2)
+; ZVBB-RV64-NEXT:    vl1re16.v v14, (a0)
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a3, a0, a1
+; ZVBB-RV64-NEXT:    vl1re16.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a1, 2
+; ZVBB-RV64-NEXT:    add a4, a2, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a1
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v13, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a1, 1
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v10, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a1
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v11, (a7)
+; ZVBB-RV64-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a2, a2, a1
+; ZVBB-RV64-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-RV64-NEXT:    add a3, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a2
-; ZVBB-RV64-NEXT:    vl1re16.v v19, (a3)
-; ZVBB-RV64-NEXT:    vl1re16.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV64-NEXT:    slli a2, a2, 3
+; ZVBB-RV64-NEXT:    add a4, a0, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v19, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v16, (a5)
+; ZVBB-RV64-NEXT:    add a0, a0, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v17, (a0)
+; ZVBB-RV64-NEXT:    slli a1, a1, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 12
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
+; ZVBB-RV64-NEXT:    li a2, 12
+; ZVBB-RV64-NEXT:    mul a0, a0, a2
 ; ZVBB-RV64-NEXT:    add a0, sp, a0
 ; ZVBB-RV64-NEXT:    addi a0, a0, 64
-; ZVBB-RV64-NEXT:    add a2, a0, a2
-; ZVBB-RV64-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV64-NEXT:    add a1, a0, a1
+; ZVBB-RV64-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl8re16.v v16, (a2)
+; ZVBB-RV64-NEXT:    vl8re16.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vl8re16.v v8, (a0)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -10603,52 +11100,56 @@ define <vscale x 48 x bfloat> @vector_interleave_nxv48bf16_nxv8bf16(<vscale x 8
 ; ZVZIP-NEXT:    vmv1r.v v24, v15
 ; ZVZIP-NEXT:    vmv1r.v v25, v17
 ; ZVZIP-NEXT:    vmv1r.v v26, v19
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 6
-; ZVZIP-NEXT:    mul a0, a0, a1
-; ZVZIP-NEXT:    add a0, sp, a0
-; ZVZIP-NEXT:    addi a0, a0, 64
+; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsseg6e16.v v21, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v21, v10
 ; ZVZIP-NEXT:    vmv1r.v v22, v12
 ; ZVZIP-NEXT:    vmv1r.v v23, v14
 ; ZVZIP-NEXT:    vmv1r.v v24, v16
 ; ZVZIP-NEXT:    vmv1r.v v25, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg6e16.v v20, (a1)
-; ZVZIP-NEXT:    vl1re16.v v14, (a0)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
-; ZVZIP-NEXT:    vl1re16.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a3, a2
-; ZVZIP-NEXT:    add a5, a4, a2
-; ZVZIP-NEXT:    add a6, a5, a2
-; ZVZIP-NEXT:    vl1re16.v v12, (a6)
-; ZVZIP-NEXT:    add a6, a6, a2
-; ZVZIP-NEXT:    vl1re16.v v13, (a6)
-; ZVZIP-NEXT:    vl1re16.v v10, (a4)
-; ZVZIP-NEXT:    vl1re16.v v11, (a5)
-; ZVZIP-NEXT:    vl1re16.v v8, (a1)
-; ZVZIP-NEXT:    vl1re16.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a1, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
+; ZVZIP-NEXT:    li a1, 6
+; ZVZIP-NEXT:    mul a2, a2, a1
+; ZVZIP-NEXT:    add a2, sp, a2
+; ZVZIP-NEXT:    addi a2, a2, 64
+; ZVZIP-NEXT:    vsseg6e16.v v20, (a2)
+; ZVZIP-NEXT:    vl1re16.v v14, (a0)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    add a3, a0, a1
+; ZVZIP-NEXT:    vl1re16.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a1, 2
+; ZVZIP-NEXT:    add a4, a2, a3
+; ZVZIP-NEXT:    vl1re16.v v12, (a4)
+; ZVZIP-NEXT:    add a4, a3, a1
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re16.v v13, (a5)
+; ZVZIP-NEXT:    slli a5, a1, 1
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re16.v v10, (a6)
+; ZVZIP-NEXT:    add a6, a5, a1
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re16.v v11, (a7)
+; ZVZIP-NEXT:    vl1re16.v v8, (a2)
+; ZVZIP-NEXT:    add a2, a2, a1
+; ZVZIP-NEXT:    vl1re16.v v9, (a2)
+; ZVZIP-NEXT:    add a3, a0, a3
 ; ZVZIP-NEXT:    vl1re16.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a2
-; ZVZIP-NEXT:    vl1re16.v v19, (a3)
-; ZVZIP-NEXT:    vl1re16.v v16, (a0)
-; ZVZIP-NEXT:    vl1re16.v v17, (a1)
-; ZVZIP-NEXT:    slli a2, a2, 3
+; ZVZIP-NEXT:    add a4, a0, a4
+; ZVZIP-NEXT:    vl1re16.v v19, (a4)
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    vl1re16.v v16, (a5)
+; ZVZIP-NEXT:    add a0, a0, a6
+; ZVZIP-NEXT:    vl1re16.v v17, (a0)
+; ZVZIP-NEXT:    slli a1, a1, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 12
-; ZVZIP-NEXT:    mul a0, a0, a1
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a0, a0, a2
 ; ZVZIP-NEXT:    add a0, sp, a0
 ; ZVZIP-NEXT:    addi a0, a0, 64
-; ZVZIP-NEXT:    add a2, a0, a2
-; ZVZIP-NEXT:    vs4r.v v16, (a2)
+; ZVZIP-NEXT:    add a1, a0, a1
+; ZVZIP-NEXT:    vs4r.v v16, (a1)
 ; ZVZIP-NEXT:    vs8r.v v8, (a0)
-; ZVZIP-NEXT:    vl8re16.v v16, (a2)
+; ZVZIP-NEXT:    vl8re16.v v16, (a1)
 ; ZVZIP-NEXT:    vl8re16.v v8, (a0)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -10672,20 +11173,22 @@ define <vscale x 6 x float> @vector_interleave_nxv6f32_nxv1f32(<vscale x 1 x flo
 ; CHECK-NEXT:    vsseg6e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    slli a3, a1, 1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a2, a6, a2
-; CHECK-NEXT:    vle32.v v8, (a2)
-; CHECK-NEXT:    vle32.v v10, (a6)
-; CHECK-NEXT:    vle32.v v11, (a5)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vle32.v v8, (a4)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vle32.v v10, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vle32.v v11, (a4)
 ; CHECK-NEXT:    srli a1, a1, 3
-; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vsetvli a4, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v10, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v9, (a4)
-; CHECK-NEXT:    vle32.v v12, (a3)
+; CHECK-NEXT:    vsetvli a4, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vle32.v v9, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle32.v v12, (a2)
 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v11, a1
 ; CHECK-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
@@ -10711,20 +11214,22 @@ define <vscale x 6 x float> @vector_interleave_nxv6f32_nxv1f32(<vscale x 1 x flo
 ; ZVBB-NEXT:    vsseg6e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    slli a3, a1, 1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a2, a6, a2
-; ZVBB-NEXT:    vle32.v v8, (a2)
-; ZVBB-NEXT:    vle32.v v10, (a6)
-; ZVBB-NEXT:    vle32.v v11, (a5)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vle32.v v8, (a4)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vle32.v v10, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vle32.v v11, (a4)
 ; ZVBB-NEXT:    srli a1, a1, 3
-; ZVBB-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a4, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v10, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v9, (a4)
-; ZVBB-NEXT:    vle32.v v12, (a3)
+; ZVBB-NEXT:    vsetvli a4, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vle32.v v9, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle32.v v12, (a2)
 ; ZVBB-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v11, a1
 ; ZVBB-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
@@ -10753,15 +11258,17 @@ define <vscale x 12 x float> @vector_interleave_nxv12f32_nxv2f32(<vscale x 2 x f
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vsseg6e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re32.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re32.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re32.v v11, (a2)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
-; CHECK-NEXT:    vl1re32.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re32.v v12, (a3)
+; CHECK-NEXT:    vl1re32.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re32.v v12, (a0)
 ; CHECK-NEXT:    add a1, a3, a1
 ; CHECK-NEXT:    vl1re32.v v13, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -10782,15 +11289,17 @@ define <vscale x 12 x float> @vector_interleave_nxv12f32_nxv2f32(<vscale x 2 x f
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vsseg6e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re32.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re32.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re32.v v11, (a2)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-NEXT:    vl1re32.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re32.v v12, (a3)
+; ZVBB-NEXT:    vl1re32.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re32.v v12, (a0)
 ; ZVBB-NEXT:    add a1, a3, a1
 ; ZVBB-NEXT:    vl1re32.v v13, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -10822,52 +11331,56 @@ define <vscale x 24 x float> @vector_interleave_nxv24f32_nxv4f32(<vscale x 4 x f
 ; RV32-NEXT:    vmv1r.v v24, v15
 ; RV32-NEXT:    vmv1r.v v25, v17
 ; RV32-NEXT:    vmv1r.v v26, v19
-; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 6
-; RV32-NEXT:    mul a0, a0, a1
-; RV32-NEXT:    add a0, sp, a0
-; RV32-NEXT:    addi a0, a0, 64
+; RV32-NEXT:    addi a0, sp, 64
 ; RV32-NEXT:    vsseg6e32.v v21, (a0)
 ; RV32-NEXT:    vmv1r.v v21, v10
 ; RV32-NEXT:    vmv1r.v v22, v12
 ; RV32-NEXT:    vmv1r.v v23, v14
 ; RV32-NEXT:    vmv1r.v v24, v16
 ; RV32-NEXT:    vmv1r.v v25, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg6e32.v v20, (a1)
-; RV32-NEXT:    vl1re32.v v14, (a0)
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a3, a1, a2
-; RV32-NEXT:    vl1re32.v v15, (a0)
-; RV32-NEXT:    add a4, a3, a2
-; RV32-NEXT:    add a5, a4, a2
-; RV32-NEXT:    add a6, a5, a2
-; RV32-NEXT:    vl1re32.v v12, (a6)
-; RV32-NEXT:    add a6, a6, a2
-; RV32-NEXT:    vl1re32.v v13, (a6)
-; RV32-NEXT:    vl1re32.v v10, (a4)
-; RV32-NEXT:    vl1re32.v v11, (a5)
-; RV32-NEXT:    vl1re32.v v8, (a1)
-; RV32-NEXT:    vl1re32.v v9, (a3)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a1, a0, a2
-; RV32-NEXT:    add a3, a1, a2
+; RV32-NEXT:    li a1, 6
+; RV32-NEXT:    mul a2, a2, a1
+; RV32-NEXT:    add a2, sp, a2
+; RV32-NEXT:    addi a2, a2, 64
+; RV32-NEXT:    vsseg6e32.v v20, (a2)
+; RV32-NEXT:    vl1re32.v v14, (a0)
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    add a3, a0, a1
+; RV32-NEXT:    vl1re32.v v15, (a3)
+; RV32-NEXT:    slli a3, a1, 2
+; RV32-NEXT:    add a4, a2, a3
+; RV32-NEXT:    vl1re32.v v12, (a4)
+; RV32-NEXT:    add a4, a3, a1
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re32.v v13, (a5)
+; RV32-NEXT:    slli a5, a1, 1
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re32.v v10, (a6)
+; RV32-NEXT:    add a6, a5, a1
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re32.v v11, (a7)
+; RV32-NEXT:    vl1re32.v v8, (a2)
+; RV32-NEXT:    add a2, a2, a1
+; RV32-NEXT:    vl1re32.v v9, (a2)
+; RV32-NEXT:    add a3, a0, a3
 ; RV32-NEXT:    vl1re32.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a2
-; RV32-NEXT:    vl1re32.v v19, (a3)
-; RV32-NEXT:    vl1re32.v v16, (a0)
-; RV32-NEXT:    vl1re32.v v17, (a1)
-; RV32-NEXT:    slli a2, a2, 3
+; RV32-NEXT:    add a4, a0, a4
+; RV32-NEXT:    vl1re32.v v19, (a4)
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    vl1re32.v v16, (a5)
+; RV32-NEXT:    add a0, a0, a6
+; RV32-NEXT:    vl1re32.v v17, (a0)
+; RV32-NEXT:    slli a1, a1, 3
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 12
-; RV32-NEXT:    mul a0, a0, a1
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a0, a0, a2
 ; RV32-NEXT:    add a0, sp, a0
 ; RV32-NEXT:    addi a0, a0, 64
-; RV32-NEXT:    add a2, a0, a2
-; RV32-NEXT:    vs4r.v v16, (a2)
+; RV32-NEXT:    add a1, a0, a1
+; RV32-NEXT:    vs4r.v v16, (a1)
 ; RV32-NEXT:    vs8r.v v8, (a0)
-; RV32-NEXT:    vl8re32.v v16, (a2)
+; RV32-NEXT:    vl8re32.v v16, (a1)
 ; RV32-NEXT:    vl8re32.v v8, (a0)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -10893,52 +11406,56 @@ define <vscale x 24 x float> @vector_interleave_nxv24f32_nxv4f32(<vscale x 4 x f
 ; RV64-NEXT:    vmv1r.v v24, v15
 ; RV64-NEXT:    vmv1r.v v25, v17
 ; RV64-NEXT:    vmv1r.v v26, v19
-; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 6
-; RV64-NEXT:    mul a0, a0, a1
-; RV64-NEXT:    add a0, sp, a0
-; RV64-NEXT:    addi a0, a0, 64
+; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsseg6e32.v v21, (a0)
 ; RV64-NEXT:    vmv1r.v v21, v10
 ; RV64-NEXT:    vmv1r.v v22, v12
 ; RV64-NEXT:    vmv1r.v v23, v14
 ; RV64-NEXT:    vmv1r.v v24, v16
 ; RV64-NEXT:    vmv1r.v v25, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg6e32.v v20, (a1)
-; RV64-NEXT:    vl1re32.v v14, (a0)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a3, a1, a2
-; RV64-NEXT:    vl1re32.v v15, (a0)
-; RV64-NEXT:    add a4, a3, a2
-; RV64-NEXT:    add a5, a4, a2
-; RV64-NEXT:    add a6, a5, a2
-; RV64-NEXT:    vl1re32.v v12, (a6)
-; RV64-NEXT:    add a6, a6, a2
-; RV64-NEXT:    vl1re32.v v13, (a6)
-; RV64-NEXT:    vl1re32.v v10, (a4)
-; RV64-NEXT:    vl1re32.v v11, (a5)
-; RV64-NEXT:    vl1re32.v v8, (a1)
-; RV64-NEXT:    vl1re32.v v9, (a3)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a1, a0, a2
-; RV64-NEXT:    add a3, a1, a2
+; RV64-NEXT:    li a1, 6
+; RV64-NEXT:    mul a2, a2, a1
+; RV64-NEXT:    add a2, sp, a2
+; RV64-NEXT:    addi a2, a2, 64
+; RV64-NEXT:    vsseg6e32.v v20, (a2)
+; RV64-NEXT:    vl1re32.v v14, (a0)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    add a3, a0, a1
+; RV64-NEXT:    vl1re32.v v15, (a3)
+; RV64-NEXT:    slli a3, a1, 2
+; RV64-NEXT:    add a4, a2, a3
+; RV64-NEXT:    vl1re32.v v12, (a4)
+; RV64-NEXT:    add a4, a3, a1
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re32.v v13, (a5)
+; RV64-NEXT:    slli a5, a1, 1
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re32.v v10, (a6)
+; RV64-NEXT:    add a6, a5, a1
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re32.v v11, (a7)
+; RV64-NEXT:    vl1re32.v v8, (a2)
+; RV64-NEXT:    add a2, a2, a1
+; RV64-NEXT:    vl1re32.v v9, (a2)
+; RV64-NEXT:    add a3, a0, a3
 ; RV64-NEXT:    vl1re32.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a2
-; RV64-NEXT:    vl1re32.v v19, (a3)
-; RV64-NEXT:    vl1re32.v v16, (a0)
-; RV64-NEXT:    vl1re32.v v17, (a1)
-; RV64-NEXT:    slli a2, a2, 3
+; RV64-NEXT:    add a4, a0, a4
+; RV64-NEXT:    vl1re32.v v19, (a4)
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    vl1re32.v v16, (a5)
+; RV64-NEXT:    add a0, a0, a6
+; RV64-NEXT:    vl1re32.v v17, (a0)
+; RV64-NEXT:    slli a1, a1, 3
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 12
-; RV64-NEXT:    mul a0, a0, a1
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a0, a0, a2
 ; RV64-NEXT:    add a0, sp, a0
 ; RV64-NEXT:    addi a0, a0, 64
-; RV64-NEXT:    add a2, a0, a2
-; RV64-NEXT:    vs4r.v v16, (a2)
+; RV64-NEXT:    add a1, a0, a1
+; RV64-NEXT:    vs4r.v v16, (a1)
 ; RV64-NEXT:    vs8r.v v8, (a0)
-; RV64-NEXT:    vl8re32.v v16, (a2)
+; RV64-NEXT:    vl8re32.v v16, (a1)
 ; RV64-NEXT:    vl8re32.v v8, (a0)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -10964,52 +11481,56 @@ define <vscale x 24 x float> @vector_interleave_nxv24f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 6
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
-; ZVBB-RV32-NEXT:    add a0, sp, a0
-; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    addi a0, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg6e32.v v21, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg6e32.v v20, (a1)
-; ZVBB-RV32-NEXT:    vl1re32.v v14, (a0)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a3, a2
-; ZVBB-RV32-NEXT:    add a5, a4, a2
-; ZVBB-RV32-NEXT:    add a6, a5, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v12, (a6)
-; ZVBB-RV32-NEXT:    add a6, a6, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v13, (a6)
-; ZVBB-RV32-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV32-NEXT:    vl1re32.v v11, (a5)
-; ZVBB-RV32-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a1, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mul a2, a2, a1
+; ZVBB-RV32-NEXT:    add a2, sp, a2
+; ZVBB-RV32-NEXT:    addi a2, a2, 64
+; ZVBB-RV32-NEXT:    vsseg6e32.v v20, (a2)
+; ZVBB-RV32-NEXT:    vl1re32.v v14, (a0)
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a3, a0, a1
+; ZVBB-RV32-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a1, 2
+; ZVBB-RV32-NEXT:    add a4, a2, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a1
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v13, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a1, 1
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v10, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a1
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v11, (a7)
+; ZVBB-RV32-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a2, a2, a1
+; ZVBB-RV32-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-RV32-NEXT:    add a3, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a2
-; ZVBB-RV32-NEXT:    vl1re32.v v19, (a3)
-; ZVBB-RV32-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV32-NEXT:    slli a2, a2, 3
+; ZVBB-RV32-NEXT:    add a4, a0, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v19, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v16, (a5)
+; ZVBB-RV32-NEXT:    add a0, a0, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV32-NEXT:    slli a1, a1, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 12
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
+; ZVBB-RV32-NEXT:    li a2, 12
+; ZVBB-RV32-NEXT:    mul a0, a0, a2
 ; ZVBB-RV32-NEXT:    add a0, sp, a0
 ; ZVBB-RV32-NEXT:    addi a0, a0, 64
-; ZVBB-RV32-NEXT:    add a2, a0, a2
-; ZVBB-RV32-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV32-NEXT:    add a1, a0, a1
+; ZVBB-RV32-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl8re32.v v16, (a2)
+; ZVBB-RV32-NEXT:    vl8re32.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vl8re32.v v8, (a0)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -11035,52 +11556,56 @@ define <vscale x 24 x float> @vector_interleave_nxv24f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 6
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
-; ZVBB-RV64-NEXT:    add a0, sp, a0
-; ZVBB-RV64-NEXT:    addi a0, a0, 64
+; ZVBB-RV64-NEXT:    addi a0, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg6e32.v v21, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg6e32.v v20, (a1)
-; ZVBB-RV64-NEXT:    vl1re32.v v14, (a0)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a3, a2
-; ZVBB-RV64-NEXT:    add a5, a4, a2
-; ZVBB-RV64-NEXT:    add a6, a5, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v12, (a6)
-; ZVBB-RV64-NEXT:    add a6, a6, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v13, (a6)
-; ZVBB-RV64-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV64-NEXT:    vl1re32.v v11, (a5)
-; ZVBB-RV64-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a1, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mul a2, a2, a1
+; ZVBB-RV64-NEXT:    add a2, sp, a2
+; ZVBB-RV64-NEXT:    addi a2, a2, 64
+; ZVBB-RV64-NEXT:    vsseg6e32.v v20, (a2)
+; ZVBB-RV64-NEXT:    vl1re32.v v14, (a0)
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a3, a0, a1
+; ZVBB-RV64-NEXT:    vl1re32.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a1, 2
+; ZVBB-RV64-NEXT:    add a4, a2, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a1
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v13, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a1, 1
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v10, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a1
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v11, (a7)
+; ZVBB-RV64-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a2, a2, a1
+; ZVBB-RV64-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-RV64-NEXT:    add a3, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a2
-; ZVBB-RV64-NEXT:    vl1re32.v v19, (a3)
-; ZVBB-RV64-NEXT:    vl1re32.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV64-NEXT:    slli a2, a2, 3
+; ZVBB-RV64-NEXT:    add a4, a0, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v19, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v16, (a5)
+; ZVBB-RV64-NEXT:    add a0, a0, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v17, (a0)
+; ZVBB-RV64-NEXT:    slli a1, a1, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 12
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
+; ZVBB-RV64-NEXT:    li a2, 12
+; ZVBB-RV64-NEXT:    mul a0, a0, a2
 ; ZVBB-RV64-NEXT:    add a0, sp, a0
 ; ZVBB-RV64-NEXT:    addi a0, a0, 64
-; ZVBB-RV64-NEXT:    add a2, a0, a2
-; ZVBB-RV64-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV64-NEXT:    add a1, a0, a1
+; ZVBB-RV64-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl8re32.v v16, (a2)
+; ZVBB-RV64-NEXT:    vl8re32.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vl8re32.v v8, (a0)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -11106,52 +11631,56 @@ define <vscale x 24 x float> @vector_interleave_nxv24f32_nxv4f32(<vscale x 4 x f
 ; ZVZIP-NEXT:    vmv1r.v v24, v15
 ; ZVZIP-NEXT:    vmv1r.v v25, v17
 ; ZVZIP-NEXT:    vmv1r.v v26, v19
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 6
-; ZVZIP-NEXT:    mul a0, a0, a1
-; ZVZIP-NEXT:    add a0, sp, a0
-; ZVZIP-NEXT:    addi a0, a0, 64
+; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsseg6e32.v v21, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v21, v10
 ; ZVZIP-NEXT:    vmv1r.v v22, v12
 ; ZVZIP-NEXT:    vmv1r.v v23, v14
 ; ZVZIP-NEXT:    vmv1r.v v24, v16
 ; ZVZIP-NEXT:    vmv1r.v v25, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg6e32.v v20, (a1)
-; ZVZIP-NEXT:    vl1re32.v v14, (a0)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
-; ZVZIP-NEXT:    vl1re32.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a3, a2
-; ZVZIP-NEXT:    add a5, a4, a2
-; ZVZIP-NEXT:    add a6, a5, a2
-; ZVZIP-NEXT:    vl1re32.v v12, (a6)
-; ZVZIP-NEXT:    add a6, a6, a2
-; ZVZIP-NEXT:    vl1re32.v v13, (a6)
-; ZVZIP-NEXT:    vl1re32.v v10, (a4)
-; ZVZIP-NEXT:    vl1re32.v v11, (a5)
-; ZVZIP-NEXT:    vl1re32.v v8, (a1)
-; ZVZIP-NEXT:    vl1re32.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a1, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
+; ZVZIP-NEXT:    li a1, 6
+; ZVZIP-NEXT:    mul a2, a2, a1
+; ZVZIP-NEXT:    add a2, sp, a2
+; ZVZIP-NEXT:    addi a2, a2, 64
+; ZVZIP-NEXT:    vsseg6e32.v v20, (a2)
+; ZVZIP-NEXT:    vl1re32.v v14, (a0)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    add a3, a0, a1
+; ZVZIP-NEXT:    vl1re32.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a1, 2
+; ZVZIP-NEXT:    add a4, a2, a3
+; ZVZIP-NEXT:    vl1re32.v v12, (a4)
+; ZVZIP-NEXT:    add a4, a3, a1
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re32.v v13, (a5)
+; ZVZIP-NEXT:    slli a5, a1, 1
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re32.v v10, (a6)
+; ZVZIP-NEXT:    add a6, a5, a1
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re32.v v11, (a7)
+; ZVZIP-NEXT:    vl1re32.v v8, (a2)
+; ZVZIP-NEXT:    add a2, a2, a1
+; ZVZIP-NEXT:    vl1re32.v v9, (a2)
+; ZVZIP-NEXT:    add a3, a0, a3
 ; ZVZIP-NEXT:    vl1re32.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a2
-; ZVZIP-NEXT:    vl1re32.v v19, (a3)
-; ZVZIP-NEXT:    vl1re32.v v16, (a0)
-; ZVZIP-NEXT:    vl1re32.v v17, (a1)
-; ZVZIP-NEXT:    slli a2, a2, 3
+; ZVZIP-NEXT:    add a4, a0, a4
+; ZVZIP-NEXT:    vl1re32.v v19, (a4)
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    vl1re32.v v16, (a5)
+; ZVZIP-NEXT:    add a0, a0, a6
+; ZVZIP-NEXT:    vl1re32.v v17, (a0)
+; ZVZIP-NEXT:    slli a1, a1, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 12
-; ZVZIP-NEXT:    mul a0, a0, a1
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a0, a0, a2
 ; ZVZIP-NEXT:    add a0, sp, a0
 ; ZVZIP-NEXT:    addi a0, a0, 64
-; ZVZIP-NEXT:    add a2, a0, a2
-; ZVZIP-NEXT:    vs4r.v v16, (a2)
+; ZVZIP-NEXT:    add a1, a0, a1
+; ZVZIP-NEXT:    vs4r.v v16, (a1)
 ; ZVZIP-NEXT:    vs8r.v v8, (a0)
-; ZVZIP-NEXT:    vl8re32.v v16, (a2)
+; ZVZIP-NEXT:    vl8re32.v v16, (a1)
 ; ZVZIP-NEXT:    vl8re32.v v8, (a0)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -11174,15 +11703,17 @@ define <vscale x 6 x double> @vector_interleave_nxv6f64_nxv1f64(<vscale x 1 x do
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vsseg6e64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re64.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re64.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a2, a3, a2
+; CHECK-NEXT:    vl1re64.v v11, (a2)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
-; CHECK-NEXT:    vl1re64.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re64.v v12, (a3)
+; CHECK-NEXT:    vl1re64.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re64.v v12, (a0)
 ; CHECK-NEXT:    add a1, a3, a1
 ; CHECK-NEXT:    vl1re64.v v13, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
@@ -11203,15 +11734,17 @@ define <vscale x 6 x double> @vector_interleave_nxv6f64_nxv1f64(<vscale x 1 x do
 ; ZVBB-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; ZVBB-NEXT:    vsseg6e64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re64.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re64.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a2, a3, a2
+; ZVBB-NEXT:    vl1re64.v v11, (a2)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-NEXT:    vl1re64.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re64.v v12, (a3)
+; ZVBB-NEXT:    vl1re64.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re64.v v12, (a0)
 ; ZVBB-NEXT:    add a1, a3, a1
 ; ZVBB-NEXT:    vl1re64.v v13, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
@@ -11243,52 +11776,56 @@ define <vscale x 12 x double> @vector_interleave_nxv12f64_nxv2f64(<vscale x 2 x
 ; RV32-NEXT:    vmv1r.v v24, v15
 ; RV32-NEXT:    vmv1r.v v25, v17
 ; RV32-NEXT:    vmv1r.v v26, v19
-; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 6
-; RV32-NEXT:    mul a0, a0, a1
-; RV32-NEXT:    add a0, sp, a0
-; RV32-NEXT:    addi a0, a0, 64
+; RV32-NEXT:    addi a0, sp, 64
 ; RV32-NEXT:    vsseg6e64.v v21, (a0)
 ; RV32-NEXT:    vmv1r.v v21, v10
 ; RV32-NEXT:    vmv1r.v v22, v12
 ; RV32-NEXT:    vmv1r.v v23, v14
 ; RV32-NEXT:    vmv1r.v v24, v16
 ; RV32-NEXT:    vmv1r.v v25, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg6e64.v v20, (a1)
+; RV32-NEXT:    csrr a2, vlenb
+; RV32-NEXT:    li a1, 6
+; RV32-NEXT:    mul a2, a2, a1
+; RV32-NEXT:    add a2, sp, a2
+; RV32-NEXT:    addi a2, a2, 64
+; RV32-NEXT:    vsseg6e64.v v20, (a2)
 ; RV32-NEXT:    vl1re64.v v14, (a0)
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a3, a1, a2
-; RV32-NEXT:    vl1re64.v v15, (a0)
-; RV32-NEXT:    add a4, a3, a2
-; RV32-NEXT:    add a5, a4, a2
-; RV32-NEXT:    add a6, a5, a2
-; RV32-NEXT:    vl1re64.v v12, (a6)
-; RV32-NEXT:    add a6, a6, a2
-; RV32-NEXT:    vl1re64.v v13, (a6)
-; RV32-NEXT:    vl1re64.v v10, (a4)
-; RV32-NEXT:    vl1re64.v v11, (a5)
-; RV32-NEXT:    vl1re64.v v8, (a1)
-; RV32-NEXT:    vl1re64.v v9, (a3)
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    add a1, a0, a2
-; RV32-NEXT:    add a3, a1, a2
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    add a3, a0, a1
+; RV32-NEXT:    vl1re64.v v15, (a3)
+; RV32-NEXT:    slli a3, a1, 2
+; RV32-NEXT:    add a4, a2, a3
+; RV32-NEXT:    vl1re64.v v12, (a4)
+; RV32-NEXT:    add a4, a3, a1
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re64.v v13, (a5)
+; RV32-NEXT:    slli a5, a1, 1
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re64.v v10, (a6)
+; RV32-NEXT:    add a6, a5, a1
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re64.v v11, (a7)
+; RV32-NEXT:    vl1re64.v v8, (a2)
+; RV32-NEXT:    add a2, a2, a1
+; RV32-NEXT:    vl1re64.v v9, (a2)
+; RV32-NEXT:    add a3, a0, a3
 ; RV32-NEXT:    vl1re64.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a2
-; RV32-NEXT:    vl1re64.v v19, (a3)
-; RV32-NEXT:    vl1re64.v v16, (a0)
-; RV32-NEXT:    vl1re64.v v17, (a1)
-; RV32-NEXT:    slli a2, a2, 3
+; RV32-NEXT:    add a4, a0, a4
+; RV32-NEXT:    vl1re64.v v19, (a4)
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    vl1re64.v v16, (a5)
+; RV32-NEXT:    add a0, a0, a6
+; RV32-NEXT:    vl1re64.v v17, (a0)
+; RV32-NEXT:    slli a1, a1, 3
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    li a1, 12
-; RV32-NEXT:    mul a0, a0, a1
+; RV32-NEXT:    li a2, 12
+; RV32-NEXT:    mul a0, a0, a2
 ; RV32-NEXT:    add a0, sp, a0
 ; RV32-NEXT:    addi a0, a0, 64
-; RV32-NEXT:    add a2, a0, a2
-; RV32-NEXT:    vs4r.v v16, (a2)
+; RV32-NEXT:    add a1, a0, a1
+; RV32-NEXT:    vs4r.v v16, (a1)
 ; RV32-NEXT:    vs8r.v v8, (a0)
-; RV32-NEXT:    vl8re64.v v16, (a2)
+; RV32-NEXT:    vl8re64.v v16, (a1)
 ; RV32-NEXT:    vl8re64.v v8, (a0)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -11314,52 +11851,56 @@ define <vscale x 12 x double> @vector_interleave_nxv12f64_nxv2f64(<vscale x 2 x
 ; RV64-NEXT:    vmv1r.v v24, v15
 ; RV64-NEXT:    vmv1r.v v25, v17
 ; RV64-NEXT:    vmv1r.v v26, v19
-; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 6
-; RV64-NEXT:    mul a0, a0, a1
-; RV64-NEXT:    add a0, sp, a0
-; RV64-NEXT:    addi a0, a0, 64
+; RV64-NEXT:    addi a0, sp, 64
 ; RV64-NEXT:    vsseg6e64.v v21, (a0)
 ; RV64-NEXT:    vmv1r.v v21, v10
 ; RV64-NEXT:    vmv1r.v v22, v12
 ; RV64-NEXT:    vmv1r.v v23, v14
 ; RV64-NEXT:    vmv1r.v v24, v16
 ; RV64-NEXT:    vmv1r.v v25, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg6e64.v v20, (a1)
-; RV64-NEXT:    vl1re64.v v14, (a0)
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a3, a1, a2
-; RV64-NEXT:    vl1re64.v v15, (a0)
-; RV64-NEXT:    add a4, a3, a2
-; RV64-NEXT:    add a5, a4, a2
-; RV64-NEXT:    add a6, a5, a2
-; RV64-NEXT:    vl1re64.v v12, (a6)
-; RV64-NEXT:    add a6, a6, a2
-; RV64-NEXT:    vl1re64.v v13, (a6)
-; RV64-NEXT:    vl1re64.v v10, (a4)
-; RV64-NEXT:    vl1re64.v v11, (a5)
-; RV64-NEXT:    vl1re64.v v8, (a1)
-; RV64-NEXT:    vl1re64.v v9, (a3)
-; RV64-NEXT:    add a0, a0, a2
-; RV64-NEXT:    add a1, a0, a2
-; RV64-NEXT:    add a3, a1, a2
+; RV64-NEXT:    li a1, 6
+; RV64-NEXT:    mul a2, a2, a1
+; RV64-NEXT:    add a2, sp, a2
+; RV64-NEXT:    addi a2, a2, 64
+; RV64-NEXT:    vsseg6e64.v v20, (a2)
+; RV64-NEXT:    vl1re64.v v14, (a0)
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    add a3, a0, a1
+; RV64-NEXT:    vl1re64.v v15, (a3)
+; RV64-NEXT:    slli a3, a1, 2
+; RV64-NEXT:    add a4, a2, a3
+; RV64-NEXT:    vl1re64.v v12, (a4)
+; RV64-NEXT:    add a4, a3, a1
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re64.v v13, (a5)
+; RV64-NEXT:    slli a5, a1, 1
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re64.v v10, (a6)
+; RV64-NEXT:    add a6, a5, a1
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re64.v v11, (a7)
+; RV64-NEXT:    vl1re64.v v8, (a2)
+; RV64-NEXT:    add a2, a2, a1
+; RV64-NEXT:    vl1re64.v v9, (a2)
+; RV64-NEXT:    add a3, a0, a3
 ; RV64-NEXT:    vl1re64.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a2
-; RV64-NEXT:    vl1re64.v v19, (a3)
-; RV64-NEXT:    vl1re64.v v16, (a0)
-; RV64-NEXT:    vl1re64.v v17, (a1)
-; RV64-NEXT:    slli a2, a2, 3
+; RV64-NEXT:    add a4, a0, a4
+; RV64-NEXT:    vl1re64.v v19, (a4)
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    vl1re64.v v16, (a5)
+; RV64-NEXT:    add a0, a0, a6
+; RV64-NEXT:    vl1re64.v v17, (a0)
+; RV64-NEXT:    slli a1, a1, 3
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    li a1, 12
-; RV64-NEXT:    mul a0, a0, a1
+; RV64-NEXT:    li a2, 12
+; RV64-NEXT:    mul a0, a0, a2
 ; RV64-NEXT:    add a0, sp, a0
 ; RV64-NEXT:    addi a0, a0, 64
-; RV64-NEXT:    add a2, a0, a2
-; RV64-NEXT:    vs4r.v v16, (a2)
+; RV64-NEXT:    add a1, a0, a1
+; RV64-NEXT:    vs4r.v v16, (a1)
 ; RV64-NEXT:    vs8r.v v8, (a0)
-; RV64-NEXT:    vl8re64.v v16, (a2)
+; RV64-NEXT:    vl8re64.v v16, (a1)
 ; RV64-NEXT:    vl8re64.v v8, (a0)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -11385,52 +11926,56 @@ define <vscale x 12 x double> @vector_interleave_nxv12f64_nxv2f64(<vscale x 2 x
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 6
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
-; ZVBB-RV32-NEXT:    add a0, sp, a0
-; ZVBB-RV32-NEXT:    addi a0, a0, 64
+; ZVBB-RV32-NEXT:    addi a0, sp, 64
 ; ZVBB-RV32-NEXT:    vsseg6e64.v v21, (a0)
 ; ZVBB-RV32-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV32-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV32-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg6e64.v v20, (a1)
-; ZVBB-RV32-NEXT:    vl1re64.v v14, (a0)
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV32-NEXT:    add a4, a3, a2
-; ZVBB-RV32-NEXT:    add a5, a4, a2
-; ZVBB-RV32-NEXT:    add a6, a5, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v12, (a6)
-; ZVBB-RV32-NEXT:    add a6, a6, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v13, (a6)
-; ZVBB-RV32-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV32-NEXT:    vl1re64.v v11, (a5)
-; ZVBB-RV32-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a0, a0, a2
-; ZVBB-RV32-NEXT:    add a1, a0, a2
-; ZVBB-RV32-NEXT:    add a3, a1, a2
+; ZVBB-RV32-NEXT:    li a1, 6
+; ZVBB-RV32-NEXT:    mul a2, a2, a1
+; ZVBB-RV32-NEXT:    add a2, sp, a2
+; ZVBB-RV32-NEXT:    addi a2, a2, 64
+; ZVBB-RV32-NEXT:    vsseg6e64.v v20, (a2)
+; ZVBB-RV32-NEXT:    vl1re64.v v14, (a0)
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    add a3, a0, a1
+; ZVBB-RV32-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV32-NEXT:    slli a3, a1, 2
+; ZVBB-RV32-NEXT:    add a4, a2, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV32-NEXT:    add a4, a3, a1
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v13, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a1, 1
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v10, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a1
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v11, (a7)
+; ZVBB-RV32-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a2, a2, a1
+; ZVBB-RV32-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-RV32-NEXT:    add a3, a0, a3
 ; ZVBB-RV32-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a2
-; ZVBB-RV32-NEXT:    vl1re64.v v19, (a3)
-; ZVBB-RV32-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV32-NEXT:    slli a2, a2, 3
+; ZVBB-RV32-NEXT:    add a4, a0, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v19, (a4)
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v16, (a5)
+; ZVBB-RV32-NEXT:    add a0, a0, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV32-NEXT:    slli a1, a1, 3
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    li a1, 12
-; ZVBB-RV32-NEXT:    mul a0, a0, a1
+; ZVBB-RV32-NEXT:    li a2, 12
+; ZVBB-RV32-NEXT:    mul a0, a0, a2
 ; ZVBB-RV32-NEXT:    add a0, sp, a0
 ; ZVBB-RV32-NEXT:    addi a0, a0, 64
-; ZVBB-RV32-NEXT:    add a2, a0, a2
-; ZVBB-RV32-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV32-NEXT:    add a1, a0, a1
+; ZVBB-RV32-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV32-NEXT:    vl8re64.v v16, (a2)
+; ZVBB-RV32-NEXT:    vl8re64.v v16, (a1)
 ; ZVBB-RV32-NEXT:    vl8re64.v v8, (a0)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
@@ -11456,52 +12001,56 @@ define <vscale x 12 x double> @vector_interleave_nxv12f64_nxv2f64(<vscale x 2 x
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v17
 ; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
-; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 6
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
-; ZVBB-RV64-NEXT:    add a0, sp, a0
-; ZVBB-RV64-NEXT:    addi a0, a0, 64
+; ZVBB-RV64-NEXT:    addi a0, sp, 64
 ; ZVBB-RV64-NEXT:    vsseg6e64.v v21, (a0)
 ; ZVBB-RV64-NEXT:    vmv1r.v v21, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v22, v12
 ; ZVBB-RV64-NEXT:    vmv1r.v v23, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v24, v16
 ; ZVBB-RV64-NEXT:    vmv1r.v v25, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg6e64.v v20, (a1)
-; ZVBB-RV64-NEXT:    vl1re64.v v14, (a0)
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v15, (a0)
-; ZVBB-RV64-NEXT:    add a4, a3, a2
-; ZVBB-RV64-NEXT:    add a5, a4, a2
-; ZVBB-RV64-NEXT:    add a6, a5, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v12, (a6)
-; ZVBB-RV64-NEXT:    add a6, a6, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v13, (a6)
-; ZVBB-RV64-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV64-NEXT:    vl1re64.v v11, (a5)
-; ZVBB-RV64-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a0, a0, a2
-; ZVBB-RV64-NEXT:    add a1, a0, a2
-; ZVBB-RV64-NEXT:    add a3, a1, a2
+; ZVBB-RV64-NEXT:    li a1, 6
+; ZVBB-RV64-NEXT:    mul a2, a2, a1
+; ZVBB-RV64-NEXT:    add a2, sp, a2
+; ZVBB-RV64-NEXT:    addi a2, a2, 64
+; ZVBB-RV64-NEXT:    vsseg6e64.v v20, (a2)
+; ZVBB-RV64-NEXT:    vl1re64.v v14, (a0)
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    add a3, a0, a1
+; ZVBB-RV64-NEXT:    vl1re64.v v15, (a3)
+; ZVBB-RV64-NEXT:    slli a3, a1, 2
+; ZVBB-RV64-NEXT:    add a4, a2, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-RV64-NEXT:    add a4, a3, a1
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v13, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a1, 1
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v10, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a1
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v11, (a7)
+; ZVBB-RV64-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a2, a2, a1
+; ZVBB-RV64-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-RV64-NEXT:    add a3, a0, a3
 ; ZVBB-RV64-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a2
-; ZVBB-RV64-NEXT:    vl1re64.v v19, (a3)
-; ZVBB-RV64-NEXT:    vl1re64.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV64-NEXT:    slli a2, a2, 3
+; ZVBB-RV64-NEXT:    add a4, a0, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v19, (a4)
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v16, (a5)
+; ZVBB-RV64-NEXT:    add a0, a0, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v17, (a0)
+; ZVBB-RV64-NEXT:    slli a1, a1, 3
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    li a1, 12
-; ZVBB-RV64-NEXT:    mul a0, a0, a1
+; ZVBB-RV64-NEXT:    li a2, 12
+; ZVBB-RV64-NEXT:    mul a0, a0, a2
 ; ZVBB-RV64-NEXT:    add a0, sp, a0
 ; ZVBB-RV64-NEXT:    addi a0, a0, 64
-; ZVBB-RV64-NEXT:    add a2, a0, a2
-; ZVBB-RV64-NEXT:    vs4r.v v16, (a2)
+; ZVBB-RV64-NEXT:    add a1, a0, a1
+; ZVBB-RV64-NEXT:    vs4r.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vs8r.v v8, (a0)
-; ZVBB-RV64-NEXT:    vl8re64.v v16, (a2)
+; ZVBB-RV64-NEXT:    vl8re64.v v16, (a1)
 ; ZVBB-RV64-NEXT:    vl8re64.v v8, (a0)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -11527,52 +12076,56 @@ define <vscale x 12 x double> @vector_interleave_nxv12f64_nxv2f64(<vscale x 2 x
 ; ZVZIP-NEXT:    vmv1r.v v24, v15
 ; ZVZIP-NEXT:    vmv1r.v v25, v17
 ; ZVZIP-NEXT:    vmv1r.v v26, v19
-; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 6
-; ZVZIP-NEXT:    mul a0, a0, a1
-; ZVZIP-NEXT:    add a0, sp, a0
-; ZVZIP-NEXT:    addi a0, a0, 64
+; ZVZIP-NEXT:    addi a0, sp, 64
 ; ZVZIP-NEXT:    vsseg6e64.v v21, (a0)
 ; ZVZIP-NEXT:    vmv1r.v v21, v10
 ; ZVZIP-NEXT:    vmv1r.v v22, v12
 ; ZVZIP-NEXT:    vmv1r.v v23, v14
 ; ZVZIP-NEXT:    vmv1r.v v24, v16
 ; ZVZIP-NEXT:    vmv1r.v v25, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg6e64.v v20, (a1)
-; ZVZIP-NEXT:    vl1re64.v v14, (a0)
 ; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
-; ZVZIP-NEXT:    vl1re64.v v15, (a0)
-; ZVZIP-NEXT:    add a4, a3, a2
-; ZVZIP-NEXT:    add a5, a4, a2
-; ZVZIP-NEXT:    add a6, a5, a2
-; ZVZIP-NEXT:    vl1re64.v v12, (a6)
-; ZVZIP-NEXT:    add a6, a6, a2
-; ZVZIP-NEXT:    vl1re64.v v13, (a6)
-; ZVZIP-NEXT:    vl1re64.v v10, (a4)
-; ZVZIP-NEXT:    vl1re64.v v11, (a5)
-; ZVZIP-NEXT:    vl1re64.v v8, (a1)
-; ZVZIP-NEXT:    vl1re64.v v9, (a3)
-; ZVZIP-NEXT:    add a0, a0, a2
-; ZVZIP-NEXT:    add a1, a0, a2
-; ZVZIP-NEXT:    add a3, a1, a2
+; ZVZIP-NEXT:    li a1, 6
+; ZVZIP-NEXT:    mul a2, a2, a1
+; ZVZIP-NEXT:    add a2, sp, a2
+; ZVZIP-NEXT:    addi a2, a2, 64
+; ZVZIP-NEXT:    vsseg6e64.v v20, (a2)
+; ZVZIP-NEXT:    vl1re64.v v14, (a0)
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    add a3, a0, a1
+; ZVZIP-NEXT:    vl1re64.v v15, (a3)
+; ZVZIP-NEXT:    slli a3, a1, 2
+; ZVZIP-NEXT:    add a4, a2, a3
+; ZVZIP-NEXT:    vl1re64.v v12, (a4)
+; ZVZIP-NEXT:    add a4, a3, a1
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re64.v v13, (a5)
+; ZVZIP-NEXT:    slli a5, a1, 1
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re64.v v10, (a6)
+; ZVZIP-NEXT:    add a6, a5, a1
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re64.v v11, (a7)
+; ZVZIP-NEXT:    vl1re64.v v8, (a2)
+; ZVZIP-NEXT:    add a2, a2, a1
+; ZVZIP-NEXT:    vl1re64.v v9, (a2)
+; ZVZIP-NEXT:    add a3, a0, a3
 ; ZVZIP-NEXT:    vl1re64.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a2
-; ZVZIP-NEXT:    vl1re64.v v19, (a3)
-; ZVZIP-NEXT:    vl1re64.v v16, (a0)
-; ZVZIP-NEXT:    vl1re64.v v17, (a1)
-; ZVZIP-NEXT:    slli a2, a2, 3
+; ZVZIP-NEXT:    add a4, a0, a4
+; ZVZIP-NEXT:    vl1re64.v v19, (a4)
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    vl1re64.v v16, (a5)
+; ZVZIP-NEXT:    add a0, a0, a6
+; ZVZIP-NEXT:    vl1re64.v v17, (a0)
+; ZVZIP-NEXT:    slli a1, a1, 3
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    li a1, 12
-; ZVZIP-NEXT:    mul a0, a0, a1
+; ZVZIP-NEXT:    li a2, 12
+; ZVZIP-NEXT:    mul a0, a0, a2
 ; ZVZIP-NEXT:    add a0, sp, a0
 ; ZVZIP-NEXT:    addi a0, a0, 64
-; ZVZIP-NEXT:    add a2, a0, a2
-; ZVZIP-NEXT:    vs4r.v v16, (a2)
+; ZVZIP-NEXT:    add a1, a0, a1
+; ZVZIP-NEXT:    vs4r.v v16, (a1)
 ; ZVZIP-NEXT:    vs8r.v v8, (a0)
-; ZVZIP-NEXT:    vl8re64.v v16, (a2)
+; ZVZIP-NEXT:    vl8re64.v v16, (a1)
 ; ZVZIP-NEXT:    vl8re64.v v8, (a0)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
@@ -11595,28 +12148,30 @@ define <vscale x 14 x half> @vector_interleave_nxv14f16_nxv2f16(<vscale x 2 x ha
 ; CHECK-NEXT:    vsseg7e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    slli a3, a1, 1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vle16.v v8, (a7)
-; CHECK-NEXT:    vle16.v v10, (a6)
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a6, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v10, v8, a1
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vsetvli a6, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a5)
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v12, (a3)
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v9, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    add a4, a0, a3
+; CHECK-NEXT:    vle16.v v10, (a4)
+; CHECK-NEXT:    srli a4, a1, 2
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v10, v8, a4
+; CHECK-NEXT:    add a3, a1, a3
+; CHECK-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v11, (a3)
+; CHECK-NEXT:    add a3, a1, a2
+; CHECK-NEXT:    vle16.v v8, (a3)
+; CHECK-NEXT:    vle16.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v12, (a2)
+; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v9, v8, a4
+; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
 ; CHECK-NEXT:    vle16.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v12, a1
+; CHECK-NEXT:    vslideup.vx v8, v12, a4
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -11634,28 +12189,30 @@ define <vscale x 14 x half> @vector_interleave_nxv14f16_nxv2f16(<vscale x 2 x ha
 ; ZVBB-NEXT:    vsseg7e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    slli a3, a1, 1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vle16.v v8, (a7)
-; ZVBB-NEXT:    vle16.v v10, (a6)
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a6, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v10, v8, a1
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vsetvli a6, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a5)
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v12, (a3)
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v9, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    add a4, a0, a3
+; ZVBB-NEXT:    vle16.v v10, (a4)
+; ZVBB-NEXT:    srli a4, a1, 2
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v10, v8, a4
+; ZVBB-NEXT:    add a3, a1, a3
+; ZVBB-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a1, a2
+; ZVBB-NEXT:    vle16.v v8, (a3)
+; ZVBB-NEXT:    vle16.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v12, (a2)
+; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v9, v8, a4
+; ZVBB-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vle16.v v8, (a0)
 ; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v12, a1
+; ZVBB-NEXT:    vslideup.vx v8, v12, a4
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -11677,19 +12234,22 @@ define <vscale x 28 x half> @vector_interleave_nxv28f16_nxv4f16(<vscale x 4 x ha
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg7e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vl1re16.v v11, (a4)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v12, (a3)
+; CHECK-NEXT:    vl1re16.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a4, a0, a1
+; CHECK-NEXT:    vl1re16.v v12, (a4)
 ; CHECK-NEXT:    add a3, a3, a1
 ; CHECK-NEXT:    vl1re16.v v13, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re16.v v14, (a1)
+; CHECK-NEXT:    add a1, a1, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re16.v v14, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 3
 ; CHECK-NEXT:    sub a0, a1, a0
@@ -11708,19 +12268,22 @@ define <vscale x 28 x half> @vector_interleave_nxv28f16_nxv4f16(<vscale x 4 x ha
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg7e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a4)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v12, (a3)
+; ZVBB-NEXT:    vl1re16.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a4, a0, a1
+; ZVBB-NEXT:    vl1re16.v v12, (a4)
 ; ZVBB-NEXT:    add a3, a3, a1
 ; ZVBB-NEXT:    vl1re16.v v13, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re16.v v14, (a1)
+; ZVBB-NEXT:    add a1, a1, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re16.v v14, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 3
 ; ZVBB-NEXT:    sub a0, a1, a0
@@ -11754,59 +12317,63 @@ define <vscale x 56 x half> @vector_interleave_nxv56f16_nxv8f16(<vscale x 8 x ha
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e16.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e16.v v21, (a2)
+; RV32-NEXT:    vsseg7e16.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e16.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1re16.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v11, (a4)
-; RV32-NEXT:    vl1re16.v v8, (a1)
-; RV32-NEXT:    vl1re16.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v14, (a4)
-; RV32-NEXT:    vl1re16.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1re16.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re16.v v11, (a5)
+; RV32-NEXT:    vl1re16.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1re16.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re16.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re16.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1re16.v v14, (a2)
+; RV32-NEXT:    vl1re16.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re16.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1re16.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1re16.v v16, (a2)
-; RV32-NEXT:    vl1re16.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re16.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1re16.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1re16.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8re16.v v16, (a0)
-; RV32-NEXT:    vl8re16.v v8, (a2)
+; RV32-NEXT:    vl8re16.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -11835,59 +12402,63 @@ define <vscale x 56 x half> @vector_interleave_nxv56f16_nxv8f16(<vscale x 8 x ha
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e16.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e16.v v21, (a2)
+; RV64-NEXT:    vsseg7e16.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e16.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1re16.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v11, (a4)
-; RV64-NEXT:    vl1re16.v v8, (a1)
-; RV64-NEXT:    vl1re16.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v14, (a4)
-; RV64-NEXT:    vl1re16.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1re16.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v19, (a3)
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re16.v v11, (a5)
+; RV64-NEXT:    vl1re16.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1re16.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re16.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re16.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1re16.v v14, (a2)
+; RV64-NEXT:    vl1re16.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re16.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1re16.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
 ; RV64-NEXT:    vl1re16.v v16, (a2)
-; RV64-NEXT:    vl1re16.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re16.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1re16.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1re16.v v21, (a1)
 ; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8re16.v v16, (a0)
-; RV64-NEXT:    vl8re16.v v8, (a2)
+; RV64-NEXT:    vl8re16.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -11916,59 +12487,63 @@ define <vscale x 56 x half> @vector_interleave_nxv56f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e16.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e16.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e16.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1re16.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1re16.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1re16.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1re16.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8re16.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8re16.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -11997,59 +12572,63 @@ define <vscale x 56 x half> @vector_interleave_nxv56f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e16.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e16.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e16.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1re16.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1re16.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1re16.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1re16.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8re16.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8re16.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -12076,61 +12655,65 @@ define <vscale x 56 x half> @vector_interleave_nxv56f16_nxv8f16(<vscale x 8 x ha
 ; ZVZIP-NEXT:    vmv1r.v v5, v24
 ; ZVZIP-NEXT:    vmv1r.v v7, v26
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
-; ZVZIP-NEXT:    vmv1r.v v4, v14
-; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e16.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    vmv1r.v v4, v14
+; ZVZIP-NEXT:    vmv1r.v v6, v18
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e16.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e16.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1re16.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v11, (a4)
-; ZVZIP-NEXT:    vl1re16.v v8, (a1)
-; ZVZIP-NEXT:    vl1re16.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v14, (a4)
-; ZVZIP-NEXT:    vl1re16.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1re16.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re16.v v11, (a5)
+; ZVZIP-NEXT:    vl1re16.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1re16.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re16.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re16.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1re16.v v14, (a2)
+; ZVZIP-NEXT:    vl1re16.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re16.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1re16.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1re16.v v16, (a2)
-; ZVZIP-NEXT:    vl1re16.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re16.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1re16.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1re16.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8re16.v v16, (a0)
-; ZVZIP-NEXT:    vl8re16.v v8, (a2)
+; ZVZIP-NEXT:    vl8re16.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -12152,28 +12735,30 @@ define <vscale x 14 x bfloat> @vector_interleave_nxv14bf16_nxv2bf16(<vscale x 2
 ; CHECK-NEXT:    vsseg7e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    slli a3, a1, 1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vle16.v v8, (a7)
-; CHECK-NEXT:    vle16.v v10, (a6)
-; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a6, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v10, v8, a1
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vsetvli a6, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v11, (a2)
-; CHECK-NEXT:    vle16.v v8, (a5)
-; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v12, (a3)
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v9, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vle16.v v8, (a4)
+; CHECK-NEXT:    add a4, a0, a3
+; CHECK-NEXT:    vle16.v v10, (a4)
+; CHECK-NEXT:    srli a4, a1, 2
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v10, v8, a4
+; CHECK-NEXT:    add a3, a1, a3
+; CHECK-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v11, (a3)
+; CHECK-NEXT:    add a3, a1, a2
+; CHECK-NEXT:    vle16.v v8, (a3)
+; CHECK-NEXT:    vle16.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v12, (a2)
+; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v9, v8, a4
+; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
 ; CHECK-NEXT:    vle16.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v12, a1
+; CHECK-NEXT:    vslideup.vx v8, v12, a4
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -12191,28 +12776,30 @@ define <vscale x 14 x bfloat> @vector_interleave_nxv14bf16_nxv2bf16(<vscale x 2
 ; ZVBB-NEXT:    vsseg7e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    slli a3, a1, 1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vle16.v v8, (a7)
-; ZVBB-NEXT:    vle16.v v10, (a6)
-; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a6, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v10, v8, a1
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vsetvli a6, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v11, (a2)
-; ZVBB-NEXT:    vle16.v v8, (a5)
-; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v12, (a3)
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v9, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vle16.v v8, (a4)
+; ZVBB-NEXT:    add a4, a0, a3
+; ZVBB-NEXT:    vle16.v v10, (a4)
+; ZVBB-NEXT:    srli a4, a1, 2
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v10, v8, a4
+; ZVBB-NEXT:    add a3, a1, a3
+; ZVBB-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a1, a2
+; ZVBB-NEXT:    vle16.v v8, (a3)
+; ZVBB-NEXT:    vle16.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v12, (a2)
+; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v9, v8, a4
+; ZVBB-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vle16.v v8, (a0)
 ; ZVBB-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v12, a1
+; ZVBB-NEXT:    vslideup.vx v8, v12, a4
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -12234,19 +12821,22 @@ define <vscale x 28 x bfloat> @vector_interleave_nxv28bf16_nxv4bf16(<vscale x 4
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg7e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vl1re16.v v11, (a4)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re16.v v12, (a3)
+; CHECK-NEXT:    vl1re16.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a4, a0, a1
+; CHECK-NEXT:    vl1re16.v v12, (a4)
 ; CHECK-NEXT:    add a3, a3, a1
 ; CHECK-NEXT:    vl1re16.v v13, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re16.v v14, (a1)
+; CHECK-NEXT:    add a1, a1, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re16.v v14, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 3
 ; CHECK-NEXT:    sub a0, a1, a0
@@ -12265,19 +12855,22 @@ define <vscale x 28 x bfloat> @vector_interleave_nxv28bf16_nxv4bf16(<vscale x 4
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg7e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a4)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re16.v v12, (a3)
+; ZVBB-NEXT:    vl1re16.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a4, a0, a1
+; ZVBB-NEXT:    vl1re16.v v12, (a4)
 ; ZVBB-NEXT:    add a3, a3, a1
 ; ZVBB-NEXT:    vl1re16.v v13, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re16.v v14, (a1)
+; ZVBB-NEXT:    add a1, a1, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re16.v v14, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 3
 ; ZVBB-NEXT:    sub a0, a1, a0
@@ -12311,59 +12904,63 @@ define <vscale x 56 x bfloat> @vector_interleave_nxv56bf16_nxv8bf16(<vscale x 8
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e16.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e16.v v21, (a2)
+; RV32-NEXT:    vsseg7e16.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e16.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1re16.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v11, (a4)
-; RV32-NEXT:    vl1re16.v v8, (a1)
-; RV32-NEXT:    vl1re16.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re16.v v14, (a4)
-; RV32-NEXT:    vl1re16.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1re16.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re16.v v11, (a5)
+; RV32-NEXT:    vl1re16.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1re16.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re16.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re16.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1re16.v v14, (a2)
+; RV32-NEXT:    vl1re16.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re16.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1re16.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1re16.v v16, (a2)
-; RV32-NEXT:    vl1re16.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re16.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re16.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1re16.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1re16.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8re16.v v16, (a0)
-; RV32-NEXT:    vl8re16.v v8, (a2)
+; RV32-NEXT:    vl8re16.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -12392,59 +12989,63 @@ define <vscale x 56 x bfloat> @vector_interleave_nxv56bf16_nxv8bf16(<vscale x 8
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e16.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e16.v v21, (a2)
+; RV64-NEXT:    vsseg7e16.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e16.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1re16.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v11, (a4)
-; RV64-NEXT:    vl1re16.v v8, (a1)
-; RV64-NEXT:    vl1re16.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re16.v v14, (a4)
-; RV64-NEXT:    vl1re16.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1re16.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v19, (a3)
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re16.v v11, (a5)
+; RV64-NEXT:    vl1re16.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1re16.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re16.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re16.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1re16.v v14, (a2)
+; RV64-NEXT:    vl1re16.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re16.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1re16.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
 ; RV64-NEXT:    vl1re16.v v16, (a2)
-; RV64-NEXT:    vl1re16.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re16.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re16.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1re16.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1re16.v v21, (a1)
 ; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8re16.v v16, (a0)
-; RV64-NEXT:    vl8re16.v v8, (a2)
+; RV64-NEXT:    vl8re16.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -12473,59 +13074,63 @@ define <vscale x 56 x bfloat> @vector_interleave_nxv56bf16_nxv8bf16(<vscale x 8
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e16.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e16.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e16.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1re16.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1re16.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1re16.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1re16.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re16.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re16.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1re16.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1re16.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8re16.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8re16.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8re16.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -12554,59 +13159,63 @@ define <vscale x 56 x bfloat> @vector_interleave_nxv56bf16_nxv8bf16(<vscale x 8
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e16.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e16.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e16.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re16.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1re16.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1re16.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1re16.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1re16.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1re16.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1re16.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re16.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re16.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1re16.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1re16.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8re16.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8re16.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8re16.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -12635,59 +13244,63 @@ define <vscale x 56 x bfloat> @vector_interleave_nxv56bf16_nxv8bf16(<vscale x 8
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
 ; ZVZIP-NEXT:    vmv1r.v v4, v14
 ; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e16.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e16.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e16.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e16.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1re16.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v11, (a4)
-; ZVZIP-NEXT:    vl1re16.v v8, (a1)
-; ZVZIP-NEXT:    vl1re16.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re16.v v14, (a4)
-; ZVZIP-NEXT:    vl1re16.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1re16.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re16.v v11, (a5)
+; ZVZIP-NEXT:    vl1re16.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1re16.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re16.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re16.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1re16.v v14, (a2)
+; ZVZIP-NEXT:    vl1re16.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re16.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1re16.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1re16.v v16, (a2)
-; ZVZIP-NEXT:    vl1re16.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re16.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re16.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1re16.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1re16.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8re16.v v16, (a0)
-; ZVZIP-NEXT:    vl8re16.v v8, (a2)
+; ZVZIP-NEXT:    vl8re16.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -12709,28 +13322,30 @@ define <vscale x 7 x float> @vector_interleave_nxv7f32_nxv1f32(<vscale x 1 x flo
 ; CHECK-NEXT:    vsseg7e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
+; CHECK-NEXT:    slli a3, a1, 1
 ; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vle32.v v8, (a7)
-; CHECK-NEXT:    vle32.v v10, (a6)
-; CHECK-NEXT:    srli a1, a1, 3
-; CHECK-NEXT:    vsetvli a6, zero, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v10, v8, a1
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vsetvli a6, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v11, (a2)
-; CHECK-NEXT:    vle32.v v8, (a5)
-; CHECK-NEXT:    vle32.v v9, (a4)
-; CHECK-NEXT:    vle32.v v12, (a3)
-; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v9, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vle32.v v8, (a4)
+; CHECK-NEXT:    add a4, a0, a3
+; CHECK-NEXT:    vle32.v v10, (a4)
+; CHECK-NEXT:    srli a4, a1, 3
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    vsetvli a5, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v10, v8, a4
+; CHECK-NEXT:    add a3, a1, a3
+; CHECK-NEXT:    vsetvli a5, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vle32.v v11, (a3)
+; CHECK-NEXT:    add a3, a1, a2
+; CHECK-NEXT:    vle32.v v8, (a3)
+; CHECK-NEXT:    vle32.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle32.v v12, (a2)
+; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vslideup.vx v9, v8, a4
+; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; CHECK-NEXT:    vle32.v v8, (a0)
 ; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
-; CHECK-NEXT:    vslideup.vx v8, v12, a1
+; CHECK-NEXT:    vslideup.vx v8, v12, a4
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 2
 ; CHECK-NEXT:    add sp, sp, a0
@@ -12748,28 +13363,30 @@ define <vscale x 7 x float> @vector_interleave_nxv7f32_nxv1f32(<vscale x 1 x flo
 ; ZVBB-NEXT:    vsseg7e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
+; ZVBB-NEXT:    slli a3, a1, 1
 ; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vle32.v v8, (a7)
-; ZVBB-NEXT:    vle32.v v10, (a6)
-; ZVBB-NEXT:    srli a1, a1, 3
-; ZVBB-NEXT:    vsetvli a6, zero, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v10, v8, a1
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vsetvli a6, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v11, (a2)
-; ZVBB-NEXT:    vle32.v v8, (a5)
-; ZVBB-NEXT:    vle32.v v9, (a4)
-; ZVBB-NEXT:    vle32.v v12, (a3)
-; ZVBB-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v9, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vle32.v v8, (a4)
+; ZVBB-NEXT:    add a4, a0, a3
+; ZVBB-NEXT:    vle32.v v10, (a4)
+; ZVBB-NEXT:    srli a4, a1, 3
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    vsetvli a5, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v10, v8, a4
+; ZVBB-NEXT:    add a3, a1, a3
+; ZVBB-NEXT:    vsetvli a5, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vle32.v v11, (a3)
+; ZVBB-NEXT:    add a3, a1, a2
+; ZVBB-NEXT:    vle32.v v8, (a3)
+; ZVBB-NEXT:    vle32.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle32.v v12, (a2)
+; ZVBB-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslideup.vx v9, v8, a4
+; ZVBB-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
 ; ZVBB-NEXT:    vle32.v v8, (a0)
 ; ZVBB-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
-; ZVBB-NEXT:    vslideup.vx v8, v12, a1
+; ZVBB-NEXT:    vslideup.vx v8, v12, a4
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 2
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -12791,19 +13408,22 @@ define <vscale x 14 x float> @vector_interleave_nxv14f32_nxv2f32(<vscale x 2 x f
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vsseg7e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re32.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re32.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vl1re32.v v11, (a4)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
-; CHECK-NEXT:    vl1re32.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re32.v v12, (a3)
+; CHECK-NEXT:    vl1re32.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a4, a0, a1
+; CHECK-NEXT:    vl1re32.v v12, (a4)
 ; CHECK-NEXT:    add a3, a3, a1
 ; CHECK-NEXT:    vl1re32.v v13, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re32.v v14, (a1)
+; CHECK-NEXT:    add a1, a1, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re32.v v14, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 3
 ; CHECK-NEXT:    sub a0, a1, a0
@@ -12822,19 +13442,22 @@ define <vscale x 14 x float> @vector_interleave_nxv14f32_nxv2f32(<vscale x 2 x f
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vsseg7e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re32.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re32.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vl1re32.v v11, (a4)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-NEXT:    vl1re32.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re32.v v12, (a3)
+; ZVBB-NEXT:    vl1re32.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a4, a0, a1
+; ZVBB-NEXT:    vl1re32.v v12, (a4)
 ; ZVBB-NEXT:    add a3, a3, a1
 ; ZVBB-NEXT:    vl1re32.v v13, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re32.v v14, (a1)
+; ZVBB-NEXT:    add a1, a1, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re32.v v14, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 3
 ; ZVBB-NEXT:    sub a0, a1, a0
@@ -12868,59 +13491,63 @@ define <vscale x 28 x float> @vector_interleave_nxv28f32_nxv4f32(<vscale x 4 x f
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e32.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e32.v v21, (a2)
+; RV32-NEXT:    vsseg7e32.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e32.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1re32.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v11, (a4)
-; RV32-NEXT:    vl1re32.v v8, (a1)
-; RV32-NEXT:    vl1re32.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re32.v v14, (a4)
-; RV32-NEXT:    vl1re32.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1re32.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re32.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re32.v v11, (a5)
+; RV32-NEXT:    vl1re32.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1re32.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re32.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re32.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1re32.v v14, (a2)
+; RV32-NEXT:    vl1re32.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re32.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1re32.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1re32.v v16, (a2)
-; RV32-NEXT:    vl1re32.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re32.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re32.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re32.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1re32.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1re32.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8re32.v v16, (a0)
-; RV32-NEXT:    vl8re32.v v8, (a2)
+; RV32-NEXT:    vl8re32.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -12949,59 +13576,63 @@ define <vscale x 28 x float> @vector_interleave_nxv28f32_nxv4f32(<vscale x 4 x f
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e32.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e32.v v21, (a2)
+; RV64-NEXT:    vsseg7e32.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e32.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1re32.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v11, (a4)
-; RV64-NEXT:    vl1re32.v v8, (a1)
-; RV64-NEXT:    vl1re32.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re32.v v14, (a4)
-; RV64-NEXT:    vl1re32.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1re32.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re32.v v19, (a3)
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re32.v v11, (a5)
+; RV64-NEXT:    vl1re32.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1re32.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re32.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re32.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1re32.v v14, (a2)
+; RV64-NEXT:    vl1re32.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re32.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1re32.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
 ; RV64-NEXT:    vl1re32.v v16, (a2)
-; RV64-NEXT:    vl1re32.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re32.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re32.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re32.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1re32.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1re32.v v21, (a1)
 ; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8re32.v v16, (a0)
-; RV64-NEXT:    vl8re32.v v8, (a2)
+; RV64-NEXT:    vl8re32.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -13030,59 +13661,63 @@ define <vscale x 28 x float> @vector_interleave_nxv28f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e32.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e32.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e32.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e32.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1re32.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1re32.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1re32.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re32.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1re32.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1re32.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re32.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re32.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1re32.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1re32.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8re32.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8re32.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8re32.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -13111,59 +13746,63 @@ define <vscale x 28 x float> @vector_interleave_nxv28f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e32.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e32.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e32.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e32.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1re32.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re32.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1re32.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1re32.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1re32.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1re32.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1re32.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re32.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1re32.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1re32.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1re32.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re32.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re32.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1re32.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1re32.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8re32.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8re32.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8re32.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -13192,59 +13831,63 @@ define <vscale x 28 x float> @vector_interleave_nxv28f32_nxv4f32(<vscale x 4 x f
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
 ; ZVZIP-NEXT:    vmv1r.v v4, v14
 ; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e32.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e32.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e32.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e32.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1re32.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v11, (a4)
-; ZVZIP-NEXT:    vl1re32.v v8, (a1)
-; ZVZIP-NEXT:    vl1re32.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re32.v v14, (a4)
-; ZVZIP-NEXT:    vl1re32.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1re32.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re32.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re32.v v11, (a5)
+; ZVZIP-NEXT:    vl1re32.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1re32.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re32.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re32.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1re32.v v14, (a2)
+; ZVZIP-NEXT:    vl1re32.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re32.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1re32.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1re32.v v16, (a2)
-; ZVZIP-NEXT:    vl1re32.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re32.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re32.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re32.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1re32.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1re32.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8re32.v v16, (a0)
-; ZVZIP-NEXT:    vl8re32.v v8, (a2)
+; ZVZIP-NEXT:    vl8re32.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -13266,19 +13909,22 @@ define <vscale x 7 x double> @vector_interleave_nxv7f64_nxv1f64(<vscale x 1 x do
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vsseg7e64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re64.v v10, (a3)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re64.v v11, (a3)
+; CHECK-NEXT:    add a3, a0, a1
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    vl1re64.v v11, (a4)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
-; CHECK-NEXT:    vl1re64.v v9, (a2)
-; CHECK-NEXT:    add a3, a3, a1
-; CHECK-NEXT:    vl1re64.v v12, (a3)
+; CHECK-NEXT:    vl1re64.v v9, (a3)
+; CHECK-NEXT:    slli a1, a1, 2
+; CHECK-NEXT:    add a4, a0, a1
+; CHECK-NEXT:    vl1re64.v v12, (a4)
 ; CHECK-NEXT:    add a3, a3, a1
 ; CHECK-NEXT:    vl1re64.v v13, (a3)
-; CHECK-NEXT:    add a1, a3, a1
-; CHECK-NEXT:    vl1re64.v v14, (a1)
+; CHECK-NEXT:    add a1, a1, a2
+; CHECK-NEXT:    add a0, a0, a1
+; CHECK-NEXT:    vl1re64.v v14, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a1, a0, 3
 ; CHECK-NEXT:    sub a0, a1, a0
@@ -13297,19 +13943,22 @@ define <vscale x 7 x double> @vector_interleave_nxv7f64_nxv1f64(<vscale x 1 x do
 ; ZVBB-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; ZVBB-NEXT:    vsseg7e64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re64.v v10, (a3)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re64.v v11, (a3)
+; ZVBB-NEXT:    add a3, a0, a1
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    vl1re64.v v11, (a4)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-NEXT:    vl1re64.v v9, (a2)
-; ZVBB-NEXT:    add a3, a3, a1
-; ZVBB-NEXT:    vl1re64.v v12, (a3)
+; ZVBB-NEXT:    vl1re64.v v9, (a3)
+; ZVBB-NEXT:    slli a1, a1, 2
+; ZVBB-NEXT:    add a4, a0, a1
+; ZVBB-NEXT:    vl1re64.v v12, (a4)
 ; ZVBB-NEXT:    add a3, a3, a1
 ; ZVBB-NEXT:    vl1re64.v v13, (a3)
-; ZVBB-NEXT:    add a1, a3, a1
-; ZVBB-NEXT:    vl1re64.v v14, (a1)
+; ZVBB-NEXT:    add a1, a1, a2
+; ZVBB-NEXT:    add a0, a0, a1
+; ZVBB-NEXT:    vl1re64.v v14, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a1, a0, 3
 ; ZVBB-NEXT:    sub a0, a1, a0
@@ -13343,59 +13992,63 @@ define <vscale x 14 x double> @vector_interleave_nxv14f64_nxv2f64(<vscale x 2 x
 ; RV32-NEXT:    vmv1r.v v2, v10
 ; RV32-NEXT:    vmv1r.v v4, v14
 ; RV32-NEXT:    vmv1r.v v6, v18
-; RV32-NEXT:    addi a1, sp, 64
-; RV32-NEXT:    vsseg7e64.v v1, (a1)
-; RV32-NEXT:    vmv1r.v v22, v11
-; RV32-NEXT:    vmv1r.v v24, v15
-; RV32-NEXT:    vmv1r.v v26, v19
 ; RV32-NEXT:    csrr a2, vlenb
 ; RV32-NEXT:    slli a0, a2, 3
 ; RV32-NEXT:    sub a2, a0, a2
 ; RV32-NEXT:    add a2, sp, a2
 ; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    vsseg7e64.v v21, (a2)
+; RV32-NEXT:    vsseg7e64.v v1, (a2)
+; RV32-NEXT:    vmv1r.v v22, v11
+; RV32-NEXT:    vmv1r.v v24, v15
+; RV32-NEXT:    vmv1r.v v26, v19
+; RV32-NEXT:    addi a1, sp, 64
+; RV32-NEXT:    vsseg7e64.v v21, (a1)
 ; RV32-NEXT:    csrr a0, vlenb
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    slli a3, a0, 1
+; RV32-NEXT:    add a4, a2, a3
 ; RV32-NEXT:    vl1re64.v v10, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v11, (a4)
-; RV32-NEXT:    vl1re64.v v8, (a1)
-; RV32-NEXT:    vl1re64.v v9, (a3)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v12, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v13, (a4)
-; RV32-NEXT:    add a4, a4, a0
-; RV32-NEXT:    vl1re64.v v14, (a4)
-; RV32-NEXT:    vl1re64.v v15, (a2)
-; RV32-NEXT:    add a2, a2, a0
-; RV32-NEXT:    add a1, a2, a0
-; RV32-NEXT:    add a3, a1, a0
-; RV32-NEXT:    vl1re64.v v18, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re64.v v19, (a3)
+; RV32-NEXT:    add a4, a3, a0
+; RV32-NEXT:    add a5, a2, a4
+; RV32-NEXT:    vl1re64.v v11, (a5)
+; RV32-NEXT:    vl1re64.v v8, (a2)
+; RV32-NEXT:    add a5, a2, a0
+; RV32-NEXT:    vl1re64.v v9, (a5)
+; RV32-NEXT:    slli a5, a0, 2
+; RV32-NEXT:    add a6, a2, a5
+; RV32-NEXT:    vl1re64.v v12, (a6)
+; RV32-NEXT:    add a6, a5, a0
+; RV32-NEXT:    add a7, a2, a6
+; RV32-NEXT:    vl1re64.v v13, (a7)
+; RV32-NEXT:    add a7, a5, a3
+; RV32-NEXT:    add a2, a2, a7
+; RV32-NEXT:    vl1re64.v v14, (a2)
+; RV32-NEXT:    vl1re64.v v15, (a1)
+; RV32-NEXT:    add a4, a1, a4
+; RV32-NEXT:    vl1re64.v v18, (a4)
+; RV32-NEXT:    add a2, a1, a5
+; RV32-NEXT:    vl1re64.v v19, (a2)
+; RV32-NEXT:    add a2, a1, a0
 ; RV32-NEXT:    vl1re64.v v16, (a2)
-; RV32-NEXT:    vl1re64.v v17, (a1)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re64.v v20, (a3)
-; RV32-NEXT:    add a3, a3, a0
-; RV32-NEXT:    vl1re64.v v21, (a3)
-; RV32-NEXT:    slli a1, a0, 2
+; RV32-NEXT:    add a3, a1, a3
+; RV32-NEXT:    vl1re64.v v17, (a3)
+; RV32-NEXT:    add a6, a1, a6
+; RV32-NEXT:    vl1re64.v v20, (a6)
+; RV32-NEXT:    add a1, a1, a7
+; RV32-NEXT:    vl1re64.v v21, (a1)
 ; RV32-NEXT:    slli a0, a0, 3
-; RV32-NEXT:    add a1, a0, a1
-; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    li a3, 14
-; RV32-NEXT:    mul a2, a2, a3
-; RV32-NEXT:    add a2, sp, a2
-; RV32-NEXT:    addi a2, a2, 64
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    vs2r.v v20, (a1)
-; RV32-NEXT:    add a0, a2, a0
+; RV32-NEXT:    add a5, a0, a5
+; RV32-NEXT:    csrr a1, vlenb
+; RV32-NEXT:    li a2, 14
+; RV32-NEXT:    mul a1, a1, a2
+; RV32-NEXT:    add a1, sp, a1
+; RV32-NEXT:    addi a1, a1, 64
+; RV32-NEXT:    add a5, a1, a5
+; RV32-NEXT:    vs2r.v v20, (a5)
+; RV32-NEXT:    add a0, a1, a0
 ; RV32-NEXT:    vs4r.v v16, (a0)
-; RV32-NEXT:    vs8r.v v8, (a2)
+; RV32-NEXT:    vs8r.v v8, (a1)
 ; RV32-NEXT:    vl8re64.v v16, (a0)
-; RV32-NEXT:    vl8re64.v v8, (a2)
+; RV32-NEXT:    vl8re64.v v8, (a1)
 ; RV32-NEXT:    addi sp, s0, -80
 ; RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -13424,59 +14077,63 @@ define <vscale x 14 x double> @vector_interleave_nxv14f64_nxv2f64(<vscale x 2 x
 ; RV64-NEXT:    vmv1r.v v2, v10
 ; RV64-NEXT:    vmv1r.v v4, v14
 ; RV64-NEXT:    vmv1r.v v6, v18
-; RV64-NEXT:    addi a1, sp, 64
-; RV64-NEXT:    vsseg7e64.v v1, (a1)
-; RV64-NEXT:    vmv1r.v v22, v11
-; RV64-NEXT:    vmv1r.v v24, v15
-; RV64-NEXT:    vmv1r.v v26, v19
 ; RV64-NEXT:    csrr a2, vlenb
 ; RV64-NEXT:    slli a0, a2, 3
 ; RV64-NEXT:    sub a2, a0, a2
 ; RV64-NEXT:    add a2, sp, a2
 ; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    vsseg7e64.v v21, (a2)
+; RV64-NEXT:    vsseg7e64.v v1, (a2)
+; RV64-NEXT:    vmv1r.v v22, v11
+; RV64-NEXT:    vmv1r.v v24, v15
+; RV64-NEXT:    vmv1r.v v26, v19
+; RV64-NEXT:    addi a1, sp, 64
+; RV64-NEXT:    vsseg7e64.v v21, (a1)
 ; RV64-NEXT:    csrr a0, vlenb
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    slli a3, a0, 1
+; RV64-NEXT:    add a4, a2, a3
 ; RV64-NEXT:    vl1re64.v v10, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v11, (a4)
-; RV64-NEXT:    vl1re64.v v8, (a1)
-; RV64-NEXT:    vl1re64.v v9, (a3)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v12, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v13, (a4)
-; RV64-NEXT:    add a4, a4, a0
-; RV64-NEXT:    vl1re64.v v14, (a4)
-; RV64-NEXT:    vl1re64.v v15, (a2)
-; RV64-NEXT:    add a2, a2, a0
-; RV64-NEXT:    add a1, a2, a0
-; RV64-NEXT:    add a3, a1, a0
-; RV64-NEXT:    vl1re64.v v18, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re64.v v19, (a3)
+; RV64-NEXT:    add a4, a3, a0
+; RV64-NEXT:    add a5, a2, a4
+; RV64-NEXT:    vl1re64.v v11, (a5)
+; RV64-NEXT:    vl1re64.v v8, (a2)
+; RV64-NEXT:    add a5, a2, a0
+; RV64-NEXT:    vl1re64.v v9, (a5)
+; RV64-NEXT:    slli a5, a0, 2
+; RV64-NEXT:    add a6, a2, a5
+; RV64-NEXT:    vl1re64.v v12, (a6)
+; RV64-NEXT:    add a6, a5, a0
+; RV64-NEXT:    add a7, a2, a6
+; RV64-NEXT:    vl1re64.v v13, (a7)
+; RV64-NEXT:    add a7, a5, a3
+; RV64-NEXT:    add a2, a2, a7
+; RV64-NEXT:    vl1re64.v v14, (a2)
+; RV64-NEXT:    vl1re64.v v15, (a1)
+; RV64-NEXT:    add a4, a1, a4
+; RV64-NEXT:    vl1re64.v v18, (a4)
+; RV64-NEXT:    add a2, a1, a5
+; RV64-NEXT:    vl1re64.v v19, (a2)
+; RV64-NEXT:    add a2, a1, a0
 ; RV64-NEXT:    vl1re64.v v16, (a2)
-; RV64-NEXT:    vl1re64.v v17, (a1)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re64.v v20, (a3)
-; RV64-NEXT:    add a3, a3, a0
-; RV64-NEXT:    vl1re64.v v21, (a3)
-; RV64-NEXT:    slli a1, a0, 2
+; RV64-NEXT:    add a3, a1, a3
+; RV64-NEXT:    vl1re64.v v17, (a3)
+; RV64-NEXT:    add a6, a1, a6
+; RV64-NEXT:    vl1re64.v v20, (a6)
+; RV64-NEXT:    add a1, a1, a7
+; RV64-NEXT:    vl1re64.v v21, (a1)
 ; RV64-NEXT:    slli a0, a0, 3
-; RV64-NEXT:    add a1, a0, a1
-; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    li a3, 14
-; RV64-NEXT:    mul a2, a2, a3
-; RV64-NEXT:    add a2, sp, a2
-; RV64-NEXT:    addi a2, a2, 64
-; RV64-NEXT:    add a1, a2, a1
-; RV64-NEXT:    vs2r.v v20, (a1)
-; RV64-NEXT:    add a0, a2, a0
+; RV64-NEXT:    add a5, a0, a5
+; RV64-NEXT:    csrr a1, vlenb
+; RV64-NEXT:    li a2, 14
+; RV64-NEXT:    mul a1, a1, a2
+; RV64-NEXT:    add a1, sp, a1
+; RV64-NEXT:    addi a1, a1, 64
+; RV64-NEXT:    add a5, a1, a5
+; RV64-NEXT:    vs2r.v v20, (a5)
+; RV64-NEXT:    add a0, a1, a0
 ; RV64-NEXT:    vs4r.v v16, (a0)
-; RV64-NEXT:    vs8r.v v8, (a2)
+; RV64-NEXT:    vs8r.v v8, (a1)
 ; RV64-NEXT:    vl8re64.v v16, (a0)
-; RV64-NEXT:    vl8re64.v v8, (a2)
+; RV64-NEXT:    vl8re64.v v8, (a1)
 ; RV64-NEXT:    addi sp, s0, -80
 ; RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -13505,59 +14162,63 @@ define <vscale x 14 x double> @vector_interleave_nxv14f64_nxv2f64(<vscale x 2 x
 ; ZVBB-RV32-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV32-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV32-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV32-NEXT:    addi a1, sp, 64
-; ZVBB-RV32-NEXT:    vsseg7e64.v v1, (a1)
-; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV32-NEXT:    csrr a2, vlenb
 ; ZVBB-RV32-NEXT:    slli a0, a2, 3
 ; ZVBB-RV32-NEXT:    sub a2, a0, a2
 ; ZVBB-RV32-NEXT:    add a2, sp, a2
 ; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    vsseg7e64.v v21, (a2)
+; ZVBB-RV32-NEXT:    vsseg7e64.v v1, (a2)
+; ZVBB-RV32-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV32-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV32-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV32-NEXT:    addi a1, sp, 64
+; ZVBB-RV32-NEXT:    vsseg7e64.v v21, (a1)
 ; ZVBB-RV32-NEXT:    csrr a0, vlenb
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    slli a3, a0, 1
+; ZVBB-RV32-NEXT:    add a4, a2, a3
 ; ZVBB-RV32-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v11, (a4)
-; ZVBB-RV32-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV32-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v12, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v13, (a4)
-; ZVBB-RV32-NEXT:    add a4, a4, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v14, (a4)
-; ZVBB-RV32-NEXT:    vl1re64.v v15, (a2)
-; ZVBB-RV32-NEXT:    add a2, a2, a0
-; ZVBB-RV32-NEXT:    add a1, a2, a0
-; ZVBB-RV32-NEXT:    add a3, a1, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v19, (a3)
+; ZVBB-RV32-NEXT:    add a4, a3, a0
+; ZVBB-RV32-NEXT:    add a5, a2, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v11, (a5)
+; ZVBB-RV32-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV32-NEXT:    add a5, a2, a0
+; ZVBB-RV32-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV32-NEXT:    slli a5, a0, 2
+; ZVBB-RV32-NEXT:    add a6, a2, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v12, (a6)
+; ZVBB-RV32-NEXT:    add a6, a5, a0
+; ZVBB-RV32-NEXT:    add a7, a2, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v13, (a7)
+; ZVBB-RV32-NEXT:    add a7, a5, a3
+; ZVBB-RV32-NEXT:    add a2, a2, a7
+; ZVBB-RV32-NEXT:    vl1re64.v v14, (a2)
+; ZVBB-RV32-NEXT:    vl1re64.v v15, (a1)
+; ZVBB-RV32-NEXT:    add a4, a1, a4
+; ZVBB-RV32-NEXT:    vl1re64.v v18, (a4)
+; ZVBB-RV32-NEXT:    add a2, a1, a5
+; ZVBB-RV32-NEXT:    vl1re64.v v19, (a2)
+; ZVBB-RV32-NEXT:    add a2, a1, a0
 ; ZVBB-RV32-NEXT:    vl1re64.v v16, (a2)
-; ZVBB-RV32-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v20, (a3)
-; ZVBB-RV32-NEXT:    add a3, a3, a0
-; ZVBB-RV32-NEXT:    vl1re64.v v21, (a3)
-; ZVBB-RV32-NEXT:    slli a1, a0, 2
+; ZVBB-RV32-NEXT:    add a3, a1, a3
+; ZVBB-RV32-NEXT:    vl1re64.v v17, (a3)
+; ZVBB-RV32-NEXT:    add a6, a1, a6
+; ZVBB-RV32-NEXT:    vl1re64.v v20, (a6)
+; ZVBB-RV32-NEXT:    add a1, a1, a7
+; ZVBB-RV32-NEXT:    vl1re64.v v21, (a1)
 ; ZVBB-RV32-NEXT:    slli a0, a0, 3
-; ZVBB-RV32-NEXT:    add a1, a0, a1
-; ZVBB-RV32-NEXT:    csrr a2, vlenb
-; ZVBB-RV32-NEXT:    li a3, 14
-; ZVBB-RV32-NEXT:    mul a2, a2, a3
-; ZVBB-RV32-NEXT:    add a2, sp, a2
-; ZVBB-RV32-NEXT:    addi a2, a2, 64
-; ZVBB-RV32-NEXT:    add a1, a2, a1
-; ZVBB-RV32-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV32-NEXT:    add a0, a2, a0
+; ZVBB-RV32-NEXT:    add a5, a0, a5
+; ZVBB-RV32-NEXT:    csrr a1, vlenb
+; ZVBB-RV32-NEXT:    li a2, 14
+; ZVBB-RV32-NEXT:    mul a1, a1, a2
+; ZVBB-RV32-NEXT:    add a1, sp, a1
+; ZVBB-RV32-NEXT:    addi a1, a1, 64
+; ZVBB-RV32-NEXT:    add a5, a1, a5
+; ZVBB-RV32-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV32-NEXT:    add a0, a1, a0
 ; ZVBB-RV32-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV32-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV32-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV32-NEXT:    vl8re64.v v16, (a0)
-; ZVBB-RV32-NEXT:    vl8re64.v v8, (a2)
+; ZVBB-RV32-NEXT:    vl8re64.v v8, (a1)
 ; ZVBB-RV32-NEXT:    addi sp, s0, -80
 ; ZVBB-RV32-NEXT:    lw ra, 76(sp) # 4-byte Folded Reload
 ; ZVBB-RV32-NEXT:    lw s0, 72(sp) # 4-byte Folded Reload
@@ -13586,59 +14247,63 @@ define <vscale x 14 x double> @vector_interleave_nxv14f64_nxv2f64(<vscale x 2 x
 ; ZVBB-RV64-NEXT:    vmv1r.v v2, v10
 ; ZVBB-RV64-NEXT:    vmv1r.v v4, v14
 ; ZVBB-RV64-NEXT:    vmv1r.v v6, v18
-; ZVBB-RV64-NEXT:    addi a1, sp, 64
-; ZVBB-RV64-NEXT:    vsseg7e64.v v1, (a1)
-; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
-; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
-; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
 ; ZVBB-RV64-NEXT:    csrr a2, vlenb
 ; ZVBB-RV64-NEXT:    slli a0, a2, 3
 ; ZVBB-RV64-NEXT:    sub a2, a0, a2
 ; ZVBB-RV64-NEXT:    add a2, sp, a2
 ; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    vsseg7e64.v v21, (a2)
+; ZVBB-RV64-NEXT:    vsseg7e64.v v1, (a2)
+; ZVBB-RV64-NEXT:    vmv1r.v v22, v11
+; ZVBB-RV64-NEXT:    vmv1r.v v24, v15
+; ZVBB-RV64-NEXT:    vmv1r.v v26, v19
+; ZVBB-RV64-NEXT:    addi a1, sp, 64
+; ZVBB-RV64-NEXT:    vsseg7e64.v v21, (a1)
 ; ZVBB-RV64-NEXT:    csrr a0, vlenb
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    slli a3, a0, 1
+; ZVBB-RV64-NEXT:    add a4, a2, a3
 ; ZVBB-RV64-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v11, (a4)
-; ZVBB-RV64-NEXT:    vl1re64.v v8, (a1)
-; ZVBB-RV64-NEXT:    vl1re64.v v9, (a3)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v12, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v13, (a4)
-; ZVBB-RV64-NEXT:    add a4, a4, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v14, (a4)
-; ZVBB-RV64-NEXT:    vl1re64.v v15, (a2)
-; ZVBB-RV64-NEXT:    add a2, a2, a0
-; ZVBB-RV64-NEXT:    add a1, a2, a0
-; ZVBB-RV64-NEXT:    add a3, a1, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v18, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v19, (a3)
+; ZVBB-RV64-NEXT:    add a4, a3, a0
+; ZVBB-RV64-NEXT:    add a5, a2, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v11, (a5)
+; ZVBB-RV64-NEXT:    vl1re64.v v8, (a2)
+; ZVBB-RV64-NEXT:    add a5, a2, a0
+; ZVBB-RV64-NEXT:    vl1re64.v v9, (a5)
+; ZVBB-RV64-NEXT:    slli a5, a0, 2
+; ZVBB-RV64-NEXT:    add a6, a2, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v12, (a6)
+; ZVBB-RV64-NEXT:    add a6, a5, a0
+; ZVBB-RV64-NEXT:    add a7, a2, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v13, (a7)
+; ZVBB-RV64-NEXT:    add a7, a5, a3
+; ZVBB-RV64-NEXT:    add a2, a2, a7
+; ZVBB-RV64-NEXT:    vl1re64.v v14, (a2)
+; ZVBB-RV64-NEXT:    vl1re64.v v15, (a1)
+; ZVBB-RV64-NEXT:    add a4, a1, a4
+; ZVBB-RV64-NEXT:    vl1re64.v v18, (a4)
+; ZVBB-RV64-NEXT:    add a2, a1, a5
+; ZVBB-RV64-NEXT:    vl1re64.v v19, (a2)
+; ZVBB-RV64-NEXT:    add a2, a1, a0
 ; ZVBB-RV64-NEXT:    vl1re64.v v16, (a2)
-; ZVBB-RV64-NEXT:    vl1re64.v v17, (a1)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v20, (a3)
-; ZVBB-RV64-NEXT:    add a3, a3, a0
-; ZVBB-RV64-NEXT:    vl1re64.v v21, (a3)
-; ZVBB-RV64-NEXT:    slli a1, a0, 2
+; ZVBB-RV64-NEXT:    add a3, a1, a3
+; ZVBB-RV64-NEXT:    vl1re64.v v17, (a3)
+; ZVBB-RV64-NEXT:    add a6, a1, a6
+; ZVBB-RV64-NEXT:    vl1re64.v v20, (a6)
+; ZVBB-RV64-NEXT:    add a1, a1, a7
+; ZVBB-RV64-NEXT:    vl1re64.v v21, (a1)
 ; ZVBB-RV64-NEXT:    slli a0, a0, 3
-; ZVBB-RV64-NEXT:    add a1, a0, a1
-; ZVBB-RV64-NEXT:    csrr a2, vlenb
-; ZVBB-RV64-NEXT:    li a3, 14
-; ZVBB-RV64-NEXT:    mul a2, a2, a3
-; ZVBB-RV64-NEXT:    add a2, sp, a2
-; ZVBB-RV64-NEXT:    addi a2, a2, 64
-; ZVBB-RV64-NEXT:    add a1, a2, a1
-; ZVBB-RV64-NEXT:    vs2r.v v20, (a1)
-; ZVBB-RV64-NEXT:    add a0, a2, a0
+; ZVBB-RV64-NEXT:    add a5, a0, a5
+; ZVBB-RV64-NEXT:    csrr a1, vlenb
+; ZVBB-RV64-NEXT:    li a2, 14
+; ZVBB-RV64-NEXT:    mul a1, a1, a2
+; ZVBB-RV64-NEXT:    add a1, sp, a1
+; ZVBB-RV64-NEXT:    addi a1, a1, 64
+; ZVBB-RV64-NEXT:    add a5, a1, a5
+; ZVBB-RV64-NEXT:    vs2r.v v20, (a5)
+; ZVBB-RV64-NEXT:    add a0, a1, a0
 ; ZVBB-RV64-NEXT:    vs4r.v v16, (a0)
-; ZVBB-RV64-NEXT:    vs8r.v v8, (a2)
+; ZVBB-RV64-NEXT:    vs8r.v v8, (a1)
 ; ZVBB-RV64-NEXT:    vl8re64.v v16, (a0)
-; ZVBB-RV64-NEXT:    vl8re64.v v8, (a2)
+; ZVBB-RV64-NEXT:    vl8re64.v v8, (a1)
 ; ZVBB-RV64-NEXT:    addi sp, s0, -80
 ; ZVBB-RV64-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVBB-RV64-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -13667,59 +14332,63 @@ define <vscale x 14 x double> @vector_interleave_nxv14f64_nxv2f64(<vscale x 2 x
 ; ZVZIP-NEXT:    vmv1r.v v2, v10
 ; ZVZIP-NEXT:    vmv1r.v v4, v14
 ; ZVZIP-NEXT:    vmv1r.v v6, v18
-; ZVZIP-NEXT:    addi a1, sp, 64
-; ZVZIP-NEXT:    vsseg7e64.v v1, (a1)
-; ZVZIP-NEXT:    vmv1r.v v22, v11
-; ZVZIP-NEXT:    vmv1r.v v24, v15
-; ZVZIP-NEXT:    vmv1r.v v26, v19
 ; ZVZIP-NEXT:    csrr a2, vlenb
 ; ZVZIP-NEXT:    slli a0, a2, 3
 ; ZVZIP-NEXT:    sub a2, a0, a2
 ; ZVZIP-NEXT:    add a2, sp, a2
 ; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    vsseg7e64.v v21, (a2)
+; ZVZIP-NEXT:    vsseg7e64.v v1, (a2)
+; ZVZIP-NEXT:    vmv1r.v v22, v11
+; ZVZIP-NEXT:    vmv1r.v v24, v15
+; ZVZIP-NEXT:    vmv1r.v v26, v19
+; ZVZIP-NEXT:    addi a1, sp, 64
+; ZVZIP-NEXT:    vsseg7e64.v v21, (a1)
 ; ZVZIP-NEXT:    csrr a0, vlenb
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    slli a3, a0, 1
+; ZVZIP-NEXT:    add a4, a2, a3
 ; ZVZIP-NEXT:    vl1re64.v v10, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v11, (a4)
-; ZVZIP-NEXT:    vl1re64.v v8, (a1)
-; ZVZIP-NEXT:    vl1re64.v v9, (a3)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v12, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v13, (a4)
-; ZVZIP-NEXT:    add a4, a4, a0
-; ZVZIP-NEXT:    vl1re64.v v14, (a4)
-; ZVZIP-NEXT:    vl1re64.v v15, (a2)
-; ZVZIP-NEXT:    add a2, a2, a0
-; ZVZIP-NEXT:    add a1, a2, a0
-; ZVZIP-NEXT:    add a3, a1, a0
-; ZVZIP-NEXT:    vl1re64.v v18, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re64.v v19, (a3)
+; ZVZIP-NEXT:    add a4, a3, a0
+; ZVZIP-NEXT:    add a5, a2, a4
+; ZVZIP-NEXT:    vl1re64.v v11, (a5)
+; ZVZIP-NEXT:    vl1re64.v v8, (a2)
+; ZVZIP-NEXT:    add a5, a2, a0
+; ZVZIP-NEXT:    vl1re64.v v9, (a5)
+; ZVZIP-NEXT:    slli a5, a0, 2
+; ZVZIP-NEXT:    add a6, a2, a5
+; ZVZIP-NEXT:    vl1re64.v v12, (a6)
+; ZVZIP-NEXT:    add a6, a5, a0
+; ZVZIP-NEXT:    add a7, a2, a6
+; ZVZIP-NEXT:    vl1re64.v v13, (a7)
+; ZVZIP-NEXT:    add a7, a5, a3
+; ZVZIP-NEXT:    add a2, a2, a7
+; ZVZIP-NEXT:    vl1re64.v v14, (a2)
+; ZVZIP-NEXT:    vl1re64.v v15, (a1)
+; ZVZIP-NEXT:    add a4, a1, a4
+; ZVZIP-NEXT:    vl1re64.v v18, (a4)
+; ZVZIP-NEXT:    add a2, a1, a5
+; ZVZIP-NEXT:    vl1re64.v v19, (a2)
+; ZVZIP-NEXT:    add a2, a1, a0
 ; ZVZIP-NEXT:    vl1re64.v v16, (a2)
-; ZVZIP-NEXT:    vl1re64.v v17, (a1)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re64.v v20, (a3)
-; ZVZIP-NEXT:    add a3, a3, a0
-; ZVZIP-NEXT:    vl1re64.v v21, (a3)
-; ZVZIP-NEXT:    slli a1, a0, 2
+; ZVZIP-NEXT:    add a3, a1, a3
+; ZVZIP-NEXT:    vl1re64.v v17, (a3)
+; ZVZIP-NEXT:    add a6, a1, a6
+; ZVZIP-NEXT:    vl1re64.v v20, (a6)
+; ZVZIP-NEXT:    add a1, a1, a7
+; ZVZIP-NEXT:    vl1re64.v v21, (a1)
 ; ZVZIP-NEXT:    slli a0, a0, 3
-; ZVZIP-NEXT:    add a1, a0, a1
-; ZVZIP-NEXT:    csrr a2, vlenb
-; ZVZIP-NEXT:    li a3, 14
-; ZVZIP-NEXT:    mul a2, a2, a3
-; ZVZIP-NEXT:    add a2, sp, a2
-; ZVZIP-NEXT:    addi a2, a2, 64
-; ZVZIP-NEXT:    add a1, a2, a1
-; ZVZIP-NEXT:    vs2r.v v20, (a1)
-; ZVZIP-NEXT:    add a0, a2, a0
+; ZVZIP-NEXT:    add a5, a0, a5
+; ZVZIP-NEXT:    csrr a1, vlenb
+; ZVZIP-NEXT:    li a2, 14
+; ZVZIP-NEXT:    mul a1, a1, a2
+; ZVZIP-NEXT:    add a1, sp, a1
+; ZVZIP-NEXT:    addi a1, a1, 64
+; ZVZIP-NEXT:    add a5, a1, a5
+; ZVZIP-NEXT:    vs2r.v v20, (a5)
+; ZVZIP-NEXT:    add a0, a1, a0
 ; ZVZIP-NEXT:    vs4r.v v16, (a0)
-; ZVZIP-NEXT:    vs8r.v v8, (a2)
+; ZVZIP-NEXT:    vs8r.v v8, (a1)
 ; ZVZIP-NEXT:    vl8re64.v v16, (a0)
-; ZVZIP-NEXT:    vl8re64.v v8, (a2)
+; ZVZIP-NEXT:    vl8re64.v v8, (a1)
 ; ZVZIP-NEXT:    addi sp, s0, -80
 ; ZVZIP-NEXT:    ld ra, 72(sp) # 8-byte Folded Reload
 ; ZVZIP-NEXT:    ld s0, 64(sp) # 8-byte Folded Reload
@@ -13741,27 +14410,31 @@ define <vscale x 16 x half> @vector_interleave_nxv16f16_nxv2f16(<vscale x 2 x ha
 ; CHECK-NEXT:    vsseg8e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    add a2, t0, a2
-; CHECK-NEXT:    vle16.v v8, (a2)
-; CHECK-NEXT:    vle16.v v11, (t0)
-; CHECK-NEXT:    vle16.v v9, (a7)
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    sub a3, a3, a2
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vle16.v v8, (a3)
+; CHECK-NEXT:    slli a3, a1, 1
+; CHECK-NEXT:    add a4, a0, a1
+; CHECK-NEXT:    add a5, a4, a3
+; CHECK-NEXT:    vle16.v v11, (a5)
+; CHECK-NEXT:    add a5, a3, a2
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vle16.v v9, (a5)
 ; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v11, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a6)
-; CHECK-NEXT:    vle16.v v8, (a5)
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v10, (a3)
+; CHECK-NEXT:    add a3, a4, a2
+; CHECK-NEXT:    vle16.v v8, (a3)
+; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v10, v9, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v12, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v12, (a2)
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v8, a1
 ; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -13785,27 +14458,31 @@ define <vscale x 16 x half> @vector_interleave_nxv16f16_nxv2f16(<vscale x 2 x ha
 ; ZVBB-NEXT:    vsseg8e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    add a2, t0, a2
-; ZVBB-NEXT:    vle16.v v8, (a2)
-; ZVBB-NEXT:    vle16.v v11, (t0)
-; ZVBB-NEXT:    vle16.v v9, (a7)
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    sub a3, a3, a2
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vle16.v v8, (a3)
+; ZVBB-NEXT:    slli a3, a1, 1
+; ZVBB-NEXT:    add a4, a0, a1
+; ZVBB-NEXT:    add a5, a4, a3
+; ZVBB-NEXT:    vle16.v v11, (a5)
+; ZVBB-NEXT:    add a5, a3, a2
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vle16.v v9, (a5)
 ; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v11, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a6)
-; ZVBB-NEXT:    vle16.v v8, (a5)
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v10, (a3)
+; ZVBB-NEXT:    add a3, a4, a2
+; ZVBB-NEXT:    vle16.v v8, (a3)
+; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v10, v9, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v12, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v12, (a2)
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v8, a1
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -13832,21 +14509,26 @@ define <vscale x 32 x half> @vector_interleave_nxv32f16_nxv4f16(<vscale x 4 x ha
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg8e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a4, a3, a1
-; CHECK-NEXT:    add a5, a4, a1
-; CHECK-NEXT:    add a6, a5, a1
-; CHECK-NEXT:    add a7, a6, a1
-; CHECK-NEXT:    vl1re16.v v14, (a7)
-; CHECK-NEXT:    add a1, a7, a1
-; CHECK-NEXT:    vl1re16.v v15, (a1)
-; CHECK-NEXT:    vl1re16.v v12, (a5)
-; CHECK-NEXT:    vl1re16.v v13, (a6)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re16.v v14, (a4)
+; CHECK-NEXT:    slli a4, a1, 3
+; CHECK-NEXT:    sub a5, a0, a1
+; CHECK-NEXT:    add a4, a5, a4
+; CHECK-NEXT:    vl1re16.v v15, (a4)
+; CHECK-NEXT:    add a4, a0, a3
+; CHECK-NEXT:    vl1re16.v v12, (a4)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a3, a1, a3
+; CHECK-NEXT:    vl1re16.v v13, (a3)
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    vl1re16.v v11, (a4)
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    vl1re16.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -13863,21 +14545,26 @@ define <vscale x 32 x half> @vector_interleave_nxv32f16_nxv4f16(<vscale x 4 x ha
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg8e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a4, a3, a1
-; ZVBB-NEXT:    add a5, a4, a1
-; ZVBB-NEXT:    add a6, a5, a1
-; ZVBB-NEXT:    add a7, a6, a1
-; ZVBB-NEXT:    vl1re16.v v14, (a7)
-; ZVBB-NEXT:    add a1, a7, a1
-; ZVBB-NEXT:    vl1re16.v v15, (a1)
-; ZVBB-NEXT:    vl1re16.v v12, (a5)
-; ZVBB-NEXT:    vl1re16.v v13, (a6)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re16.v v14, (a4)
+; ZVBB-NEXT:    slli a4, a1, 3
+; ZVBB-NEXT:    sub a5, a0, a1
+; ZVBB-NEXT:    add a4, a5, a4
+; ZVBB-NEXT:    vl1re16.v v15, (a4)
+; ZVBB-NEXT:    add a4, a0, a3
+; ZVBB-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a3, a1, a3
+; ZVBB-NEXT:    vl1re16.v v13, (a3)
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    vl1re16.v v11, (a4)
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    vl1re16.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -13907,48 +14594,55 @@ define <vscale x 64 x half> @vector_interleave_nxv64f16_nxv8f16(<vscale x 8 x ha
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e16.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e16.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1re16.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1re16.v v23, (t0)
-; CHECK-NEXT:    vl1re16.v v20, (a6)
-; CHECK-NEXT:    vl1re16.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1re16.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1re16.v v19, (a5)
 ; CHECK-NEXT:    vl1re16.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1re16.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1re16.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1re16.v v15, (a2)
-; CHECK-NEXT:    vl1re16.v v12, (a3)
-; CHECK-NEXT:    vl1re16.v v13, (a6)
-; CHECK-NEXT:    vl1re16.v v10, (a4)
-; CHECK-NEXT:    vl1re16.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1re16.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1re16.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1re16.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1re16.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1re16.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1re16.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re16.v v11, (a4)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1re16.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1re16.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1re16.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1re16.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -13974,48 +14668,55 @@ define <vscale x 64 x half> @vector_interleave_nxv64f16_nxv8f16(<vscale x 8 x ha
 ; ZVBB-NEXT:    vmv1r.v v6, v19
 ; ZVBB-NEXT:    vmv1r.v v7, v31
 ; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e16.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e16.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1re16.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1re16.v v23, (t0)
-; ZVBB-NEXT:    vl1re16.v v20, (a6)
-; ZVBB-NEXT:    vl1re16.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1re16.v v19, (a5)
 ; ZVBB-NEXT:    vl1re16.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1re16.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1re16.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-NEXT:    vl1re16.v v12, (a3)
-; ZVBB-NEXT:    vl1re16.v v13, (a6)
-; ZVBB-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1re16.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1re16.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1re16.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1re16.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1re16.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1re16.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re16.v v11, (a4)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1re16.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1re16.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1re16.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1re16.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -14037,27 +14738,31 @@ define <vscale x 16 x bfloat> @vector_interleave_nxv16bf16_nxv2bf16(<vscale x 2
 ; CHECK-NEXT:    vsseg8e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    add a2, t0, a2
-; CHECK-NEXT:    vle16.v v8, (a2)
-; CHECK-NEXT:    vle16.v v11, (t0)
-; CHECK-NEXT:    vle16.v v9, (a7)
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    sub a3, a3, a2
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vle16.v v8, (a3)
+; CHECK-NEXT:    slli a3, a1, 1
+; CHECK-NEXT:    add a4, a0, a1
+; CHECK-NEXT:    add a5, a4, a3
+; CHECK-NEXT:    vle16.v v11, (a5)
+; CHECK-NEXT:    add a5, a3, a2
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vle16.v v9, (a5)
 ; CHECK-NEXT:    srli a1, a1, 2
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; CHECK-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v11, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; CHECK-NEXT:    vle16.v v10, (a6)
-; CHECK-NEXT:    vle16.v v8, (a5)
-; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vle16.v v10, (a3)
+; CHECK-NEXT:    add a3, a4, a2
+; CHECK-NEXT:    vle16.v v8, (a3)
+; CHECK-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v10, v9, a1
-; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; CHECK-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; CHECK-NEXT:    vle16.v v9, (a4)
-; CHECK-NEXT:    vle16.v v12, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle16.v v12, (a2)
 ; CHECK-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v8, a1
 ; CHECK-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -14081,27 +14786,31 @@ define <vscale x 16 x bfloat> @vector_interleave_nxv16bf16_nxv2bf16(<vscale x 2
 ; ZVBB-NEXT:    vsseg8e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    add a2, t0, a2
-; ZVBB-NEXT:    vle16.v v8, (a2)
-; ZVBB-NEXT:    vle16.v v11, (t0)
-; ZVBB-NEXT:    vle16.v v9, (a7)
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    sub a3, a3, a2
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vle16.v v8, (a3)
+; ZVBB-NEXT:    slli a3, a1, 1
+; ZVBB-NEXT:    add a4, a0, a1
+; ZVBB-NEXT:    add a5, a4, a3
+; ZVBB-NEXT:    vle16.v v11, (a5)
+; ZVBB-NEXT:    add a5, a3, a2
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vle16.v v9, (a5)
 ; ZVBB-NEXT:    srli a1, a1, 2
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a5, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v11, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
-; ZVBB-NEXT:    vle16.v v10, (a6)
-; ZVBB-NEXT:    vle16.v v8, (a5)
-; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vsetvli a5, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vle16.v v10, (a3)
+; ZVBB-NEXT:    add a3, a4, a2
+; ZVBB-NEXT:    vle16.v v8, (a3)
+; ZVBB-NEXT:    vsetvli a3, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v10, v9, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
+; ZVBB-NEXT:    vsetvli a3, zero, e16, mf2, ta, ma
 ; ZVBB-NEXT:    vle16.v v9, (a4)
-; ZVBB-NEXT:    vle16.v v12, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle16.v v12, (a2)
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v8, a1
 ; ZVBB-NEXT:    vsetvli a2, zero, e16, mf2, ta, ma
@@ -14128,21 +14837,26 @@ define <vscale x 32 x bfloat> @vector_interleave_nxv32bf16_nxv4bf16(<vscale x 4
 ; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; CHECK-NEXT:    vsseg8e16.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a4, a3, a1
-; CHECK-NEXT:    add a5, a4, a1
-; CHECK-NEXT:    add a6, a5, a1
-; CHECK-NEXT:    add a7, a6, a1
-; CHECK-NEXT:    vl1re16.v v14, (a7)
-; CHECK-NEXT:    add a1, a7, a1
-; CHECK-NEXT:    vl1re16.v v15, (a1)
-; CHECK-NEXT:    vl1re16.v v12, (a5)
-; CHECK-NEXT:    vl1re16.v v13, (a6)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re16.v v14, (a4)
+; CHECK-NEXT:    slli a4, a1, 3
+; CHECK-NEXT:    sub a5, a0, a1
+; CHECK-NEXT:    add a4, a5, a4
+; CHECK-NEXT:    vl1re16.v v15, (a4)
+; CHECK-NEXT:    add a4, a0, a3
+; CHECK-NEXT:    vl1re16.v v12, (a4)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a3, a1, a3
+; CHECK-NEXT:    vl1re16.v v13, (a3)
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re16.v v10, (a3)
-; CHECK-NEXT:    vl1re16.v v11, (a4)
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re16.v v11, (a2)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    vl1re16.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -14159,21 +14873,26 @@ define <vscale x 32 x bfloat> @vector_interleave_nxv32bf16_nxv4bf16(<vscale x 4
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
 ; ZVBB-NEXT:    vsseg8e16.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a4, a3, a1
-; ZVBB-NEXT:    add a5, a4, a1
-; ZVBB-NEXT:    add a6, a5, a1
-; ZVBB-NEXT:    add a7, a6, a1
-; ZVBB-NEXT:    vl1re16.v v14, (a7)
-; ZVBB-NEXT:    add a1, a7, a1
-; ZVBB-NEXT:    vl1re16.v v15, (a1)
-; ZVBB-NEXT:    vl1re16.v v12, (a5)
-; ZVBB-NEXT:    vl1re16.v v13, (a6)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re16.v v14, (a4)
+; ZVBB-NEXT:    slli a4, a1, 3
+; ZVBB-NEXT:    sub a5, a0, a1
+; ZVBB-NEXT:    add a4, a5, a4
+; ZVBB-NEXT:    vl1re16.v v15, (a4)
+; ZVBB-NEXT:    add a4, a0, a3
+; ZVBB-NEXT:    vl1re16.v v12, (a4)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a3, a1, a3
+; ZVBB-NEXT:    vl1re16.v v13, (a3)
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re16.v v10, (a3)
-; ZVBB-NEXT:    vl1re16.v v11, (a4)
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re16.v v11, (a2)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    vl1re16.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -14203,48 +14922,55 @@ define <vscale x 64 x bfloat> @vector_interleave_nxv64bf16_nxv8bf16(<vscale x 8
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e16.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e16.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1re16.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1re16.v v23, (t0)
-; CHECK-NEXT:    vl1re16.v v20, (a6)
-; CHECK-NEXT:    vl1re16.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1re16.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1re16.v v19, (a5)
 ; CHECK-NEXT:    vl1re16.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1re16.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1re16.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1re16.v v15, (a2)
-; CHECK-NEXT:    vl1re16.v v12, (a3)
-; CHECK-NEXT:    vl1re16.v v13, (a6)
-; CHECK-NEXT:    vl1re16.v v10, (a4)
-; CHECK-NEXT:    vl1re16.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1re16.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1re16.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1re16.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1re16.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1re16.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1re16.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re16.v v11, (a4)
 ; CHECK-NEXT:    vl1re16.v v8, (a0)
-; CHECK-NEXT:    vl1re16.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1re16.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1re16.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1re16.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1re16.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1re16.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -14270,48 +14996,55 @@ define <vscale x 64 x bfloat> @vector_interleave_nxv64bf16_nxv8bf16(<vscale x 8
 ; ZVBB-NEXT:    vmv1r.v v6, v19
 ; ZVBB-NEXT:    vmv1r.v v7, v31
 ; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e16.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e16.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1re16.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1re16.v v23, (t0)
-; ZVBB-NEXT:    vl1re16.v v20, (a6)
-; ZVBB-NEXT:    vl1re16.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1re16.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1re16.v v19, (a5)
 ; ZVBB-NEXT:    vl1re16.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1re16.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1re16.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1re16.v v15, (a2)
-; ZVBB-NEXT:    vl1re16.v v12, (a3)
-; ZVBB-NEXT:    vl1re16.v v13, (a6)
-; ZVBB-NEXT:    vl1re16.v v10, (a4)
-; ZVBB-NEXT:    vl1re16.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1re16.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1re16.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1re16.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1re16.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1re16.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1re16.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re16.v v11, (a4)
 ; ZVBB-NEXT:    vl1re16.v v8, (a0)
-; ZVBB-NEXT:    vl1re16.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1re16.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1re16.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1re16.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1re16.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1re16.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -14333,27 +15066,31 @@ define <vscale x 8 x float> @vector_interleave_nxv8f32_nxv1f32(<vscale x 1 x flo
 ; CHECK-NEXT:    vsseg8e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
 ; CHECK-NEXT:    srli a2, a1, 1
-; CHECK-NEXT:    add a3, a0, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    add a2, t0, a2
-; CHECK-NEXT:    vle32.v v8, (a2)
-; CHECK-NEXT:    vle32.v v11, (t0)
-; CHECK-NEXT:    vle32.v v9, (a7)
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    sub a3, a3, a2
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vle32.v v8, (a3)
+; CHECK-NEXT:    slli a3, a1, 1
+; CHECK-NEXT:    add a4, a0, a1
+; CHECK-NEXT:    add a5, a4, a3
+; CHECK-NEXT:    vle32.v v11, (a5)
+; CHECK-NEXT:    add a5, a3, a2
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vle32.v v9, (a5)
 ; CHECK-NEXT:    srli a1, a1, 3
-; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
+; CHECK-NEXT:    vsetvli a5, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v11, v8, a1
-; CHECK-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
-; CHECK-NEXT:    vle32.v v10, (a6)
-; CHECK-NEXT:    vle32.v v8, (a5)
-; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vsetvli a5, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vle32.v v10, (a3)
+; CHECK-NEXT:    add a3, a4, a2
+; CHECK-NEXT:    vle32.v v8, (a3)
+; CHECK-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v10, v9, a1
-; CHECK-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; CHECK-NEXT:    vsetvli a3, zero, e32, mf2, ta, ma
 ; CHECK-NEXT:    vle32.v v9, (a4)
-; CHECK-NEXT:    vle32.v v12, (a3)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vle32.v v12, (a2)
 ; CHECK-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vslideup.vx v9, v8, a1
 ; CHECK-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
@@ -14377,27 +15114,31 @@ define <vscale x 8 x float> @vector_interleave_nxv8f32_nxv1f32(<vscale x 1 x flo
 ; ZVBB-NEXT:    vsseg8e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
 ; ZVBB-NEXT:    srli a2, a1, 1
-; ZVBB-NEXT:    add a3, a0, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    add a2, t0, a2
-; ZVBB-NEXT:    vle32.v v8, (a2)
-; ZVBB-NEXT:    vle32.v v11, (t0)
-; ZVBB-NEXT:    vle32.v v9, (a7)
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    sub a3, a3, a2
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vle32.v v8, (a3)
+; ZVBB-NEXT:    slli a3, a1, 1
+; ZVBB-NEXT:    add a4, a0, a1
+; ZVBB-NEXT:    add a5, a4, a3
+; ZVBB-NEXT:    vle32.v v11, (a5)
+; ZVBB-NEXT:    add a5, a3, a2
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vle32.v v9, (a5)
 ; ZVBB-NEXT:    srli a1, a1, 3
-; ZVBB-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vsetvli a5, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v11, v8, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
-; ZVBB-NEXT:    vle32.v v10, (a6)
-; ZVBB-NEXT:    vle32.v v8, (a5)
-; ZVBB-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vsetvli a5, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vle32.v v10, (a3)
+; ZVBB-NEXT:    add a3, a4, a2
+; ZVBB-NEXT:    vle32.v v8, (a3)
+; ZVBB-NEXT:    vsetvli a3, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v10, v9, a1
-; ZVBB-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
+; ZVBB-NEXT:    vsetvli a3, zero, e32, mf2, ta, ma
 ; ZVBB-NEXT:    vle32.v v9, (a4)
-; ZVBB-NEXT:    vle32.v v12, (a3)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vle32.v v12, (a2)
 ; ZVBB-NEXT:    vsetvli a2, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vslideup.vx v9, v8, a1
 ; ZVBB-NEXT:    vsetvli a2, zero, e32, mf2, ta, ma
@@ -14424,21 +15165,26 @@ define <vscale x 16 x float> @vector_interleave_nxv16f32_nxv2f32(<vscale x 2 x f
 ; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; CHECK-NEXT:    vsseg8e32.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a4, a3, a1
-; CHECK-NEXT:    add a5, a4, a1
-; CHECK-NEXT:    add a6, a5, a1
-; CHECK-NEXT:    add a7, a6, a1
-; CHECK-NEXT:    vl1re32.v v14, (a7)
-; CHECK-NEXT:    add a1, a7, a1
-; CHECK-NEXT:    vl1re32.v v15, (a1)
-; CHECK-NEXT:    vl1re32.v v12, (a5)
-; CHECK-NEXT:    vl1re32.v v13, (a6)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re32.v v14, (a4)
+; CHECK-NEXT:    slli a4, a1, 3
+; CHECK-NEXT:    sub a5, a0, a1
+; CHECK-NEXT:    add a4, a5, a4
+; CHECK-NEXT:    vl1re32.v v15, (a4)
+; CHECK-NEXT:    add a4, a0, a3
+; CHECK-NEXT:    vl1re32.v v12, (a4)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a3, a1, a3
+; CHECK-NEXT:    vl1re32.v v13, (a3)
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re32.v v10, (a3)
-; CHECK-NEXT:    vl1re32.v v11, (a4)
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re32.v v11, (a2)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
-; CHECK-NEXT:    vl1re32.v v9, (a2)
+; CHECK-NEXT:    vl1re32.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -14455,21 +15201,26 @@ define <vscale x 16 x float> @vector_interleave_nxv16f32_nxv2f32(<vscale x 2 x f
 ; ZVBB-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
 ; ZVBB-NEXT:    vsseg8e32.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a4, a3, a1
-; ZVBB-NEXT:    add a5, a4, a1
-; ZVBB-NEXT:    add a6, a5, a1
-; ZVBB-NEXT:    add a7, a6, a1
-; ZVBB-NEXT:    vl1re32.v v14, (a7)
-; ZVBB-NEXT:    add a1, a7, a1
-; ZVBB-NEXT:    vl1re32.v v15, (a1)
-; ZVBB-NEXT:    vl1re32.v v12, (a5)
-; ZVBB-NEXT:    vl1re32.v v13, (a6)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re32.v v14, (a4)
+; ZVBB-NEXT:    slli a4, a1, 3
+; ZVBB-NEXT:    sub a5, a0, a1
+; ZVBB-NEXT:    add a4, a5, a4
+; ZVBB-NEXT:    vl1re32.v v15, (a4)
+; ZVBB-NEXT:    add a4, a0, a3
+; ZVBB-NEXT:    vl1re32.v v12, (a4)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a3, a1, a3
+; ZVBB-NEXT:    vl1re32.v v13, (a3)
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re32.v v10, (a3)
-; ZVBB-NEXT:    vl1re32.v v11, (a4)
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re32.v v11, (a2)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-NEXT:    vl1re32.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -14499,48 +15250,55 @@ define <vscale x 32 x float> @vector_interleave_nxv32f32_nxv4f32(<vscale x 4 x f
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e32.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e32.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1re32.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1re32.v v23, (t0)
-; CHECK-NEXT:    vl1re32.v v20, (a6)
-; CHECK-NEXT:    vl1re32.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1re32.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1re32.v v19, (a5)
 ; CHECK-NEXT:    vl1re32.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1re32.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1re32.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1re32.v v15, (a2)
-; CHECK-NEXT:    vl1re32.v v12, (a3)
-; CHECK-NEXT:    vl1re32.v v13, (a6)
-; CHECK-NEXT:    vl1re32.v v10, (a4)
-; CHECK-NEXT:    vl1re32.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1re32.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1re32.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1re32.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1re32.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1re32.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1re32.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re32.v v11, (a4)
 ; CHECK-NEXT:    vl1re32.v v8, (a0)
-; CHECK-NEXT:    vl1re32.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1re32.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1re32.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1re32.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1re32.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1re32.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -14566,48 +15324,55 @@ define <vscale x 32 x float> @vector_interleave_nxv32f32_nxv4f32(<vscale x 4 x f
 ; ZVBB-NEXT:    vmv1r.v v6, v19
 ; ZVBB-NEXT:    vmv1r.v v7, v31
 ; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e32.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e32.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1re32.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1re32.v v23, (t0)
-; ZVBB-NEXT:    vl1re32.v v20, (a6)
-; ZVBB-NEXT:    vl1re32.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1re32.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1re32.v v19, (a5)
 ; ZVBB-NEXT:    vl1re32.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1re32.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1re32.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1re32.v v15, (a2)
-; ZVBB-NEXT:    vl1re32.v v12, (a3)
-; ZVBB-NEXT:    vl1re32.v v13, (a6)
-; ZVBB-NEXT:    vl1re32.v v10, (a4)
-; ZVBB-NEXT:    vl1re32.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1re32.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1re32.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1re32.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1re32.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1re32.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1re32.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re32.v v11, (a4)
 ; ZVBB-NEXT:    vl1re32.v v8, (a0)
-; ZVBB-NEXT:    vl1re32.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1re32.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1re32.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1re32.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1re32.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1re32.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -14628,21 +15393,26 @@ define <vscale x 8 x double> @vector_interleave_nxv8f64_nxv1f64(<vscale x 1 x do
 ; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; CHECK-NEXT:    vsseg8e64.v v8, (a0)
 ; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    add a2, a0, a1
-; CHECK-NEXT:    add a3, a2, a1
-; CHECK-NEXT:    add a4, a3, a1
-; CHECK-NEXT:    add a5, a4, a1
-; CHECK-NEXT:    add a6, a5, a1
-; CHECK-NEXT:    add a7, a6, a1
-; CHECK-NEXT:    vl1re64.v v14, (a7)
-; CHECK-NEXT:    add a1, a7, a1
-; CHECK-NEXT:    vl1re64.v v15, (a1)
-; CHECK-NEXT:    vl1re64.v v12, (a5)
-; CHECK-NEXT:    vl1re64.v v13, (a6)
+; CHECK-NEXT:    slli a2, a1, 1
+; CHECK-NEXT:    slli a3, a1, 2
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re64.v v14, (a4)
+; CHECK-NEXT:    slli a4, a1, 3
+; CHECK-NEXT:    sub a5, a0, a1
+; CHECK-NEXT:    add a4, a5, a4
+; CHECK-NEXT:    vl1re64.v v15, (a4)
+; CHECK-NEXT:    add a4, a0, a3
+; CHECK-NEXT:    vl1re64.v v12, (a4)
+; CHECK-NEXT:    add a1, a0, a1
+; CHECK-NEXT:    add a3, a1, a3
+; CHECK-NEXT:    vl1re64.v v13, (a3)
+; CHECK-NEXT:    add a3, a0, a2
 ; CHECK-NEXT:    vl1re64.v v10, (a3)
-; CHECK-NEXT:    vl1re64.v v11, (a4)
+; CHECK-NEXT:    add a2, a1, a2
+; CHECK-NEXT:    vl1re64.v v11, (a2)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
-; CHECK-NEXT:    vl1re64.v v9, (a2)
+; CHECK-NEXT:    vl1re64.v v9, (a1)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 3
 ; CHECK-NEXT:    add sp, sp, a0
@@ -14659,21 +15429,26 @@ define <vscale x 8 x double> @vector_interleave_nxv8f64_nxv1f64(<vscale x 1 x do
 ; ZVBB-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
 ; ZVBB-NEXT:    vsseg8e64.v v8, (a0)
 ; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    add a2, a0, a1
-; ZVBB-NEXT:    add a3, a2, a1
-; ZVBB-NEXT:    add a4, a3, a1
-; ZVBB-NEXT:    add a5, a4, a1
-; ZVBB-NEXT:    add a6, a5, a1
-; ZVBB-NEXT:    add a7, a6, a1
-; ZVBB-NEXT:    vl1re64.v v14, (a7)
-; ZVBB-NEXT:    add a1, a7, a1
-; ZVBB-NEXT:    vl1re64.v v15, (a1)
-; ZVBB-NEXT:    vl1re64.v v12, (a5)
-; ZVBB-NEXT:    vl1re64.v v13, (a6)
+; ZVBB-NEXT:    slli a2, a1, 1
+; ZVBB-NEXT:    slli a3, a1, 2
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re64.v v14, (a4)
+; ZVBB-NEXT:    slli a4, a1, 3
+; ZVBB-NEXT:    sub a5, a0, a1
+; ZVBB-NEXT:    add a4, a5, a4
+; ZVBB-NEXT:    vl1re64.v v15, (a4)
+; ZVBB-NEXT:    add a4, a0, a3
+; ZVBB-NEXT:    vl1re64.v v12, (a4)
+; ZVBB-NEXT:    add a1, a0, a1
+; ZVBB-NEXT:    add a3, a1, a3
+; ZVBB-NEXT:    vl1re64.v v13, (a3)
+; ZVBB-NEXT:    add a3, a0, a2
 ; ZVBB-NEXT:    vl1re64.v v10, (a3)
-; ZVBB-NEXT:    vl1re64.v v11, (a4)
+; ZVBB-NEXT:    add a2, a1, a2
+; ZVBB-NEXT:    vl1re64.v v11, (a2)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-NEXT:    vl1re64.v v9, (a1)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 3
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -14703,48 +15478,55 @@ define <vscale x 16 x double> @vector_interleave_nxv16f64_nxv2f64(<vscale x 2 x
 ; CHECK-NEXT:    vmv1r.v v6, v19
 ; CHECK-NEXT:    vmv1r.v v7, v31
 ; CHECK-NEXT:    vmv1r.v v8, v23
-; CHECK-NEXT:    csrr a1, vlenb
-; CHECK-NEXT:    slli a1, a1, 3
-; CHECK-NEXT:    add a1, sp, a1
-; CHECK-NEXT:    addi a1, a1, 16
+; CHECK-NEXT:    addi a1, sp, 16
 ; CHECK-NEXT:    vsseg8e64.v v1, (a1)
 ; CHECK-NEXT:    vmv1r.v v25, v10
 ; CHECK-NEXT:    vmv1r.v v27, v14
 ; CHECK-NEXT:    vmv1r.v v29, v18
 ; CHECK-NEXT:    vmv1r.v v31, v22
-; CHECK-NEXT:    addi a0, sp, 16
+; CHECK-NEXT:    csrr a0, vlenb
+; CHECK-NEXT:    slli a0, a0, 3
+; CHECK-NEXT:    add a0, sp, a0
+; CHECK-NEXT:    addi a0, a0, 16
 ; CHECK-NEXT:    vsseg8e64.v v24, (a0)
 ; CHECK-NEXT:    csrr a2, vlenb
-; CHECK-NEXT:    add a3, a1, a2
-; CHECK-NEXT:    add a4, a3, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    add a6, a5, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    add t0, a7, a2
-; CHECK-NEXT:    vl1re64.v v22, (t0)
-; CHECK-NEXT:    add t0, t0, a2
-; CHECK-NEXT:    vl1re64.v v23, (t0)
-; CHECK-NEXT:    vl1re64.v v20, (a6)
-; CHECK-NEXT:    vl1re64.v v21, (a7)
+; CHECK-NEXT:    slli a3, a2, 1
+; CHECK-NEXT:    add a4, a1, a3
 ; CHECK-NEXT:    vl1re64.v v18, (a4)
+; CHECK-NEXT:    add a4, a3, a2
+; CHECK-NEXT:    add a5, a1, a4
 ; CHECK-NEXT:    vl1re64.v v19, (a5)
 ; CHECK-NEXT:    vl1re64.v v16, (a1)
-; CHECK-NEXT:    add a1, a0, a2
-; CHECK-NEXT:    add a4, a1, a2
-; CHECK-NEXT:    add a5, a4, a2
-; CHECK-NEXT:    vl1re64.v v17, (a3)
-; CHECK-NEXT:    add a3, a5, a2
-; CHECK-NEXT:    add a6, a3, a2
-; CHECK-NEXT:    add a7, a6, a2
-; CHECK-NEXT:    vl1re64.v v14, (a7)
-; CHECK-NEXT:    add a2, a7, a2
-; CHECK-NEXT:    vl1re64.v v15, (a2)
-; CHECK-NEXT:    vl1re64.v v12, (a3)
-; CHECK-NEXT:    vl1re64.v v13, (a6)
-; CHECK-NEXT:    vl1re64.v v10, (a4)
-; CHECK-NEXT:    vl1re64.v v11, (a5)
+; CHECK-NEXT:    add a5, a1, a2
+; CHECK-NEXT:    vl1re64.v v17, (a5)
+; CHECK-NEXT:    slli a5, a2, 2
+; CHECK-NEXT:    add a6, a5, a3
+; CHECK-NEXT:    add a7, a1, a6
+; CHECK-NEXT:    vl1re64.v v22, (a7)
+; CHECK-NEXT:    slli a7, a2, 3
+; CHECK-NEXT:    sub a7, a7, a2
+; CHECK-NEXT:    add t0, a1, a7
+; CHECK-NEXT:    vl1re64.v v23, (t0)
+; CHECK-NEXT:    add t0, a1, a5
+; CHECK-NEXT:    vl1re64.v v20, (t0)
+; CHECK-NEXT:    add t0, a5, a2
+; CHECK-NEXT:    add a1, a1, t0
+; CHECK-NEXT:    vl1re64.v v21, (a1)
+; CHECK-NEXT:    add a3, a0, a3
+; CHECK-NEXT:    vl1re64.v v10, (a3)
+; CHECK-NEXT:    add a4, a0, a4
+; CHECK-NEXT:    vl1re64.v v11, (a4)
 ; CHECK-NEXT:    vl1re64.v v8, (a0)
-; CHECK-NEXT:    vl1re64.v v9, (a1)
+; CHECK-NEXT:    add a2, a0, a2
+; CHECK-NEXT:    vl1re64.v v9, (a2)
+; CHECK-NEXT:    add a6, a0, a6
+; CHECK-NEXT:    vl1re64.v v14, (a6)
+; CHECK-NEXT:    add a7, a0, a7
+; CHECK-NEXT:    vl1re64.v v15, (a7)
+; CHECK-NEXT:    add a5, a0, a5
+; CHECK-NEXT:    vl1re64.v v12, (a5)
+; CHECK-NEXT:    add a0, a0, t0
+; CHECK-NEXT:    vl1re64.v v13, (a0)
 ; CHECK-NEXT:    csrr a0, vlenb
 ; CHECK-NEXT:    slli a0, a0, 4
 ; CHECK-NEXT:    add sp, sp, a0
@@ -14770,48 +15552,55 @@ define <vscale x 16 x double> @vector_interleave_nxv16f64_nxv2f64(<vscale x 2 x
 ; ZVBB-NEXT:    vmv1r.v v6, v19
 ; ZVBB-NEXT:    vmv1r.v v7, v31
 ; ZVBB-NEXT:    vmv1r.v v8, v23
-; ZVBB-NEXT:    csrr a1, vlenb
-; ZVBB-NEXT:    slli a1, a1, 3
-; ZVBB-NEXT:    add a1, sp, a1
-; ZVBB-NEXT:    addi a1, a1, 16
+; ZVBB-NEXT:    addi a1, sp, 16
 ; ZVBB-NEXT:    vsseg8e64.v v1, (a1)
 ; ZVBB-NEXT:    vmv1r.v v25, v10
 ; ZVBB-NEXT:    vmv1r.v v27, v14
 ; ZVBB-NEXT:    vmv1r.v v29, v18
 ; ZVBB-NEXT:    vmv1r.v v31, v22
-; ZVBB-NEXT:    addi a0, sp, 16
+; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    slli a0, a0, 3
+; ZVBB-NEXT:    add a0, sp, a0
+; ZVBB-NEXT:    addi a0, a0, 16
 ; ZVBB-NEXT:    vsseg8e64.v v24, (a0)
 ; ZVBB-NEXT:    csrr a2, vlenb
-; ZVBB-NEXT:    add a3, a1, a2
-; ZVBB-NEXT:    add a4, a3, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    add a6, a5, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    add t0, a7, a2
-; ZVBB-NEXT:    vl1re64.v v22, (t0)
-; ZVBB-NEXT:    add t0, t0, a2
-; ZVBB-NEXT:    vl1re64.v v23, (t0)
-; ZVBB-NEXT:    vl1re64.v v20, (a6)
-; ZVBB-NEXT:    vl1re64.v v21, (a7)
+; ZVBB-NEXT:    slli a3, a2, 1
+; ZVBB-NEXT:    add a4, a1, a3
 ; ZVBB-NEXT:    vl1re64.v v18, (a4)
+; ZVBB-NEXT:    add a4, a3, a2
+; ZVBB-NEXT:    add a5, a1, a4
 ; ZVBB-NEXT:    vl1re64.v v19, (a5)
 ; ZVBB-NEXT:    vl1re64.v v16, (a1)
-; ZVBB-NEXT:    add a1, a0, a2
-; ZVBB-NEXT:    add a4, a1, a2
-; ZVBB-NEXT:    add a5, a4, a2
-; ZVBB-NEXT:    vl1re64.v v17, (a3)
-; ZVBB-NEXT:    add a3, a5, a2
-; ZVBB-NEXT:    add a6, a3, a2
-; ZVBB-NEXT:    add a7, a6, a2
-; ZVBB-NEXT:    vl1re64.v v14, (a7)
-; ZVBB-NEXT:    add a2, a7, a2
-; ZVBB-NEXT:    vl1re64.v v15, (a2)
-; ZVBB-NEXT:    vl1re64.v v12, (a3)
-; ZVBB-NEXT:    vl1re64.v v13, (a6)
-; ZVBB-NEXT:    vl1re64.v v10, (a4)
-; ZVBB-NEXT:    vl1re64.v v11, (a5)
+; ZVBB-NEXT:    add a5, a1, a2
+; ZVBB-NEXT:    vl1re64.v v17, (a5)
+; ZVBB-NEXT:    slli a5, a2, 2
+; ZVBB-NEXT:    add a6, a5, a3
+; ZVBB-NEXT:    add a7, a1, a6
+; ZVBB-NEXT:    vl1re64.v v22, (a7)
+; ZVBB-NEXT:    slli a7, a2, 3
+; ZVBB-NEXT:    sub a7, a7, a2
+; ZVBB-NEXT:    add t0, a1, a7
+; ZVBB-NEXT:    vl1re64.v v23, (t0)
+; ZVBB-NEXT:    add t0, a1, a5
+; ZVBB-NEXT:    vl1re64.v v20, (t0)
+; ZVBB-NEXT:    add t0, a5, a2
+; ZVBB-NEXT:    add a1, a1, t0
+; ZVBB-NEXT:    vl1re64.v v21, (a1)
+; ZVBB-NEXT:    add a3, a0, a3
+; ZVBB-NEXT:    vl1re64.v v10, (a3)
+; ZVBB-NEXT:    add a4, a0, a4
+; ZVBB-NEXT:    vl1re64.v v11, (a4)
 ; ZVBB-NEXT:    vl1re64.v v8, (a0)
-; ZVBB-NEXT:    vl1re64.v v9, (a1)
+; ZVBB-NEXT:    add a2, a0, a2
+; ZVBB-NEXT:    vl1re64.v v9, (a2)
+; ZVBB-NEXT:    add a6, a0, a6
+; ZVBB-NEXT:    vl1re64.v v14, (a6)
+; ZVBB-NEXT:    add a7, a0, a7
+; ZVBB-NEXT:    vl1re64.v v15, (a7)
+; ZVBB-NEXT:    add a5, a0, a5
+; ZVBB-NEXT:    vl1re64.v v12, (a5)
+; ZVBB-NEXT:    add a0, a0, t0
+; ZVBB-NEXT:    vl1re64.v v13, (a0)
 ; ZVBB-NEXT:    csrr a0, vlenb
 ; ZVBB-NEXT:    slli a0, a0, 4
 ; ZVBB-NEXT:    add sp, sp, a0
@@ -14847,9 +15636,11 @@ define <vscale x 4 x i16> @interleave2_diff_const_splat_nxv4i16() {
 ; V-NEXT:    vmv.v.i v9, -1
 ; V-NEXT:    vwmaccu.vx v8, a0, v9
 ; V-NEXT:    csrr a0, vlenb
+; V-NEXT:    srli a1, a0, 3
+; V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; V-NEXT:    vslidedown.vx v9, v8, a1
 ; V-NEXT:    srli a0, a0, 2
 ; V-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; V-NEXT:    vslidedown.vx v9, v8, a0
 ; V-NEXT:    vslideup.vx v8, v9, a0
 ; V-NEXT:    ret
 ;
@@ -14861,9 +15652,11 @@ define <vscale x 4 x i16> @interleave2_diff_const_splat_nxv4i16() {
 ; ZVBB-NEXT:    li a0, 3
 ; ZVBB-NEXT:    vwaddu.wx v8, v9, a0
 ; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a1, a0, 3
+; ZVBB-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v9, v8, a1
 ; ZVBB-NEXT:    srli a0, a0, 2
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslidedown.vx v9, v8, a0
 ; ZVBB-NEXT:    vslideup.vx v8, v9, a0
 ; ZVBB-NEXT:    ret
 ;
@@ -14873,11 +15666,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
@@ -14910,9 +15698,11 @@ define <vscale x 4 x i16> @interleave2_diff_nonconst_splat_nxv4i16(i16 %a, i16 %
 ; V-NEXT:    vmv.v.i v9, -1
 ; V-NEXT:    vwmaccu.vx v8, a1, v9
 ; V-NEXT:    csrr a0, vlenb
+; V-NEXT:    srli a1, a0, 3
+; V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; V-NEXT:    vslidedown.vx v9, v8, a1
 ; V-NEXT:    srli a0, a0, 2
 ; V-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; V-NEXT:    vslidedown.vx v9, v8, a0
 ; V-NEXT:    vslideup.vx v8, v9, a0
 ; V-NEXT:    ret
 ;
@@ -14923,9 +15713,11 @@ define <vscale x 4 x i16> @interleave2_diff_nonconst_splat_nxv4i16(i16 %a, i16 %
 ; ZVBB-NEXT:    vwsll.vi v9, v8, 16
 ; ZVBB-NEXT:    vwaddu.wx v8, v9, a0
 ; ZVBB-NEXT:    csrr a0, vlenb
+; ZVBB-NEXT:    srli a1, a0, 3
+; ZVBB-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
+; ZVBB-NEXT:    vslidedown.vx v9, v8, a1
 ; ZVBB-NEXT:    srli a0, a0, 2
 ; ZVBB-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
-; ZVBB-NEXT:    vslidedown.vx v9, v8, a0
 ; ZVBB-NEXT:    vslideup.vx v8, v9, a0
 ; ZVBB-NEXT:    ret
 ;
@@ -14935,11 +15727,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
diff --git a/llvm/test/CodeGen/RISCV/rvv/vp-vector-interleaved-access.ll b/llvm/test/CodeGen/RISCV/rvv/vp-vector-interleaved-access.ll
index fd46b99bd98e3..a788376bd26ed 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vp-vector-interleaved-access.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vp-vector-interleaved-access.ll
@@ -370,12 +370,15 @@ define i32 @masked_load_store_factor2_v2_shared_mask_extract(<vscale x 2 x i1> %
 ; RV32-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
 ; RV32-NEXT:    vmv.v.i v10, 0
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    srli a2, a2, 2
-; RV32-NEXT:    vslidedown.vx v11, v11, a2
+; RV32-NEXT:    srli a3, a2, 3
+; RV32-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; RV32-NEXT:    vslidedown.vx v11, v11, a3
+; RV32-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV32-NEXT:    vmerge.vim v10, v10, 1, v0
 ; RV32-NEXT:    vsetvli a3, zero, e8, mf4, ta, ma
 ; RV32-NEXT:    vmsne.vi v0, v11, 0
 ; RV32-NEXT:    vmerge.vim v9, v9, 1, v0
+; RV32-NEXT:    srli a2, a2, 2
 ; RV32-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV32-NEXT:    vslideup.vx v10, v9, a2
 ; RV32-NEXT:    slli a2, a1, 1
@@ -405,12 +408,15 @@ define i32 @masked_load_store_factor2_v2_shared_mask_extract(<vscale x 2 x i1> %
 ; RV64-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
 ; RV64-NEXT:    vmv.v.i v10, 0
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    srli a2, a2, 2
-; RV64-NEXT:    vslidedown.vx v11, v11, a2
+; RV64-NEXT:    srli a3, a2, 3
+; RV64-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; RV64-NEXT:    vslidedown.vx v11, v11, a3
+; RV64-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV64-NEXT:    vmerge.vim v10, v10, 1, v0
 ; RV64-NEXT:    vsetvli a3, zero, e8, mf4, ta, ma
 ; RV64-NEXT:    vmsne.vi v0, v11, 0
 ; RV64-NEXT:    vmerge.vim v9, v9, 1, v0
+; RV64-NEXT:    srli a2, a2, 2
 ; RV64-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV64-NEXT:    vslideup.vx v10, v9, a2
 ; RV64-NEXT:    slli a2, a1, 33
@@ -591,12 +597,15 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>} @not_same_mask(<vscale x 2 x i1>
 ; RV32-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
 ; RV32-NEXT:    vmv.v.i v8, 0
 ; RV32-NEXT:    csrr a2, vlenb
-; RV32-NEXT:    srli a2, a2, 2
-; RV32-NEXT:    vslidedown.vx v9, v11, a2
+; RV32-NEXT:    srli a3, a2, 3
+; RV32-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; RV32-NEXT:    vslidedown.vx v9, v11, a3
+; RV32-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV32-NEXT:    vmerge.vim v8, v8, 1, v0
 ; RV32-NEXT:    vsetvli a3, zero, e8, mf4, ta, ma
 ; RV32-NEXT:    vmsne.vi v0, v9, 0
 ; RV32-NEXT:    vmerge.vim v9, v10, 1, v0
+; RV32-NEXT:    srli a2, a2, 2
 ; RV32-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV32-NEXT:    vslideup.vx v8, v9, a2
 ; RV32-NEXT:    slli a1, a1, 1
@@ -625,12 +634,15 @@ define {<vscale x 2 x i32>, <vscale x 2 x i32>} @not_same_mask(<vscale x 2 x i1>
 ; RV64-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma
 ; RV64-NEXT:    vmv.v.i v8, 0
 ; RV64-NEXT:    csrr a2, vlenb
-; RV64-NEXT:    srli a2, a2, 2
-; RV64-NEXT:    vslidedown.vx v9, v11, a2
+; RV64-NEXT:    srli a3, a2, 3
+; RV64-NEXT:    vsetvli a4, zero, e16, mf2, ta, ma
+; RV64-NEXT:    vslidedown.vx v9, v11, a3
+; RV64-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV64-NEXT:    vmerge.vim v8, v8, 1, v0
 ; RV64-NEXT:    vsetvli a3, zero, e8, mf4, ta, ma
 ; RV64-NEXT:    vmsne.vi v0, v9, 0
 ; RV64-NEXT:    vmerge.vim v9, v10, 1, v0
+; RV64-NEXT:    srli a2, a2, 2
 ; RV64-NEXT:    vsetvli a3, zero, e8, mf2, ta, ma
 ; RV64-NEXT:    vslideup.vx v8, v9, a2
 ; RV64-NEXT:    slli a1, a1, 33
diff --git a/llvm/test/CodeGen/X86/vector-interleave-intrinsics.ll b/llvm/test/CodeGen/X86/vector-interleave-intrinsics.ll
new file mode 100644
index 0000000000000..5046e822918cc
--- /dev/null
+++ b/llvm/test/CodeGen/X86/vector-interleave-intrinsics.ll
@@ -0,0 +1,576 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
+
+define void @interleave2(ptr %dst, <4 x i32> %v0, <4 x i32> %v1) {
+; CHECK-LABEL: interleave2:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps %xmm0, %xmm2
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
+; CHECK-NEXT:    movaps %xmm0, 16(%rdi)
+; CHECK-NEXT:    movaps %xmm2, (%rdi)
+; CHECK-NEXT:    retq
+  %result = call <8 x i32> @llvm.vector.interleave2.v8i32(<4 x i32> %v0, <4 x i32> %v1)
+  store <8 x i32> %result, ptr %dst
+  ret void
+}
+
+define void @deinterleave2(ptr %src, ptr %dst0, ptr %dst1) {
+; CHECK-LABEL: deinterleave2:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps (%rdi), %xmm0
+; CHECK-NEXT:    movaps 16(%rdi), %xmm1
+; CHECK-NEXT:    movaps %xmm0, %xmm2
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,3],xmm1[1,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
+; CHECK-NEXT:    movaps %xmm0, (%rsi)
+; CHECK-NEXT:    movaps %xmm2, (%rdx)
+; CHECK-NEXT:    retq
+  %wide = load <8 x i32>, ptr %src
+  %result = call { <4 x i32>, <4 x i32> } @llvm.vector.deinterleave2.v8i32(<8 x i32> %wide)
+  %v0 = extractvalue { <4 x i32>, <4 x i32> } %result, 0
+  %v1 = extractvalue { <4 x i32>, <4 x i32> } %result, 1
+  store <4 x i32> %v0, ptr %dst0
+  store <4 x i32> %v1, ptr %dst1
+  ret void
+}
+
+define void @interleave3(ptr %dst, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {
+; CHECK-LABEL: interleave3:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps %xmm2, %xmm3
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,1],xmm0[1,3]
+; CHECK-NEXT:    movaps %xmm0, %xmm4
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,1],xmm3[0,2]
+; CHECK-NEXT:    movaps %xmm0, %xmm3
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1],xmm1[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[3,3],xmm1[3,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,2],xmm2[2,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1],xmm1[1,1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,0],xmm3[0,2]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[2,0,1,3]
+; CHECK-NEXT:    movaps %xmm2, 16(%rdi)
+; CHECK-NEXT:    movaps %xmm4, (%rdi)
+; CHECK-NEXT:    movaps %xmm0, 32(%rdi)
+; CHECK-NEXT:    retq
+  %result = call <12 x i32> @llvm.vector.interleave3.v12i32(<4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2)
+  store <12 x i32> %result, ptr %dst
+  ret void
+}
+
+define void @deinterleave3(ptr %src, ptr %dst0, ptr %dst1, ptr %dst2) {
+; CHECK-LABEL: deinterleave3:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movdqa (%rdi), %xmm0
+; CHECK-NEXT:    movdqa 16(%rdi), %xmm1
+; CHECK-NEXT:    movaps 32(%rdi), %xmm2
+; CHECK-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,1,1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[2,3,2,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,1],xmm2[0,3]
+; CHECK-NEXT:    movdqa %xmm1, %xmm3
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,1],xmm2[2,3]
+; CHECK-NEXT:    movdqa %xmm0, %xmm5
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[1,0],xmm1[0,0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,2],xmm3[0,2]
+; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[2,0],xmm2[1,0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm1[0,2]
+; CHECK-NEXT:    movaps %xmm0, (%rsi)
+; CHECK-NEXT:    movaps %xmm5, (%rdx)
+; CHECK-NEXT:    movaps %xmm4, (%rcx)
+; CHECK-NEXT:    retq
+  %wide = load <12 x i32>, ptr %src
+  %result = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave3.v12i32(<12 x i32> %wide)
+  %v0 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } %result, 0
+  %v1 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } %result, 1
+  %v2 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } %result, 2
+  store <4 x i32> %v0, ptr %dst0
+  store <4 x i32> %v1, ptr %dst1
+  store <4 x i32> %v2, ptr %dst2
+  ret void
+}
+
+define void @interleave4(ptr %dst, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {
+; CHECK-LABEL: interleave4:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps %xmm2, %xmm4
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm5
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1]
+; CHECK-NEXT:    movaps %xmm5, %xmm6
+; CHECK-NEXT:    movlhps {{.*#+}} xmm6 = xmm6[0],xmm4[0]
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm4[1]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
+; CHECK-NEXT:    movaps %xmm0, %xmm1
+; CHECK-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm2[1]
+; CHECK-NEXT:    movaps %xmm0, 48(%rdi)
+; CHECK-NEXT:    movaps %xmm1, 32(%rdi)
+; CHECK-NEXT:    movaps %xmm5, 16(%rdi)
+; CHECK-NEXT:    movaps %xmm6, (%rdi)
+; CHECK-NEXT:    retq
+  %result = call <16 x i32> @llvm.vector.interleave4.v16i32(<4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3)
+  store <16 x i32> %result, ptr %dst
+  ret void
+}
+
+define void @deinterleave4(ptr %src, ptr %dst0, ptr %dst1, ptr %dst2, ptr %dst3) {
+; CHECK-LABEL: deinterleave4:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps (%rdi), %xmm0
+; CHECK-NEXT:    movaps 16(%rdi), %xmm1
+; CHECK-NEXT:    movaps 32(%rdi), %xmm2
+; CHECK-NEXT:    movaps 48(%rdi), %xmm3
+; CHECK-NEXT:    movaps %xmm2, %xmm4
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm4 = xmm4[2],xmm3[2],xmm4[3],xmm3[3]
+; CHECK-NEXT:    movaps %xmm0, %xmm5
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm5 = xmm5[2],xmm1[2],xmm5[3],xmm1[3]
+; CHECK-NEXT:    movaps %xmm5, %xmm6
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm6 = xmm6[1],xmm4[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm5 = xmm5[0],xmm4[0]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm1
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm2[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm2[0]
+; CHECK-NEXT:    movaps %xmm0, (%rsi)
+; CHECK-NEXT:    movaps %xmm1, (%rdx)
+; CHECK-NEXT:    movaps %xmm5, (%rcx)
+; CHECK-NEXT:    movaps %xmm6, (%r8)
+; CHECK-NEXT:    retq
+  %wide = load <16 x i32>, ptr %src
+  %result = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave4.v16i32(<16 x i32> %wide)
+  %v0 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 0
+  %v1 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 1
+  %v2 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 2
+  %v3 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 3
+  store <4 x i32> %v0, ptr %dst0
+  store <4 x i32> %v1, ptr %dst1
+  store <4 x i32> %v2, ptr %dst2
+  store <4 x i32> %v3, ptr %dst3
+  ret void
+}
+
+define void @interleave5(ptr %dst, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4) {
+; CHECK-LABEL: interleave5:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps %xmm2, %xmm5
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm6
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm6 = xmm6[0],xmm1[0],xmm6[1],xmm1[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm6 = xmm6[0],xmm5[0]
+; CHECK-NEXT:    movaps %xmm0, %xmm5
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm5 = xmm5[2],xmm1[2],xmm5[3],xmm1[3]
+; CHECK-NEXT:    movaps %xmm4, %xmm7
+; CHECK-NEXT:    shufps {{.*#+}} xmm7 = xmm7[1,1],xmm3[1,1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm7 = xmm7[2,0],xmm5[0,1]
+; CHECK-NEXT:    movaps %xmm4, %xmm5
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[2,1],xmm0[3,3]
+; CHECK-NEXT:    movaps %xmm4, %xmm8
+; CHECK-NEXT:    shufps {{.*#+}} xmm8 = xmm8[3,3],xmm3[3,3]
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm3 = xmm3[1],xmm2[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm5[0,2]
+; CHECK-NEXT:    movaps %xmm1, %xmm5
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm5 = xmm5[2],xmm2[2],xmm5[3],xmm2[3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[2,3],xmm8[2,0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[1,1],xmm1[1,1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,0]
+; CHECK-NEXT:    movss {{.*#+}} xmm0 = xmm4[0],xmm0[1,2,3]
+; CHECK-NEXT:    movaps %xmm5, 64(%rdi)
+; CHECK-NEXT:    movaps %xmm3, 48(%rdi)
+; CHECK-NEXT:    movaps %xmm7, 32(%rdi)
+; CHECK-NEXT:    movaps %xmm6, (%rdi)
+; CHECK-NEXT:    movaps %xmm0, 16(%rdi)
+; CHECK-NEXT:    retq
+  %result = call <20 x i32> @llvm.vector.interleave5.v20i32(<4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4)
+  store <20 x i32> %result, ptr %dst
+  ret void
+}
+
+define void @deinterleave5(ptr %src, ptr %dst0, ptr %dst1, ptr %dst2, ptr %dst3, ptr %dst4) {
+; CHECK-LABEL: deinterleave5:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps 64(%rdi), %xmm1
+; CHECK-NEXT:    movdqa (%rdi), %xmm0
+; CHECK-NEXT:    movdqa 16(%rdi), %xmm4
+; CHECK-NEXT:    movdqa 32(%rdi), %xmm2
+; CHECK-NEXT:    movdqa 48(%rdi), %xmm3
+; CHECK-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[1,1,1,1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[2,2,3,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[2,3,2,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm8 = xmm4[1,1,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
+; CHECK-NEXT:    movdqa %xmm3, %xmm5
+; CHECK-NEXT:    movdqa %xmm3, %xmm9
+; CHECK-NEXT:    pshufd {{.*#+}} xmm10 = xmm2[2,2,2,2]
+; CHECK-NEXT:    punpckhdq {{.*#+}} xmm10 = xmm10[2],xmm3[2],xmm10[3],xmm3[3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,0],xmm1[3,0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,1],xmm3[0,2]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[1,1],xmm1[2,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[3,3,3,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[0,1],xmm5[0,2]
+; CHECK-NEXT:    movdqa %xmm0, %xmm5
+; CHECK-NEXT:    punpckhdq {{.*#+}} xmm5 = xmm5[2],xmm6[2],xmm5[3],xmm6[3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,1],xmm1[1,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,1],xmm9[0,2]
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[3,1],xmm1[0,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm7[0],xmm1[1],xmm7[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm2[0,2]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm8[0],xmm0[1],xmm8[1]
+; CHECK-NEXT:    movsd {{.*#+}} xmm10 = xmm0[0],xmm10[1]
+; CHECK-NEXT:    movapd %xmm10, (%rsi)
+; CHECK-NEXT:    movaps %xmm1, (%rdx)
+; CHECK-NEXT:    movaps %xmm5, (%rcx)
+; CHECK-NEXT:    movaps %xmm3, (%r8)
+; CHECK-NEXT:    movaps %xmm4, (%r9)
+; CHECK-NEXT:    retq
+  %wide = load <20 x i32>, ptr %src
+  %result = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave5.v20i32(<20 x i32> %wide)
+  %v0 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 0
+  %v1 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 1
+  %v2 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 2
+  %v3 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 3
+  %v4 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 4
+  store <4 x i32> %v0, ptr %dst0
+  store <4 x i32> %v1, ptr %dst1
+  store <4 x i32> %v2, ptr %dst2
+  store <4 x i32> %v3, ptr %dst3
+  store <4 x i32> %v4, ptr %dst4
+  ret void
+}
+
+define void @interleave6(ptr %dst, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4, <4 x i32> %v5) {
+; CHECK-LABEL: interleave6:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps %xmm2, %xmm6
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm6 = xmm6[0],xmm3[0],xmm6[1],xmm3[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm7
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm7 = xmm7[0],xmm1[0],xmm7[1],xmm1[1]
+; CHECK-NEXT:    movaps %xmm5, %xmm8
+; CHECK-NEXT:    movlhps {{.*#+}} xmm8 = xmm8[0],xmm4[0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm8 = xmm8[2,0],xmm7[2,3]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm7 = xmm7[0],xmm6[0]
+; CHECK-NEXT:    movaps %xmm5, %xmm9
+; CHECK-NEXT:    shufps {{.*#+}} xmm9 = xmm9[1,1],xmm4[1,1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm6 = xmm6[2,3],xmm9[2,0]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
+; CHECK-NEXT:    movaps %xmm5, %xmm1
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm1 = xmm1[1],xmm4[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[2,0],xmm0[2,3]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm2[0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[3,3],xmm4[3,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[2,3],xmm5[2,0]
+; CHECK-NEXT:    movaps %xmm2, 80(%rdi)
+; CHECK-NEXT:    movaps %xmm1, 64(%rdi)
+; CHECK-NEXT:    movaps %xmm0, 48(%rdi)
+; CHECK-NEXT:    movaps %xmm6, 32(%rdi)
+; CHECK-NEXT:    movaps %xmm8, 16(%rdi)
+; CHECK-NEXT:    movaps %xmm7, (%rdi)
+; CHECK-NEXT:    retq
+  %result = call <24 x i32> @llvm.vector.interleave6.v24i32(<4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4, <4 x i32> %v5)
+  store <24 x i32> %result, ptr %dst
+  ret void
+}
+
+define void @deinterleave6(ptr %src, ptr %dst0, ptr %dst1, ptr %dst2, ptr %dst3, ptr %dst4, ptr %dst5) {
+; CHECK-LABEL: deinterleave6:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rax
+; CHECK-NEXT:    movdqa (%rdi), %xmm0
+; CHECK-NEXT:    movdqa 16(%rdi), %xmm6
+; CHECK-NEXT:    movdqa 32(%rdi), %xmm4
+; CHECK-NEXT:    movapd 48(%rdi), %xmm2
+; CHECK-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[3,3,3,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[1,1,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm1[0],xmm7[1],xmm1[1]
+; CHECK-NEXT:    movdqa 64(%rdi), %xmm3
+; CHECK-NEXT:    movdqa 80(%rdi), %xmm5
+; CHECK-NEXT:    pshufd {{.*#+}} xmm8 = xmm5[2,3,2,3]
+; CHECK-NEXT:    movdqa %xmm3, %xmm1
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm8[0],xmm1[1],xmm8[1]
+; CHECK-NEXT:    movsd {{.*#+}} xmm1 = xmm7[0],xmm1[1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[2,3,2,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[3,3,3,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[2,3,2,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[2,2,3,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm10 = xmm3[0,0,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm7[0],xmm10[1],xmm7[1]
+; CHECK-NEXT:    movsd {{.*#+}} xmm10 = xmm6[0],xmm10[1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,1,1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[3,3,3,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm7 = xmm7[0],xmm6[0],xmm7[1],xmm6[1]
+; CHECK-NEXT:    movapd %xmm2, %xmm6
+; CHECK-NEXT:    movsd {{.*#+}} xmm6 = xmm5[0],xmm6[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[1,1],xmm2[3,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm7 = xmm7[0,1],xmm5[2,0]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[2,3,2,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,1],xmm6[2,0]
+; CHECK-NEXT:    movdqa %xmm3, %xmm4
+; CHECK-NEXT:    shufps {{.*#+}} xmm4 = xmm4[3,1],xmm2[1,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm6 = xmm6[0],xmm8[0],xmm6[1],xmm8[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm6 = xmm6[0,1],xmm4[2,0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,3],xmm2[0,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,0]
+; CHECK-NEXT:    movaps %xmm0, (%rsi)
+; CHECK-NEXT:    movaps %xmm6, (%rdx)
+; CHECK-NEXT:    movaps %xmm5, (%rcx)
+; CHECK-NEXT:    movaps %xmm7, (%r8)
+; CHECK-NEXT:    movapd %xmm10, (%r9)
+; CHECK-NEXT:    movapd %xmm1, (%rax)
+; CHECK-NEXT:    retq
+  %wide = load <24 x i32>, ptr %src
+  %result = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave6.v24i32(<24 x i32> %wide)
+  %v0 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 0
+  %v1 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 1
+  %v2 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 2
+  %v3 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 3
+  %v4 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 4
+  %v5 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 5
+  store <4 x i32> %v0, ptr %dst0
+  store <4 x i32> %v1, ptr %dst1
+  store <4 x i32> %v2, ptr %dst2
+  store <4 x i32> %v3, ptr %dst3
+  store <4 x i32> %v4, ptr %dst4
+  store <4 x i32> %v5, ptr %dst5
+  ret void
+}
+
+define void @interleave7(ptr %dst, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4, <4 x i32> %v5, <4 x i32> %v6) {
+; CHECK-LABEL: interleave7:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps %xmm2, %xmm8
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm8 = xmm8[0],xmm3[0],xmm8[1],xmm3[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm7
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm7 = xmm7[0],xmm1[0],xmm7[1],xmm1[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm7 = xmm7[0],xmm8[0]
+; CHECK-NEXT:    movaps %xmm6, %xmm9
+; CHECK-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,1],xmm0[1,3]
+; CHECK-NEXT:    movaps %xmm4, %xmm10
+; CHECK-NEXT:    shufps {{.*#+}} xmm10 = xmm10[1,1],xmm3[1,1]
+; CHECK-NEXT:    movaps %xmm4, %xmm11
+; CHECK-NEXT:    movaps %xmm2, %xmm8
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm8 = xmm8[2],xmm3[2],xmm8[3],xmm3[3]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm3 = xmm3[2],xmm4[2],xmm3[3],xmm4[3]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm4 = xmm4[0,1],xmm9[0,2]
+; CHECK-NEXT:    movaps %xmm1, %xmm9
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm9 = xmm9[0],xmm2[0],xmm9[1],xmm2[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm9 = xmm9[2,3],xmm10[2,0]
+; CHECK-NEXT:    movaps %xmm0, %xmm10
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm10 = xmm10[2],xmm1[2],xmm10[3],xmm1[3]
+; CHECK-NEXT:    movaps %xmm5, %xmm12
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm12 = xmm12[0],xmm6[0],xmm12[1],xmm6[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm12 = xmm12[2,3],xmm10[0,1]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm11 = xmm11[2],xmm5[2],xmm11[3],xmm5[3]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm8 = xmm8[0],xmm11[0]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[2,3,2,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm6 = xmm6[3,3],xmm5[3,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[2,3],xmm6[2,0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[3,3],xmm1[3,3]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,3],xmm2[2,0]
+; CHECK-NEXT:    movss {{.*#+}} xmm0 = xmm10[0],xmm0[1,2,3]
+; CHECK-NEXT:    movaps %xmm3, 96(%rdi)
+; CHECK-NEXT:    movaps %xmm8, 64(%rdi)
+; CHECK-NEXT:    movaps %xmm12, 48(%rdi)
+; CHECK-NEXT:    movaps %xmm9, 32(%rdi)
+; CHECK-NEXT:    movaps %xmm4, 16(%rdi)
+; CHECK-NEXT:    movaps %xmm7, (%rdi)
+; CHECK-NEXT:    movaps %xmm0, 80(%rdi)
+; CHECK-NEXT:    retq
+  %result = call <28 x i32> @llvm.vector.interleave7.v28i32(<4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4, <4 x i32> %v5, <4 x i32> %v6)
+  store <28 x i32> %result, ptr %dst
+  ret void
+}
+
+define void @deinterleave7(ptr %src, ptr %dst0, ptr %dst1, ptr %dst2, ptr %dst3, ptr %dst4, ptr %dst5, ptr %dst6) {
+; CHECK-LABEL: deinterleave7:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rax
+; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %r10
+; CHECK-NEXT:    movaps 80(%rdi), %xmm0
+; CHECK-NEXT:    movaps 96(%rdi), %xmm7
+; CHECK-NEXT:    movaps %xmm7, %xmm3
+; CHECK-NEXT:    shufps {{.*#+}} xmm3 = xmm3[3,1],xmm0[0,3]
+; CHECK-NEXT:    movdqa (%rdi), %xmm2
+; CHECK-NEXT:    movdqa 16(%rdi), %xmm8
+; CHECK-NEXT:    movdqa 32(%rdi), %xmm6
+; CHECK-NEXT:    movdqa 48(%rdi), %xmm4
+; CHECK-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[1,1,1,1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm1 = xmm8[2,3,2,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,1],xmm3[2,0]
+; CHECK-NEXT:    movaps 64(%rdi), %xmm3
+; CHECK-NEXT:    movaps %xmm7, %xmm9
+; CHECK-NEXT:    shufps {{.*#+}} xmm9 = xmm9[2,1],xmm3[3,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm5 = xmm8[1,1,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm5 = xmm5[0,1],xmm9[2,0]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm9 = xmm7[0,0,1,1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm7 = xmm7[1,0],xmm3[2,0]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm10 = xmm6[3,3,3,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm11 = xmm8[3,3,3,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm8 = xmm8[0],xmm10[0],xmm8[1],xmm10[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm8 = xmm8[0,1],xmm7[2,0]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[2,2,3,3]
+; CHECK-NEXT:    punpckhdq {{.*#+}} xmm7 = xmm7[2],xmm6[2],xmm7[3],xmm6[3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm10 = xmm3[0,0,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm9[0],xmm3[1],xmm9[1]
+; CHECK-NEXT:    movsd {{.*#+}} xmm3 = xmm7[0],xmm3[1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[1,1,1,1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm9 = xmm2[2,3,2,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm7[0],xmm9[1],xmm7[1]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[2,3,2,3]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm10 = xmm10[0],xmm7[0],xmm10[1],xmm7[1]
+; CHECK-NEXT:    movsd {{.*#+}} xmm10 = xmm9[0],xmm10[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm7
+; CHECK-NEXT:    shufps {{.*#+}} xmm7 = xmm7[2,1],xmm4[3,3]
+; CHECK-NEXT:    pshufd {{.*#+}} xmm9 = xmm2[1,1,1,1]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm9 = xmm9[0],xmm6[0],xmm9[1],xmm6[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm9 = xmm9[0,1],xmm7[2,0]
+; CHECK-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,0],xmm4[2,0]
+; CHECK-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm11[0],xmm2[1],xmm11[1]
+; CHECK-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,1],xmm0[2,0]
+; CHECK-NEXT:    movaps %xmm2, (%rsi)
+; CHECK-NEXT:    movaps %xmm9, (%rdx)
+; CHECK-NEXT:    movapd %xmm10, (%rcx)
+; CHECK-NEXT:    movapd %xmm3, (%r8)
+; CHECK-NEXT:    movaps %xmm8, (%r9)
+; CHECK-NEXT:    movaps %xmm5, (%r10)
+; CHECK-NEXT:    movaps %xmm1, (%rax)
+; CHECK-NEXT:    retq
+  %wide = load <28 x i32>, ptr %src
+  %result = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave7.v28i32(<28 x i32> %wide)
+  %v0 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 0
+  %v1 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 1
+  %v2 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 2
+  %v3 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 3
+  %v4 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 4
+  %v5 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 5
+  %v6 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 6
+  store <4 x i32> %v0, ptr %dst0
+  store <4 x i32> %v1, ptr %dst1
+  store <4 x i32> %v2, ptr %dst2
+  store <4 x i32> %v3, ptr %dst3
+  store <4 x i32> %v4, ptr %dst4
+  store <4 x i32> %v5, ptr %dst5
+  store <4 x i32> %v6, ptr %dst6
+  ret void
+}
+
+define void @interleave8(ptr %dst, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4, <4 x i32> %v5, <4 x i32> %v6, <4 x i32> %v7) {
+; CHECK-LABEL: interleave8:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movaps %xmm2, %xmm10
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm10 = xmm10[0],xmm3[0],xmm10[1],xmm3[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm9
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm9 = xmm9[0],xmm1[0],xmm9[1],xmm1[1]
+; CHECK-NEXT:    movaps %xmm9, %xmm8
+; CHECK-NEXT:    movlhps {{.*#+}} xmm8 = xmm8[0],xmm10[0]
+; CHECK-NEXT:    movaps %xmm6, %xmm11
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm11 = xmm11[0],xmm7[0],xmm11[1],xmm7[1]
+; CHECK-NEXT:    movaps %xmm4, %xmm12
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm12 = xmm12[0],xmm5[0],xmm12[1],xmm5[1]
+; CHECK-NEXT:    movaps %xmm12, %xmm13
+; CHECK-NEXT:    movlhps {{.*#+}} xmm13 = xmm13[0],xmm11[0]
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm9 = xmm9[1],xmm10[1]
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm12 = xmm12[1],xmm11[1]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm2 = xmm2[2],xmm3[2],xmm2[3],xmm3[3]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
+; CHECK-NEXT:    movaps %xmm0, %xmm1
+; CHECK-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm6 = xmm6[2],xmm7[2],xmm6[3],xmm7[3]
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm4 = xmm4[2],xmm5[2],xmm4[3],xmm5[3]
+; CHECK-NEXT:    movaps %xmm4, %xmm3
+; CHECK-NEXT:    movlhps {{.*#+}} xmm3 = xmm3[0],xmm6[0]
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm0 = xmm0[1],xmm2[1]
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm6[1]
+; CHECK-NEXT:    movaps %xmm4, 112(%rdi)
+; CHECK-NEXT:    movaps %xmm0, 96(%rdi)
+; CHECK-NEXT:    movaps %xmm3, 80(%rdi)
+; CHECK-NEXT:    movaps %xmm1, 64(%rdi)
+; CHECK-NEXT:    movaps %xmm12, 48(%rdi)
+; CHECK-NEXT:    movaps %xmm9, 32(%rdi)
+; CHECK-NEXT:    movaps %xmm13, 16(%rdi)
+; CHECK-NEXT:    movaps %xmm8, (%rdi)
+; CHECK-NEXT:    retq
+  %result = call <32 x i32> @llvm.vector.interleave8.v32i32(<4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4, <4 x i32> %v5, <4 x i32> %v6, <4 x i32> %v7)
+  store <32 x i32> %result, ptr %dst
+  ret void
+}
+
+define void @deinterleave8(ptr %src, ptr %dst0, ptr %dst1, ptr %dst2, ptr %dst3, ptr %dst4, ptr %dst5, ptr %dst6, ptr %dst7) {
+; CHECK-LABEL: deinterleave8:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rax
+; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %r10
+; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %r11
+; CHECK-NEXT:    movaps 112(%rdi), %xmm4
+; CHECK-NEXT:    movaps 80(%rdi), %xmm5
+; CHECK-NEXT:    movaps %xmm5, %xmm6
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm6 = xmm6[2],xmm4[2],xmm6[3],xmm4[3]
+; CHECK-NEXT:    movaps (%rdi), %xmm3
+; CHECK-NEXT:    movaps 16(%rdi), %xmm0
+; CHECK-NEXT:    movaps 32(%rdi), %xmm7
+; CHECK-NEXT:    movaps 48(%rdi), %xmm8
+; CHECK-NEXT:    movaps %xmm0, %xmm1
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm1 = xmm1[2],xmm8[2],xmm1[3],xmm8[3]
+; CHECK-NEXT:    movaps %xmm1, %xmm2
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm2 = xmm2[1],xmm6[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm1 = xmm1[0],xmm6[0]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm0 = xmm0[0],xmm8[0],xmm0[1],xmm8[1]
+; CHECK-NEXT:    movaps %xmm0, %xmm4
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm4 = xmm4[1],xmm5[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm0 = xmm0[0],xmm5[0]
+; CHECK-NEXT:    movaps 96(%rdi), %xmm5
+; CHECK-NEXT:    movaps 64(%rdi), %xmm6
+; CHECK-NEXT:    movaps %xmm6, %xmm8
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm8 = xmm8[2],xmm5[2],xmm8[3],xmm5[3]
+; CHECK-NEXT:    movaps %xmm3, %xmm9
+; CHECK-NEXT:    unpckhps {{.*#+}} xmm9 = xmm9[2],xmm7[2],xmm9[3],xmm7[3]
+; CHECK-NEXT:    movaps %xmm9, %xmm10
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm10 = xmm10[1],xmm8[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm9 = xmm9[0],xmm8[0]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1]
+; CHECK-NEXT:    unpcklps {{.*#+}} xmm3 = xmm3[0],xmm7[0],xmm3[1],xmm7[1]
+; CHECK-NEXT:    movaps %xmm3, %xmm5
+; CHECK-NEXT:    unpckhpd {{.*#+}} xmm5 = xmm5[1],xmm6[1]
+; CHECK-NEXT:    movlhps {{.*#+}} xmm3 = xmm3[0],xmm6[0]
+; CHECK-NEXT:    movaps %xmm3, (%rsi)
+; CHECK-NEXT:    movaps %xmm5, (%rdx)
+; CHECK-NEXT:    movaps %xmm9, (%rcx)
+; CHECK-NEXT:    movaps %xmm10, (%r8)
+; CHECK-NEXT:    movaps %xmm0, (%r9)
+; CHECK-NEXT:    movaps %xmm4, (%r11)
+; CHECK-NEXT:    movaps %xmm1, (%r10)
+; CHECK-NEXT:    movaps %xmm2, (%rax)
+; CHECK-NEXT:    retq
+  %wide = load <32 x i32>, ptr %src
+  %result = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.vector.deinterleave8.v32i32(<32 x i32> %wide)
+  %v0 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 0
+  %v1 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 1
+  %v2 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 2
+  %v3 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 3
+  %v4 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 4
+  %v5 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 5
+  %v6 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 6
+  %v7 = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %result, 7
+  store <4 x i32> %v0, ptr %dst0
+  store <4 x i32> %v1, ptr %dst1
+  store <4 x i32> %v2, ptr %dst2
+  store <4 x i32> %v3, ptr %dst3
+  store <4 x i32> %v4, ptr %dst4
+  store <4 x i32> %v5, ptr %dst5
+  store <4 x i32> %v6, ptr %dst6
+  store <4 x i32> %v7, ptr %dst7
+  ret void
+}



More information about the llvm-commits mailing list