1.1 --- a/src/share/vm/opto/memnode.cpp Thu Jul 31 15:47:42 2008 -0700 1.2 +++ b/src/share/vm/opto/memnode.cpp Fri Aug 01 10:06:45 2008 -0700 1.3 @@ -1231,6 +1231,10 @@ 1.4 // our new node, even though we may throw the node away. 1.5 // (This tweaking with igvn only works because x is a new node.) 1.6 igvn->set_type(x, t); 1.7 + // If x is a TypeNode, capture any more-precise type permanently into Node 1.8 + // othewise it will be not updated during igvn->transform since 1.9 + // igvn->type(x) is set to x->Value() already. 1.10 + x->raise_bottom_type(t); 1.11 Node *y = x->Identity(igvn); 1.12 if( y != x ) { 1.13 wins++; 1.14 @@ -1409,7 +1413,7 @@ 1.15 // had an original form like p1:(AddP x x (LShiftL quux 3)), where the 1.16 // expression (LShiftL quux 3) independently optimized to the constant 8. 1.17 if ((t->isa_int() == NULL) && (t->isa_long() == NULL) 1.18 - && Opcode() != Op_LoadKlass) { 1.19 + && Opcode() != Op_LoadKlass && Opcode() != Op_LoadNKlass) { 1.20 // t might actually be lower than _type, if _type is a unique 1.21 // concrete subclass of abstract class t. 1.22 // Make sure the reference is not into the header, by comparing