# HG changeset patch # User Mark Wielaard # Date 1222423442 -7200 # Node ID 210cf639f45cfed4acfa5ee1409cbf9a3441cdb4 # Parent a5883d41d7ecffac6e04855ff46ea114e9e2ab1f * patches/icedtea-6712835-ifnode.patch: New patch. * Makefile.am (NON_ZERO_PATCHES): Add icedtea-6712835-ifnode.patch * HACKING: Document patches/icedtea-6712835-ifnode.patch. diff -r a5883d41d7ec -r 210cf639f45c ChangeLog --- 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 + + * 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 * patches/icedtea-6700047-loopopts.patch: New patch. diff -r a5883d41d7ec -r 210cf639f45c HACKING --- 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: diff -r a5883d41d7ec -r 210cf639f45c Makefile.am --- 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) diff -r a5883d41d7ec -r 210cf639f45c patches/icedtea-6712835-ifnode.patch --- /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();