< prev index next >

src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp

Print this page

        

*** 472,485 **** return false; } // == Accesses == ! Node* ZBarrierSetC2::make_cas_loadbarrier(C2AtomicAccess& access) const { assert(!UseCompressedOops, "Not allowed"); CompareAndSwapNode* cas = (CompareAndSwapNode*)access.raw_access(); ! PhaseGVN& gvn = access.kit()->gvn(); Compile* C = Compile::current(); GraphKit* kit = access.kit(); Node* in_ctrl = cas->in(MemNode::Control); Node* in_mem = cas->in(MemNode::Memory); --- 472,485 ---- return false; } // == Accesses == ! Node* ZBarrierSetC2::make_cas_loadbarrier(C2AtomicParseAccess& access) const { assert(!UseCompressedOops, "Not allowed"); CompareAndSwapNode* cas = (CompareAndSwapNode*)access.raw_access(); ! PhaseGVN& gvn = access.gvn(); Compile* C = Compile::current(); GraphKit* kit = access.kit(); Node* in_ctrl = cas->in(MemNode::Control); Node* in_mem = cas->in(MemNode::Memory);
*** 564,574 **** kit->insert_mem_bar(Op_MemBarCPUOrder); return phi; } ! Node* ZBarrierSetC2::make_cmpx_loadbarrier(C2AtomicAccess& access) const { CompareAndExchangePNode* cmpx = (CompareAndExchangePNode*)access.raw_access(); GraphKit* kit = access.kit(); PhaseGVN& gvn = kit->gvn(); Compile* C = Compile::current(); --- 564,574 ---- kit->insert_mem_bar(Op_MemBarCPUOrder); return phi; } ! Node* ZBarrierSetC2::make_cmpx_loadbarrier(C2AtomicParseAccess& access) const { CompareAndExchangePNode* cmpx = (CompareAndExchangePNode*)access.raw_access(); GraphKit* kit = access.kit(); PhaseGVN& gvn = kit->gvn(); Compile* C = Compile::current();
*** 663,673 **** } else { return val; } } ! static bool barrier_needed(C2Access access) { return ZBarrierSet::barrier_needed(access.decorators(), access.type()); } Node* ZBarrierSetC2::load_at_resolved(C2Access& access, const Type* val_type) const { Node* p = BarrierSetC2::load_at_resolved(access, val_type); --- 663,673 ---- } else { return val; } } ! static bool barrier_needed(C2Access& access) { return ZBarrierSet::barrier_needed(access.decorators(), access.type()); } Node* ZBarrierSetC2::load_at_resolved(C2Access& access, const Type* val_type) const { Node* p = BarrierSetC2::load_at_resolved(access, val_type);
*** 675,685 **** return p; } bool weak = (access.decorators() & ON_WEAK_OOP_REF) != 0; ! GraphKit* kit = access.kit(); PhaseGVN& gvn = kit->gvn(); Node* adr = access.addr().node(); Node* heap_base_oop = access.base(); bool unsafe = (access.decorators() & C2_UNSAFE_ACCESS) != 0; if (unsafe) { --- 675,687 ---- return p; } bool weak = (access.decorators() & ON_WEAK_OOP_REF) != 0; ! assert(access.is_parse_access(), "entry not supported at optimization time"); ! C2ParseAccess& parse_access = static_cast<C2ParseAccess&>(access); ! GraphKit* kit = parse_access.kit(); PhaseGVN& gvn = kit->gvn(); Node* adr = access.addr().node(); Node* heap_base_oop = access.base(); bool unsafe = (access.decorators() & C2_UNSAFE_ACCESS) != 0; if (unsafe) {
*** 705,730 **** #undef __ } } return p; } else { ! return load_barrier(access.kit(), p, access.addr().node(), weak, true, true); } } ! Node* ZBarrierSetC2::atomic_cmpxchg_val_at_resolved(C2AtomicAccess& access, Node* expected_val, Node* new_val, const Type* val_type) const { Node* result = BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, val_type); if (!barrier_needed(access)) { return result; } access.set_needs_pinning(false); return make_cmpx_loadbarrier(access); } ! Node* ZBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicAccess& access, Node* expected_val, Node* new_val, const Type* value_type) const { Node* result = BarrierSetC2::atomic_cmpxchg_bool_at_resolved(access, expected_val, new_val, value_type); if (!barrier_needed(access)) { return result; } --- 707,732 ---- #undef __ } } return p; } else { ! return load_barrier(parse_access.kit(), p, access.addr().node(), weak, true, true); } } ! Node* ZBarrierSetC2::atomic_cmpxchg_val_at_resolved(C2AtomicParseAccess& access, Node* expected_val, Node* new_val, const Type* val_type) const { Node* result = BarrierSetC2::atomic_cmpxchg_val_at_resolved(access, expected_val, new_val, val_type); if (!barrier_needed(access)) { return result; } access.set_needs_pinning(false); return make_cmpx_loadbarrier(access); } ! Node* ZBarrierSetC2::atomic_cmpxchg_bool_at_resolved(C2AtomicParseAccess& access, Node* expected_val, Node* new_val, const Type* value_type) const { Node* result = BarrierSetC2::atomic_cmpxchg_bool_at_resolved(access, expected_val, new_val, value_type); if (!barrier_needed(access)) { return result; }
*** 744,763 **** } return load_store; } ! Node* ZBarrierSetC2::atomic_xchg_at_resolved(C2AtomicAccess& access, Node* new_val, const Type* val_type) const { Node* result = BarrierSetC2::atomic_xchg_at_resolved(access, new_val, val_type); if (!barrier_needed(access)) { return result; } Node* load_store = access.raw_access(); Node* adr = access.addr().node(); ! return load_barrier(access.kit(), load_store, adr, false, false, false); } // == Macro Expansion == void ZBarrierSetC2::expand_loadbarrier_node(PhaseMacroExpand* phase, LoadBarrierNode* barrier) const { --- 746,767 ---- } return load_store; } ! Node* ZBarrierSetC2::atomic_xchg_at_resolved(C2AtomicParseAccess& access, Node* new_val, const Type* val_type) const { Node* result = BarrierSetC2::atomic_xchg_at_resolved(access, new_val, val_type); if (!barrier_needed(access)) { return result; } Node* load_store = access.raw_access(); Node* adr = access.addr().node(); ! assert(access.is_parse_access(), "entry not supported at optimization time"); ! C2ParseAccess& parse_access = static_cast<C2ParseAccess&>(access); ! return load_barrier(parse_access.kit(), load_store, adr, false, false, false); } // == Macro Expansion == void ZBarrierSetC2::expand_loadbarrier_node(PhaseMacroExpand* phase, LoadBarrierNode* barrier) const {
< prev index next >