diff src/share/vm/opto/ifnode.cpp @ 3845:c96c3eb1efae

7068051: SIGSEGV in PhaseIdealLoop::build_loop_late_post Summary: Removed predicate cloning from loop peeling optimization and from split fall-in paths. Reviewed-by: never
author kvn
date Fri, 29 Jul 2011 09:16:29 -0700
parents 4e761e7e6e12
children 5e990493719e
line wrap: on
line diff
--- a/src/share/vm/opto/ifnode.cpp	Thu Jul 28 13:03:39 2011 -0700
+++ b/src/share/vm/opto/ifnode.cpp	Fri Jul 29 09:16:29 2011 -0700
@@ -255,6 +255,14 @@
         predicate_x = predicate_proj;
     }
   }
+  if (predicate_c != NULL && (req_c > 1)) {
+    assert(predicate_x == NULL, "only one predicate entry expected");
+    predicate_c = NULL; // Do not clone predicate below merge point
+  }
+  if (predicate_x != NULL && ((len - req_c) > 2)) {
+    assert(predicate_c == NULL, "only one predicate entry expected");
+    predicate_x = NULL; // Do not clone predicate below merge point
+  }
 
   // Register the new RegionNodes but do not transform them.  Cannot
   // transform until the entire Region/Phi conglomerate has been hacked