< prev index next >
src/hotspot/share/gc/shenandoah/c2/shenandoahBarrierSetC2.cpp
Print this page
rev 58543 : 8241605: Shenandoah: More aggressive reference discovery
*** 587,599 ****
bool in_native = (decorators & IN_NATIVE) != 0;
bool need_cpu_mem_bar = !is_unordered || mismatched || in_native;
if (on_weak_ref) {
// Use the pre-barrier to record the value in the referent field
satb_write_barrier_pre(kit, false /* do_load */,
! NULL /* obj */, NULL /* adr */, max_juint /* alias_idx */, NULL /* val */, NULL /* val_type */,
load /* pre_val */, T_OBJECT);
// Add memory barrier to prevent commoning reads from this field
// across safepoint since GC can change its value.
kit->insert_mem_bar(Op_MemBarCPUOrder);
} else if (unknown) {
// We do not require a mem bar inside pre_barrier if need_mem_bar
--- 587,604 ----
bool in_native = (decorators & IN_NATIVE) != 0;
bool need_cpu_mem_bar = !is_unordered || mismatched || in_native;
if (on_weak_ref) {
// Use the pre-barrier to record the value in the referent field
+ if (ShenandoahAggressiveReferenceDiscovery) {
+ load = shenandoah_enqueue_barrier(kit, load);
+ } else {
satb_write_barrier_pre(kit, false /* do_load */,
! NULL /* obj */, NULL /* adr */, max_juint /* alias_idx */, NULL /* val */,
! NULL /* val_type */,
load /* pre_val */, T_OBJECT);
+ }
// Add memory barrier to prevent commoning reads from this field
// across safepoint since GC can change its value.
kit->insert_mem_bar(Op_MemBarCPUOrder);
} else if (unknown) {
// We do not require a mem bar inside pre_barrier if need_mem_bar
< prev index next >