Mercurial > hg > truffle
comparison src/share/vm/opto/ifnode.cpp @ 1013:ce590301ae2a
6889300: assert(i != k || is_new || i->outcnt() > 0, "don't return dead nodes")
Summary: PhiNode::Ideal() should return TOP for Phi node with no users.
Reviewed-by: never, jrose
author | kvn |
---|---|
date | Tue, 13 Oct 2009 22:32:31 -0700 |
parents | fc4be448891f |
children | e715b51789d8 |
comparison
equal
deleted
inserted
replaced
1012:5f29a958a545 | 1013:ce590301ae2a |
---|---|
238 // Register the new RegionNodes but do not transform them. Cannot | 238 // Register the new RegionNodes but do not transform them. Cannot |
239 // transform until the entire Region/Phi conglomerate has been hacked | 239 // transform until the entire Region/Phi conglomerate has been hacked |
240 // as a single huge transform. | 240 // as a single huge transform. |
241 igvn->register_new_node_with_optimizer( region_c ); | 241 igvn->register_new_node_with_optimizer( region_c ); |
242 igvn->register_new_node_with_optimizer( region_x ); | 242 igvn->register_new_node_with_optimizer( region_x ); |
243 phi_x = phase->transform( phi_x ); | |
244 // Prevent the untimely death of phi_x. Currently he has no uses. He is | 243 // Prevent the untimely death of phi_x. Currently he has no uses. He is |
245 // about to get one. If this only use goes away, then phi_x will look dead. | 244 // about to get one. If this only use goes away, then phi_x will look dead. |
246 // However, he will be picking up some more uses down below. | 245 // However, he will be picking up some more uses down below. |
247 Node *hook = new (igvn->C, 4) Node(4); | 246 Node *hook = new (igvn->C, 4) Node(4); |
248 hook->init_req(0, phi_x); | 247 hook->init_req(0, phi_x); |
249 hook->init_req(1, phi_c); | 248 hook->init_req(1, phi_c); |
249 phi_x = phase->transform( phi_x ); | |
250 | 250 |
251 // Make the compare | 251 // Make the compare |
252 Node *cmp_c = phase->makecon(t); | 252 Node *cmp_c = phase->makecon(t); |
253 Node *cmp_x = cmp->clone(); | 253 Node *cmp_x = cmp->clone(); |
254 cmp_x->set_req(1,phi_x); | 254 cmp_x->set_req(1,phi_x); |
320 // Only construct phi_s if needed, otherwise provides | 320 // Only construct phi_s if needed, otherwise provides |
321 // interfering use. | 321 // interfering use. |
322 phi_s = PhiNode::make_blank(region_s,phi); | 322 phi_s = PhiNode::make_blank(region_s,phi); |
323 phi_s->init_req( 1, phi_c ); | 323 phi_s->init_req( 1, phi_c ); |
324 phi_s->init_req( 2, phi_x ); | 324 phi_s->init_req( 2, phi_x ); |
325 hook->add_req(phi_s); | |
325 phi_s = phase->transform(phi_s); | 326 phi_s = phase->transform(phi_s); |
326 } | 327 } |
327 proj_path_data = phi_s; | 328 proj_path_data = phi_s; |
328 proj_path_ctrl = region_s; | 329 proj_path_ctrl = region_s; |
329 } else { | 330 } else { |
331 // Only construct phi_f if needed, otherwise provides | 332 // Only construct phi_f if needed, otherwise provides |
332 // interfering use. | 333 // interfering use. |
333 phi_f = PhiNode::make_blank(region_f,phi); | 334 phi_f = PhiNode::make_blank(region_f,phi); |
334 phi_f->init_req( 1, phi_c ); | 335 phi_f->init_req( 1, phi_c ); |
335 phi_f->init_req( 2, phi_x ); | 336 phi_f->init_req( 2, phi_x ); |
337 hook->add_req(phi_f); | |
336 phi_f = phase->transform(phi_f); | 338 phi_f = phase->transform(phi_f); |
337 } | 339 } |
338 proj_path_data = phi_f; | 340 proj_path_data = phi_f; |
339 proj_path_ctrl = region_f; | 341 proj_path_ctrl = region_f; |
340 } | 342 } |