forked from OSchip/llvm-project
Disentangle moving a machine instr from updating LiveIntervals.
llvm-svn: 150552
This commit is contained in:
parent
c62bb39142
commit
77d205152a
|
@ -280,10 +280,11 @@ namespace llvm {
|
|||
/// register.
|
||||
void addKillFlags();
|
||||
|
||||
/// moveInstr - Move MachineInstr mi to insertPt, updating the live
|
||||
/// intervals of mi's operands to reflect the new position. The insertion
|
||||
/// point can be above or below mi, but must be in the same basic block.
|
||||
void moveInstr(MachineBasicBlock::iterator insertPt, MachineInstr* mi);
|
||||
/// handleMove - call this method to notify LiveIntervals that
|
||||
/// instruction 'mi' has been moved within a basic block. This will update
|
||||
/// the live intervals for all operands of mi. Moves between basic blocks
|
||||
/// are not supported.
|
||||
void handleMove(MachineInstr* mi);
|
||||
|
||||
// Register mask functions.
|
||||
//
|
||||
|
|
|
@ -963,22 +963,17 @@ static void handleMoveUses(const MachineBasicBlock *mbb,
|
|||
}
|
||||
}
|
||||
|
||||
void LiveIntervals::moveInstr(MachineBasicBlock::iterator insertPt,
|
||||
MachineInstr *mi) {
|
||||
MachineBasicBlock* mbb = mi->getParent();
|
||||
assert((insertPt == mbb->end() || insertPt->getParent() == mbb) &&
|
||||
"Cannot handle moves across basic block boundaries.");
|
||||
assert(&*insertPt != mi && "No-op move requested?");
|
||||
assert(!mi->isBundled() && "Can't handle bundled instructions yet.");
|
||||
|
||||
// Grab the original instruction index.
|
||||
void LiveIntervals::handleMove(MachineInstr *mi) {
|
||||
SlotIndex origIdx = indexes_->getInstructionIndex(mi);
|
||||
|
||||
// Move the machine instr and obtain its new index.
|
||||
indexes_->removeMachineInstrFromMaps(mi);
|
||||
mbb->splice(insertPt, mbb, mi);
|
||||
SlotIndex miIdx = indexes_->insertMachineInstrInMaps(mi);
|
||||
|
||||
MachineBasicBlock* mbb = mi->getParent();
|
||||
|
||||
assert(getMBBFromIndex(origIdx) == mbb &&
|
||||
"Cannot handle moves across basic block boundaries.");
|
||||
assert(!mi->isBundled() && "Can't handle bundled instructions yet.");
|
||||
|
||||
// Pick the direction.
|
||||
bool movingUp = miIdx < origIdx;
|
||||
|
||||
|
|
|
@ -229,7 +229,8 @@ void ScheduleTopDownLive::Schedule() {
|
|||
if (&*InsertPos == MI)
|
||||
++InsertPos;
|
||||
else {
|
||||
Pass->LIS->moveInstr(InsertPos, MI);
|
||||
BB->splice(InsertPos, BB, MI);
|
||||
Pass->LIS->handleMove(MI);
|
||||
if (Begin == InsertPos)
|
||||
Begin = MI;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue