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

src/share/vm/opto/loopPredicate.cpp

Print this page

        

*** 815,824 **** --- 815,828 ---- CountedLoopNode *cl = NULL; if (head->is_CountedLoop()) { cl = head->as_CountedLoop(); // do nothing for iteration-splitted loops if (!cl->is_normal_loop()) return false; + // Avoid RCE if Counted loop's test is '!='. + BoolTest::mask bt = cl->loopexit()->test_trip(); + if (bt != BoolTest::lt && bt != BoolTest::gt) + cl = NULL; } Node* entry = head->in(LoopNode::EntryControl); ProjNode *predicate_proj = NULL; // Loop limit check predicate should be near the loop.
*** 956,966 **** _igvn.hash_delete(lower_bound_iff); lower_bound_iff->set_req(1, lower_bound_bol); if (TraceLoopPredicate) tty->print_cr("lower bound check if: %d", lower_bound_iff->_idx); // Test the upper bound ! Node* upper_bound_bol = rc_predicate(loop, ctrl, scale, offset, init, limit, stride, rng, true); IfNode* upper_bound_iff = upper_bound_proj->in(0)->as_If(); _igvn.hash_delete(upper_bound_iff); upper_bound_iff->set_req(1, upper_bound_bol); if (TraceLoopPredicate) tty->print_cr("upper bound check if: %d", lower_bound_iff->_idx); --- 960,970 ---- _igvn.hash_delete(lower_bound_iff); lower_bound_iff->set_req(1, lower_bound_bol); if (TraceLoopPredicate) tty->print_cr("lower bound check if: %d", lower_bound_iff->_idx); // Test the upper bound ! Node* upper_bound_bol = rc_predicate(loop, lower_bound_proj, scale, offset, init, limit, stride, rng, true); IfNode* upper_bound_iff = upper_bound_proj->in(0)->as_If(); _igvn.hash_delete(upper_bound_iff); upper_bound_iff->set_req(1, upper_bound_bol); if (TraceLoopPredicate) tty->print_cr("upper bound check if: %d", lower_bound_iff->_idx);
src/share/vm/opto/loopPredicate.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File