changeset 1056:a5883d41d7ec

* patches/icedtea-6700047-loopopts.patch: New patch. * Makefile.am (NON_ZERO_PATCHES): Add icedtea-6700047-loopopts.patch. * HACKING: Document patches/icedtea-6700047-loopopts.patch.
author Mark Wielaard <mark@klomp.org>
date Fri, 26 Sep 2008 11:58:58 +0200
parents f2f33bede67b
children 210cf639f45c
files ChangeLog HACKING Makefile.am patches/icedtea-6700047-loopopts.patch
diffstat 4 files changed, 44 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Sep 26 11:37:46 2008 +0200
+++ b/ChangeLog	Fri Sep 26 11:58:58 2008 +0200
@@ -1,4 +1,10 @@
-2008-09-25  Mark Wielaard  <mark@klomp.org>
+2008-09-26  Mark Wielaard  <mark@klomp.org>
+
+	* patches/icedtea-6700047-loopopts.patch: New patch.
+	* Makefile.am (NON_ZERO_PATCHES): Add icedtea-6700047-loopopts.patch.
+	* HACKING: Document patches/icedtea-6700047-loopopts.patch.
+
+2008-09-26  Mark Wielaard  <mark@klomp.org>
 
 	* patches/icedtea-hotspot7-tests.patch: New patch.
 	* Makefile.am (ICEDTEA_PATCHES): Add icedtea-hotspot7-tests.patch.
--- a/HACKING	Fri Sep 26 11:37:46 2008 +0200
+++ b/HACKING	Fri Sep 26 11:58:58 2008 +0200
@@ -66,6 +66,7 @@
 * icedtea-sparc.patch: Add support for GNU/Linux on SPARC.
 * icedtea-jdk-docs-target.patch: Always set DOCS_TARGET.
 * icedtea-lucene-crash.patch: Fix lucene bad code generation bug #6707044.
+* icedtea-6700047-loopopts.patch: Fix partial peeling issue, bug #6700047.
 
 The following patches are only applied to OpenJDK in IcedTea:
 
--- a/Makefile.am	Fri Sep 26 11:37:46 2008 +0200
+++ b/Makefile.am	Fri Sep 26 11:58:58 2008 +0200
@@ -429,7 +429,8 @@
 # Patches needed when not using the newer OpenJDK 7 HotSpot for zero.
 NON_ZERO_PATCHES = \
 	patches/icedtea-signed-types-hot6.patch \
-	patches/icedtea-lucene-crash.patch
+	patches/icedtea-lucene-crash.patch \
+	patches/icedtea-6700047-loopopts.patch
 
 if ZERO_BUILD
   ZERO_PATCHES_COND = $(ZERO_PATCHES)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/icedtea-6700047-loopopts.patch	Fri Sep 26 11:58:58 2008 +0200
@@ -0,0 +1,34 @@
+6700047: C2 failed in idom_no_update
+Summary: partial peeling shouldn't place clones into loop
+
+diff -r 4aebfff4f8a2 hotspot/src/share/vm/opto/loopopts.cpp
+--- openjdk.orig/hotspot/src/share/vm/opto/loopopts.cpp	Mon Sep 15 11:38:34 2008 +0200
++++ openjdk/hotspot/src/share/vm/opto/loopopts.cpp	Fri Sep 26 11:29:06 2008 +0200
+@@ -1865,18 +1865,19 @@
+     _igvn.hash_delete(use);
+     use->set_req(j, n_clone);
+     _igvn._worklist.push(use);
++    Node* use_c;
+     if (!use->is_Phi()) {
+-      Node* use_c = has_ctrl(use) ? get_ctrl(use) : use->in(0);
+-      set_ctrl(n_clone, use_c);
+-      assert(!loop->is_member(get_loop(use_c)), "should be outside loop");
+-      get_loop(use_c)->_body.push(n_clone);
++      use_c = has_ctrl(use) ? get_ctrl(use) : use->in(0);
+     } else {
+       // Use in a phi is considered a use in the associated predecessor block
+-      Node *prevbb = use->in(0)->in(j);
+-      set_ctrl(n_clone, prevbb);
+-      assert(!loop->is_member(get_loop(prevbb)), "should be outside loop");
+-      get_loop(prevbb)->_body.push(n_clone);
++      use_c = use->in(0)->in(j);
+     }
++    if (use_c->is_CountedLoop()) {
++      use_c = use_c->in(LoopNode::EntryControl);
++    }
++    set_ctrl(n_clone, use_c);
++    assert(!loop->is_member(get_loop(use_c)), "should be outside loop");
++    get_loop(use_c)->_body.push(n_clone);
+     _igvn.register_new_node_with_optimizer(n_clone);
+ #if !defined(PRODUCT)
+     if (TracePartialPeeling) {