diff options
-rw-r--r-- | lib/CodeGen/MachineScheduler.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp index 9f67d6d..57ae6dc 100644 --- a/lib/CodeGen/MachineScheduler.cpp +++ b/lib/CodeGen/MachineScheduler.cpp @@ -369,8 +369,12 @@ void ScheduleDAGMI::releasePredecessors(SUnit *SU) { void ScheduleDAGMI::moveInstruction(MachineInstr *MI, MachineBasicBlock::iterator InsertPos) { + // Fix RegionBegin if the first instruction moves down. + if (&*RegionBegin == MI) + RegionBegin = llvm::next(RegionBegin); BB->splice(InsertPos, BB, MI); LIS->handleMove(MI); + // Fix RegionBegin if another instruction moves above the first instruction. if (RegionBegin == InsertPos) RegionBegin = MI; } @@ -440,6 +444,8 @@ void ScheduleDAGMI::schedule() { if (&*llvm::prior(CurrentBottom) == MI) --CurrentBottom; else { + if (&*CurrentTop == MI) + CurrentTop = llvm::next(CurrentTop); moveInstruction(MI, CurrentBottom); CurrentBottom = MI; } |