comparison src/share/vm/opto/loopnode.cpp @ 3845:c96c3eb1efae

7068051: SIGSEGV in PhaseIdealLoop::build_loop_late_post Summary: Removed predicate cloning from loop peeling optimization and from split fall-in paths. Reviewed-by: never
author kvn
date Fri, 29 Jul 2011 09:16:29 -0700
parents aacaff365100
children 6987871cfb9b
comparison
equal deleted inserted replaced
3844:ce3e1d4dc416 3845:c96c3eb1efae
1165 Node *ctl = _head->in(LoopNode::EntryControl); 1165 Node *ctl = _head->in(LoopNode::EntryControl);
1166 Node *outer = new (phase->C, 3) LoopNode( ctl, _head->in(outer_idx) ); 1166 Node *outer = new (phase->C, 3) LoopNode( ctl, _head->in(outer_idx) );
1167 outer = igvn.register_new_node_with_optimizer(outer, _head); 1167 outer = igvn.register_new_node_with_optimizer(outer, _head);
1168 phase->set_created_loop_node(); 1168 phase->set_created_loop_node();
1169 1169
1170 Node* pred = phase->clone_loop_predicates(ctl, outer, true);
1171 // Outermost loop falls into '_head' loop 1170 // Outermost loop falls into '_head' loop
1172 _head->set_req(LoopNode::EntryControl, pred); 1171 _head->set_req(LoopNode::EntryControl, outer);
1173 _head->del_req(outer_idx); 1172 _head->del_req(outer_idx);
1174 // Split all the Phis up between '_head' loop and 'outer' loop. 1173 // Split all the Phis up between '_head' loop and 'outer' loop.
1175 for (DUIterator_Fast jmax, j = _head->fast_outs(jmax); j < jmax; j++) { 1174 for (DUIterator_Fast jmax, j = _head->fast_outs(jmax); j < jmax; j++) {
1176 Node *out = _head->fast_out(j); 1175 Node *out = _head->fast_out(j);
1177 if( out->is_Phi() ) { 1176 if( out->is_Phi() ) {