[SDAG] Simplify the code for handling single-value nodes and add
authorChandler Carruth <chandlerc@gmail.com>
Sat, 26 Jul 2014 05:52:51 +0000 (05:52 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Sat, 26 Jul 2014 05:52:51 +0000 (05:52 +0000)
a missing transfer of debug information (without which tests fail).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214021 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index a5ff5f9f299a0dc0b51994268214bea1260fe116..96e569e7b64b6ecb161e2bf851884ffb74225ea2 100644 (file)
@@ -1344,15 +1344,19 @@ void SelectionDAGLegalize::LegalizeOp(SDNode *Node) {
       // a complete mess.
       SDValue Res = TLI.LowerOperation(SDValue(Node, 0), DAG);
       if (Res.getNode()) {
-        SmallVector<SDValue, 8> ResultVals;
-        for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i) {
-          if (e == 1)
-            ResultVals.push_back(Res);
-          else
-            ResultVals.push_back(Res.getValue(i));
+        if (!(Res.getNode() != Node || Res.getResNo() != 0))
+          return;
+
+        if (Node->getNumValues() == 1) {
+          // We can just directly replace this node with the lowered value.
+          ReplaceNode(SDValue(Node, 0), Res);
+          return;
         }
-        if (Res.getNode() != Node || Res.getResNo() != 0)
-          ReplaceNode(Node, ResultVals.data());
+
+        SmallVector<SDValue, 8> ResultVals;
+        for (unsigned i = 0, e = Node->getNumValues(); i != e; ++i)
+          ResultVals.push_back(Res.getValue(i));
+        ReplaceNode(Node, ResultVals.data());
         return;
       }
     }