On Fri, May 13, 2016 at 11:03 AM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> Hi,
>
> This patch improves cse_cfg_altered computation by taking into account
> cleanup_cfg returned values.  This resolves another case of invalidated
> dominance info.
>
> Bootstrapped and regtested on x86_64-unknown-linux-gnu.  OK for turnk?

Ok.

Thanks,
Richard.

> Thanks,
> Ilya
> --
> gcc/
>
> 2016-05-13  Ilya Enkovich  <ilya.enkov...@intel.com>
>
>         * cse.c (rest_of_handle_cse): Use cleanup_cfg
>         returned value cse_cfg_altered computation.
>         (rest_of_handle_cse2): Likewise.
>         (rest_of_handle_cse_after_global_opts): Likewise.
>
> gcc/testsuite/
>
> 2016-05-13  Ilya Enkovich  <ilya.enkov...@intel.com>
>
>         * gcc.dg/pr71084.c: New test.
>
>
> diff --git a/gcc/cse.c b/gcc/cse.c
> index 04e1a85..322e352 100644
> --- a/gcc/cse.c
> +++ b/gcc/cse.c
> @@ -7562,11 +7562,11 @@ rest_of_handle_cse (void)
>      {
>        timevar_push (TV_JUMP);
>        rebuild_jump_labels (get_insns ());
> -      cleanup_cfg (CLEANUP_CFG_CHANGED);
> +      cse_cfg_altered |= cleanup_cfg (CLEANUP_CFG_CHANGED);
>        timevar_pop (TV_JUMP);
>      }
>    else if (tem == 1 || optimize > 1)
> -    cleanup_cfg (0);
> +    cse_cfg_altered |= cleanup_cfg (0);
>
>    if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS))
>      free_dominance_info (CDI_DOMINATORS);
> @@ -7634,11 +7634,11 @@ rest_of_handle_cse2 (void)
>      {
>        timevar_push (TV_JUMP);
>        rebuild_jump_labels (get_insns ());
> -      cleanup_cfg (CLEANUP_CFG_CHANGED);
> +      cse_cfg_altered |= cleanup_cfg (CLEANUP_CFG_CHANGED);
>        timevar_pop (TV_JUMP);
>      }
>    else if (tem == 1)
> -    cleanup_cfg (0);
> +    cse_cfg_altered |= cleanup_cfg (0);
>
>    if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS))
>      free_dominance_info (CDI_DOMINATORS);
> @@ -7711,11 +7711,11 @@ rest_of_handle_cse_after_global_opts (void)
>      {
>        timevar_push (TV_JUMP);
>        rebuild_jump_labels (get_insns ());
> -      cleanup_cfg (CLEANUP_CFG_CHANGED);
> +      cse_cfg_altered |= cleanup_cfg (CLEANUP_CFG_CHANGED);
>        timevar_pop (TV_JUMP);
>      }
>    else if (tem == 1)
> -    cleanup_cfg (0);
> +    cse_cfg_altered |= cleanup_cfg (0);
>
>    if (cse_cfg_altered && dom_info_available_p (CDI_DOMINATORS))
>      free_dominance_info (CDI_DOMINATORS);
> diff --git a/gcc/testsuite/gcc.dg/pr71084.c b/gcc/testsuite/gcc.dg/pr71084.c
> new file mode 100644
> index 0000000..46fdf9f
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr71084.c
> @@ -0,0 +1,38 @@
> +/* PR tree-optimization/71084 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2" } */
> +
> +void babl_format (void);
> +void gimp_drawable_get_format (void);
> +int _setjmp (void);
> +
> +enum {
> +  GIMP_RGB_IMAGE,
> +  GIMP_RGBA_IMAGE,
> +  GIMP_GRAY_IMAGE,
> +  GIMP_GRAYA_IMAGE,
> +  GIMP_INDEXED_IMAGE
> +} run_i;
> +
> +int run_height;
> +
> +void fn1 ()
> +{
> +  int type, width;
> +  if (_setjmp ())
> +    switch (type)
> +      {
> +      case GIMP_RGB_IMAGE:
> +       babl_format ();
> +      case GIMP_RGBA_IMAGE:
> +      case GIMP_GRAY_IMAGE:
> +       babl_format ();
> +      case GIMP_GRAYA_IMAGE:
> +      case GIMP_INDEXED_IMAGE:
> +       gimp_drawable_get_format();
> +      }
> +  for (; run_height;)
> +    for (; run_i < (long)fn1; ++run_i)
> +      for (; width;)
> +        ;
> +}

Reply via email to