From 796f114767007e0bf39d4ad8550701808af307bb Mon Sep 17 00:00:00 2001 From: Andrew Trick Date: Thu, 12 Jun 2014 22:36:28 +0000 Subject: Fix the scheduler's MaxObservedStall computation. WenHan Gu pointed out this bug that results in an assert not being effective in some cases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210846 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MachineScheduler.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'lib/CodeGen') diff --git a/lib/CodeGen/MachineScheduler.cpp b/lib/CodeGen/MachineScheduler.cpp index cbe937a06f..0baf2a6c1c 100644 --- a/lib/CodeGen/MachineScheduler.cpp +++ b/lib/CodeGen/MachineScheduler.cpp @@ -691,7 +691,7 @@ void ScheduleDAGMI::schedule() { } } // Notify the scheduling strategy before updating the DAG. - // This sets the scheduled nodes ReadyCycle to CurrCycle. When updateQueues + // This sets the scheduled node's ReadyCycle to CurrCycle. When updateQueues // runs, it can then use the accurate ReadyCycle time to determine whether // newly released nodes can move to the readyQ. SchedImpl->schedNode(SU, IsTopNode); @@ -1747,7 +1747,11 @@ void SchedBoundary::releaseNode(SUnit *SU, unsigned ReadyCycle) { assert(SU->getInstr() && "Scheduled SUnit must have instr"); #ifndef NDEBUG - MaxObservedStall = std::max(ReadyCycle - CurrCycle, MaxObservedStall); + // ReadyCycle was been bumped up to the CurrCycle when this node was + // scheduled, but CurrCycle may have been eagerly advanced immediately after + // scheduling, so may now be greater than ReadyCycle. + if (ReadyCycle > CurrCycle) + MaxObservedStall = std::max(ReadyCycle - CurrCycle, MaxObservedStall); #endif if (ReadyCycle < MinReadyCycle) -- cgit v1.2.3