mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-25 05:22:04 +00:00
misched preparation: modularize schedule emission.
ScheduleDAG has nothing to do with how the instructions are scheduled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152206 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -145,6 +145,8 @@ namespace {
|
||||
///
|
||||
void Schedule();
|
||||
|
||||
void EmitSchedule();
|
||||
|
||||
/// Observe - Update liveness information to account for the current
|
||||
/// instruction, which will not be scheduled.
|
||||
///
|
||||
@@ -730,3 +732,37 @@ void SchedulePostRATDList::ListScheduleTopDown() {
|
||||
"The number of nodes scheduled doesn't match the expected number!");
|
||||
#endif // NDEBUG
|
||||
}
|
||||
|
||||
// EmitSchedule - Emit the machine code in scheduled order.
|
||||
void SchedulePostRATDList::EmitSchedule() {
|
||||
Begin = InsertPos;
|
||||
|
||||
// If first instruction was a DBG_VALUE then put it back.
|
||||
if (FirstDbgValue)
|
||||
BB->splice(InsertPos, BB, FirstDbgValue);
|
||||
|
||||
// Then re-insert them according to the given schedule.
|
||||
for (unsigned i = 0, e = Sequence.size(); i != e; i++) {
|
||||
if (SUnit *SU = Sequence[i])
|
||||
BB->splice(InsertPos, BB, SU->getInstr());
|
||||
else
|
||||
// Null SUnit* is a noop.
|
||||
TII->insertNoop(*BB, InsertPos);
|
||||
|
||||
// Update the Begin iterator, as the first instruction in the block
|
||||
// may have been scheduled later.
|
||||
if (i == 0)
|
||||
Begin = prior(InsertPos);
|
||||
}
|
||||
|
||||
// Reinsert any remaining debug_values.
|
||||
for (std::vector<std::pair<MachineInstr *, MachineInstr *> >::iterator
|
||||
DI = DbgValues.end(), DE = DbgValues.begin(); DI != DE; --DI) {
|
||||
std::pair<MachineInstr *, MachineInstr *> P = *prior(DI);
|
||||
MachineInstr *DbgValue = P.first;
|
||||
MachineBasicBlock::iterator OrigPrivMI = P.second;
|
||||
BB->splice(++OrigPrivMI, BB, DbgValue);
|
||||
}
|
||||
DbgValues.clear();
|
||||
FirstDbgValue = NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user