[llvm] [X86] Optimized ADD + ADC to ADC (PR #173543)

Phoebe Wang via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 25 17:30:13 PST 2025


================
@@ -58164,6 +58164,16 @@ static SDValue combineX86AddSub(SDNode *N, SelectionDAG &DAG,
     }
   }
 
+  // Fold ADD(ADC(Y, C1, CF), C2) -> ADC(Y, C1 + C2, CF)
+  if (!IsSub && LHS.getOpcode() == X86ISD::ADC &&
+      isa<ConstantSDNode>(LHS.getOperand(1)) && isa<ConstantSDNode>(RHS)) {
+    auto *C1 = dyn_cast<ConstantSDNode>(LHS.getOperand(1));
+    auto *C2 = dyn_cast<ConstantSDNode>(RHS);
+    APInt Sum = C1->getAPIntValue() + C2->getAPIntValue();
+    return DAG.getNode(X86ISD::ADC, DL, N->getVTList(), LHS.getOperand(0),
----------------
phoebewang wrote:

Good point! I think we need to check that.

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


More information about the llvm-commits mailing list