Skip to content

Commit a721ddb

Browse files
SergeiYLarinKrzysztof Parzyszek
authored andcommitted
Update MaxMinLatency even if dependencies have been already scheduled.
Covers an extremely rare corner case on internal book keeping.
1 parent 0d748b4 commit a721ddb

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

llvm/lib/Target/Hexagon/HexagonMachineScheduler.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -286,9 +286,6 @@ void ConvergingVLIWScheduler::initialize(ScheduleDAGMI *dag) {
286286
}
287287

288288
void ConvergingVLIWScheduler::releaseTopNode(SUnit *SU) {
289-
if (SU->isScheduled)
290-
return;
291-
292289
for (const SDep &PI : SU->Preds) {
293290
unsigned PredReadyCycle = PI.getSUnit()->TopReadyCycle;
294291
unsigned MinLatency = PI.getLatency();
@@ -298,13 +295,12 @@ void ConvergingVLIWScheduler::releaseTopNode(SUnit *SU) {
298295
if (SU->TopReadyCycle < PredReadyCycle + MinLatency)
299296
SU->TopReadyCycle = PredReadyCycle + MinLatency;
300297
}
301-
Top.releaseNode(SU, SU->TopReadyCycle);
298+
299+
if (!SU->isScheduled)
300+
Top.releaseNode(SU, SU->TopReadyCycle);
302301
}
303302

304303
void ConvergingVLIWScheduler::releaseBottomNode(SUnit *SU) {
305-
if (SU->isScheduled)
306-
return;
307-
308304
assert(SU->getInstr() && "Scheduled SUnit must have instr");
309305

310306
for (SUnit::succ_iterator I = SU->Succs.begin(), E = SU->Succs.end();
@@ -317,7 +313,9 @@ void ConvergingVLIWScheduler::releaseBottomNode(SUnit *SU) {
317313
if (SU->BotReadyCycle < SuccReadyCycle + MinLatency)
318314
SU->BotReadyCycle = SuccReadyCycle + MinLatency;
319315
}
320-
Bot.releaseNode(SU, SU->BotReadyCycle);
316+
317+
if (!SU->isScheduled)
318+
Bot.releaseNode(SU, SU->BotReadyCycle);
321319
}
322320

323321
/// Does this SU have a hazard within the current instruction group.

0 commit comments

Comments
 (0)