On Mon, 25 Feb 2013, Marek Polacek wrote:

> This fixes PR56426.  We were ICEing during the loop pipeline,
> because copyprop changed an irreducible region into a reducible - thus
> the number_of_loops grew.  Firstly, in tree_ssa_loop_init, number_of_loops
> was == 1, which means we didn't initialize SCEV.  But then later on, in
> tree_ssa_loop_bounds, the number_of_loops was 2, thus we called
> estimate_numbers_of_iterations.  Oops.  So fixed by always initializing
> SCEV in the loop initialization on the tree level.
> 
> Another approach would be to skip the whole loop pipeline - but then
> we'd miss e.g. the BB vectorization.
> 
> Richi: no, I didn't forget to change the TODO_update_ssa to 0, but that 
> ICEd pretty soon when building gcc :(.

Eh ... ;)  Ok, just forget that part then (update_ssa asserts it
get's a valid update flag and rewrite_into_loop_closed_ssa calls
update_ssa unconditionally) - it won't do anything if
!need_ssa_update_p anyway, just at this point it really should
never do anything.

> Regtested/bootstrapped on x86_64-linux, ok for trunk?

Ok.

Thanks,
Richard.

> 2013-02-25  Marek Polacek  <pola...@redhat.com>
> 
>       PR tree-optimization/56426
>       * tree-ssa-loop.c (tree_ssa_loop_init): Always call
>       scev_initialize.
> 
>       * gcc.dg/pr56436.c: New test.
> 
> --- gcc/tree-ssa-loop.c.mp    2013-02-25 13:06:47.212132327 +0100
> +++ gcc/tree-ssa-loop.c       2013-02-25 20:09:30.668978936 +0100
> @@ -70,10 +70,13 @@ tree_ssa_loop_init (void)
>                      | LOOPS_HAVE_RECORDED_EXITS);
>    rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
>  
> +  /* We might discover new loops, e.g. when turning irreducible
> +     regions into reducible.  */
> +  scev_initialize ();
> +
>    if (number_of_loops () <= 1)
>      return 0;
>  
> -  scev_initialize ();
>    return 0;
>  }
>  
> --- gcc/testsuite/gcc.dg/pr56436.c.mp 2013-02-25 20:19:10.213561026 +0100
> +++ gcc/testsuite/gcc.dg/pr56436.c    2013-02-25 20:19:02.944541180 +0100
> @@ -0,0 +1,22 @@
> +/* PR tree-optimization/56426 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +
> +int a, *c;
> +
> +void
> +f (void)
> +{
> +  int b = 0;
> +
> +  for (a = 0;; a++)
> +    if (--b)
> +      {
> +     if (a)
> +     lbl:
> +       a++;
> +
> +     c = &b;
> +     goto lbl;
> +      }
> +}
> 
>       Marek
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746
GF: Jeff Hawn, Jennifer Guild, Felix Imend

Reply via email to