< prev index next >

src/hotspot/share/opto/loopopts.cpp

Print this page




 870             _igvn.replace_input_of(n, 0, lca);
 871             set_ctrl_and_loop(n, lca);
 872 
 873             // Disconnect the phi now. An empty phi can confuse other
 874             // optimizations in this pass of loop opts..
 875             if (phi->in(LoopNode::LoopBackControl) == phi) {
 876               _igvn.replace_node(phi, phi->in(LoopNode::EntryControl));
 877               n_loop->_body.yank(phi);
 878             }
 879           }
 880         }
 881       }
 882     }
 883   }
 884 }
 885 
 886 //------------------------------split_if_with_blocks_pre-----------------------
 887 // Do the real work in a non-recursive function.  Data nodes want to be
 888 // cloned in the pre-order so they can feed each other nicely.
 889 Node *PhaseIdealLoop::split_if_with_blocks_pre( Node *n ) {





 890   // Cloning these guys is unlikely to win
 891   int n_op = n->Opcode();
 892   if( n_op == Op_MergeMem ) return n;
 893   if( n->is_Proj() ) return n;
 894   // Do not clone-up CmpFXXX variations, as these are always
 895   // followed by a CmpI
 896   if( n->is_Cmp() ) return n;
 897   // Attempt to use a conditional move instead of a phi/branch
 898   if( ConditionalMoveLimit > 0 && n_op == Op_Region ) {
 899     Node *cmov = conditional_move( n );
 900     if( cmov ) return cmov;
 901   }
 902   if( n->is_CFG() || n->is_LoadStore() )
 903     return n;
 904   if( n_op == Op_Opaque1 ||     // Opaque nodes cannot be mod'd
 905       n_op == Op_Opaque2 ) {
 906     if( !C->major_progress() )   // If chance of no more loop opts...
 907       _igvn._worklist.push(n);  // maybe we'll remove them
 908     return n;
 909   }




 870             _igvn.replace_input_of(n, 0, lca);
 871             set_ctrl_and_loop(n, lca);
 872 
 873             // Disconnect the phi now. An empty phi can confuse other
 874             // optimizations in this pass of loop opts..
 875             if (phi->in(LoopNode::LoopBackControl) == phi) {
 876               _igvn.replace_node(phi, phi->in(LoopNode::EntryControl));
 877               n_loop->_body.yank(phi);
 878             }
 879           }
 880         }
 881       }
 882     }
 883   }
 884 }
 885 
 886 //------------------------------split_if_with_blocks_pre-----------------------
 887 // Do the real work in a non-recursive function.  Data nodes want to be
 888 // cloned in the pre-order so they can feed each other nicely.
 889 Node *PhaseIdealLoop::split_if_with_blocks_pre( Node *n ) {
 890   BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
 891   Node* bs_res = bs->split_if_pre(this, n);
 892   if (bs_res != NULL) {
 893     return bs_res;
 894   }
 895   // Cloning these guys is unlikely to win
 896   int n_op = n->Opcode();
 897   if( n_op == Op_MergeMem ) return n;
 898   if( n->is_Proj() ) return n;
 899   // Do not clone-up CmpFXXX variations, as these are always
 900   // followed by a CmpI
 901   if( n->is_Cmp() ) return n;
 902   // Attempt to use a conditional move instead of a phi/branch
 903   if( ConditionalMoveLimit > 0 && n_op == Op_Region ) {
 904     Node *cmov = conditional_move( n );
 905     if( cmov ) return cmov;
 906   }
 907   if( n->is_CFG() || n->is_LoadStore() )
 908     return n;
 909   if( n_op == Op_Opaque1 ||     // Opaque nodes cannot be mod'd
 910       n_op == Op_Opaque2 ) {
 911     if( !C->major_progress() )   // If chance of no more loop opts...
 912       _igvn._worklist.push(n);  // maybe we'll remove them
 913     return n;
 914   }


< prev index next >