[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