[llvm] [AArch64][DAG] Port adde and sube combine to AArch64 (PR #202227)

via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 4 10:20:13 PDT 2026


================
@@ -23065,6 +23065,28 @@ static SDValue foldADCToCINC(SDNode *N, SelectionDAG &DAG) {
   return DAG.getNode(AArch64ISD::CSINC, DL, VT, LHS, LHS, CC, Cond);
 }
 
+static SDValue performAddSubCarryCombine(SDNode *N, SelectionDAG &DAG, unsigned NewOpcode) {
+  SDValue RHS = N->getOperand(1);
+  if (ConstantSDNode *C = dyn_cast<ConstantSDNode>(RHS)) {
+    APInt Imm = C->getAPIntValue();
+    APInt NotImm = ~Imm;
+
+    // Note: We always allow -1 as it maps to 0 (which can use wzr/xzr).
+    if (Imm.isAllOnes() ||
+        (numberOfInstrToLoadImm(Imm) > numberOfInstrToLoadImm(NotImm) &&
----------------
zip-stack-debug wrote:

A bug indeed. Fixed!

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


More information about the llvm-commits mailing list