Message ID | 20160513090353.GB14664@msticlxl57.ims.intel.com |
---|---|
State | New |
Headers | show |
On Fri, May 13, 2016 at 11:03 AM, Ilya Enkovich <enkovich.gnu@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.enkovich@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.enkovich@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;) > + ; > +}
On May 13, 2016 11:50:33 AM GMT+02:00, Richard Biener <richard.guenther@gmail.com> wrote: >On Fri, May 13, 2016 at 11:03 AM, Ilya Enkovich ><enkovich.gnu@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. What about making cleanup_cfg __wur (i.e. warn_unused_result) at least when checking? thanks,
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;) + ; +}