diff options
author | Richard Henderson <rth@redhat.com> | 2002-04-09 17:15:58 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2002-04-09 17:15:58 -0700 |
commit | 6a58eee93d2902617dd413fece780497fa03b4b3 (patch) | |
tree | 3634a27519c3d4e86e699e40edd03e6636c09ae2 /gcc/cfgrtl.c | |
parent | 4fc4e47839a0dcb61bd3ba937e831a0212f468d9 (diff) | |
download | gcc-6a58eee93d2902617dd413fece780497fa03b4b3.zip gcc-6a58eee93d2902617dd413fece780497fa03b4b3.tar.gz gcc-6a58eee93d2902617dd413fece780497fa03b4b3.tar.bz2 |
basic-block.h (flow_delete_block_noexpunge): Declare.
* basic-block.h (flow_delete_block_noexpunge): Declare.
(expunge_block_nocompact): Declare.
* cfg.c (expunge_block_nocompact): Split out from ...
(expunge_block): ... here.
* cfgrtl.c (can_delete_label_p): Don't use exception_handler_labels.
(flow_delete_block_noexpunge): Split out from ...
(flow_delete_block): ... here.
* cfgcleanup.c (delete_unreachable_blocks): Compact while
removing dead blocks.
* except.c (exception_handler_labels): Remove.
(exception_handler_label_map): New.
(struct eh_region): Add aka member.
(mark_ehl_map_entry, mark_ehl_map, free_region): New.
(ehl_hash, ehl_eq, ehl_free, add_ehl_entry): New.
(for_each_eh_label, for_each_eh_label_1): New.
(init_eh): Register exception_handler_label_map.
(free_eh_status): Use free_region.
(find_exception_handler_labels): Use the map, not the list.
(remove_exception_handler_label): Likewise.
(maybe_remove_eh_handler): Likewise.
(remove_eh_handler): Use the region aka bitmap.
* except.h (exception_handler_labels): Remove.
(for_each_eh_label): Declare.
* jump.c (rebuild_jump_labels): Don't check exception_handler_labels.
* loop.c (invalidate_loops_containing_label): New.
(find_and_verify_loops): Use it. Use for_each_eh_label.
* sched-rgn.c (is_cfg_nonregular): Use
current_function_has_exception_handlers.
From-SVN: r52100
Diffstat (limited to 'gcc/cfgrtl.c')
-rw-r--r-- | gcc/cfgrtl.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index ef9a91c..a56eea2 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1,6 +1,6 @@ /* Control flow graph manipulation code for GNU compiler. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001 Free Software Foundation, Inc. + 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GCC. @@ -102,8 +102,7 @@ can_delete_label_p (label) /* User declared labels must be preserved. */ && LABEL_NAME (label) == 0 && !in_expr_list_p (forced_labels, label) - && !in_expr_list_p (label_value_list, label) - && !in_expr_list_p (exception_handler_labels, label)); + && !in_expr_list_p (label_value_list, label)); } /* Delete INSN by patching it out. Return the next insn. */ @@ -363,7 +362,7 @@ create_basic_block (index, head, end) to post-process the stream to remove empty blocks, loops, ranges, etc. */ int -flow_delete_block (b) +flow_delete_block_noexpunge (b) basic_block b; { int deleted_handler = 0; @@ -412,6 +411,15 @@ flow_delete_block (b) b->pred = NULL; b->succ = NULL; + return deleted_handler; +} + +int +flow_delete_block (b) + basic_block b; +{ + int deleted_handler = flow_delete_block_noexpunge (b); + /* Remove the basic block from the array, and compact behind it. */ expunge_block (b); |