200 virtual const Type *Value( PhaseTransform *phase ) const;
201 virtual Node *Identity( PhaseTransform *phase );
202 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
203 virtual const RegMask &out_RegMask() const;
204 virtual const RegMask &in_RegMask(uint) const;
205 #ifndef PRODUCT
206 virtual void dump_spec(outputStream *st) const;
207 #endif
208 #ifdef ASSERT
209 void verify_adr_type(VectorSet& visited, const TypePtr* at) const;
210 void verify_adr_type(bool recursive = false) const;
211 #else //ASSERT
212 void verify_adr_type(bool recursive = false) const {}
213 #endif //ASSERT
214 };
215
216 //------------------------------GotoNode---------------------------------------
217 // GotoNodes perform direct branches.
218 class GotoNode : public Node {
219 public:
220 GotoNode( Node *control ) : Node(control) {
221 init_flags(Flag_is_Goto);
222 }
223 virtual int Opcode() const;
224 virtual bool pinned() const { return true; }
225 virtual bool is_CFG() const { return true; }
226 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
227 virtual const Node *is_block_proj() const { return this; }
228 virtual bool depends_only_on_test() const { return false; }
229 virtual const Type *bottom_type() const { return Type::CONTROL; }
230 virtual const Type *Value( PhaseTransform *phase ) const;
231 virtual Node *Identity( PhaseTransform *phase );
232 virtual const RegMask &out_RegMask() const;
233 };
234
235 //------------------------------CProjNode--------------------------------------
236 // control projection for node that produces multiple control-flow paths
237 class CProjNode : public ProjNode {
238 public:
239 CProjNode( Node *ctrl, uint idx ) : ProjNode(ctrl,idx) {}
240 virtual int Opcode() const;
241 virtual bool is_CFG() const { return true; }
242 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
|
200 virtual const Type *Value( PhaseTransform *phase ) const;
201 virtual Node *Identity( PhaseTransform *phase );
202 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
203 virtual const RegMask &out_RegMask() const;
204 virtual const RegMask &in_RegMask(uint) const;
205 #ifndef PRODUCT
206 virtual void dump_spec(outputStream *st) const;
207 #endif
208 #ifdef ASSERT
209 void verify_adr_type(VectorSet& visited, const TypePtr* at) const;
210 void verify_adr_type(bool recursive = false) const;
211 #else //ASSERT
212 void verify_adr_type(bool recursive = false) const {}
213 #endif //ASSERT
214 };
215
216 //------------------------------GotoNode---------------------------------------
217 // GotoNodes perform direct branches.
218 class GotoNode : public Node {
219 public:
220 GotoNode( Node *control ) : Node(control) {}
221 virtual int Opcode() const;
222 virtual bool pinned() const { return true; }
223 virtual bool is_CFG() const { return true; }
224 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
225 virtual const Node *is_block_proj() const { return this; }
226 virtual bool depends_only_on_test() const { return false; }
227 virtual const Type *bottom_type() const { return Type::CONTROL; }
228 virtual const Type *Value( PhaseTransform *phase ) const;
229 virtual Node *Identity( PhaseTransform *phase );
230 virtual const RegMask &out_RegMask() const;
231 };
232
233 //------------------------------CProjNode--------------------------------------
234 // control projection for node that produces multiple control-flow paths
235 class CProjNode : public ProjNode {
236 public:
237 CProjNode( Node *ctrl, uint idx ) : ProjNode(ctrl,idx) {}
238 virtual int Opcode() const;
239 virtual bool is_CFG() const { return true; }
240 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
|