Wed, 23 Jan 2019 23:24:10 -0800
8213825: assert(false) failed: Non-balanced monitor enter/exit! Likely JNI locking
Summary: skip sfpt optimization for Load is removed for Java Object's Markword Load.
Reviewed-by: kvn, dlong
src/share/vm/opto/memnode.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/opto/memnode.cpp Mon Mar 18 08:57:23 2019 +0100 1.2 +++ b/src/share/vm/opto/memnode.cpp Wed Jan 23 23:24:10 2019 -0800 1.3 @@ -1514,10 +1514,14 @@ 1.4 Node* ctrl = in(MemNode::Control); 1.5 Node* address = in(MemNode::Address); 1.6 1.7 + bool addr_mark = ((phase->type(address)->isa_oopptr() || phase->type(address)->isa_narrowoop()) && 1.8 + phase->type(address)->is_ptr()->offset() == oopDesc::mark_offset_in_bytes()); 1.9 + 1.10 // Skip up past a SafePoint control. Cannot do this for Stores because 1.11 // pointer stores & cardmarks must stay on the same side of a SafePoint. 1.12 if( ctrl != NULL && ctrl->Opcode() == Op_SafePoint && 1.13 - phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw ) { 1.14 + phase->C->get_alias_index(phase->type(address)->is_ptr()) != Compile::AliasIdxRaw && 1.15 + !addr_mark ) { 1.16 ctrl = ctrl->in(0); 1.17 set_req(MemNode::Control,ctrl); 1.18 }