[llvm] [DAGCombiner] Fold pattern for srl-shl-zext (PR #138290)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Mon May 12 07:34:23 PDT 2025


================
@@ -10972,6 +10972,24 @@ SDValue DAGCombiner::visitSRL(SDNode *N) {
       return DAG.getNode(ISD::SRL, DL, VT, N0, NewOp1);
   }
 
+  // fold (srl (logic_op x, (shl (zext y), c1)), c1)
+  //   -> (logic_op (srl x, c1), (zext y))
+  // c1 <= leadingzeros(zext(y))
+  SDValue X, ZExtY;
+  if (N1C && sd_match(N0, m_OneUse(m_BitwiseLogic(
+                              m_Value(X),
+                              m_OneUse(m_Shl(m_AllOf(m_Value(ZExtY),
+                                                     m_Opc(ISD::ZERO_EXTEND)),
+                                             m_Specific(N1))))))) {
+    unsigned NumLeadingZeros =
+        ZExtY.getValueType().getScalarSizeInBits() -
+        ZExtY.getOperand(0).getValueType().getScalarSizeInBits();
+    if (N1C->getZExtValue() <= NumLeadingZeros) {
+      return DAG.getNode(N0.getOpcode(), SDLoc(N0), VT,
+                         DAG.getNode(ISD::SRL, SDLoc(N0), VT, X, N1), ZExtY);
+    }
----------------
RKSimon wrote:

the coding style just refers to "simple statements" :) 

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


More information about the llvm-commits mailing list