79 const Node* r = _in[Region];
80 if (r == NULL)
81 return nonnull_req();
82 return NULL; // not a copy!
83 }
84 PhiNode* has_phi() const; // returns an arbitrary phi user, or NULL
85 PhiNode* has_unique_phi() const; // returns the unique phi user, or NULL
86 // Is this region node unreachable from root?
87 bool is_unreachable_region(PhaseGVN *phase) const;
88 virtual int Opcode() const;
89 virtual bool pinned() const { return (const Node *)in(0) == this; }
90 virtual bool is_CFG () const { return true; }
91 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
92 virtual bool depends_only_on_test() const { return false; }
93 virtual const Type *bottom_type() const { return Type::CONTROL; }
94 virtual const Type* Value(PhaseGVN* phase) const;
95 virtual Node* Identity(PhaseGVN* phase);
96 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
97 virtual const RegMask &out_RegMask() const;
98 bool try_clean_mem_phi(PhaseGVN *phase);
99 };
100
101 //------------------------------JProjNode--------------------------------------
102 // jump projection for node that produces multiple control-flow paths
103 class JProjNode : public ProjNode {
104 public:
105 JProjNode( Node* ctrl, uint idx ) : ProjNode(ctrl,idx) {}
106 virtual int Opcode() const;
107 virtual bool is_CFG() const { return true; }
108 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
109 virtual const Node* is_block_proj() const { return in(0); }
110 virtual const RegMask& out_RegMask() const;
111 virtual uint ideal_reg() const { return 0; }
112 };
113
114 //------------------------------PhiNode----------------------------------------
115 // PhiNodes merge values from different Control paths. Slot 0 points to the
116 // controlling RegionNode. Other slots map 1-for-1 with incoming control flow
117 // paths to the RegionNode. For speed reasons (to avoid another pass) we
118 // can turn PhiNodes into copys in-place by NULL'ing out their RegionNode
|
79 const Node* r = _in[Region];
80 if (r == NULL)
81 return nonnull_req();
82 return NULL; // not a copy!
83 }
84 PhiNode* has_phi() const; // returns an arbitrary phi user, or NULL
85 PhiNode* has_unique_phi() const; // returns the unique phi user, or NULL
86 // Is this region node unreachable from root?
87 bool is_unreachable_region(PhaseGVN *phase) const;
88 virtual int Opcode() const;
89 virtual bool pinned() const { return (const Node *)in(0) == this; }
90 virtual bool is_CFG () const { return true; }
91 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
92 virtual bool depends_only_on_test() const { return false; }
93 virtual const Type *bottom_type() const { return Type::CONTROL; }
94 virtual const Type* Value(PhaseGVN* phase) const;
95 virtual Node* Identity(PhaseGVN* phase);
96 virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
97 virtual const RegMask &out_RegMask() const;
98 bool try_clean_mem_phi(PhaseGVN *phase);
99 bool optimize_trichotomy(PhaseIterGVN* igvn);
100 };
101
102 //------------------------------JProjNode--------------------------------------
103 // jump projection for node that produces multiple control-flow paths
104 class JProjNode : public ProjNode {
105 public:
106 JProjNode( Node* ctrl, uint idx ) : ProjNode(ctrl,idx) {}
107 virtual int Opcode() const;
108 virtual bool is_CFG() const { return true; }
109 virtual uint hash() const { return NO_HASH; } // CFG nodes do not hash
110 virtual const Node* is_block_proj() const { return in(0); }
111 virtual const RegMask& out_RegMask() const;
112 virtual uint ideal_reg() const { return 0; }
113 };
114
115 //------------------------------PhiNode----------------------------------------
116 // PhiNodes merge values from different Control paths. Slot 0 points to the
117 // controlling RegionNode. Other slots map 1-for-1 with incoming control flow
118 // paths to the RegionNode. For speed reasons (to avoid another pass) we
119 // can turn PhiNodes into copys in-place by NULL'ing out their RegionNode
|