mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-21 23:17:16 +00:00
Instead of adding dependence edges between terminator instructions
and every other instruction in their blocks to keep the terminator instructions at the end, teach the post-RA scheduler how to operate on ranges of instructions, and exclude terminators from the range of instructions that get scheduled. Also, exclude mid-block labels, such as EH_LABEL instructions, and schedule code before them separately from code after them. This fixes problems with the post-RA scheduler moving code past EH_LABELs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62366 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -187,9 +187,17 @@ bool PostRAScheduler::runOnMachineFunction(MachineFunction &Fn) {
|
||||
// Loop over all of the basic blocks
|
||||
for (MachineFunction::iterator MBB = Fn.begin(), MBBe = Fn.end();
|
||||
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)
|
||||
if (MI->getDesc().isTerminator() || MI->isLabel()) {
|
||||
Scheduler.Run(0, MBB, Current, MI);
|
||||
Scheduler.EmitSchedule();
|
||||
Current = next(MI);
|
||||
}
|
||||
|
||||
Scheduler.Run(0, MBB);
|
||||
|
||||
Scheduler.Run(0, MBB, Current, End);
|
||||
Scheduler.EmitSchedule();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user