815 CountedLoopNode *cl = NULL; |
815 CountedLoopNode *cl = NULL; |
816 if (head->is_CountedLoop()) { |
816 if (head->is_CountedLoop()) { |
817 cl = head->as_CountedLoop(); |
817 cl = head->as_CountedLoop(); |
818 // do nothing for iteration-splitted loops |
818 // do nothing for iteration-splitted loops |
819 if (!cl->is_normal_loop()) return false; |
819 if (!cl->is_normal_loop()) return false; |
|
820 // Avoid RCE if Counted loop's test is '!='. |
|
821 BoolTest::mask bt = cl->loopexit()->test_trip(); |
|
822 if (bt != BoolTest::lt && bt != BoolTest::gt) |
|
823 cl = NULL; |
820 } |
824 } |
821 |
825 |
822 Node* entry = head->in(LoopNode::EntryControl); |
826 Node* entry = head->in(LoopNode::EntryControl); |
823 ProjNode *predicate_proj = NULL; |
827 ProjNode *predicate_proj = NULL; |
824 // Loop limit check predicate should be near the loop. |
828 // Loop limit check predicate should be near the loop. |
956 _igvn.hash_delete(lower_bound_iff); |
960 _igvn.hash_delete(lower_bound_iff); |
957 lower_bound_iff->set_req(1, lower_bound_bol); |
961 lower_bound_iff->set_req(1, lower_bound_bol); |
958 if (TraceLoopPredicate) tty->print_cr("lower bound check if: %d", lower_bound_iff->_idx); |
962 if (TraceLoopPredicate) tty->print_cr("lower bound check if: %d", lower_bound_iff->_idx); |
959 |
963 |
960 // Test the upper bound |
964 // Test the upper bound |
961 Node* upper_bound_bol = rc_predicate(loop, ctrl, scale, offset, init, limit, stride, rng, true); |
965 Node* upper_bound_bol = rc_predicate(loop, lower_bound_proj, scale, offset, init, limit, stride, rng, true); |
962 IfNode* upper_bound_iff = upper_bound_proj->in(0)->as_If(); |
966 IfNode* upper_bound_iff = upper_bound_proj->in(0)->as_If(); |
963 _igvn.hash_delete(upper_bound_iff); |
967 _igvn.hash_delete(upper_bound_iff); |
964 upper_bound_iff->set_req(1, upper_bound_bol); |
968 upper_bound_iff->set_req(1, upper_bound_bol); |
965 if (TraceLoopPredicate) tty->print_cr("upper bound check if: %d", lower_bound_iff->_idx); |
969 if (TraceLoopPredicate) tty->print_cr("upper bound check if: %d", lower_bound_iff->_idx); |
966 |
970 |