[llvm] [RISCV] Fold vector shift of sext/zext to widening multiply (PR #121563)

Luke Lau via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 3 05:41:14 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:
----------------
lukel97 wrote:

Does it make a difference if we also handle `RISCVISD::VSEXT_VL`/`RISCVISD::VZEXT_VL`?

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


More information about the llvm-commits mailing list