Reapply 53476 and 53480, with a fix so that it properly updates
the BB member to the current basic block after emitting
instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53567 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
index 02f20f9..982bbab 100644
--- a/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
+++ b/lib/CodeGen/SelectionDAG/ScheduleDAG.cpp
@@ -1082,7 +1082,7 @@
 }
 
 /// EmitSchedule - Emit the machine code in scheduled order.
-void ScheduleDAG::EmitSchedule() {
+MachineBasicBlock *ScheduleDAG::EmitSchedule() {
   bool isEntryBB = &MF->front() == BB;
 
   if (isEntryBB && !SchedLiveInCopies) {
@@ -1118,6 +1118,8 @@
 
   if (isEntryBB && SchedLiveInCopies)
     EmitLiveInCopies(MF->begin());
+
+  return BB;
 }
 
 /// dump - dump the schedule.
@@ -1133,9 +1135,12 @@
 
 /// Run - perform scheduling.
 ///
-MachineBasicBlock *ScheduleDAG::Run() {
+void ScheduleDAG::Run() {
   Schedule();
-  return BB;
+  
+  DOUT << "*** Final schedule ***\n";
+  DEBUG(dumpSchedule());
+  DOUT << "\n";
 }
 
 /// SUnit - Scheduling unit. It's an wrapper around either a single SDNode or