mirror of git://gcc.gnu.org/git/gcc.git
ifcombine: factor out inner block viability test
Bail out early if the inner block has side effects or is otherwise not eligible for ifcombine. for gcc/ChangeLog * tree-ssa-ifcombine.c (tree_ssa_ifcombine_bb_1): Factor out bb_no_side_effects_p tests... (tree_ssa_ifcombine_bb): ... here. From-SVN: r229691
This commit is contained in:
parent
828ca3d835
commit
067339d220
|
|
@ -1,5 +1,9 @@
|
||||||
2015-11-02 Alexandre Oliva <aoliva@redhat.com>
|
2015-11-02 Alexandre Oliva <aoliva@redhat.com>
|
||||||
|
|
||||||
|
* tree-ssa-ifcombine.c (tree_ssa_ifcombine_bb_1): Factor out
|
||||||
|
bb_no_side_effects_p tests...
|
||||||
|
(tree_ssa_ifcombine_bb): ... here.
|
||||||
|
|
||||||
PR tree-optimization/68083
|
PR tree-optimization/68083
|
||||||
* tree-ssa-ifcombine.c: Include tree-ssa.h.
|
* tree-ssa-ifcombine.c: Include tree-ssa.h.
|
||||||
(bb_no_side_effects_p): Test for undefined uses too.
|
(bb_no_side_effects_p): Test for undefined uses too.
|
||||||
|
|
|
||||||
|
|
@ -576,8 +576,7 @@ tree_ssa_ifcombine_bb_1 (basic_block inner_cond_bb, basic_block outer_cond_bb,
|
||||||
the inner cond_bb having no side-effects. */
|
the inner cond_bb having no side-effects. */
|
||||||
if (phi_pred_bb != else_bb
|
if (phi_pred_bb != else_bb
|
||||||
&& recognize_if_then_else (outer_cond_bb, &inner_cond_bb, &else_bb)
|
&& recognize_if_then_else (outer_cond_bb, &inner_cond_bb, &else_bb)
|
||||||
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, else_bb)
|
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, else_bb))
|
||||||
&& bb_no_side_effects_p (inner_cond_bb))
|
|
||||||
{
|
{
|
||||||
/* We have
|
/* We have
|
||||||
<outer_cond_bb>
|
<outer_cond_bb>
|
||||||
|
|
@ -595,8 +594,7 @@ tree_ssa_ifcombine_bb_1 (basic_block inner_cond_bb, basic_block outer_cond_bb,
|
||||||
/* And a version where the outer condition is negated. */
|
/* And a version where the outer condition is negated. */
|
||||||
if (phi_pred_bb != else_bb
|
if (phi_pred_bb != else_bb
|
||||||
&& recognize_if_then_else (outer_cond_bb, &else_bb, &inner_cond_bb)
|
&& recognize_if_then_else (outer_cond_bb, &else_bb, &inner_cond_bb)
|
||||||
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, else_bb)
|
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, else_bb))
|
||||||
&& bb_no_side_effects_p (inner_cond_bb))
|
|
||||||
{
|
{
|
||||||
/* We have
|
/* We have
|
||||||
<outer_cond_bb>
|
<outer_cond_bb>
|
||||||
|
|
@ -617,8 +615,7 @@ tree_ssa_ifcombine_bb_1 (basic_block inner_cond_bb, basic_block outer_cond_bb,
|
||||||
having no side-effects. */
|
having no side-effects. */
|
||||||
if (phi_pred_bb != then_bb
|
if (phi_pred_bb != then_bb
|
||||||
&& recognize_if_then_else (outer_cond_bb, &then_bb, &inner_cond_bb)
|
&& recognize_if_then_else (outer_cond_bb, &then_bb, &inner_cond_bb)
|
||||||
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, then_bb)
|
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, then_bb))
|
||||||
&& bb_no_side_effects_p (inner_cond_bb))
|
|
||||||
{
|
{
|
||||||
/* We have
|
/* We have
|
||||||
<outer_cond_bb>
|
<outer_cond_bb>
|
||||||
|
|
@ -635,8 +632,7 @@ tree_ssa_ifcombine_bb_1 (basic_block inner_cond_bb, basic_block outer_cond_bb,
|
||||||
/* And a version where the outer condition is negated. */
|
/* And a version where the outer condition is negated. */
|
||||||
if (phi_pred_bb != then_bb
|
if (phi_pred_bb != then_bb
|
||||||
&& recognize_if_then_else (outer_cond_bb, &inner_cond_bb, &then_bb)
|
&& recognize_if_then_else (outer_cond_bb, &inner_cond_bb, &then_bb)
|
||||||
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, then_bb)
|
&& same_phi_args_p (outer_cond_bb, phi_pred_bb, then_bb))
|
||||||
&& bb_no_side_effects_p (inner_cond_bb))
|
|
||||||
{
|
{
|
||||||
/* We have
|
/* We have
|
||||||
<outer_cond_bb>
|
<outer_cond_bb>
|
||||||
|
|
@ -673,7 +669,8 @@ tree_ssa_ifcombine_bb (basic_block inner_cond_bb)
|
||||||
if (a && b)
|
if (a && b)
|
||||||
;
|
;
|
||||||
This requires a single predecessor of the inner cond_bb. */
|
This requires a single predecessor of the inner cond_bb. */
|
||||||
if (single_pred_p (inner_cond_bb))
|
if (single_pred_p (inner_cond_bb)
|
||||||
|
&& bb_no_side_effects_p (inner_cond_bb))
|
||||||
{
|
{
|
||||||
basic_block outer_cond_bb = single_pred (inner_cond_bb);
|
basic_block outer_cond_bb = single_pred (inner_cond_bb);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue