< prev index next >
src/share/vm/opto/parse1.cpp
Print this page
*** 395,404 ****
--- 395,405 ----
_wrote_final = false;
_wrote_volatile = false;
_wrote_stable = false;
_wrote_fields = false;
_alloc_with_final = NULL;
+ _alloc_with_stable = NodeSentinel;
_entry_bci = InvocationEntryBci;
_tf = NULL;
_block = NULL;
_first_return = true;
_replaced_nodes_for_exceptions = false;
*** 955,965 ****
//
if (method()->is_initializer() &&
(wrote_final() ||
PPC64_ONLY(wrote_volatile() ||)
(AlwaysSafeConstructors && wrote_fields()))) {
! _exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
#ifndef PRODUCT
if (PrintOpto && (Verbose || WizardMode)) {
method()->print_name();
tty->print_cr(" writes finals and needs a memory barrier");
}
--- 956,975 ----
//
if (method()->is_initializer() &&
(wrote_final() ||
PPC64_ONLY(wrote_volatile() ||)
(AlwaysSafeConstructors && wrote_fields()))) {
! // For PPC64 worte volatile, if using allocation node as Precedent input
! // in MemBarRelease node and allocation is not escaped, MemBarRelease will
! // be removed. As written volatile field is not definitly allocation
! // instance's field (different with final), can't safely remove MemBar
! // when allocation is not escape.
! Node *allocate = alloc_with_final();
! if (PPC64_ONLY(wrote_volatile()) NOT_PPC(false)) {
! allocate = NULL;
! }
! _exits.insert_mem_bar(Op_MemBarRelease, allocate);
#ifndef PRODUCT
if (PrintOpto && (Verbose || WizardMode)) {
method()->print_name();
tty->print_cr(" writes finals and needs a memory barrier");
}
*** 968,978 ****
// Any method can write a @Stable field; insert memory barriers after
// those also. If there is a predecessor allocation node, bind the
// barrier there.
if (wrote_stable()) {
! _exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
#ifndef PRODUCT
if (PrintOpto && (Verbose || WizardMode)) {
method()->print_name();
tty->print_cr(" writes @Stable and needs a memory barrier");
}
--- 978,988 ----
// Any method can write a @Stable field; insert memory barriers after
// 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());
#ifndef PRODUCT
if (PrintOpto && (Verbose || WizardMode)) {
method()->print_name();
tty->print_cr(" writes @Stable and needs a memory barrier");
}
< prev index next >