diff src/share/vm/opto/gcm.cpp @ 351:fab5f738c515

Merge
author ysr
date Tue, 01 Jul 2008 11:59:44 -0700
parents 273eaa04d9a1
children 9c2ecc2ffb12
line wrap: on
line diff
--- a/src/share/vm/opto/gcm.cpp	Mon Jun 30 17:04:59 2008 -0700
+++ b/src/share/vm/opto/gcm.cpp	Tue Jul 01 11:59:44 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;
 }