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 )
|