Index: src/compiler/all-nodes.cc |
diff --git a/src/compiler/all-nodes.cc b/src/compiler/all-nodes.cc |
index 8040897fd33be5507ad84bc261304456806aa6dc..eada0cff8c365183c2d72d9b86084902481d9ff6 100644 |
--- a/src/compiler/all-nodes.cc |
+++ b/src/compiler/all-nodes.cc |
@@ -14,13 +14,26 @@ AllNodes::AllNodes(Zone* local_zone, const Graph* graph, bool only_inputs) |
: reachable(local_zone), |
is_reachable_(graph->NodeCount(), false, local_zone), |
only_inputs_(only_inputs) { |
- Node* end = graph->end(); |
+ Mark(local_zone, graph->end(), graph); |
+} |
+ |
+AllNodes::AllNodes(Zone* local_zone, Node* end, const Graph* graph, |
+ bool only_inputs) |
+ : reachable(local_zone), |
+ is_reachable_(graph->NodeCount(), false, local_zone), |
+ only_inputs_(only_inputs) { |
+ Mark(local_zone, end, graph); |
+} |
+ |
+void AllNodes::Mark(Zone* local_zone, Node* end, const Graph* graph) { |
+ DCHECK_LT(end->id(), graph->NodeCount()); |
is_reachable_[end->id()] = true; |
reachable.push_back(end); |
- // Find all nodes reachable from end. |
+ // Find all nodes reachable from {end}. |
for (size_t i = 0; i < reachable.size(); i++) { |
- for (Node* input : reachable[i]->inputs()) { |
- if (input == nullptr || input->id() >= graph->NodeCount()) { |
+ for (Node* const input : reachable[i]->inputs()) { |
+ if (input == nullptr) { |
+ // TODO(titzer): print a warning. |
continue; |
} |
if (!is_reachable_[input->id()]) { |
@@ -28,7 +41,7 @@ AllNodes::AllNodes(Zone* local_zone, const Graph* graph, bool only_inputs) |
reachable.push_back(input); |
} |
} |
- if (!only_inputs) { |
+ if (!only_inputs_) { |
for (Node* use : reachable[i]->uses()) { |
if (use == nullptr || use->id() >= graph->NodeCount()) { |
continue; |