| Index: src/compiler/instruction-scheduler.cc
|
| diff --git a/src/compiler/instruction-scheduler.cc b/src/compiler/instruction-scheduler.cc
|
| index 6a1d8497411d6b3dcecc649732f58afcb9c495f4..d5bd1255767ff9351924e08ccf1c4566a172284a 100644
|
| --- a/src/compiler/instruction-scheduler.cc
|
| +++ b/src/compiler/instruction-scheduler.cc
|
| @@ -11,11 +11,16 @@ namespace v8 {
|
| namespace internal {
|
| namespace compiler {
|
|
|
| -// Compare the two nodes and return true if node1 is a better candidate than
|
| -// node2 (i.e. node1 should be scheduled before node2).
|
| -bool InstructionScheduler::CriticalPathFirstQueue::CompareNodes(
|
| - ScheduleGraphNode *node1, ScheduleGraphNode *node2) const {
|
| - return node1->total_latency() > node2->total_latency();
|
| +void InstructionScheduler::SchedulingQueueBase::AddNode(
|
| + ScheduleGraphNode* node) {
|
| + // We keep the ready list sorted by total latency so that we can quickly find
|
| + // the next best candidate to schedule.
|
| + auto it = nodes_.begin();
|
| + while ((it != nodes_.end()) &&
|
| + ((*it)->total_latency() > node->total_latency())) {
|
| + ++it;
|
| + }
|
| + nodes_.insert(it, node);
|
| }
|
|
|
|
|
| @@ -24,12 +29,10 @@ InstructionScheduler::CriticalPathFirstQueue::PopBestCandidate(int cycle) {
|
| DCHECK(!IsEmpty());
|
| auto candidate = nodes_.end();
|
| for (auto iterator = nodes_.begin(); iterator != nodes_.end(); ++iterator) {
|
| - // We only consider instructions that have all their operands ready and
|
| - // we try to schedule the critical path first.
|
| + // We only consider instructions that have all their operands ready.
|
| if (cycle >= (*iterator)->start_cycle()) {
|
| - if ((candidate == nodes_.end()) || CompareNodes(*iterator, *candidate)) {
|
| - candidate = iterator;
|
| - }
|
| + candidate = iterator;
|
| + break;
|
| }
|
| }
|
|
|
|
|