[Hexagon] Correct the computation of TopReadyCycle and BotReadyCycle of SU

TopReadyCycle and BotReadyCycle were off by one cycle when an SU is either
the first instruction or the last instruction in a packet.

Patch by Ikhlas Ajbar.

llvm-svn: 328000
This commit is contained in:
Krzysztof Parzyszek 2018-03-20 17:03:27 +00:00
parent fb3f509e01
commit 4c6b65f685
2 changed files with 5 additions and 14 deletions

View File

@ -153,9 +153,10 @@ bool VLIWResourceModel::reserveResources(SUnit *SU, bool IsTop) {
TotalPackets++;
return false;
}
// If this SU does not fit in the packet
// If this SU does not fit in the packet or the packet is now full
// start a new one.
if (!isResourceAvailable(SU, IsTop)) {
if (!isResourceAvailable(SU, IsTop) ||
Packet.size() >= SchedModel->getIssueWidth()) {
ResourcesModel->clearResources();
Packet.clear();
TotalPackets++;
@ -189,15 +190,6 @@ bool VLIWResourceModel::reserveResources(SUnit *SU, bool IsTop) {
}
#endif
// If packet is now full, reset the state so in the next cycle
// we start fresh.
if (Packet.size() >= SchedModel->getIssueWidth()) {
ResourcesModel->clearResources();
Packet.clear();
TotalPackets++;
startNewCycle = true;
}
return startNewCycle;
}
@ -1100,10 +1092,10 @@ SUnit *ConvergingVLIWScheduler::pickNode(bool &IsTopNode) {
/// does.
void ConvergingVLIWScheduler::schedNode(SUnit *SU, bool IsTopNode) {
if (IsTopNode) {
SU->TopReadyCycle = Top.CurrCycle;
Top.bumpNode(SU);
SU->TopReadyCycle = Top.CurrCycle;
} else {
SU->BotReadyCycle = Bot.CurrCycle;
Bot.bumpNode(SU);
SU->BotReadyCycle = Bot.CurrCycle;
}
}

View File

@ -12,7 +12,6 @@
; CHECK: .LBB0_[[LOOP]]:
; CHECK: = add(r{{[0-9]+}},r[[REG0]])
; CHECK: = and
; CHECK: = and
; CHECK: r[[REG0]] = and
; CHECK: endloop