< prev index next >
src/hotspot/share/opto/parse1.cpp
Print this page
rev 56016 : 8229422: Taskqueue: Outdated selection of weak memory model platforms
Reviewed-by:
*** 978,988 ****
// than wait for the publication, we simply block the writes here.
// Rather than put a barrier on only those writes which are required
// to complete, we force all writes to complete.
//
// 2. On PPC64, also add MemBarRelease for constructors which write
! // volatile fields. As support_IRIW_for_not_multiple_copy_atomic_cpu
// is set on PPC64, no sync instruction is issued after volatile
// stores. We want to guarantee the same behavior as on platforms
// with total store order, although this is not required by the Java
// memory model. So as with finals, we add a barrier here.
//
--- 978,988 ----
// than wait for the publication, we simply block the writes here.
// Rather than put a barrier on only those writes which are required
// to complete, we force all writes to complete.
//
// 2. On PPC64, also add MemBarRelease for constructors which write
! // volatile fields. As SUPPORT_IRIW_FOR_NOT_MULTI_COPY_ATOMIC_CPU
// is set on PPC64, no sync instruction is issued after volatile
// stores. We want to guarantee the same behavior as on platforms
// with total store order, although this is not required by the Java
// memory model. So as with finals, we add a barrier here.
//
*** 994,1005 ****
// such unusual early publications. But no barrier is needed on
// exceptional returns, since they cannot publish normally.
//
if (method()->is_initializer() &&
(wrote_final() ||
! PPC64_ONLY(wrote_volatile() ||)
! (AlwaysSafeConstructors && wrote_fields()))) {
_exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
// If Memory barrier is created for final fields write
// and allocation node does not escape the initialize method,
// then barrier introduced by allocation node can be removed.
--- 994,1009 ----
// such unusual early publications. But no barrier is needed on
// exceptional returns, since they cannot publish normally.
//
if (method()->is_initializer() &&
(wrote_final() ||
! (AlwaysSafeConstructors && wrote_fields()) ||
! (SUPPORT_IRIW_FOR_NOT_MULTI_COPY_ATOMIC_CPU &&
! IRIW_WITH_RELEASE_VOLATILE_IN_CONSTRUCTOR &&
! wrote_volatile())
! )
! ) {
_exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final());
// If Memory barrier is created for final fields write
// and allocation node does not escape the initialize method,
// then barrier introduced by allocation node can be removed.
< prev index next >