From: Andrew Trick Date: Thu, 12 Jun 2014 22:36:28 +0000 (+0000) Subject: Fix the scheduler's MaxObservedStall computation. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=491e34a13936940df420e6d1b5308626283bd4cc;p=platform%2Fupstream%2Fllvm.git Fix the scheduler's MaxObservedStall computation. WenHan Gu pointed out this bug that results in an assert not being effective in some cases. llvm-svn: 210846 --- diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp index cbe937a..0baf2a6 100644 --- a/llvm/lib/CodeGen/MachineScheduler.cpp +++ b/llvm/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)