On Wed, Jan 15, 2020 at 10:57 AM Martin Liška <mli...@suse.cz> wrote:
>
> Hi.
>
> The patch is about caching of outer non-CLEANUP region
> for a leh_state. It's a spin off the
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93199#c19,
> now it's not using a hash_map, but a cached value in leh_state.
>
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?

+
+  eh_region reg = state->cur_region;

shouldn't that be reg = state->outer_non_cleanup?

-  if (using_eh_for_cleanups_p () && !cleanup_is_dead_in (state->cur_region))
+  if (using_eh_for_cleanups_p () && !cleanup_is_dead_in (state))
     {
       this_tf.region = gen_eh_region_cleanup (state->cur_region);
       this_state.cur_region = this_tf.region;
+      this_state.outer_non_cleanup = state->outer_non_cleanup;
     }
   else
     {
       this_tf.region = NULL;
       this_state.cur_region = state->cur_region;
+      this_state.outer_non_cleanup = this_state.cur_region;

why can't we copy state->outer_non_cleanup here?

     }


> Thanks,
> Martin
>
> gcc/ChangeLog:
>
> 2020-01-14  Martin Liska  <mli...@suse.cz>
>
>         PR tree-optimization/93199
>         * tree-eh.c (struct leh_state): Add
>         new field outer_non_cleanup.
>         (cleanup_is_dead_in): Pass leh_state instead
>         of eh_region.  Add a checking that state->outer_non_cleanup
>         points to outer non-clean up region.
>         (lower_try_finally): Record outer_non_cleanup
>         for this_state.
>         (lower_catch): Likewise.
>         (lower_eh_filter): Likewise.
>         (lower_eh_must_not_throw): Likewise.
>         (lower_cleanup): Likewise.
> ---
>   gcc/tree-eh.c | 31 +++++++++++++++++++++++++------
>   1 file changed, 25 insertions(+), 6 deletions(-)
>
>

Reply via email to