On Fri, Jul 9, 2021 at 10:05 PM apinski--- via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > From: Andrew Pinski <apin...@marvell.com> > > Instead of waiting for DCE to remove the unused statement, > and maybe optimize another conditional, it is better if > we don't move the statement and have the statement > removed. > > OK? Bootstrapped and tested on x86_64-linux-gnu.
OK. Thanks, Richard. > Changes from v1: > * v2: Change the order of insertation and check to see if the lhs > is used rather than see if the lhs was used in the sequence. > > gcc/ChangeLog: > > * tree-ssa-phiopt.c (match_simplify_replacement): Move > insert of the sequence before the movement of the > statement. Check if to see if the statement is used > outside of the original phi to see if we should move it. > > gcc/testsuite/ChangeLog: > > * gcc.dg/tree-ssa/pr96928-1.c: Update to similar as pr96928.c. > --- > gcc/testsuite/gcc.dg/tree-ssa/pr96928-1.c | 5 ++++- > gcc/tree-ssa-phiopt.c | 13 ++++++++++--- > 2 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr96928-1.c > b/gcc/testsuite/gcc.dg/tree-ssa/pr96928-1.c > index 2e86620da11..9e505ac9900 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/pr96928-1.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/pr96928-1.c > @@ -2,7 +2,10 @@ > /* { dg-do compile } */ > /* { dg-options "-O2 -fdump-tree-phiopt2 -fdump-tree-optimized" } */ > /* { dg-final { scan-tree-dump-times " = a_\[0-9]*\\\(D\\\) >> " 5 "phiopt2" > } } */ > -/* { dg-final { scan-tree-dump-times " = ~c_\[0-9]*\\\(D\\\);" 1 "phiopt2" } > } */ > +/* The following check is done at optimized because a ^ (~b) is rewritten as > ~(a^b) > + and in the case of match.pd optimizing these ?:, the ~ is moved out > already > + by the time we get to phiopt2. */ > +/* { dg-final { scan-tree-dump-times "c_\[0-9]*\\\(D\\\) \\\^" 1 "optimized" > } } */ > /* { dg-final { scan-tree-dump-times " = ~" 1 "optimized" } } */ > /* { dg-final { scan-tree-dump-times " = \[abc_0-9\\\(\\\)D]* \\\^ " 5 > "phiopt2" } } */ > /* { dg-final { scan-tree-dump-not "a < 0" "phiopt2" } } */ > diff --git a/gcc/tree-ssa-phiopt.c b/gcc/tree-ssa-phiopt.c > index 7a98b7afdf1..c6adbbd28a0 100644 > --- a/gcc/tree-ssa-phiopt.c > +++ b/gcc/tree-ssa-phiopt.c > @@ -1020,7 +1020,16 @@ match_simplify_replacement (basic_block cond_bb, > basic_block middle_bb, > return false; > > gsi = gsi_last_bb (cond_bb); > - if (stmt_to_move) > + /* Insert the sequence generated from gimple_simplify_phiopt. */ > + if (seq) > + gsi_insert_seq_before (&gsi, seq, GSI_CONTINUE_LINKING); > + > + /* If there was a statement to move and the result of the statement > + is going to be used, move it to right before the original > + conditional. */ > + if (stmt_to_move > + && (gimple_assign_lhs (stmt_to_move) == result > + || !has_single_use (gimple_assign_lhs (stmt_to_move)))) > { > if (dump_file && (dump_flags & TDF_DETAILS)) > { > @@ -1032,8 +1041,6 @@ match_simplify_replacement (basic_block cond_bb, > basic_block middle_bb, > gsi_move_before (&gsi1, &gsi); > reset_flow_sensitive_info (gimple_assign_lhs (stmt_to_move)); > } > - if (seq) > - gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT); > > replace_phi_edge_with_variable (cond_bb, e1, phi, result); > > -- > 2.27.0 >