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