[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:
parent
fb3f509e01
commit
4c6b65f685
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
; CHECK: .LBB0_[[LOOP]]:
|
||||
; CHECK: = add(r{{[0-9]+}},r[[REG0]])
|
||||
; CHECK: = and
|
||||
; CHECK: = and
|
||||
; CHECK: r[[REG0]] = and
|
||||
; CHECK: endloop
|
||||
|
||||
|
|
Loading…
Reference in New Issue