diff -r 40b69ca33f4b -r c3e045194476 src/share/vm/opto/addnode.cpp --- a/src/share/vm/opto/addnode.cpp Thu Jul 31 15:47:42 2008 -0700 +++ b/src/share/vm/opto/addnode.cpp Fri Aug 01 10:06:45 2008 -0700 @@ -695,6 +695,8 @@ guarantee(tptr == NULL, "must be only one pointer operand"); tptr = et->isa_oopptr(); guarantee(tptr != NULL, "non-int operand must be pointer"); + if (tptr->higher_equal(tp->add_offset(tptr->offset()))) + tp = tptr; // Set more precise type for bailout continue; } if ( eti->_hi != eti->_lo ) goto bottom_out;