< 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 >