aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-eh.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2009-04-08 17:13:01 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2009-04-08 15:13:01 +0000
commit6d07ad98760362cd9615c673cf8302908ce60980 (patch)
treedde23269eb49d700833365c7340d997fe20ae49d /gcc/tree-eh.c
parent7ddf71e3171fb2d809e7baf6a94c9243b8d9fcac (diff)
downloadgcc-6d07ad98760362cd9615c673cf8302908ce60980.zip
gcc-6d07ad98760362cd9615c673cf8302908ce60980.tar.gz
gcc-6d07ad98760362cd9615c673cf8302908ce60980.tar.bz2
tree-eh.c (cleanup_eh): When not optimizing, do not try EH merging.
* tree-eh.c (cleanup_eh): When not optimizing, do not try EH merging. * function.h (rtl_eh): Remove exception_handler_label_map. * except.c (ehl_hash, ehl_eq, add_ehl_entry, remove_exception_handler_label, for_each_eh_label_1): Remove. (rtl_remove_unreachable_regions): Remove. (convert_from_eh_region_ranges): Do not remove unreachable regions. (find_exception_handler_labels): Don't build the hashtable. (maybe_remove_eh_handler): Remove. (for_each_eh_label): Rewrite to walk the tree. (rest_of_handle_eh): Do not cleanup cfg prior EH construction. * except.h (maybe_remove_eh_handler): Remove. * passes.c (init_optimization_passes): Schedule second EH cleanup before out-of-ssa. * cfgrtl.c (rtl_delete_block, rtl_merge_blocks, cfg_layout_merge_blocks): Do not call maybe_remove_eh_handler. From-SVN: r145747
Diffstat (limited to 'gcc/tree-eh.c')
-rw-r--r--gcc/tree-eh.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c
index 7f04068..bc93ee1 100644
--- a/gcc/tree-eh.c
+++ b/gcc/tree-eh.c
@@ -3121,23 +3121,26 @@ cleanup_eh (void)
dump_eh_tree (dump_file, cfun);
}
- dominance_info_invalidated = false;
- /* We cannot use FOR_EACH_BB, since the basic blocks may get removed. */
- for (i = NUM_FIXED_BLOCKS; i < last_basic_block; i++)
+ if (optimize)
{
- bb = BASIC_BLOCK (i);
- if (bb)
- changed |= cleanup_empty_eh (bb);
- }
- if (dominance_info_invalidated)
- {
- free_dominance_info (CDI_DOMINATORS);
- free_dominance_info (CDI_POST_DOMINATORS);
- }
+ dominance_info_invalidated = false;
+ /* We cannot use FOR_EACH_BB, since the basic blocks may get removed. */
+ for (i = NUM_FIXED_BLOCKS; i < last_basic_block; i++)
+ {
+ bb = BASIC_BLOCK (i);
+ if (bb)
+ changed |= cleanup_empty_eh (bb);
+ }
+ if (dominance_info_invalidated)
+ {
+ free_dominance_info (CDI_DOMINATORS);
+ free_dominance_info (CDI_POST_DOMINATORS);
+ }
- /* Removing contained cleanup can render MUST_NOT_THROW regions empty. */
- if (changed)
- delete_unreachable_blocks ();
+ /* Removing contained cleanup can render MUST_NOT_THROW regions empty. */
+ if (changed)
+ delete_unreachable_blocks ();
+ }
tree_remove_unreachable_handlers ();
if (dump_file)