158 // create a new phi with narrowed memory type
159 PhiNode* slice_memory(const TypePtr* adr_type) const;
160 PhiNode* split_out_instance(const TypePtr* at, PhaseIterGVN *igvn) const;
161 // like make(r, x), but does not initialize the in edges to x
162 static PhiNode* make_blank( Node* r, Node* x );
163
164 // Accessors
165 RegionNode* region() const { Node* r = in(Region); assert(!r || r->is_Region(), ""); return (RegionNode*)r; }
166
167 Node* is_copy() const {
168 // The node is a real phi if _in[0] is a Region node.
169 DEBUG_ONLY(const Node* r = _in[Region];)
170 assert(r != NULL && r->is_Region(), "Not valid control");
171 return NULL; // not a copy!
172 }
173
174 bool is_tripcount() const;
175
176 // Determine a unique non-trivial input, if any.
177 // Ignore casts if it helps. Return NULL on failure.
178 Node* unique_input(PhaseTransform *phase);
179
180 // Check for a simple dead loop.
181 enum LoopSafety { Safe = 0, Unsafe, UnsafeLoop };
182 LoopSafety simple_data_loop_check(Node *in) const;
183 // Is it unsafe data loop? It becomes a dead loop if this phi node removed.
184 bool is_unsafe_data_reference(Node *in) const;
185 int is_diamond_phi(bool check_control_only = false) const;
186 virtual int Opcode() const;
187 virtual bool pinned() const { return in(0) != 0; }
188 virtual const TypePtr *adr_type() const { verify_adr_type(true); return _adr_type; }
189
190 const int inst_id() const { return _inst_id; }
191 const int inst_index() const { return _inst_index; }
192 const int inst_offset() const { return _inst_offset; }
193 bool is_same_inst_field(const Type* tp, int id, int index, int offset) {
194 return type()->basic_type() == tp->basic_type() &&
195 inst_id() == id &&
196 inst_index() == index &&
197 inst_offset() == offset &&
198 type()->higher_equal(tp);
|
158 // create a new phi with narrowed memory type
159 PhiNode* slice_memory(const TypePtr* adr_type) const;
160 PhiNode* split_out_instance(const TypePtr* at, PhaseIterGVN *igvn) const;
161 // like make(r, x), but does not initialize the in edges to x
162 static PhiNode* make_blank( Node* r, Node* x );
163
164 // Accessors
165 RegionNode* region() const { Node* r = in(Region); assert(!r || r->is_Region(), ""); return (RegionNode*)r; }
166
167 Node* is_copy() const {
168 // The node is a real phi if _in[0] is a Region node.
169 DEBUG_ONLY(const Node* r = _in[Region];)
170 assert(r != NULL && r->is_Region(), "Not valid control");
171 return NULL; // not a copy!
172 }
173
174 bool is_tripcount() const;
175
176 // Determine a unique non-trivial input, if any.
177 // Ignore casts if it helps. Return NULL on failure.
178 Node* unique_input(PhaseTransform *phase, bool uncast);
179 Node* unique_input(PhaseTransform *phase) {
180 Node* uin = unique_input(phase, false);
181 if (uin == NULL) {
182 uin = unique_input(phase, true);
183 }
184 return uin;
185 }
186
187 // Check for a simple dead loop.
188 enum LoopSafety { Safe = 0, Unsafe, UnsafeLoop };
189 LoopSafety simple_data_loop_check(Node *in) const;
190 // Is it unsafe data loop? It becomes a dead loop if this phi node removed.
191 bool is_unsafe_data_reference(Node *in) const;
192 int is_diamond_phi(bool check_control_only = false) const;
193 virtual int Opcode() const;
194 virtual bool pinned() const { return in(0) != 0; }
195 virtual const TypePtr *adr_type() const { verify_adr_type(true); return _adr_type; }
196
197 const int inst_id() const { return _inst_id; }
198 const int inst_index() const { return _inst_index; }
199 const int inst_offset() const { return _inst_offset; }
200 bool is_same_inst_field(const Type* tp, int id, int index, int offset) {
201 return type()->basic_type() == tp->basic_type() &&
202 inst_id() == id &&
203 inst_index() == index &&
204 inst_offset() == offset &&
205 type()->higher_equal(tp);
|