src/share/vm/opto/loopUnswitch.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7068051 Sdiff src/share/vm/opto

src/share/vm/opto/loopUnswitch.cpp

Print this page




 238   register_node(iff, outer_loop, entry, dom_depth(entry));
 239   ProjNode* iffast = new (C, 1) IfTrueNode(iff);
 240   register_node(iffast, outer_loop, iff, dom_depth(iff));
 241   ProjNode* ifslow = new (C, 1) IfFalseNode(iff);
 242   register_node(ifslow, outer_loop, iff, dom_depth(iff));
 243 
 244   // Clone the loop body.  The clone becomes the fast loop.  The
 245   // original pre-header will (illegally) have 3 control users
 246   // (old & new loops & new if).
 247   clone_loop(loop, old_new, dom_depth(head), iff);
 248   assert(old_new[head->_idx]->is_Loop(), "" );
 249 
 250   // Fast (true) control
 251   Node* iffast_pred = clone_loop_predicates(entry, iffast, !counted_loop);
 252   _igvn.hash_delete(head);
 253   head->set_req(LoopNode::EntryControl, iffast_pred);
 254   set_idom(head, iffast_pred, dom_depth(head));
 255   _igvn._worklist.push(head);
 256 
 257   // Slow (false) control
 258   Node* ifslow_pred = move_loop_predicates(entry, ifslow, !counted_loop);
 259   LoopNode* slow_head = old_new[head->_idx]->as_Loop();
 260   _igvn.hash_delete(slow_head);
 261   slow_head->set_req(LoopNode::EntryControl, ifslow_pred);
 262   set_idom(slow_head, ifslow_pred, dom_depth(slow_head));
 263   _igvn._worklist.push(slow_head);
 264 
 265   recompute_dom_depth();
 266 
 267   return iffast;
 268 }


 238   register_node(iff, outer_loop, entry, dom_depth(entry));
 239   ProjNode* iffast = new (C, 1) IfTrueNode(iff);
 240   register_node(iffast, outer_loop, iff, dom_depth(iff));
 241   ProjNode* ifslow = new (C, 1) IfFalseNode(iff);
 242   register_node(ifslow, outer_loop, iff, dom_depth(iff));
 243 
 244   // Clone the loop body.  The clone becomes the fast loop.  The
 245   // original pre-header will (illegally) have 3 control users
 246   // (old & new loops & new if).
 247   clone_loop(loop, old_new, dom_depth(head), iff);
 248   assert(old_new[head->_idx]->is_Loop(), "" );
 249 
 250   // Fast (true) control
 251   Node* iffast_pred = clone_loop_predicates(entry, iffast, !counted_loop);
 252   _igvn.hash_delete(head);
 253   head->set_req(LoopNode::EntryControl, iffast_pred);
 254   set_idom(head, iffast_pred, dom_depth(head));
 255   _igvn._worklist.push(head);
 256 
 257   // Slow (false) control
 258   Node* ifslow_pred = clone_loop_predicates(entry, ifslow, !counted_loop);
 259   LoopNode* slow_head = old_new[head->_idx]->as_Loop();
 260   _igvn.hash_delete(slow_head);
 261   slow_head->set_req(LoopNode::EntryControl, ifslow_pred);
 262   set_idom(slow_head, ifslow_pred, dom_depth(slow_head));
 263   _igvn._worklist.push(slow_head);
 264 
 265   recompute_dom_depth();
 266 
 267   return iffast;
 268 }
src/share/vm/opto/loopUnswitch.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File