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

src/share/vm/opto/loopTransform.cpp

Print this page

        

*** 507,524 **** // Do this by making the old-loop fall-in edges act as if they came // around the loopback from the prior iteration (follow the old-loop // backedges) and then map to the new peeled iteration. This leaves // the pre-loop with only 1 user (the new peeled iteration), but the // peeled-loop backedge has 2 users. ! Node* new_exit_value = old_new[head->in(LoopNode::LoopBackControl)->_idx]; ! new_exit_value = move_loop_predicates(entry, new_exit_value, !counted_loop); _igvn.hash_delete(head); ! head->set_req(LoopNode::EntryControl, new_exit_value); for (DUIterator_Fast jmax, j = head->fast_outs(jmax); j < jmax; j++) { Node* old = head->fast_out(j); if (old->in(0) == loop->_head && old->req() == 3 && old->is_Phi()) { ! new_exit_value = old_new[old->in(LoopNode::LoopBackControl)->_idx]; if (!new_exit_value ) // Backedge value is ALSO loop invariant? // Then loop body backedge value remains the same. new_exit_value = old->in(LoopNode::LoopBackControl); _igvn.hash_delete(old); old->set_req(LoopNode::EntryControl, new_exit_value); --- 507,523 ---- // Do this by making the old-loop fall-in edges act as if they came // around the loopback from the prior iteration (follow the old-loop // backedges) and then map to the new peeled iteration. This leaves // the pre-loop with only 1 user (the new peeled iteration), but the // peeled-loop backedge has 2 users. ! Node* new_entry = old_new[head->in(LoopNode::LoopBackControl)->_idx]; _igvn.hash_delete(head); ! head->set_req(LoopNode::EntryControl, new_entry); for (DUIterator_Fast jmax, j = head->fast_outs(jmax); j < jmax; j++) { Node* old = head->fast_out(j); if (old->in(0) == loop->_head && old->req() == 3 && old->is_Phi()) { ! Node* new_exit_value = old_new[old->in(LoopNode::LoopBackControl)->_idx]; if (!new_exit_value ) // Backedge value is ALSO loop invariant? // Then loop body backedge value remains the same. new_exit_value = old->in(LoopNode::LoopBackControl); _igvn.hash_delete(old); old->set_req(LoopNode::EntryControl, new_exit_value);
src/share/vm/opto/loopTransform.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File