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(-) > >