Index: src/compiler/scheduler.h |
diff --git a/src/compiler/scheduler.h b/src/compiler/scheduler.h |
index 246bdae017bc79c77b09603e4c4a3dbf36adf46f..afd5cf1ce0ce5be189cb984b065559deee209522 100644 |
--- a/src/compiler/scheduler.h |
+++ b/src/compiler/scheduler.h |
@@ -29,7 +29,7 @@ class Scheduler { |
Schedule* schedule); |
private: |
- enum Placement { kUnknown, kSchedulable, kFixed }; |
+ enum Placement { kUnknown, kSchedulable, kFixed, kCoupled }; |
// Per-node data tracked during scheduling. |
struct SchedulerData { |
@@ -38,38 +38,30 @@ class Scheduler { |
bool is_connected_control_; // {true} if control-connected to the end node. |
bool is_floating_control_; // {true} if control, but not control-connected |
// to the end node. |
- Placement placement_ : 3; // Whether the node is fixed, schedulable, |
- // or not yet known. |
+ Placement placement_; // Whether the node is fixed, schedulable, |
+ // coupled to another node, or not yet known. |
}; |
- ZonePool* zone_pool_; |
Zone* zone_; |
Graph* graph_; |
Schedule* schedule_; |
NodeVectorVector scheduled_nodes_; |
NodeVector schedule_root_nodes_; |
+ ZoneQueue<Node*> schedule_queue_; |
ZoneVector<SchedulerData> node_data_; |
bool has_floating_control_; |
- Scheduler(ZonePool* zone_pool, Zone* zone, Graph* graph, Schedule* schedule); |
+ Scheduler(Zone* zone, Graph* graph, Schedule* schedule); |
- SchedulerData DefaultSchedulerData(); |
- |
- SchedulerData* GetData(Node* node) { |
- DCHECK(node->id() < static_cast<int>(node_data_.size())); |
- return &node_data_[node->id()]; |
- } |
+ inline SchedulerData DefaultSchedulerData(); |
+ inline SchedulerData* GetData(Node* node); |
Placement GetPlacement(Node* node); |
- int GetRPONumber(BasicBlock* block) { |
- DCHECK(block->rpo_number() >= 0 && |
- block->rpo_number() < |
- static_cast<int>(schedule_->rpo_order_.size())); |
- DCHECK(schedule_->rpo_order_[block->rpo_number()] == block); |
- return block->rpo_number(); |
- } |
+ void IncrementUnscheduledUseCount(Node* node, Node* from); |
+ void DecrementUnscheduledUseCount(Node* node, Node* from); |
+ inline int GetRPONumber(BasicBlock* block); |
BasicBlock* GetCommonDominator(BasicBlock* b1, BasicBlock* b2); |
// Phase 1: Build control-flow graph and dominator tree. |