src/hotspot/share/gc/shenandoah/c1/shenandoahBarrierSetC1.cpp
changeset 58985 5606867a5e6e
parent 58946 83810b7d12e7
equal deleted inserted replaced
58982:c709424ad48f 58985:5606867a5e6e
    22  */
    22  */
    23 
    23 
    24 #include "precompiled.hpp"
    24 #include "precompiled.hpp"
    25 #include "c1/c1_IR.hpp"
    25 #include "c1/c1_IR.hpp"
    26 #include "gc/shared/satbMarkQueue.hpp"
    26 #include "gc/shared/satbMarkQueue.hpp"
       
    27 #include "gc/shenandoah/shenandoahBarrierSet.hpp"
    27 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
    28 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
    28 #include "gc/shenandoah/shenandoahConcurrentRoots.hpp"
       
    29 #include "gc/shenandoah/shenandoahHeap.hpp"
    29 #include "gc/shenandoah/shenandoahHeap.hpp"
    30 #include "gc/shenandoah/shenandoahHeapRegion.hpp"
    30 #include "gc/shenandoah/shenandoahHeapRegion.hpp"
    31 #include "gc/shenandoah/shenandoahRuntime.hpp"
    31 #include "gc/shenandoah/shenandoahRuntime.hpp"
    32 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
    32 #include "gc/shenandoah/shenandoahThreadLocalData.hpp"
    33 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
    33 #include "gc/shenandoah/c1/shenandoahBarrierSetC1.hpp"
   210     return;
   210     return;
   211   }
   211   }
   212 
   212 
   213   LIRGenerator* gen = access.gen();
   213   LIRGenerator* gen = access.gen();
   214   DecoratorSet decorators = access.decorators();
   214   DecoratorSet decorators = access.decorators();
       
   215   BasicType type = access.type();
   215 
   216 
   216   // 2: load a reference from src location and apply LRB if ShenandoahLoadRefBarrier is set
   217   // 2: load a reference from src location and apply LRB if ShenandoahLoadRefBarrier is set
   217   if (ShenandoahLoadRefBarrier) {
   218   if (ShenandoahBarrierSet::need_load_reference_barrier(decorators, type)) {
   218     // Native barrier is for concurrent root processing
   219     if (ShenandoahBarrierSet::use_load_reference_barrier_native(decorators, type)) {
   219     bool in_native = (decorators & IN_NATIVE) != 0;
       
   220     if (in_native && ShenandoahConcurrentRoots::can_do_concurrent_roots()) {
       
   221       BarrierSetC1::load_at_resolved(access, result);
   220       BarrierSetC1::load_at_resolved(access, result);
   222       LIR_OprList* args = new LIR_OprList();
   221       LIR_OprList* args = new LIR_OprList();
   223       LIR_Opr addr = access.resolved_addr();
   222       LIR_Opr addr = access.resolved_addr();
   224       addr = ensure_in_register(gen, addr);
   223       addr = ensure_in_register(gen, addr);
   225       args->append(result);
   224       args->append(result);