- Move conversion of [SU]ADDO from DAG combiner into legalizer.
- Add "promote integer type" stuff to the legalizer for these nodes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@59847 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index 5866e1a..c115710 100644
--- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -4167,6 +4167,27 @@
     }
     break;
   }
+
+  case ISD::SADDO: {
+    SDValue LHS = LegalizeOp(Node->getOperand(0));
+    SDValue RHS = LegalizeOp(Node->getOperand(1));
+
+    SDValue Sum = DAG.getNode(ISD::ADD, LHS.getValueType(), LHS, RHS);
+    MVT OType = SDValue(Node, 1).getValueType();
+    SDValue Cmp = DAG.getSetCC(OType, Sum, LHS, ISD::SETLT);
+
+    MVT ValueVTs[] = { LHS.getValueType(), OType };
+    SDValue Ops[] = { Sum, Cmp };
+
+    Result = DAG.getMergeValues(DAG.getVTList(&ValueVTs[0], 2), &Ops[0], 2);
+    SDNode *RNode = Result.getNode();
+    DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 0), SDValue(RNode, 0));
+    DAG.ReplaceAllUsesOfValueWith(SDValue(Node, 1), SDValue(RNode, 1));
+    break;
+  }
+  case ISD::UADDO: {
+    break;
+  }
   }
   
   assert(Result.getValueType() == Op.getValueType() &&