[PATCH] D38942: [DAG] Promote ADDCARRY / SUBCARRY
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 16 12:15:42 PDT 2017
efriedma added inline comments.
================
Comment at: lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp:777-787
+ SDValue LHS = GetPromotedInteger(N->getOperand(0));
+ SDValue RHS = GetPromotedInteger(N->getOperand(1));
+
+ EVT ValueVTs[] = { LHS.getValueType(), N->getValueType(1) };
+
+ SDValue Res = DAG.getNode(N->getOpcode(), SDLoc(N),
+ DAG.getVTList(ValueVTs), LHS, RHS, N->getOperand(2));
----------------
rogfer01 wrote:
> This looks like a lot like the "dual" of `PromoteIntRes_Overflow` but replacing the users of `:1` (instead of `:0`). It generates correct code in Arm but I may be missing some subtlety here.
Yes, you're missing a very important piece here: the output carry bit is wrong. You have to check whether the addition would overflow in the narrow type, not just whether it would overflow in the promoted type.
What code is producing an ADDCARRY like this?
https://reviews.llvm.org/D38942
More information about the llvm-commits
mailing list