233
234 public:
235 ShenandoahLoadReferenceBarrierNode(Node* ctrl, Node* val, bool native);
236
237 bool is_native() const;
238 virtual int Opcode() const;
239 virtual const Type* bottom_type() const;
240 virtual const Type* Value(PhaseGVN* phase) const;
241 virtual const class TypePtr *adr_type() const { return TypeOopPtr::BOTTOM; }
242 virtual uint match_edge(uint idx) const {
243 return idx >= ValueIn;
244 }
245 virtual uint ideal_reg() const { return Op_RegP; }
246
247 virtual Node* Identity(PhaseGVN* phase);
248
249 virtual uint size_of() const;
250 virtual uint hash() const;
251 virtual bool cmp( const Node &n ) const;
252
253 bool is_redundant();
254
255 private:
256 bool needs_barrier(PhaseGVN* phase, Node* n);
257 bool needs_barrier_impl(PhaseGVN* phase, Node* n, Unique_Node_List &visited);
258 };
259
260
261 #endif // SHARE_GC_SHENANDOAH_C2_SHENANDOAHSUPPORT_HPP
|
233
234 public:
235 ShenandoahLoadReferenceBarrierNode(Node* ctrl, Node* val, bool native);
236
237 bool is_native() const;
238 virtual int Opcode() const;
239 virtual const Type* bottom_type() const;
240 virtual const Type* Value(PhaseGVN* phase) const;
241 virtual const class TypePtr *adr_type() const { return TypeOopPtr::BOTTOM; }
242 virtual uint match_edge(uint idx) const {
243 return idx >= ValueIn;
244 }
245 virtual uint ideal_reg() const { return Op_RegP; }
246
247 virtual Node* Identity(PhaseGVN* phase);
248
249 virtual uint size_of() const;
250 virtual uint hash() const;
251 virtual bool cmp( const Node &n ) const;
252
253 private:
254 bool needs_barrier(PhaseGVN* phase, Node* n);
255 bool needs_barrier_impl(PhaseGVN* phase, Node* n, Unique_Node_List &visited);
256 };
257
258
259 #endif // SHARE_GC_SHENANDOAH_C2_SHENANDOAHSUPPORT_HPP
|