mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-21 03:24:38 +02:00
6714694: assertion in 64bit server vm (store->find_edge(load) != -1,"missing precedence edge") with COOPs
The method raise_LCA_above_marks() terminates LCA search early. Reviewed-by: rasbold, never
This commit is contained in:
parent
31d647daea
commit
694776b297
2 changed files with 823 additions and 1 deletions
|
@ -307,7 +307,6 @@ static Block* raise_LCA_above_marks(Block* LCA, node_idx_t mark,
|
|||
|
||||
// Test and set the visited bit.
|
||||
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
|
||||
if (mid != LCA && mid->raise_LCA_mark() == 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");
|
||||
// Resume searching at that point, skipping intermediate levels.
|
||||
worklist.push(LCA);
|
||||
if (LCA == mid)
|
||||
continue; // Don't mark as visited to avoid early termination.
|
||||
} else {
|
||||
// Keep searching through this block's predecessors.
|
||||
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,
|
|||
worklist.push(mid_parent);
|
||||
}
|
||||
}
|
||||
mid->set_raise_LCA_visited(mark);
|
||||
}
|
||||
return LCA;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue