src/share/vm/opto/escape.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/opto/escape.cpp

src/share/vm/opto/escape.cpp

Print this page

        

*** 2300,2321 **** // | // DecodeN // | | // AddP ( base == address ) // Node *base = addp->in(AddPNode::Base); ! if (base->uncast()->is_top()) { // The AddP case #3 and #6. base = addp->in(AddPNode::Address); while (base->is_AddP()) { // Case #6 (unsafe access) may have several chained AddP nodes. assert(base->in(AddPNode::Base)->uncast()->is_top(), "expected unsafe access address only"); base = base->in(AddPNode::Address); } if (base->Opcode() == Op_CheckCastPP && base->bottom_type()->isa_rawptr() && _igvn->type(base->in(1))->isa_oopptr()) { ! base = base->in(1); } else { Node* uncast_base = base->uncast(); int opcode = uncast_base->Opcode(); assert(opcode == Op_ConP || opcode == Op_ThreadLocal || opcode == Op_CastX2P || uncast_base->is_DecodeNarrowPtr() || --- 2300,2329 ---- // | // DecodeN // | | // AddP ( base == address ) // + // case #9. Mixed unsafe access + // {instance} + // | + // CheckCastPP (raw) + // top | + // \ | + // AddP ( base == top ) + // Node *base = addp->in(AddPNode::Base); ! if (base->uncast()->is_top()) { // The AddP case #3, #6, and #9. base = addp->in(AddPNode::Address); while (base->is_AddP()) { // Case #6 (unsafe access) may have several chained AddP nodes. assert(base->in(AddPNode::Base)->uncast()->is_top(), "expected unsafe access address only"); base = base->in(AddPNode::Address); } if (base->Opcode() == Op_CheckCastPP && base->bottom_type()->isa_rawptr() && _igvn->type(base->in(1))->isa_oopptr()) { ! base = base->in(1); // Case #9 } else { Node* uncast_base = base->uncast(); int opcode = uncast_base->Opcode(); assert(opcode == Op_ConP || opcode == Op_ThreadLocal || opcode == Op_CastX2P || uncast_base->is_DecodeNarrowPtr() ||
src/share/vm/opto/escape.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File