On Tue, 13 Nov 2018, Jakub Jelinek wrote:

> Hi!
> 
> During analysis, we correctly ignore debug stmt uses, but if we don't
> release the ssa name we stopped using, the debug stmts uses are left in the
> IL.  The reset_debug_uses call is needed because the code modifies the
> division stmt in place.  Perhaps better would be not to do that, i.e.
> create a new division and gsi_replace it, then just the release_ssa_name
> would be enough and the generic code could add e.g. the 1.0 / _1 replacement
> for the debug stmt?

Yeah, that's how we usually deal with this.  I hope the re-use of the
LHS is with the same value?

>  Though, in this particular case the sqrt call is
> optimized away, so it wouldn't make a difference.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk, or
> should I do the gimple_build_assign + gsi_replace change?

I think that would be cleaner.

Richard.

> 2018-11-13  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/87977
>       * tree-ssa-math-opts.c (optimize_recip_sqrt): Call reset_debug_uses
>       on stmt before changing the lhs if !has_other_use.  Formatting fix.
>       Call release_ssa_name (x) if !has_other_use and !delete_div.
> 
>       * gcc.dg/recip_sqrt_mult_1.c: Add -fcompare-debug to dg-options.
>       * gcc.dg/recip_sqrt_mult_2.c: Likewise.
>       * gcc.dg/recip_sqrt_mult_3.c: Likewise.
>       * gcc.dg/recip_sqrt_mult_4.c: Likewise.
>       * gcc.dg/recip_sqrt_mult_5.c: Likewise.
> 
> --- gcc/tree-ssa-math-opts.c.jj       2018-10-23 10:13:22.640922226 +0200
> +++ gcc/tree-ssa-math-opts.c  2018-11-12 16:55:45.468734060 +0100
> @@ -652,6 +652,8 @@ optimize_recip_sqrt (gimple_stmt_iterato
>         print_gimple_stmt (dump_file, stmt, 0, TDF_NONE);
>         fprintf (dump_file, "with new division\n");
>       }
> +      if (!has_other_use)
> +     reset_debug_uses (stmt);
>        gimple_assign_set_lhs (stmt, sqr_ssa_name);
>        gimple_assign_set_rhs2 (stmt, a);
>        fold_stmt_inplace (def_gsi);
> @@ -704,7 +706,7 @@ optimize_recip_sqrt (gimple_stmt_iterato
>  
>        gimple *new_stmt
>       = gimple_build_assign (x, MULT_EXPR,
> -                             orig_sqrt_ssa_name, sqr_ssa_name);
> +                            orig_sqrt_ssa_name, sqr_ssa_name);
>        gsi_insert_after (def_gsi, new_stmt, GSI_NEW_STMT);
>        update_stmt (stmt);
>      }
> @@ -715,6 +717,8 @@ optimize_recip_sqrt (gimple_stmt_iterato
>        gsi_remove (&gsi2, true);
>        release_defs (stmt);
>      }
> +  else
> +    release_ssa_name (x);
>  }
>  
>  /* Look for floating-point divisions among DEF's uses, and try to
> --- gcc/testsuite/gcc.dg/recip_sqrt_mult_1.c.jj       2018-09-11 
> 18:12:24.876207127 +0200
> +++ gcc/testsuite/gcc.dg/recip_sqrt_mult_1.c  2018-11-12 16:57:53.301634244 
> +0100
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-Ofast -fdump-tree-recip" } */
> +/* { dg-options "-Ofast -fdump-tree-recip -fcompare-debug" } */
>  
>  double res, res2, tmp;
>  void
> --- gcc/testsuite/gcc.dg/recip_sqrt_mult_2.c.jj       2018-09-11 
> 18:12:24.876207127 +0200
> +++ gcc/testsuite/gcc.dg/recip_sqrt_mult_2.c  2018-11-12 16:58:01.250503686 
> +0100
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-Ofast -fdump-tree-optimized" } */
> +/* { dg-options "-Ofast -fdump-tree-optimized -fcompare-debug" } */
>  
>  float
>  foo (float a)
> --- gcc/testsuite/gcc.dg/recip_sqrt_mult_3.c.jj       2018-09-11 
> 18:12:24.876207127 +0200
> +++ gcc/testsuite/gcc.dg/recip_sqrt_mult_3.c  2018-11-12 16:58:12.302322133 
> +0100
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-Ofast -fdump-tree-optimized" } */
> +/* { dg-options "-Ofast -fdump-tree-optimized -fcompare-debug" } */
>  
>  double
>  foo (double a)
> --- gcc/testsuite/gcc.dg/recip_sqrt_mult_4.c.jj       2018-09-11 
> 18:12:24.877207110 +0200
> +++ gcc/testsuite/gcc.dg/recip_sqrt_mult_4.c  2018-11-12 16:58:35.748936997 
> +0100
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-Ofast -fdump-tree-recip" } */
> +/* { dg-options "-Ofast -fdump-tree-recip -fcompare-debug" } */
>  
>  /* The main path doesn't have any multiplications.
>     Avoid introducing them in the recip pass.  */
> --- gcc/testsuite/gcc.dg/recip_sqrt_mult_5.c.jj       2018-09-11 
> 18:12:24.875207143 +0200
> +++ gcc/testsuite/gcc.dg/recip_sqrt_mult_5.c  2018-11-12 16:58:41.950835127 
> +0100
> @@ -1,5 +1,5 @@
>  /* { dg-do compile } */
> -/* { dg-options "-Ofast -fdump-tree-recip" } */
> +/* { dg-options "-Ofast -fdump-tree-recip -fcompare-debug" } */
>  
>  /* We want to do the recip_sqrt transformations here there is already
>     a multiplication on the main path.  */
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to