Correctly walk through nested and adjacent CALLSEQ_START nodes. No
authorStuart Hastings <stuart@apple.com>
Tue, 10 May 2011 21:20:03 +0000 (21:20 +0000)
committerStuart Hastings <stuart@apple.com>
Tue, 10 May 2011 21:20:03 +0000 (21:20 +0000)
test case; I've only seen this on a release branch, and I can't get it
to reproduce on trunk.  rdar://problem/7662569

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

lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

index 2b6c56eafd7333d5b41aa3acd42aecfbe5283c66..e2e6691ba7c1dd0d9a42b12561a0fe32911e1918 100644 (file)
@@ -324,6 +324,7 @@ static SDNode *FindCallStartFromCallEnd(SDNode *Node) {
     case ISD::CALLSEQ_START:
       if (!nested)
         return Node;
+      Node = Node->getOperand(0).getNode();
       nested--;
       break;
     case ISD::CALLSEQ_END:
@@ -331,7 +332,7 @@ static SDNode *FindCallStartFromCallEnd(SDNode *Node) {
       break;
     }
   }
-  return 0;
+  return (Node->getOpcode() == ISD::CALLSEQ_START) ? Node : 0;
 }
 
 /// LegalizeAllNodesNotLeadingTo - Recursively walk the uses of N, looking to