PostRA scheduler fix. Clear stale loop dependencies.

Fixes <rdar://problem/10235725>

llvm-svn: 141357
This commit is contained in:
Andrew Trick 2011-10-07 06:33:09 +00:00
parent 4ef158335b
commit 35c9e51219
2 changed files with 3 additions and 1 deletions

View File

@ -134,6 +134,7 @@ static const Value *getUnderlyingObjectForInstr(const MachineInstr *MI,
} }
void ScheduleDAGInstrs::StartBlock(MachineBasicBlock *BB) { void ScheduleDAGInstrs::StartBlock(MachineBasicBlock *BB) {
LoopRegs.Deps.clear();
if (MachineLoop *ML = MLI.getLoopFor(BB)) if (MachineLoop *ML = MLI.getLoopFor(BB))
if (BB == ML->getLoopLatch()) { if (BB == ML->getLoopLatch()) {
MachineBasicBlock *Header = ML->getHeader(); MachineBasicBlock *Header = ML->getHeader();

View File

@ -48,7 +48,8 @@ namespace llvm {
/// VisitLoop - Clear out any previous state and analyze the given loop. /// VisitLoop - Clear out any previous state and analyze the given loop.
/// ///
void VisitLoop(const MachineLoop *Loop) { void VisitLoop(const MachineLoop *Loop) {
Deps.clear(); assert(Deps.empty() && "stale loop dependencies");
MachineBasicBlock *Header = Loop->getHeader(); MachineBasicBlock *Header = Loop->getHeader();
SmallSet<unsigned, 8> LoopLiveIns; SmallSet<unsigned, 8> LoopLiveIns;
for (MachineBasicBlock::livein_iterator LI = Header->livein_begin(), for (MachineBasicBlock::livein_iterator LI = Header->livein_begin(),