提交 23d5cf35 编写于 作者: K kvn

6714694: assertion in 64bit server vm (store->find_edge(load) != -1,"missing...

6714694: assertion in 64bit server vm (store->find_edge(load) != -1,"missing precedence edge") with COOPs
Summary: The method raise_LCA_above_marks() terminates LCA search early.
Reviewed-by: rasbold, never
上级 bedd6b05
...@@ -307,7 +307,6 @@ static Block* raise_LCA_above_marks(Block* LCA, node_idx_t mark, ...@@ -307,7 +307,6 @@ static Block* raise_LCA_above_marks(Block* LCA, node_idx_t mark,
// Test and set the visited bit. // Test and set the visited bit.
if (mid->raise_LCA_visited() == mark) continue; // already visited if (mid->raise_LCA_visited() == mark) continue; // already visited
mid->set_raise_LCA_visited(mark);
// Don't process the current LCA, otherwise the search may terminate early // Don't process the current LCA, otherwise the search may terminate early
if (mid != LCA && mid->raise_LCA_mark() == mark) { if (mid != LCA && mid->raise_LCA_mark() == mark) {
...@@ -317,6 +316,8 @@ static Block* raise_LCA_above_marks(Block* LCA, node_idx_t mark, ...@@ -317,6 +316,8 @@ static Block* raise_LCA_above_marks(Block* LCA, node_idx_t mark,
assert(early->dominates(LCA), "early is high enough"); assert(early->dominates(LCA), "early is high enough");
// Resume searching at that point, skipping intermediate levels. // Resume searching at that point, skipping intermediate levels.
worklist.push(LCA); worklist.push(LCA);
if (LCA == mid)
continue; // Don't mark as visited to avoid early termination.
} else { } else {
// Keep searching through this block's predecessors. // Keep searching through this block's predecessors.
for (uint j = 1, jmax = mid->num_preds(); j < jmax; j++) { for (uint j = 1, jmax = mid->num_preds(); j < jmax; j++) {
...@@ -324,6 +325,7 @@ static Block* raise_LCA_above_marks(Block* LCA, node_idx_t mark, ...@@ -324,6 +325,7 @@ static Block* raise_LCA_above_marks(Block* LCA, node_idx_t mark,
worklist.push(mid_parent); worklist.push(mid_parent);
} }
} }
mid->set_raise_LCA_visited(mark);
} }
return LCA; return LCA;
} }
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册