103 Node* _base;
104 C2AccessValuePtr& _addr;
105 Node* _raw_access;
106
107 void fixup_decorators();
108
109 public:
110 C2Access(DecoratorSet decorators,
111 BasicType type, Node* base, C2AccessValuePtr& addr) :
112 _decorators(decorators),
113 _type(type),
114 _base(base),
115 _addr(addr),
116 _raw_access(NULL)
117 {}
118
119 DecoratorSet decorators() const { return _decorators; }
120 Node* base() const { return _base; }
121 C2AccessValuePtr& addr() const { return _addr; }
122 BasicType type() const { return _type; }
123 bool is_oop() const { return _type == T_OBJECT || _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;
|
103 Node* _base;
104 C2AccessValuePtr& _addr;
105 Node* _raw_access;
106
107 void fixup_decorators();
108
109 public:
110 C2Access(DecoratorSet decorators,
111 BasicType type, Node* base, C2AccessValuePtr& addr) :
112 _decorators(decorators),
113 _type(type),
114 _base(base),
115 _addr(addr),
116 _raw_access(NULL)
117 {}
118
119 DecoratorSet decorators() const { return _decorators; }
120 Node* base() const { return _base; }
121 C2AccessValuePtr& addr() const { return _addr; }
122 BasicType type() const { return _type; }
123 bool is_oop() const { return is_reference_type(_type); }
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;
|