[llvm] [RISCV][llvm] Support PSLL codegen for P extension (PR #170074)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 1 10:25:32 PST 2025
================
@@ -8592,6 +8593,39 @@ SDValue RISCVTargetLowering::LowerOperation(SDValue Op,
case ISD::VSELECT:
return lowerToScalableOp(Op, DAG);
case ISD::SHL:
+ if (Subtarget.enablePExtCodeGen() &&
+ Op.getSimpleValueType().isFixedLengthVector()) {
+ // There's no vector-vector version of shift instruction in P extension so
+ // we need to fallback to scalar computation and pack them back.
+ MVT VecVT = Op.getSimpleValueType();
+ unsigned NumElts = VecVT.getVectorNumElements();
+ MVT VecEltTy = VecVT.getVectorElementType();
+ SDValue Src0 = Op.getOperand(0);
+ SDValue Src1 = Op.getOperand(1);
+ SDLoc DL(Op);
+ SmallVector<SDValue, 2> Results;
+
+ // We have patterns for scalar/immediate shift amount, so no lowering
+ // needed.
+ if (Src1.getNode()->getOpcode() == ISD::SPLAT_VECTOR)
+ return Op;
+
+ for (unsigned I = 0; I < NumElts; ++I) {
----------------
topperc wrote:
Can we use DAG.UnrollVectorOp?
https://github.com/llvm/llvm-project/pull/170074
More information about the llvm-commits
mailing list