< prev index next >

src/hotspot/share/gc/shared/c2/barrierSetC2.hpp

Print this page




 122   BasicType type() const          { return _type; }
 123   bool is_oop() const             { return _type == T_OBJECT || _type == T_VALUETYPE || _type == T_ARRAY; }
 124   bool is_raw() const             { return (_decorators & AS_RAW) != 0; }
 125   Node* raw_access() const        { return _raw_access; }
 126 
 127   void set_raw_access(Node* raw_access) { _raw_access = raw_access; }
 128   virtual void set_memory() {} // no-op for normal accesses, but not for atomic accesses.
 129 
 130   MemNode::MemOrd mem_node_mo() const;
 131   bool needs_cpu_membar() const;
 132 
 133   virtual PhaseGVN& gvn() const = 0;
 134   virtual bool is_parse_access() const { return false; }
 135   virtual bool is_opt_access() const { return false; }
 136 };
 137 
 138 // C2Access for parse time calls to the BarrierSetC2 backend.
 139 class C2ParseAccess: public C2Access {
 140 protected:
 141   GraphKit*         _kit;

 142 
 143   void* barrier_set_state() const;
 144 
 145 public:
 146   C2ParseAccess(GraphKit* kit, DecoratorSet decorators,
 147                 BasicType type, Node* base, C2AccessValuePtr& addr) :

 148     C2Access(decorators, type, base, addr),
 149     _kit(kit) {

 150     fixup_decorators();
 151   }
 152 
 153   GraphKit* kit() const           { return _kit; }

 154 
 155   template <typename T>
 156   T barrier_set_state_as() const {
 157     return reinterpret_cast<T>(barrier_set_state());
 158   }
 159 
 160   virtual PhaseGVN& gvn() const;
 161   virtual bool is_parse_access() const { return true; }
 162 };
 163 
 164 // This class wraps a bunch of context parameters thare are passed around in the
 165 // BarrierSetC2 backend hierarchy, for atomic accesses, to reduce boiler plate.
 166 class C2AtomicParseAccess: public C2ParseAccess {
 167   Node* _memory;
 168   uint  _alias_idx;
 169   bool  _needs_pinning;
 170 
 171 public:
 172   C2AtomicParseAccess(GraphKit* kit, DecoratorSet decorators, BasicType type,
 173                  Node* base, C2AccessValuePtr& addr, uint alias_idx) :




 122   BasicType type() const          { return _type; }
 123   bool is_oop() const             { return _type == T_OBJECT || _type == T_VALUETYPE || _type == T_ARRAY; }
 124   bool is_raw() const             { return (_decorators & AS_RAW) != 0; }
 125   Node* raw_access() const        { return _raw_access; }
 126 
 127   void set_raw_access(Node* raw_access) { _raw_access = raw_access; }
 128   virtual void set_memory() {} // no-op for normal accesses, but not for atomic accesses.
 129 
 130   MemNode::MemOrd mem_node_mo() const;
 131   bool needs_cpu_membar() const;
 132 
 133   virtual PhaseGVN& gvn() const = 0;
 134   virtual bool is_parse_access() const { return false; }
 135   virtual bool is_opt_access() const { return false; }
 136 };
 137 
 138 // C2Access for parse time calls to the BarrierSetC2 backend.
 139 class C2ParseAccess: public C2Access {
 140 protected:
 141   GraphKit*         _kit;
 142   Node* _ctl;
 143 
 144   void* barrier_set_state() const;
 145 
 146 public:
 147   C2ParseAccess(GraphKit* kit, DecoratorSet decorators,
 148                 BasicType type, Node* base, C2AccessValuePtr& addr,
 149                 Node* ctl = NULL) :
 150     C2Access(decorators, type, base, addr),
 151     _kit(kit),
 152     _ctl(ctl) {
 153     fixup_decorators();
 154   }
 155 
 156   GraphKit* kit() const           { return _kit; }
 157   Node* control() const;
 158 
 159   template <typename T>
 160   T barrier_set_state_as() const {
 161     return reinterpret_cast<T>(barrier_set_state());
 162   }
 163 
 164   virtual PhaseGVN& gvn() const;
 165   virtual bool is_parse_access() const { return true; }
 166 };
 167 
 168 // This class wraps a bunch of context parameters thare are passed around in the
 169 // BarrierSetC2 backend hierarchy, for atomic accesses, to reduce boiler plate.
 170 class C2AtomicParseAccess: public C2ParseAccess {
 171   Node* _memory;
 172   uint  _alias_idx;
 173   bool  _needs_pinning;
 174 
 175 public:
 176   C2AtomicParseAccess(GraphKit* kit, DecoratorSet decorators, BasicType type,
 177                  Node* base, C2AccessValuePtr& addr, uint alias_idx) :


< prev index next >