On Mon, May 5, 2025 at 3:42 AM Andrew Pinski <quic_apin...@quicinc.com> wrote: > > As mentioned previously the rewrite in move_stmt should be > using rewrite_to_defined_overflow/gimple_with_undefined_signed_overflow > instead of just rewriting the VCE. > This moves move_stmt over to that. > > A few testcases needed to be updated due to ABS_EXPR rewrite that happens. > > Bootstrapped and tested on x86_64-linux-gnu.
OK. > gcc/ChangeLog: > > * tree-ssa-phiopt.cc (move_stmt): Use rewrite_to_defined_overflow > isntead of manually doing the rewrite of the VCE. > > gcc/testsuite/ChangeLog: > > * gcc.dg/tree-ssa/phi-opt-40.c: Update to expect ABSU_EXPR. > * gcc.dg/tree-ssa/phi-opt-41.c: Likewise. > > Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> > --- > gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c | 7 +++--- > gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c | 4 ++-- > gcc/tree-ssa-phiopt.cc | 26 +++------------------- > 3 files changed, 9 insertions(+), 28 deletions(-) > > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c > b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c > index a9011ce97fb..70629165bb6 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-40.c > @@ -20,6 +20,7 @@ int f1(int x) > > /* { dg-final { scan-tree-dump-times "if " 1 "phiopt1" } } */ > /* { dg-final { scan-tree-dump-not "if " "phiopt2" } } */ > -/* { dg-final { scan-tree-dump-times "ABS_EXPR <" 2 "phiopt1" } } */ > -/* { dg-final { scan-tree-dump-times "ABS_EXPR <" 1 "phiopt2" } } */ > -/* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 1 "phiopt2" } } */ > +/* The ABS_EXPR in f gets rewritten to ABSU_EXPR as phiopt can't prove it > was not undefined when moving it. */ > +/* { dg-final { scan-tree-dump-times "ABS_EXPR <" 1 "phiopt1" } } */ > +/* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 1 "phiopt1" } } */ > +/* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 2 "phiopt2" } } */ > diff --git a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c > b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c > index 9774e283a7b..817d4feb027 100644 > --- a/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c > +++ b/gcc/testsuite/gcc.dg/tree-ssa/phi-opt-41.c > @@ -29,6 +29,6 @@ int fge(int a, unsigned char b) > return a > 0 ? a : -a; > } > > - > +/* The ABS_EXPR gets rewritten to ABSU_EXPR as phiopt can't prove it was not > undefined when moving it. */ > /* { dg-final { scan-tree-dump-not "if " "phiopt1" } } */ > -/* { dg-final { scan-tree-dump-times "ABS_EXPR <" 4 "phiopt1" } } */ > +/* { dg-final { scan-tree-dump-times "ABSU_EXPR <" 4 "phiopt1" } } */ > diff --git a/gcc/tree-ssa-phiopt.cc b/gcc/tree-ssa-phiopt.cc > index 54ecd93495a..5c7dcee19d1 100644 > --- a/gcc/tree-ssa-phiopt.cc > +++ b/gcc/tree-ssa-phiopt.cc > @@ -838,33 +838,13 @@ move_stmt (gimple *stmt, gimple_stmt_iterator *gsi, > auto_bitmap &inserted_exprs) > // Mark the name to be renamed if there is one. > bitmap_set_bit (inserted_exprs, SSA_NAME_VERSION (name)); > gimple_stmt_iterator gsi1 = gsi_for_stmt (stmt); > - gsi_move_before (&gsi1, gsi); > + gsi_move_before (&gsi1, gsi, GSI_NEW_STMT); > reset_flow_sensitive_info (name); > > /* Rewrite some code which might be undefined when > unconditionalized. */ > - if (gimple_assign_single_p (stmt)) > - { > - tree rhs = gimple_assign_rhs1 (stmt); > - /* VCE from integral types to another integral types but with > - different precisions need to be changed into casts > - to be well defined when unconditional. */ > - if (gimple_assign_rhs_code (stmt) == VIEW_CONVERT_EXPR > - && INTEGRAL_TYPE_P (TREE_TYPE (name)) > - && INTEGRAL_TYPE_P (TREE_TYPE (TREE_OPERAND (rhs, 0)))) > - { > - if (dump_file && (dump_flags & TDF_DETAILS)) > - { > - fprintf (dump_file, "rewriting stmt with maybe undefined VCE "); > - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); > - } > - tree new_rhs = TREE_OPERAND (rhs, 0); > - gcc_assert (is_gimple_val (new_rhs)); > - gimple_assign_set_rhs_code (stmt, NOP_EXPR); > - gimple_assign_set_rhs1 (stmt, new_rhs); > - update_stmt (stmt); > - } > - } > + if (gimple_with_undefined_signed_overflow (stmt)) > + rewrite_to_defined_overflow (gsi); > } > > /* RAII style class to temporarily remove flow sensitive > -- > 2.34.1 >