[PATCH] D33770: Only generate addcarry node when it is legal.

Amaury SECHET via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 1 04:49:58 PDT 2017


deadalnix created this revision.

As per title.


https://reviews.llvm.org/D33770

Files:
  lib/CodeGen/SelectionDAG/DAGCombiner.cpp


Index: lib/CodeGen/SelectionDAG/DAGCombiner.cpp
===================================================================
--- lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -2058,10 +2058,11 @@
                        N0, N1.getOperand(0), N1.getOperand(2));
 
   // (add X, Carry) -> (addcarry X, 0, Carry)
-  if (SDValue Carry = getAsCarry(TLI, N1))
-    return DAG.getNode(ISD::ADDCARRY, DL,
-                       DAG.getVTList(VT, Carry.getValueType()), N0,
-                       DAG.getConstant(0, DL, VT), Carry);
+  if (TLI.isOperationLegalOrCustom(ISD::ADDCARRY, VT))
+    if (SDValue Carry = getAsCarry(TLI, N1))
+      return DAG.getNode(ISD::ADDCARRY, DL,
+                         DAG.getVTList(VT, Carry.getValueType()), N0,
+                         DAG.getConstant(0, DL, VT), Carry);
 
   return SDValue();
 }
@@ -2136,6 +2137,8 @@
 }
 
 SDValue DAGCombiner::visitUADDOLike(SDValue N0, SDValue N1, SDNode *N) {
+  auto VT = N0.getValueType();
+
   // (uaddo X, (addcarry Y, 0, Carry)) -> (addcarry X, Y, Carry)
   // If Y + 1 cannot overflow.
   if (N1.getOpcode() == ISD::ADDCARRY && isNullConstant(N1.getOperand(1))) {
@@ -2147,9 +2150,10 @@
   }
 
   // (uaddo X, Carry) -> (addcarry X, 0, Carry)
-  if (SDValue Carry = getAsCarry(TLI, N1))
-    return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0,
-                       DAG.getConstant(0, SDLoc(N), N0.getValueType()), Carry);
+  if (TLI.isOperationLegalOrCustom(ISD::ADDCARRY, VT))
+    if (SDValue Carry = getAsCarry(TLI, N1))
+      return DAG.getNode(ISD::ADDCARRY, SDLoc(N), N->getVTList(), N0,
+                         DAG.getConstant(0, SDLoc(N), VT), Carry);
 
   return SDValue();
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33770.101011.patch
Type: text/x-patch
Size: 1717 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170601/18880663/attachment.bin>


More information about the llvm-commits mailing list