[llvm] [RISCV] Lower prefix slidedown shuffles using VL + tail-undisturbed (PR #210927)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 27 22:58:53 PDT 2026


================
@@ -5596,6 +5596,68 @@ static SDValue lowerVECTOR_SHUFFLEAsVSlidedown(const SDLoc &DL, MVT VT,
       DL, VT, convertFromScalableVector(SrcVT, Slidedown, DAG, Subtarget), 0);
 }
 
+// vector_shuffle v8:v8i8, v9:v8i8 <9, 10, 2, 3, 4, 5, 6, 7>
+// ->
+// vsetvli zero, 2, e8, mf2, tu, ma
+// vslidedown.vi v8, v9, 1
+static SDValue lowerVECTOR_SHUFFLEAsPrefixVSlidedown(
+    const SDLoc &DL, MVT VT, SDValue V1, SDValue V2, ArrayRef<int> Mask,
+    ArrayRef<std::pair<int, int>> SrcInfo, MVT ContainerVT,
+    const RISCVSubtarget &Subtarget, SelectionDAG &DAG) {
+  if (V1.isUndef() || V2.isUndef())
+    return SDValue();
+
+  const unsigned NumElts = VT.getVectorNumElements();
+  MVT XLenVT = Subtarget.getXLenVT();
+
+  int SlideAmt = SrcInfo[1].second;
+  // The first is not slide, the second is slidedown.
+  if (SrcInfo[0].second != 0 || SlideAmt >= 0)
+    return SDValue();
+
+  unsigned SlideDownAmt = -SlideAmt;
+  if (SlideDownAmt >= NumElts)
+    return SDValue();
----------------
lukel97 wrote:

Is this ever reachable? Will `isMaskedSlidePair` ever return a SlideAmt greater than NumElts?

https://github.com/llvm/llvm-project/pull/210927


More information about the llvm-commits mailing list