Mercurial > hg > release > icedtea6-1.3
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();