Revert r136156, which broke several buildbots.
authorDan Gohman <gohman@apple.com>
Wed, 27 Jul 2011 01:10:27 +0000 (01:10 +0000)
committerDan Gohman <gohman@apple.com>
Wed, 27 Jul 2011 01:10:27 +0000 (01:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136206 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 57d6e8a08d021a714db43c4a79cc2a189150f0f7..aadfa2642034a2c0eeba32f7cc13402df581342a 100644 (file)
@@ -912,7 +912,12 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
     case ISD::BR_JT:
     case ISD::BR_CC:
     case ISD::BRCOND:
+      assert(LastCALLSEQ.size() == 1 && "branch inside CALLSEQ_BEGIN/END?");
+      // Branches tweak the chain to include LastCALLSEQ
+      Ops[0] = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Ops[0],
+                           getLastCALLSEQ());
       Ops[0] = LegalizeOp(Ops[0]);
+      setLastCALLSEQ(DAG.getEntryNode());
       break;
     case ISD::SHL:
     case ISD::SRL:
@@ -1016,6 +1021,14 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
     // libcalls), create the new CALLSEQ_START node.
     Tmp1 = LegalizeOp(Node->getOperand(0));  // Legalize the chain.
 
+    // Merge in the last call to ensure that this call starts after the last
+    // call ended.
+    if (getLastCALLSEQ().getOpcode() != ISD::EntryToken) {
+      Tmp1 = DAG.getNode(ISD::TokenFactor, dl, MVT::Other,
+                         Tmp1, getLastCALLSEQ());
+      Tmp1 = LegalizeOp(Tmp1);
+    }
+
     // Do not try to legalize the target-specific arguments (#1+).
     if (Tmp1 != Node->getOperand(0)) {
       SmallVector<SDValue, 8> Ops(Node->op_begin(), Node->op_end());
@@ -1037,7 +1050,7 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
     setLastCALLSEQ(SDValue(CallEnd, 0));
 
     // Legalize the call, starting from the CALLSEQ_END.
-    LegalizeOp(SDValue(CallEnd, 0));
+    LegalizeOp(getLastCALLSEQ());
     return Result;
   }
   case ISD::CALLSEQ_END: