Mercurial > hg > graal-compiler
diff src/share/vm/opto/gcm.cpp @ 215:273eaa04d9a1
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
author | kvn |
---|---|
date | Fri, 20 Jun 2008 10:17:09 -0700 |
parents | 6152cbb08ce9 |
children | 9c2ecc2ffb12 |
line wrap: on
line diff
--- a/src/share/vm/opto/gcm.cpp Tue Jun 17 11:32:42 2008 -0700 +++ b/src/share/vm/opto/gcm.cpp Fri Jun 20 10:17:09 2008 -0700 @@ -307,7 +307,6 @@ // 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 @@ 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 @@ worklist.push(mid_parent); } } + mid->set_raise_LCA_visited(mark); } return LCA; }