On Thu, 4 Jan 2018, Jakub Jelinek wrote:

> Hi!
> 
> While the testcase could be perhaps handled with some extra effort (the
> issue there is just CSE of an early possibly throwing trapping addition,
> so maybe_cleanup_or_replace_eh_stmt + gimple_purge_dead_eh_edges +
> TODO_cleanup_cfg might do the job, but I'm afraid the pass wouldn't know
> what to do if it rewrites some arithmetics as a different one where
> EH edges would need to be added etc.
> 
> So, instead this patch just punts with -fnon-call-exceptions and possibly
> throwing statements.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok.

Richard.

> If later on we find something where it will be worthwhile to spend time on
> this, it can be easily reverted together with the full support for that.
> 
> 2018-01-04  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/83605
>       * gimple-ssa-strength-reduction.c: Include tree-eh.h.
>       (find_candidates_dom_walker::before_dom_children): Ignore stmts that
>       can throw.
> 
>       * gcc.dg/pr83605.c: New test.
> 
> --- gcc/gimple-ssa-strength-reduction.c.jj    2018-01-03 10:19:54.000000000 
> +0100
> +++ gcc/gimple-ssa-strength-reduction.c       2018-01-04 10:39:48.273512779 
> +0100
> @@ -55,6 +55,7 @@ along with GCC; see the file COPYING3.
>  #include "params.h"
>  #include "tree-ssa-address.h"
>  #include "tree-affine.h"
> +#include "tree-eh.h"
>  #include "builtins.h"
>  
>  /* Information about a strength reduction candidate.  Each statement
> @@ -1747,6 +1748,9 @@ find_candidates_dom_walker::before_dom_c
>      {
>        gimple *gs = gsi_stmt (gsi);
>  
> +      if (stmt_could_throw_p (gs))
> +     continue;
> +
>        if (gimple_vuse (gs) && gimple_assign_single_p (gs))
>       slsr_process_ref (gs);
>  
> --- gcc/testsuite/gcc.dg/pr83605.c.jj 2018-01-04 10:35:20.874481057 +0100
> +++ gcc/testsuite/gcc.dg/pr83605.c    2018-01-04 10:35:01.972479109 +0100
> @@ -0,0 +1,20 @@
> +/* PR tree-optimization/83605 */
> +/* { dg-do compile } */
> +/* { dg-options "-O1 -ftrapv -fexceptions -fnon-call-exceptions" } */
> +
> +int a;
> +
> +int
> +foo (int x)
> +{
> +  int b = a;
> +  {
> +    int c;
> +    int *d = (x == 0) ? &c : &b;
> +
> +    for (a = 0; a < 2; ++a)
> +      c = (x + b) < a;
> +
> +    return *d;
> +  }
> +}
> 
>       Jakub
> 
> 

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

Reply via email to