Index: src/compiler/loop-analysis.cc |
diff --git a/src/compiler/loop-analysis.cc b/src/compiler/loop-analysis.cc |
index 01b9659e6bd0752fb2a765eb1bbc0660eb160e82..1b5f5288f4d2157585cf8f99be7b09ad49ffd957 100644 |
--- a/src/compiler/loop-analysis.cc |
+++ b/src/compiler/loop-analysis.cc |
@@ -152,18 +152,20 @@ class LoopFinderImpl { |
queued_.Set(node, false); |
// Setup loop headers first. |
+ NodeInfo& ni = info(node); |
if (node->opcode() == IrOpcode::kLoop) { |
// found the loop node first. |
- CreateLoopInfo(node); |
+ CreateLoopInfo(node, ni); |
} else if (node->opcode() == IrOpcode::kPhi || |
node->opcode() == IrOpcode::kEffectPhi) { |
// found a phi first. |
Node* merge = node->InputAt(node->InputCount() - 1); |
- if (merge->opcode() == IrOpcode::kLoop) CreateLoopInfo(merge); |
+ if (merge->opcode() == IrOpcode::kLoop) { |
+ ni.MarkBackward(CreateLoopInfo(merge, info(merge)).loop_mark); |
+ } |
} |
// Propagate reachability marks backwards from this node. |
- NodeInfo& ni = info(node); |
if (ni.IsLoopHeader()) { |
// Handle edges from loop header nodes specially. |
for (int i = 0; i < node->InputCount(); i++) { |
@@ -186,9 +188,8 @@ class LoopFinderImpl { |
} |
// Make a new loop header for the given node. |
- void CreateLoopInfo(Node* node) { |
- NodeInfo& ni = info(node); |
- if (ni.IsLoopHeader()) return; // loop already set up. |
+ NodeInfo& CreateLoopInfo(Node* node, NodeInfo& ni) { |
Michael Starzinger
2015/01/14 16:28:32
nit: Instead of returning the NodeInfo here, we co
|
+ if (ni.IsLoopHeader()) return ni; // loop already set up. |
loops_found_++; |
size_t loop_num = loops_.size() + 1; |
@@ -197,7 +198,6 @@ class LoopFinderImpl { |
loops_.push_back({node, nullptr, nullptr, nullptr}); |
loop_tree_->NewLoop(); |
LoopMarks loop_mark = kVisited | (1 << loop_num); |
- ni.node = node; |
ni.loop_mark = loop_mark; |
// Setup loop mark for phis attached to loop header. |
@@ -207,6 +207,7 @@ class LoopFinderImpl { |
info(use).loop_mark = loop_mark; |
} |
} |
+ return ni; |
} |
// Propagate marks forward from loops. |