summaryrefslogtreecommitdiff
path: root/lib/CodeGen/PostRASchedulerList.cpp
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2011-06-01 03:27:56 +0000
committerAndrew Trick <atrick@apple.com>2011-06-01 03:27:56 +0000
commitcf9aa284b332bc2613def3612b80c5883d4b9985 (patch)
tree90d89e217721422e45db7908c0b254d2708eabd2 /lib/CodeGen/PostRASchedulerList.cpp
parent1edbd6f3f07176851cb03f7932ff50b9e9619dfb (diff)
downloadllvm-cf9aa284b332bc2613def3612b80c5883d4b9985.tar.gz
llvm-cf9aa284b332bc2613def3612b80c5883d4b9985.tar.bz2
llvm-cf9aa284b332bc2613def3612b80c5883d4b9985.tar.xz
Add an issue width check to the postRA scheduler. Patch by Max Kazakov!
For targets with no itinerary (x86) it is a nop by default. For targets with issue width already expressed in the itinerary (ARM) it bypasses a scoreboard check but otherwise does not affect the schedule. It does make the code more consistent and complete and allows new targets to specify their issue width in an arbitrary way. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132385 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/PostRASchedulerList.cpp')
-rw-r--r--lib/CodeGen/PostRASchedulerList.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/CodeGen/PostRASchedulerList.cpp b/lib/CodeGen/PostRASchedulerList.cpp
index 34c9259d2a..95c748cba1 100644
--- a/lib/CodeGen/PostRASchedulerList.cpp
+++ b/lib/CodeGen/PostRASchedulerList.cpp
@@ -661,6 +661,12 @@ void SchedulePostRATDList::ListScheduleTopDown() {
ScheduleNodeTopDown(FoundSUnit, CurCycle);
HazardRec->EmitInstruction(FoundSUnit);
CycleHasInsts = true;
+ if (HazardRec->atIssueLimit()) {
+ DEBUG(dbgs() << "*** Max instructions per cycle " << CurCycle << '\n');
+ HazardRec->AdvanceCycle();
+ ++CurCycle;
+ CycleHasInsts = false;
+ }
} else {
if (CycleHasInsts) {
DEBUG(dbgs() << "*** Finished cycle " << CurCycle << '\n');