[llvm-commits] [llvm] r63643 - /llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp
Dan Gohman
gohman at apple.com
Tue Feb 3 10:57:45 PST 2009
Author: djg
Date: Tue Feb 3 12:57:45 2009
New Revision: 63643
URL: http://llvm.org/viewvc/llvm-project?rev=63643&view=rev
Log:
Change the post-RA scheduler to iterate through the
basic-block segments bottom-up instead of top down. This
is the first step in a general restructuring of the way
register liveness is tracked in the post-RA scheduler.
Modified:
llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp
Modified: llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp?rev=63643&r1=63642&r2=63643&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp (original)
+++ llvm/trunk/lib/CodeGen/PostRASchedulerList.cpp Tue Feb 3 12:57:45 2009
@@ -189,15 +189,17 @@
MBB != MBBe; ++MBB) {
// Schedule each sequence of instructions not interrupted by a label
// or anything else that effectively needs to shut down scheduling.
- MachineBasicBlock::iterator Current = MBB->begin(), End = MBB->end();
- for (MachineBasicBlock::iterator MI = Current; MI != End; ++MI)
+ MachineBasicBlock::iterator Current = MBB->end(), Top = MBB->begin();
+ for (MachineBasicBlock::iterator I = Current; I != Top; ) {
+ MachineInstr *MI = --I;
if (MI->getDesc().isTerminator() || MI->isLabel()) {
- Scheduler.Run(0, MBB, Current, MI);
+ Scheduler.Run(0, MBB, next(I), Current);
Scheduler.EmitSchedule();
- Current = next(MI);
+ Current = I;
}
+ }
- Scheduler.Run(0, MBB, Current, End);
+ Scheduler.Run(0, MBB, Top, Current);
Scheduler.EmitSchedule();
}
@@ -415,10 +417,10 @@
// instructions from the bottom up, tracking information about liveness
// as we go to help determine which registers are available.
bool Changed = false;
- unsigned Count = BB->size() - 1;
- for (MachineBasicBlock::reverse_iterator I = BB->rbegin(), E = BB->rend();
- I != E; ++I, --Count) {
- MachineInstr *MI = &*I;
+ unsigned Count = SUnits.size() - 1;
+ for (MachineBasicBlock::iterator I = End, E = Begin;
+ I != E; --Count) {
+ MachineInstr *MI = --I;
// After regalloc, IMPLICIT_DEF instructions aren't safe to treat as
// dependence-breaking. In the case of an INSERT_SUBREG, the IMPLICIT_DEF
More information about the llvm-commits
mailing list