[llvm] [DAG] Reducing instructions by better legalization handling of AVGFLOORU for illegal data types (PR #99913)

Julius Alexandre via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 23 10:07:21 PDT 2024


================
@@ -9352,6 +9352,27 @@ SDValue TargetLowering::expandAVG(SDNode *N, SelectionDAG &DAG) const {
     }
   }
 
+  if (VT.isScalarInteger() && !isTypeLegal(VT)) {
+    SDValue UAddWithOverflow = DAG.getNode(ISD::UADDO, dl, 
+                                           DAG.getVTList(VT, MVT::i1), { RHS, LHS });
+
+    SDValue Sum = UAddWithOverflow.getValue(0);
+    SDValue Overflow = UAddWithOverflow.getValue(1);
+
+    // Right shift the sum by 1
+    SDValue One = DAG.getShiftAmountConstant(1, VT, dl);
+    SDValue LShrVal = DAG.getNode(ISD::SRL, dl, VT, Sum, One);
+    
+    // Creating the select instruction
+    SDValue ZeroOut = DAG.getConstant(0, dl, VT); 
+    SDValue ZeroExtOverflow = DAG.getNode(ISD::ZERO_EXTEND, dl, VT, Overflow);
+    SDValue OverflowShl = DAG.getNode(ISD::SHL, dl, VT, ZeroExtOverflow, 
+                                      DAG.getConstant(VT.getScalarSizeInBits() - 1, dl, VT)); 
+    SDValue SelectVal = DAG.getSelect(dl, VT, Overflow, OverflowShl, ZeroOut);
+
+    return DAG.getNode(ISD::OR, dl, VT, LShrVal, SelectVal);
----------------
medievalghoul wrote:

> Yes, if you run `ninja check-llvm-codegen` it will tell you the failures, then use the update_llc_test_checks.py script to regenerate the files

I'll recommit again, I'm just now seeing this


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


More information about the llvm-commits mailing list