src/share/vm/opto/loopopts.cpp
Print this page
@@ -344,11 +344,14 @@
if( n_loop == add_invar_loop || !add_invar_loop->is_member( n_loop ) )
return NULL; // No invariant part of the add?
// Yes! Reshape address expression!
Node *inv_scale = new (C, 3) LShiftINode( add_invar, scale );
- register_new_node( inv_scale, add_invar_ctrl );
+ Node *inv_scale_ctrl =
+ dom_depth(add_invar_ctrl) > dom_depth(scale_ctrl) ?
+ add_invar_ctrl : scale_ctrl;
+ register_new_node( inv_scale, inv_scale_ctrl );
Node *var_scale = new (C, 3) LShiftINode( add_var, scale );
register_new_node( var_scale, n_ctrl );
Node *var_add = new (C, 3) AddINode( var_scale, inv_scale );
register_new_node( var_add, n_ctrl );
_igvn.hash_delete( n );