comparison src/share/vm/opto/ifnode.cpp @ 1017:e715b51789d8

Merge
author cfang
date Fri, 16 Oct 2009 14:08:44 -0700
parents 89e0543e1737 ce590301ae2a
children bea7a22a6f79
comparison
equal deleted inserted replaced
1005:a2ad635573fb 1017:e715b51789d8
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 }