# HG changeset patch # User roland # Date 1445011740 0 # Node ID ad4d163582949ad2134aabe97aed46dbf9cfe03a # Parent 43b1272dbac7643df56a3707cb1164534033a377# Parent 3d84eedbd82cd800d11f158fdf6b4de26df3efde Merge diff -r 43b1272dbac7 -r ad4d16358294 hotspot/src/share/vm/opto/parse.hpp --- a/hotspot/src/share/vm/opto/parse.hpp Fri Oct 16 15:21:37 2015 +0200 +++ b/hotspot/src/share/vm/opto/parse.hpp Fri Oct 16 16:09:00 2015 +0000 @@ -343,7 +343,6 @@ bool _count_invocations; // update and test invocation counter bool _method_data_update; // update method data oop Node* _alloc_with_final; // An allocation node with final field - Node* _alloc_with_stable; // An allocation node with stable field // Variables which track Java semantics during bytecode parsing: @@ -399,25 +398,6 @@ _alloc_with_final = n; } - Node* alloc_with_stable() const { - if (_alloc_with_stable == NodeSentinel) { - return NULL; - } - return _alloc_with_stable; - } - - void set_alloc_with_stable(Node* n) { - if (_alloc_with_stable == NodeSentinel) { - // uninitialized status, initialize with current input, can be - // null or valid node. - _alloc_with_stable = n; - } else if (_alloc_with_stable != n) { - // _alloc_with_stable isn't equal to n - _alloc_with_stable = NULL; - } - // _alloc_with_stable is equal with n, do nothing - } - Block* block() const { return _block; } ciBytecodeStream& iter() { return _iter; } Bytecodes::Code bc() const { return _iter.cur_bc(); } diff -r 43b1272dbac7 -r ad4d16358294 hotspot/src/share/vm/opto/parse1.cpp --- a/hotspot/src/share/vm/opto/parse1.cpp Fri Oct 16 15:21:37 2015 +0200 +++ b/hotspot/src/share/vm/opto/parse1.cpp Fri Oct 16 16:09:00 2015 +0000 @@ -397,7 +397,6 @@ _wrote_stable = false; _wrote_fields = false; _alloc_with_final = NULL; - _alloc_with_stable = NodeSentinel; _entry_bci = InvocationEntryBci; _tf = NULL; _block = NULL; @@ -971,7 +970,7 @@ // those also. If there is a predecessor allocation node, bind the // barrier there. if (wrote_stable()) { - _exits.insert_mem_bar(Op_MemBarRelease, alloc_with_stable()); + _exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final()); #ifndef PRODUCT if (PrintOpto && (Verbose || WizardMode)) { method()->print_name(); diff -r 43b1272dbac7 -r ad4d16358294 hotspot/src/share/vm/opto/parse3.cpp --- a/hotspot/src/share/vm/opto/parse3.cpp Fri Oct 16 15:21:37 2015 +0200 +++ b/hotspot/src/share/vm/opto/parse3.cpp Fri Oct 16 16:09:00 2015 +0000 @@ -313,19 +313,10 @@ // Preserve allocation ptr to create precedent edge to it in membar // generated on exit from constructor. - if (AllocateNode::Ideal_allocation(obj, &_gvn) != NULL) { - if (field->is_final()) { - set_alloc_with_final(obj); - } - if (field->is_stable()) { - set_alloc_with_stable(obj); - } - } else if (field->is_stable()) { - // This stable field doesn't have an allocation, set - // alloc_with_stable as NULL: its initial value is NodeSentinel, - // if it is not set to NULL here, next set_alloc_with_stable - // call might set none-NULL value successfully. - set_alloc_with_stable(NULL); + if (C->eliminate_boxing() && + adr_type->isa_oopptr() && adr_type->is_oopptr()->is_ptr_to_boxed_value() && + AllocateNode::Ideal_allocation(obj, &_gvn) != NULL) { + set_alloc_with_final(obj); } } }