Skip to content

Commit a721ddb

Browse files
SergeiYLarinKrzysztof Parzyszek
authored and
Krzysztof Parzyszek
committed
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)