Major bug fix: was not adding CD edges for RETURNs!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4137 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/InstrSched/SchedGraph.cpp b/lib/CodeGen/InstrSched/SchedGraph.cpp
index 11c627a..c3262c0 100644
--- a/lib/CodeGen/InstrSched/SchedGraph.cpp
+++ b/lib/CodeGen/InstrSched/SchedGraph.cpp
@@ -341,15 +341,16 @@
   // Find the first branch instr in the sequence of machine instrs for term
   // 
   unsigned first = 0;
-  while (!mii.isBranch(termMvec[first]->getOpCode()))
+  while (! mii.isBranch(termMvec[first]->getOpCode()) &&
+         ! mii.isReturn(termMvec[first]->getOpCode()))
     ++first;
   assert(first < termMvec.size() &&
-	 "No branch instructions for BR?  Ok, but weird!  Delete assertion.");
+	 "No branch instructions for terminator?  Ok, but weird!");
   if (first == termMvec.size())
     return;
-  
+
   SchedGraphNode* firstBrNode = getGraphNodeForInstr(termMvec[first]);
-  
+
   // Add CD edges from each instruction in the sequence to the
   // *last preceding* branch instr. in the sequence 
   // Use a latency of 0 because we only need to prevent out-of-order issue.
@@ -357,13 +358,14 @@
   for (unsigned i = termMvec.size(); i > first+1; --i)
     {
       SchedGraphNode* toNode = getGraphNodeForInstr(termMvec[i-1]);
-      assert(toNode && "No node for instr generated for branch?");
+      assert(toNode && "No node for instr generated for branch/ret?");
       
       for (unsigned j = i-1; j != 0; --j) 
-	if (mii.isBranch(termMvec[j-1]->getOpCode()))
+	if (mii.isBranch(termMvec[j-1]->getOpCode()) ||
+            mii.isReturn(termMvec[j-1]->getOpCode()))
 	  {
 	    SchedGraphNode* brNode = getGraphNodeForInstr(termMvec[j-1]);
-	    assert(brNode && "No node for instr generated for branch?");
+	    assert(brNode && "No node for instr generated for branch/ret?");
 	    (void) new SchedGraphEdge(brNode, toNode, SchedGraphEdge::CtrlDep,
 				      SchedGraphEdge::NonDataDep, 0);
 	    break;			// only one incoming edge is enough
@@ -388,7 +390,7 @@
   const MachineCodeForBasicBlock& mvec = MachineCodeForBasicBlock::get(bb);
   for (unsigned i=0, N=mvec.size(); i < N; i++) 
     {
-      if (mvec[i] == termMvec[first]) // reached the first branch
+      if (mvec[i] == termMvec[first])   // reached the first branch
         break;
       
       SchedGraphNode* fromNode = this->getGraphNodeForInstr(mvec[i]);