%PDF- %PDF-
| Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/compiler/ |
| Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/compiler/linear-scheduler.h |
// Copyright 2013 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef V8_COMPILER_LINEAR_SCHEDULER_H_
#define V8_COMPILER_LINEAR_SCHEDULER_H_
#include "src/base/flags.h"
#include "src/common/globals.h"
#include "src/compiler/node.h"
#include "src/compiler/opcodes.h"
#include "src/compiler/zone-stats.h"
#include "src/zone/zone-containers.h"
namespace v8 {
namespace internal {
namespace compiler {
// A simple, linear-time scheduler to check whether two nodes are in a same
// basic block without actually building basic block.
class V8_EXPORT_PRIVATE LinearScheduler {
public:
explicit LinearScheduler(Zone* zone, Graph* graph);
bool SameBasicBlock(Node* node0, Node* node1);
// Get a node's early schedule position. It is the earliest block (represented
// by a control node) where a node could be scheduled.
Node* GetEarlySchedulePosition(Node* node);
private:
// Compute the level of each control node. The level is defined by the
// shortest control path from the start node.
void ComputeControlLevel();
struct NodeState {
Node* node;
Node* early_schedule_position;
int input_index;
};
int GetControlLevel(Node* control) const {
auto it = control_level_.find(control);
DCHECK(it != control_level_.end());
return it->second;
}
void SetControlLevel(Node* control, int level) {
DCHECK(control_level_.find(control) == control_level_.end());
control_level_[control] = level;
}
void SetEarlySchedulePosition(Node* node, Node* early_schedule_position) {
early_schedule_position_[node] = early_schedule_position;
}
Graph* graph_;
// A map from a control node to the control level of the corresponding basic
// block.
ZoneMap<Node*, int> control_level_;
// A map from a non-control node to its early schedule position.
ZoneMap<Node*, Node*> early_schedule_position_;
};
} // namespace compiler
} // namespace internal
} // namespace v8
#endif // V8_COMPILER_LINEAR_SCHEDULER_H_