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 } |