3247 return false; |
3247 return false; |
3248 |
3248 |
3249 // Clean out prior deadwood |
3249 // Clean out prior deadwood |
3250 DCE_loop_body(); |
3250 DCE_loop_body(); |
3251 |
3251 |
3252 |
|
3253 // Look for loop-exit tests with my 50/50 guesses from the Parsing stage. |
3252 // Look for loop-exit tests with my 50/50 guesses from the Parsing stage. |
3254 // Replace with a 1-in-10 exit guess. |
3253 // Replace with a 1-in-10 exit guess. |
3255 if (_parent /*not the root loop*/ && |
3254 if (!is_root() && is_loop()) { |
3256 !_irreducible && |
|
3257 // Also ignore the occasional dead backedge |
|
3258 !tail()->is_top()) { |
|
3259 adjust_loop_exit_prob(phase); |
3255 adjust_loop_exit_prob(phase); |
3260 } |
3256 } |
3261 |
3257 |
3262 // Gate unrolling, RCE and peeling efforts. |
3258 // Unrolling, RCE and peeling efforts, iff innermost loop. |
3263 if (!_child && // If not an inner loop, do not split |
3259 if (_allow_optimizations && is_innermost()) { |
3264 !_irreducible && |
|
3265 _allow_optimizations && |
|
3266 !tail()->is_top()) { // Also ignore the occasional dead backedge |
|
3267 if (!_has_call) { |
3260 if (!_has_call) { |
3268 if (!iteration_split_impl(phase, old_new)) { |
3261 if (!iteration_split_impl(phase, old_new)) { |
3269 return false; |
3262 return false; |
3270 } |
3263 } |
3271 } else if (policy_unswitching(phase)) { |
3264 } else if (policy_unswitching(phase)) { |
3272 phase->do_unswitching(this, old_new); |
3265 phase->do_unswitching(this, old_new); |
3273 } |
3266 } |
3274 } |
3267 } |
3275 |
3268 |
3538 |
3531 |
3539 |
3532 |
3540 |
3533 |
3541 bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) { |
3534 bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) { |
3542 // Only for counted inner loops |
3535 // Only for counted inner loops |
3543 if (!lpt->is_counted() || !lpt->is_inner()) { |
3536 if (!lpt->is_counted() || !lpt->is_innermost()) { |
3544 return false; |
3537 return false; |
3545 } |
3538 } |
3546 |
3539 |
3547 // Must have constant stride |
3540 // Must have constant stride |
3548 CountedLoopNode* head = lpt->_head->as_CountedLoop(); |
3541 CountedLoopNode* head = lpt->_head->as_CountedLoop(); |