diff options
author | Dan Gohman <gohman@apple.com> | 2011-07-27 01:10:27 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2011-07-27 01:10:27 +0000 |
commit | cbdccdeea96f26198fc8225c1a32c04ca01f8a26 (patch) | |
tree | 2ebf60477acd9d846ff3872606b1539e466919ea | |
parent | 8a552bb85a5e9a6c250c0a899941fbd3ae7b5006 (diff) | |
download | external_llvm-cbdccdeea96f26198fc8225c1a32c04ca01f8a26.zip external_llvm-cbdccdeea96f26198fc8225c1a32c04ca01f8a26.tar.gz external_llvm-cbdccdeea96f26198fc8225c1a32c04ca01f8a26.tar.bz2 |
Revert r136156, which broke several buildbots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136206 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 57d6e8a..aadfa26 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -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: |