< prev index next > src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
Print this page
// C2Access for parse time calls to the BarrierSetC2 backend.
class C2ParseAccess: public C2Access {
protected:
GraphKit* _kit;
void* barrier_set_state() const;
public:
C2ParseAccess(GraphKit* kit, DecoratorSet decorators,
! BasicType type, Node* base, C2AccessValuePtr& addr) :
C2Access(decorators, type, base, addr),
! _kit(kit) {
fixup_decorators();
}
GraphKit* kit() const { return _kit; }
virtual PhaseGVN& gvn() const;
virtual bool is_parse_access() const { return true; }
};
// C2Access for parse time calls to the BarrierSetC2 backend.
class C2ParseAccess: public C2Access {
protected:
GraphKit* _kit;
+ Node* _ctl;
void* barrier_set_state() const;
public:
C2ParseAccess(GraphKit* kit, DecoratorSet decorators,
! BasicType type, Node* base, C2AccessValuePtr& addr,
+ Node* ctl = nullptr) :
C2Access(decorators, type, base, addr),
! _kit(kit),
+ _ctl(ctl) {
fixup_decorators();
}
GraphKit* kit() const { return _kit; }
+ Node* control() const;
virtual PhaseGVN& gvn() const;
virtual bool is_parse_access() const { return true; }
};
virtual Node* atomic_cmpxchg_bool_at(C2AtomicParseAccess& access, Node* expected_val,
Node* new_val, const Type* val_type) const;
virtual Node* atomic_xchg_at(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const;
virtual Node* atomic_add_at(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const;
! virtual void clone(GraphKit* kit, Node* src, Node* dst, Node* size, bool is_array) const;
virtual Node* obj_allocate(PhaseMacroExpand* macro, Node* mem, Node* toobig_false, Node* size_in_bytes,
Node*& i_o, Node*& needgc_ctrl,
Node*& fast_oop_ctrl, Node*& fast_oop_rawmem,
intx prefetch_lines) const;
virtual Node* atomic_cmpxchg_bool_at(C2AtomicParseAccess& access, Node* expected_val,
Node* new_val, const Type* val_type) const;
virtual Node* atomic_xchg_at(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const;
virtual Node* atomic_add_at(C2AtomicParseAccess& access, Node* new_val, const Type* value_type) const;
! virtual void clone(GraphKit* kit, Node* src_base, Node* dst_base, Node* size, bool is_array) const;
virtual Node* obj_allocate(PhaseMacroExpand* macro, Node* mem, Node* toobig_false, Node* size_in_bytes,
Node*& i_o, Node*& needgc_ctrl,
Node*& fast_oop_ctrl, Node*& fast_oop_rawmem,
intx prefetch_lines) const;
virtual Node* step_over_gc_barrier(Node* c) const { return c; }
// Support for macro expanded GC barriers
virtual void register_potential_barrier_node(Node* node) const { }
virtual void unregister_potential_barrier_node(Node* node) const { }
! virtual void eliminate_gc_barrier(PhaseMacroExpand* macro, Node* node) const { }
virtual void eliminate_gc_barrier_data(Node* node) const { }
virtual void enqueue_useful_gc_barrier(PhaseIterGVN* igvn, Node* node) const {}
virtual void eliminate_useless_gc_barriers(Unique_Node_List &useful, Compile* C) const {}
// Allow barrier sets to have shared state that is preserved across a compilation unit.
virtual Node* step_over_gc_barrier(Node* c) const { return c; }
// Support for macro expanded GC barriers
virtual void register_potential_barrier_node(Node* node) const { }
virtual void unregister_potential_barrier_node(Node* node) const { }
! virtual void eliminate_gc_barrier(PhaseIterGVN* igvn, Node* node) const { }
virtual void eliminate_gc_barrier_data(Node* node) const { }
virtual void enqueue_useful_gc_barrier(PhaseIterGVN* igvn, Node* node) const {}
virtual void eliminate_useless_gc_barriers(Unique_Node_List &useful, Compile* C) const {}
// Allow barrier sets to have shared state that is preserved across a compilation unit.
< prev index next >