On 1/15/20 12:08 PM, Richard Biener wrote:
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;
Huh, stupid mistake.
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?
We can, I'm re-testing that patch.
Martin
}
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(-)