Commit 5db82a57 authored by mstarzinger's avatar mstarzinger Committed by Commit bot

Switch CFGBuilder to use NodeMarker.

R=titzer@chromium.org

Review URL: https://codereview.chromium.org/753063004

Cr-Commit-Position: refs/heads/master@{#25622}
parent f9e4527f
...@@ -59,7 +59,7 @@ Schedule* Scheduler::ComputeSchedule(Zone* zone, Graph* graph) { ...@@ -59,7 +59,7 @@ Schedule* Scheduler::ComputeSchedule(Zone* zone, Graph* graph) {
Scheduler::SchedulerData Scheduler::DefaultSchedulerData() { Scheduler::SchedulerData Scheduler::DefaultSchedulerData() {
SchedulerData def = {schedule_->start(), 0, false, kUnknown}; SchedulerData def = {schedule_->start(), 0, kUnknown};
return def; return def;
} }
...@@ -235,6 +235,7 @@ class CFGBuilder : public ZoneObject { ...@@ -235,6 +235,7 @@ class CFGBuilder : public ZoneObject {
CFGBuilder(Zone* zone, Scheduler* scheduler) CFGBuilder(Zone* zone, Scheduler* scheduler)
: scheduler_(scheduler), : scheduler_(scheduler),
schedule_(scheduler->schedule_), schedule_(scheduler->schedule_),
queued_(scheduler->graph_, 2),
queue_(zone), queue_(zone),
control_(zone), control_(zone),
component_entry_(NULL), component_entry_(NULL),
...@@ -309,11 +310,10 @@ class CFGBuilder : public ZoneObject { ...@@ -309,11 +310,10 @@ class CFGBuilder : public ZoneObject {
void Queue(Node* node) { void Queue(Node* node) {
// Mark the connected control nodes as they are queued. // Mark the connected control nodes as they are queued.
Scheduler::SchedulerData* data = scheduler_->GetData(node); if (!queued_.Get(node)) {
if (!data->is_connected_control_) {
data->is_connected_control_ = true;
BuildBlocks(node); BuildBlocks(node);
queue_.push(node); queue_.push(node);
queued_.Set(node, true);
control_.push_back(node); control_.push_back(node);
} }
} }
...@@ -500,11 +500,12 @@ class CFGBuilder : public ZoneObject { ...@@ -500,11 +500,12 @@ class CFGBuilder : public ZoneObject {
Scheduler* scheduler_; Scheduler* scheduler_;
Schedule* schedule_; Schedule* schedule_;
ZoneQueue<Node*> queue_; NodeMarker<bool> queued_; // Mark indicating whether node is queued.
NodeVector control_; ZoneQueue<Node*> queue_; // Queue used for breadth-first traversal.
Node* component_entry_; NodeVector control_; // List of encountered control nodes.
BasicBlock* component_start_; Node* component_entry_; // Component single-entry node.
BasicBlock* component_end_; BasicBlock* component_start_; // Component single-entry block.
BasicBlock* component_end_; // Component single-exit block.
}; };
......
...@@ -49,7 +49,6 @@ class Scheduler { ...@@ -49,7 +49,6 @@ class Scheduler {
struct SchedulerData { struct SchedulerData {
BasicBlock* minimum_block_; // Minimum legal RPO placement. BasicBlock* minimum_block_; // Minimum legal RPO placement.
int unscheduled_count_; // Number of unscheduled uses of this node. int unscheduled_count_; // Number of unscheduled uses of this node.
bool is_connected_control_; // {true} if control-connected to the end node.
Placement placement_; // Whether the node is fixed, schedulable, Placement placement_; // Whether the node is fixed, schedulable,
// coupled to another node, or not yet known. // coupled to another node, or not yet known.
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment