1.1 --- a/src/share/vm/opto/escape.cpp Mon Oct 08 17:04:00 2012 -0700 1.2 +++ b/src/share/vm/opto/escape.cpp Tue Oct 09 10:11:38 2012 +0200 1.3 @@ -368,7 +368,9 @@ 1.4 case Op_CastPP: 1.5 case Op_CheckCastPP: 1.6 case Op_EncodeP: 1.7 - case Op_DecodeN: { 1.8 + case Op_DecodeN: 1.9 + case Op_EncodePKlass: 1.10 + case Op_DecodeNKlass: { 1.11 add_local_var_and_edge(n, PointsToNode::NoEscape, 1.12 n->in(1), delayed_worklist); 1.13 break; 1.14 @@ -381,7 +383,8 @@ 1.15 break; 1.16 } 1.17 case Op_ConP: 1.18 - case Op_ConN: { 1.19 + case Op_ConN: 1.20 + case Op_ConNKlass: { 1.21 // assume all oop constants globally escape except for null 1.22 PointsToNode::EscapeState es; 1.23 if (igvn->type(n) == TypePtr::NULL_PTR || 1.24 @@ -458,6 +461,7 @@ 1.25 } 1.26 case Op_StoreP: 1.27 case Op_StoreN: 1.28 + case Op_StoreNKlass: 1.29 case Op_StorePConditional: 1.30 case Op_CompareAndSwapP: 1.31 case Op_CompareAndSwapN: { 1.32 @@ -465,7 +469,7 @@ 1.33 const Type *adr_type = igvn->type(adr); 1.34 adr_type = adr_type->make_ptr(); 1.35 if (adr_type->isa_oopptr() || 1.36 - (opcode == Op_StoreP || opcode == Op_StoreN) && 1.37 + (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) && 1.38 (adr_type == TypeRawPtr::NOTNULL && 1.39 adr->in(AddPNode::Address)->is_Proj() && 1.40 adr->in(AddPNode::Address)->in(0)->is_Allocate())) { 1.41 @@ -572,7 +576,9 @@ 1.42 case Op_CastPP: 1.43 case Op_CheckCastPP: 1.44 case Op_EncodeP: 1.45 - case Op_DecodeN: { 1.46 + case Op_DecodeN: 1.47 + case Op_EncodePKlass: 1.48 + case Op_DecodeNKlass: { 1.49 add_local_var_and_edge(n, PointsToNode::NoEscape, 1.50 n->in(1), NULL); 1.51 break; 1.52 @@ -646,6 +652,7 @@ 1.53 } 1.54 case Op_StoreP: 1.55 case Op_StoreN: 1.56 + case Op_StoreNKlass: 1.57 case Op_StorePConditional: 1.58 case Op_CompareAndSwapP: 1.59 case Op_CompareAndSwapN: 1.60 @@ -661,7 +668,7 @@ 1.61 const Type *adr_type = _igvn->type(adr); 1.62 adr_type = adr_type->make_ptr(); 1.63 if (adr_type->isa_oopptr() || 1.64 - (opcode == Op_StoreP || opcode == Op_StoreN) && 1.65 + (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) && 1.66 (adr_type == TypeRawPtr::NOTNULL && 1.67 adr->in(AddPNode::Address)->is_Proj() && 1.68 adr->in(AddPNode::Address)->in(0)->is_Allocate())) { 1.69 @@ -2088,7 +2095,7 @@ 1.70 Node* uncast_base = base->uncast(); 1.71 int opcode = uncast_base->Opcode(); 1.72 assert(opcode == Op_ConP || opcode == Op_ThreadLocal || 1.73 - opcode == Op_CastX2P || uncast_base->is_DecodeN() || 1.74 + opcode == Op_CastX2P || uncast_base->is_DecodeNarrowPtr() || 1.75 (uncast_base->is_Mem() && uncast_base->bottom_type() == TypeRawPtr::NOTNULL) || 1.76 (uncast_base->is_Proj() && uncast_base->in(0)->is_Allocate()), "sanity"); 1.77 } 1.78 @@ -2837,8 +2844,8 @@ 1.79 alloc_worklist.append_if_missing(use); 1.80 } else if (use->is_Phi() || 1.81 use->is_CheckCastPP() || 1.82 - use->is_EncodeP() || 1.83 - use->is_DecodeN() || 1.84 + use->is_EncodeNarrowPtr() || 1.85 + use->is_DecodeNarrowPtr() || 1.86 (use->is_ConstraintCast() && use->Opcode() == Op_CastPP)) { 1.87 alloc_worklist.append_if_missing(use); 1.88 #ifdef ASSERT