src/hotspot/share/opto/loopopts.cpp
changeset 50248 c0475f9c1c45
parent 50180 ffa644980dff
child 50503 f07979db6cb2
equal deleted inserted replaced
50247:e91322fc41c5 50248:c0475f9c1c45
  1663       if( use->is_Phi() )     // Phi use is in prior block
  1663       if( use->is_Phi() )     // Phi use is in prior block
  1664         cfg = prev->in(idx);  // NOT in block of Phi itself
  1664         cfg = prev->in(idx);  // NOT in block of Phi itself
  1665       if (cfg->is_top()) {    // Use is dead?
  1665       if (cfg->is_top()) {    // Use is dead?
  1666         _igvn.replace_input_of(use, idx, C->top());
  1666         _igvn.replace_input_of(use, idx, C->top());
  1667         continue;
  1667         continue;
       
  1668       }
       
  1669 
       
  1670       // If use is referenced through control edge... (idx == 0)
       
  1671       if (mode == IgnoreStripMined && idx == 0) {
       
  1672         LoopNode *head = loop->_head->as_Loop();
       
  1673         if (head->is_strip_mined() && is_dominator(head->outer_loop_exit(), prev)) {
       
  1674           // That node is outside the inner loop, leave it outside the
       
  1675           // outer loop as well to not confuse verification code.
       
  1676           assert(!loop->_parent->is_member(use_loop), "should be out of the outer loop");
       
  1677           _igvn.replace_input_of(use, 0, head->outer_loop_exit());
       
  1678           continue;
       
  1679         }
  1668       }
  1680       }
  1669 
  1681 
  1670       while(!outer_loop->is_member(get_loop(cfg))) {
  1682       while(!outer_loop->is_member(get_loop(cfg))) {
  1671         prev = cfg;
  1683         prev = cfg;
  1672         cfg = cfg->_idx >= new_counter ? cfg->in(2) : idom(cfg);
  1684         cfg = cfg->_idx >= new_counter ? cfg->in(2) : idom(cfg);