On Wed, Jan 14, 2015 at 3:28 PM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> Hi,
>
> SRA gimple passes may add loads to functions with no SSA update.  Later it 
> causes ICE when function with not updated SSA is processed by gimple passes.  
> This patch fixes it by calling update_ssa.
>
> Bootstrapped and checked on x86_64-unknown-linux-gnu.  OK for trunk?

No.  I have removed this quadratic update-ssa call previously.  It should
simply keep SSA for up-to-date manually (see how it does gimple_set_vuse
in some cases, probably not all required ones?).

Richard.

> Thanks,
> Ilya
> --
> gcc/
>
> 2015-01-14  Ilya Enkovich  <ilya.enkov...@intel.com>
>
>         PR middle-end/64353
>         * ipa-prop.c (ipa_modify_call_arguments): Update SSA for
>         vops after adding a load.
>
>
> gcc/testsuite/
>
> 2015-01-14  Ilya Enkovich  <ilya.enkov...@intel.com>
>
>         PR middle-end/64353
>         * g++.dg/pr64353.C: New.
>
>
> diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
> index 01f4111..533dcfe 100644
> --- a/gcc/ipa-prop.c
> +++ b/gcc/ipa-prop.c
> @@ -4054,6 +4054,8 @@ ipa_modify_call_arguments (struct cgraph_edge *cs, 
> gcall *stmt,
>                     expr = create_tmp_reg (TREE_TYPE (expr));
>                   gimple_assign_set_lhs (tem, expr);
>                   gsi_insert_before (&gsi, tem, GSI_SAME_STMT);
> +                 if (gimple_in_ssa_p (cfun))
> +                   update_ssa (TODO_update_ssa_only_virtuals);
>                 }
>             }
>           else
> diff --git a/gcc/testsuite/g++.dg/pr64353.C b/gcc/testsuite/g++.dg/pr64353.C
> new file mode 100644
> index 0000000..7859918
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/pr64353.C
> @@ -0,0 +1,15 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +
> +class C
> +{
> +  int y, x;
> +  void i ();
> +  bool __attribute__((const)) xx () { return x; }
> +};
> +
> +void C::i ()
> +{
> +  if (xx ())
> +    x = 1;
> +}

Reply via email to