< prev index next >

src/hotspot/share/opto/memnode.cpp

Print this page

        

*** 1530,1543 **** Node* ctrl = in(MemNode::Control); Node* address = in(MemNode::Address); bool progress = false; // Skip up past a SafePoint control. Cannot do this for Stores because // pointer stores & cardmarks must stay on the same side of a SafePoint. if( ctrl != NULL && ctrl->Opcode() == Op_SafePoint && ! phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw ) { ctrl = ctrl->in(0); set_req(MemNode::Control,ctrl); progress = true; } --- 1530,1547 ---- Node* ctrl = in(MemNode::Control); Node* address = in(MemNode::Address); bool progress = false; + bool addr_mark = ((phase->type(address)->isa_oopptr() || phase->type(address)->isa_narrowoop()) && + phase->type(address)->is_ptr()->offset() == oopDesc::mark_offset_in_bytes()); + // Skip up past a SafePoint control. Cannot do this for Stores because // pointer stores & cardmarks must stay on the same side of a SafePoint. if( ctrl != NULL && ctrl->Opcode() == Op_SafePoint && ! phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw && ! !addr_mark ) { ctrl = ctrl->in(0); set_req(MemNode::Control,ctrl); progress = true; }
< prev index next >