hotspot/src/share/vm/opto/loopPredicate.cpp
changeset 25913 81dbc151e91c
parent 24923 9631f7d691dc
child 26166 4b49fd58bbd9
equal deleted inserted replaced
25742:07bedc8d1893 25913:81dbc151e91c
   105     CallNode* call = rgn->as_Call();
   105     CallNode* call = rgn->as_Call();
   106     IdealLoopTree* loop = get_loop(call);
   106     IdealLoopTree* loop = get_loop(call);
   107     rgn = new RegionNode(1);
   107     rgn = new RegionNode(1);
   108     rgn->add_req(uncommon_proj);
   108     rgn->add_req(uncommon_proj);
   109     register_control(rgn, loop, uncommon_proj);
   109     register_control(rgn, loop, uncommon_proj);
   110     _igvn.hash_delete(call);
   110     _igvn.replace_input_of(call, 0, rgn);
   111     call->set_req(0, rgn);
       
   112     // When called from beautify_loops() idom is not constructed yet.
   111     // When called from beautify_loops() idom is not constructed yet.
   113     if (_idom != NULL) {
   112     if (_idom != NULL) {
   114       set_idom(call, rgn, dom_depth(rgn));
   113       set_idom(call, rgn, dom_depth(rgn));
   115     }
   114     }
   116   } else {
   115   } else {
   164   }
   163   }
   165   assert(!has_phi || rgn->req() > 3, "no phis when region is created");
   164   assert(!has_phi || rgn->req() > 3, "no phis when region is created");
   166 
   165 
   167   if (new_entry == NULL) {
   166   if (new_entry == NULL) {
   168     // Attach if_cont to iff
   167     // Attach if_cont to iff
   169     _igvn.hash_delete(iff);
   168     _igvn.replace_input_of(iff, 0, if_cont);
   170     iff->set_req(0, if_cont);
       
   171     if (_idom != NULL) {
   169     if (_idom != NULL) {
   172       set_idom(iff, if_cont, dom_depth(iff));
   170       set_idom(iff, if_cont, dom_depth(iff));
   173     }
   171     }
   174   }
   172   }
   175   return if_cont->as_Proj();
   173   return if_cont->as_Proj();
   192     assert(rgn->is_Call(), "must be call uct");
   190     assert(rgn->is_Call(), "must be call uct");
   193     CallNode* call = rgn->as_Call();
   191     CallNode* call = rgn->as_Call();
   194     rgn = new RegionNode(1);
   192     rgn = new RegionNode(1);
   195     register_new_node_with_optimizer(rgn);
   193     register_new_node_with_optimizer(rgn);
   196     rgn->add_req(uncommon_proj);
   194     rgn->add_req(uncommon_proj);
   197     hash_delete(call);
   195     replace_input_of(call, 0, rgn);
   198     call->set_req(0, rgn);
       
   199   } else {
   196   } else {
   200     // Find region's edge corresponding to uncommon_proj
   197     // Find region's edge corresponding to uncommon_proj
   201     for (; proj_index < rgn->req(); proj_index++)
   198     for (; proj_index < rgn->req(); proj_index++)
   202       if (rgn->in(proj_index) == uncommon_proj) break;
   199       if (rgn->in(proj_index) == uncommon_proj) break;
   203     assert(proj_index < rgn->req(), "sanity");
   200     assert(proj_index < rgn->req(), "sanity");