changeset 1057:210cf639f45c

* patches/icedtea-6712835-ifnode.patch: New patch. * Makefile.am (NON_ZERO_PATCHES): Add icedtea-6712835-ifnode.patch * HACKING: Document patches/icedtea-6712835-ifnode.patch.
author Mark Wielaard <mark@klomp.org>
date Fri, 26 Sep 2008 12:04:02 +0200
parents a5883d41d7ec
children 9ff3417e28cc
files ChangeLog HACKING Makefile.am patches/icedtea-6712835-ifnode.patch
diffstat 4 files changed, 34 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Sep 26 11:58:58 2008 +0200
+++ b/ChangeLog	Fri Sep 26 12:04:02 2008 +0200
@@ -1,3 +1,9 @@
+2008-09-26  Mark Wielaard  <mark@klomp.org>
+
+	* patches/icedtea-6712835-ifnode.patch: New patch.
+	* Makefile.am (NON_ZERO_PATCHES): Add icedtea-6712835-ifnode.patch
+	* HACKING: Document patches/icedtea-6712835-ifnode.patch.
+
 2008-09-26  Mark Wielaard  <mark@klomp.org>
 
 	* patches/icedtea-6700047-loopopts.patch: New patch.
--- a/HACKING	Fri Sep 26 11:58:58 2008 +0200
+++ b/HACKING	Fri Sep 26 12:04:02 2008 +0200
@@ -67,6 +67,7 @@
 * 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.
+* icedtea-6712835-ifnode.patch: Fix infinite loop in PhaseIterGVN::transform.
 
 The following patches are only applied to OpenJDK in IcedTea:
 
--- a/Makefile.am	Fri Sep 26 11:58:58 2008 +0200
+++ b/Makefile.am	Fri Sep 26 12:04:02 2008 +0200
@@ -430,7 +430,8 @@
 NON_ZERO_PATCHES = \
 	patches/icedtea-signed-types-hot6.patch \
 	patches/icedtea-lucene-crash.patch \
-	patches/icedtea-6700047-loopopts.patch
+	patches/icedtea-6700047-loopopts.patch \
+	patches/icedtea-6712835-ifnode.patch
 
 if ZERO_BUILD
   ZERO_PATCHES_COND = $(ZERO_PATCHES)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/icedtea-6712835-ifnode.patch	Fri Sep 26 12:04:02 2008 +0200
@@ -0,0 +1,25 @@
+6712835: Server compiler fails with assertion (loop_count < K,"infinite loop in PhaseIterGVN::transform")
+
+diff -r 4aebfff4f8a2 hotspot/src/share/vm/opto/ifnode.cpp
+--- openjdk.orig/hotspot/src/share/vm/opto/ifnode.cpp	Mon Sep 15 11:38:34 2008 +0200
++++ openjdk/hotspot/src/share/vm/opto/ifnode.cpp	Fri Sep 26 11:56:32 2008 +0200
+@@ -569,6 +569,11 @@
+   int true_path = phi->is_diamond_phi();
+   if( true_path == 0 ) return NULL;
+ 
++  // Make sure that iff and the control of the phi are different. This
++  // should really only happen for dead control flow since it requires
++  // an illegal cycle.
++  if (phi->in(0)->in(1)->in(0) == iff) return NULL;
++
+   // phi->region->if_proj->ifnode->bool->cmp
+   BoolNode *bol2 = phi->in(0)->in(1)->in(0)->in(1)->as_Bool();
+   
+@@ -595,6 +600,7 @@
+   }
+ 
+   Node* new_bol = (flip ? phase->transform( bol2->negate(phase) ) : bol2);
++  assert(new_bol != iff->in(1), "must make progress");
+   iff->set_req(1, new_bol);
+   // Intervening diamond probably goes dead
+   phase->C->set_major_progress();