< prev index next >

src/hotspot/share/opto/multnode.hpp

Print this page

 27 
 28 #include "opto/node.hpp"
 29 
 30 class Matcher;
 31 class ProjNode;
 32 
 33 //------------------------------MultiNode--------------------------------------
 34 // This class defines a MultiNode, a Node which produces many values.  The
 35 // values are wrapped up in a tuple Type, i.e. a TypeTuple.
 36 class MultiNode : public Node {
 37 public:
 38   MultiNode( uint required ) : Node(required) {
 39     init_class_id(Class_Multi);
 40   }
 41   virtual int Opcode() const;
 42   virtual const Type *bottom_type() const = 0;
 43   virtual bool       is_CFG() const { return true; }
 44   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
 45   virtual bool depends_only_on_test() const { return false; }
 46   virtual const RegMask &out_RegMask() const;
 47   virtual Node *match( const ProjNode *proj, const Matcher *m );
 48   virtual uint ideal_reg() const { return NotAMachineReg; }
 49   ProjNode* proj_out(uint which_proj) const; // Get a named projection
 50   ProjNode* proj_out_or_null(uint which_proj) const;
 51   ProjNode* proj_out_or_null(uint which_proj, bool is_io_use) const;
 52 };
 53 
 54 //------------------------------ProjNode---------------------------------------
 55 // This class defines a Projection node.  Projections project a single element
 56 // out of a tuple (or Signature) type.  Only MultiNodes produce TypeTuple
 57 // results.
 58 class ProjNode : public Node {
 59 protected:
 60   virtual uint hash() const;
 61   virtual bool cmp( const Node &n ) const;
 62   virtual uint size_of() const;
 63   void check_con() const;       // Called from constructor.
 64   const Type* proj_type(const Type* t) const;
 65 
 66 public:
 67   ProjNode( Node *src, uint con, bool io_use = false )

 27 
 28 #include "opto/node.hpp"
 29 
 30 class Matcher;
 31 class ProjNode;
 32 
 33 //------------------------------MultiNode--------------------------------------
 34 // This class defines a MultiNode, a Node which produces many values.  The
 35 // values are wrapped up in a tuple Type, i.e. a TypeTuple.
 36 class MultiNode : public Node {
 37 public:
 38   MultiNode( uint required ) : Node(required) {
 39     init_class_id(Class_Multi);
 40   }
 41   virtual int Opcode() const;
 42   virtual const Type *bottom_type() const = 0;
 43   virtual bool       is_CFG() const { return true; }
 44   virtual uint hash() const { return NO_HASH; }  // CFG nodes do not hash
 45   virtual bool depends_only_on_test() const { return false; }
 46   virtual const RegMask &out_RegMask() const;
 47   virtual Node *match(const ProjNode *proj, const Matcher *m, const RegMask* mask);
 48   virtual uint ideal_reg() const { return NotAMachineReg; }
 49   ProjNode* proj_out(uint which_proj) const; // Get a named projection
 50   ProjNode* proj_out_or_null(uint which_proj) const;
 51   ProjNode* proj_out_or_null(uint which_proj, bool is_io_use) const;
 52 };
 53 
 54 //------------------------------ProjNode---------------------------------------
 55 // This class defines a Projection node.  Projections project a single element
 56 // out of a tuple (or Signature) type.  Only MultiNodes produce TypeTuple
 57 // results.
 58 class ProjNode : public Node {
 59 protected:
 60   virtual uint hash() const;
 61   virtual bool cmp( const Node &n ) const;
 62   virtual uint size_of() const;
 63   void check_con() const;       // Called from constructor.
 64   const Type* proj_type(const Type* t) const;
 65 
 66 public:
 67   ProjNode( Node *src, uint con, bool io_use = false )
< prev index next >