26 #define SHARE_OPTO_MULTNODE_HPP
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 const RegMask &out_RegMask() const;
46 virtual Node *match( const ProjNode *proj, const Matcher *m );
47 virtual uint ideal_reg() const { return NotAMachineReg; }
48 ProjNode* proj_out(uint which_proj) const; // Get a named projection
49 ProjNode* proj_out_or_null(uint which_proj) const;
50 ProjNode* proj_out_or_null(uint which_proj, bool is_io_use) const;
51 uint number_of_projs(uint which_proj) const;
52 uint number_of_projs(uint which_proj, bool is_io_use) const;
53
54 protected:
55
56 // Provide single interface for DUIterator_Fast/DUIterator for template method below
57 class UsesIteratorFast {
58 DUIterator_Fast& _imax;
59 DUIterator_Fast& _i;
60 const Node* _node;
61
62 public:
63 bool cont() {
64 return _i < _imax;
65 }
66 void next() {
|
26 #define SHARE_OPTO_MULTNODE_HPP
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 const RegMask &out_RegMask() const;
46 virtual Node *match(const ProjNode *proj, const Matcher *m, const RegMask* mask);
47 virtual uint ideal_reg() const { return NotAMachineReg; }
48 ProjNode* proj_out(uint which_proj) const; // Get a named projection
49 ProjNode* proj_out_or_null(uint which_proj) const;
50 ProjNode* proj_out_or_null(uint which_proj, bool is_io_use) const;
51 uint number_of_projs(uint which_proj) const;
52 uint number_of_projs(uint which_proj, bool is_io_use) const;
53
54 protected:
55
56 // Provide single interface for DUIterator_Fast/DUIterator for template method below
57 class UsesIteratorFast {
58 DUIterator_Fast& _imax;
59 DUIterator_Fast& _i;
60 const Node* _node;
61
62 public:
63 bool cont() {
64 return _i < _imax;
65 }
66 void next() {
|