mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-23 17:29:19 +00:00
misched: fix liveness iterators
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157003 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
24617213ba
commit
811d9268e4
@ -149,7 +149,7 @@ priorNonDebug(MachineBasicBlock::iterator I, MachineBasicBlock::iterator Beg) {
|
||||
/// non-debug instruction.
|
||||
static MachineBasicBlock::iterator
|
||||
nextIfDebug(MachineBasicBlock::iterator I, MachineBasicBlock::iterator End) {
|
||||
while(I != End) {
|
||||
for(; I != End; ++I) {
|
||||
if (!I->isDebugValue())
|
||||
break;
|
||||
}
|
||||
@ -449,17 +449,19 @@ void ScheduleDAGMI::releasePredecessors(SUnit *SU) {
|
||||
|
||||
void ScheduleDAGMI::moveInstruction(MachineInstr *MI,
|
||||
MachineBasicBlock::iterator InsertPos) {
|
||||
// Fix RegionBegin if the first instruction moves down.
|
||||
// Advance RegionBegin if the first instruction moves down.
|
||||
if (&*RegionBegin == MI)
|
||||
RegionBegin = llvm::next(RegionBegin);
|
||||
++RegionBegin;
|
||||
|
||||
// Update the instruction stream.
|
||||
BB->splice(InsertPos, BB, MI);
|
||||
|
||||
// Update LiveIntervals
|
||||
LIS->handleMove(MI);
|
||||
// Fix RegionBegin if another instruction moves above the first instruction.
|
||||
|
||||
// Recede RegionBegin if an instruction moves above the first.
|
||||
if (RegionBegin == InsertPos)
|
||||
RegionBegin = MI;
|
||||
// Fix TopRPTracker if we move something above CurrentTop.
|
||||
if (CurrentTop == InsertPos)
|
||||
TopRPTracker.setPos(MI);
|
||||
}
|
||||
|
||||
bool ScheduleDAGMI::checkSchedLimit() {
|
||||
@ -571,8 +573,10 @@ void ScheduleDAGMI::schedule() {
|
||||
assert(SU->isTopReady() && "node still has unscheduled dependencies");
|
||||
if (&*CurrentTop == MI)
|
||||
CurrentTop = nextIfDebug(++CurrentTop, CurrentBottom);
|
||||
else
|
||||
else {
|
||||
moveInstruction(MI, CurrentTop);
|
||||
TopRPTracker.setPos(MI);
|
||||
}
|
||||
|
||||
// Update top scheduled pressure.
|
||||
TopRPTracker.advance();
|
||||
@ -588,8 +592,10 @@ void ScheduleDAGMI::schedule() {
|
||||
if (&*priorII == MI)
|
||||
CurrentBottom = priorII;
|
||||
else {
|
||||
if (&*CurrentTop == MI)
|
||||
CurrentTop = nextIfDebug(++CurrentTop, CurrentBottom);
|
||||
if (&*CurrentTop == MI) {
|
||||
CurrentTop = nextIfDebug(++CurrentTop, priorII);
|
||||
TopRPTracker.setPos(CurrentTop);
|
||||
}
|
||||
moveInstruction(MI, CurrentBottom);
|
||||
CurrentBottom = MI;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user