From: Alexandre Oliva Date: Tue, 3 Nov 2015 00:31:18 +0000 (+0000) Subject: ifcombine: factor out inner block viability test X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=067339d22029606a24ff31136d5696d56e3e05de;p=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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 84cad3f59b7..63297775ec2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2015-11-02 Alexandre Oliva + * 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 * tree-ssa-ifcombine.c: Include tree-ssa.h. (bb_no_side_effects_p): Test for undefined uses too. diff --git a/gcc/tree-ssa-ifcombine.c b/gcc/tree-ssa-ifcombine.c index c18de7e607e..2a2e38788d7 100644 --- a/gcc/tree-ssa-ifcombine.c +++ b/gcc/tree-ssa-ifcombine.c @@ -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. */ if (phi_pred_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) - && bb_no_side_effects_p (inner_cond_bb)) + && same_phi_args_p (outer_cond_bb, phi_pred_bb, else_bb)) { /* We have @@ -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. */ if (phi_pred_bb != else_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) - && bb_no_side_effects_p (inner_cond_bb)) + && same_phi_args_p (outer_cond_bb, phi_pred_bb, else_bb)) { /* We have @@ -617,8 +615,7 @@ tree_ssa_ifcombine_bb_1 (basic_block inner_cond_bb, basic_block outer_cond_bb, having no side-effects. */ if (phi_pred_bb != then_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) - && bb_no_side_effects_p (inner_cond_bb)) + && same_phi_args_p (outer_cond_bb, phi_pred_bb, then_bb)) { /* We have @@ -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. */ if (phi_pred_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) - && bb_no_side_effects_p (inner_cond_bb)) + && same_phi_args_p (outer_cond_bb, phi_pred_bb, then_bb)) { /* We have @@ -673,7 +669,8 @@ tree_ssa_ifcombine_bb (basic_block inner_cond_bb) if (a && b) ; 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);