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 uint number_of_projs(uint which_proj) const;
53 uint number_of_projs(uint which_proj, bool is_io_use) const;
54
55 protected:
56
57 // Provide single interface for DUIterator_Fast/DUIterator for template method below
58 class UsesIteratorFast {
59 DUIterator_Fast& _imax;
60 DUIterator_Fast& _i;
61 const Node* _node;
62
63 public:
64 bool cont() {
65 return _i < _imax;
66 }
67 void next() {
|
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 uint number_of_projs(uint which_proj) const;
53 uint number_of_projs(uint which_proj, bool is_io_use) const;
54
55 protected:
56
57 // Provide single interface for DUIterator_Fast/DUIterator for template method below
58 class UsesIteratorFast {
59 DUIterator_Fast& _imax;
60 DUIterator_Fast& _i;
61 const Node* _node;
62
63 public:
64 bool cont() {
65 return _i < _imax;
66 }
67 void next() {
|