1.1 --- a/src/share/vm/opto/loopopts.cpp Thu Mar 13 16:06:34 2008 -0700 1.2 +++ b/src/share/vm/opto/loopopts.cpp Thu Mar 13 16:31:32 2008 -0700 1.3 @@ -32,7 +32,18 @@ 1.4 int wins = 0; 1.5 assert( !n->is_CFG(), "" ); 1.6 assert( region->is_Region(), "" ); 1.7 - Node *phi = new (C, region->req()) PhiNode( region, n->bottom_type() ); 1.8 + 1.9 + const Type* type = n->bottom_type(); 1.10 + const TypeOopPtr *t_oop = _igvn.type(n)->isa_oopptr(); 1.11 + Node *phi; 1.12 + if( t_oop != NULL && t_oop->is_instance_field() ) { 1.13 + int iid = t_oop->instance_id(); 1.14 + int index = C->get_alias_index(t_oop); 1.15 + int offset = t_oop->offset(); 1.16 + phi = new (C,region->req()) PhiNode(region, type, NULL, iid, index, offset); 1.17 + } else { 1.18 + phi = new (C,region->req()) PhiNode(region, type); 1.19 + } 1.20 uint old_unique = C->unique(); 1.21 for( uint i = 1; i < region->req(); i++ ) { 1.22 Node *x;