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