summaryrefslogtreecommitdiff
path: root/gcc/cfglayout.c
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-25 20:00:00 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-25 20:00:00 +0000
commit54f7a9853bc0acf6a313e27df36ad8598f6e2fca (patch)
tree8328d527b50b846c05df0b06c0dc56a80978890e /gcc/cfglayout.c
parentab9b8800aa18a76d9514ccaeada3727e6d4a8a9c (diff)
downloadgcc-54f7a9853bc0acf6a313e27df36ad8598f6e2fca.tar.gz
* basic-block.h (make_eh_edge, break_superblocks): Declare.
* cfgbuild.c (make_eh_edge): Make global. * cfglayout.c (break_superblocks): Likewise; fix memory leak. * except.c (build_post_landing_pads, connect_post_landing_pads, dw2_build_landing_pads, sjlj_emit_function_enter, sjlj_emit_function_exit, sjlj_emit_dispatch_table, sjlj_build_landing_pads): Update CFG. (emit_to_new_bb_before): New function. (finish_eh_generation): Do not rebuild the CFG. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78448 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfglayout.c')
-rw-r--r--gcc/cfglayout.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index 41d92bbee6c..25349658355 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -56,7 +56,6 @@ static void change_scope (rtx, tree, tree);
void verify_insn_chain (void);
static void fixup_fallthru_exit_predecessor (void);
static rtx duplicate_insn_chain (rtx, rtx);
-static void break_superblocks (void);
static tree insn_scope (rtx);
rtx
@@ -1144,23 +1143,22 @@ cfg_layout_initialize (void)
}
/* Splits superblocks. */
-static void
+void
break_superblocks (void)
{
sbitmap superblocks;
- int i, need;
+ bool need = false;
+ basic_block bb;
- superblocks = sbitmap_alloc (n_basic_blocks);
+ superblocks = sbitmap_alloc (last_basic_block);
sbitmap_zero (superblocks);
- need = 0;
-
- for (i = 0; i < n_basic_blocks; i++)
- if (BASIC_BLOCK(i)->flags & BB_SUPERBLOCK)
+ FOR_EACH_BB (bb)
+ if (bb->flags & BB_SUPERBLOCK)
{
- BASIC_BLOCK(i)->flags &= ~BB_SUPERBLOCK;
- SET_BIT (superblocks, i);
- need = 1;
+ bb->flags &= ~BB_SUPERBLOCK;
+ SET_BIT (superblocks, bb->index);
+ need = true;
}
if (need)