[llvm] [RISCV] Fold vector shift of sext/zext to widening multiply (PR #121563)
Min-Yih Hsu via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 7 11:19:24 PST 2025
================
@@ -17341,6 +17341,78 @@ static SDValue combineScalarCTPOPToVCPOP(SDNode *N, SelectionDAG &DAG,
return DAG.getZExtOrTrunc(Pop, DL, VT);
}
+static SDValue combineSHL(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
+ const RISCVSubtarget &Subtarget) {
+ if (DCI.isBeforeLegalize())
+ return SDValue();
+
+ // (shl (zext x), y) -> (vwsll x, y)
+ if (SDValue V = combineOp_VLToVWOp_VL(N, DCI, Subtarget))
+ return V;
+
+ // (shl (sext x), C) -> (vwmulsu x, 1u << C)
+ // (shl (zext x), C) -> (vwmulu x, 1u << C)
+
+ SDValue LHS = N->getOperand(0);
+ if (!LHS.hasOneUse())
+ return SDValue();
+ unsigned Opcode;
+ switch (LHS.getOpcode()) {
+ case ISD::SIGN_EXTEND:
----------------
mshockwave wrote:
If you're asking whether VZ/SEXT_VL might appear in `RISCVISD::SHL_VL`, I think we generate SHL_VL + VZEXT_VL when dealing with some of the interleave vector cases.
https://github.com/llvm/llvm-project/pull/121563
More information about the llvm-commits
mailing list