[llvm] [DAG] fold avgu(zext(x), zext(y)) -> zext(avgu(x, y)) (PR #95134)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 11 22:23:42 PDT 2024


================
@@ -5236,6 +5236,23 @@ SDValue DAGCombiner::visitAVG(SDNode *N) {
     return DAG.getNode(ISD::SRL, DL, VT, X,
                        DAG.getShiftAmountConstant(1, VT, DL));
 
+  // fold avgu(zext(x), zext(y)) -> zext(avgu(x, y))
+  SDValue A;
+  SDValue B;
+  if (sd_match(
+          N, m_BinOp(ISD::AVGFLOORU, m_ZExt(m_Value(A)), m_ZExt(m_Value(B)))) &&
+      A.getValueType() == B.getValueType() &&
----------------
dtcxzyw wrote:

Can you add a negative test for `A.getValueType() != B.getValueType()` case?


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


More information about the llvm-commits mailing list