8203215: IdealLoopTree::split_outer_loop leaves phi-nodes with only one input
Make sure the phis are transformed Reviewed-by: roland, kvn, rbackman
This commit is contained in:
parent
c2b147225c
commit
fbbbc35d32
@ -2641,9 +2641,6 @@ void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts)
|
|||||||
int old_progress = C->major_progress();
|
int old_progress = C->major_progress();
|
||||||
uint orig_worklist_size = _igvn._worklist.size();
|
uint orig_worklist_size = _igvn._worklist.size();
|
||||||
|
|
||||||
// Reset major-progress flag for the driver's heuristics
|
|
||||||
C->clear_major_progress();
|
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifndef PRODUCT
|
||||||
// Capture for later assert
|
// Capture for later assert
|
||||||
uint unique = C->unique();
|
uint unique = C->unique();
|
||||||
@ -2714,11 +2711,16 @@ void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts)
|
|||||||
if( !_verify_me && !_verify_only && _ltree_root->_child ) {
|
if( !_verify_me && !_verify_only && _ltree_root->_child ) {
|
||||||
C->print_method(PHASE_BEFORE_BEAUTIFY_LOOPS, 3);
|
C->print_method(PHASE_BEFORE_BEAUTIFY_LOOPS, 3);
|
||||||
if( _ltree_root->_child->beautify_loops( this ) ) {
|
if( _ltree_root->_child->beautify_loops( this ) ) {
|
||||||
|
// IdealLoopTree::split_outer_loop may produce phi-nodes with a single in edge.
|
||||||
|
// Transform them away.
|
||||||
|
_igvn.optimize();
|
||||||
|
|
||||||
// Re-build loop tree!
|
// Re-build loop tree!
|
||||||
_ltree_root->_child = NULL;
|
_ltree_root->_child = NULL;
|
||||||
_nodes.clear();
|
_nodes.clear();
|
||||||
reallocate_preorders();
|
reallocate_preorders();
|
||||||
build_loop_tree();
|
build_loop_tree();
|
||||||
|
|
||||||
// Check for bailout, and return
|
// Check for bailout, and return
|
||||||
if (C->failing()) {
|
if (C->failing()) {
|
||||||
return;
|
return;
|
||||||
@ -2730,6 +2732,9 @@ void PhaseIdealLoop::build_and_optimize(bool do_split_ifs, bool skip_loop_opts)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reset major-progress flag for the driver's heuristics
|
||||||
|
C->clear_major_progress();
|
||||||
|
|
||||||
// Build Dominators for elision of NULL checks & loop finding.
|
// Build Dominators for elision of NULL checks & loop finding.
|
||||||
// Since nodes do not have a slot for immediate dominator, make
|
// Since nodes do not have a slot for immediate dominator, make
|
||||||
// a persistent side array for that info indexed on node->_idx.
|
// a persistent side array for that info indexed on node->_idx.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user