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
>

Reply via email to