aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfglayout.c
diff options
context:
space:
mode:
authorZdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>2002-05-20 00:25:49 +0200
committerZdenek Dvorak <rakdver@gcc.gnu.org>2002-05-19 22:25:49 +0000
commit918ed612a1b2328a11887b7166bc07a9efde130f (patch)
treeda3145061eccb50182bb789146df5bbe4f748226 /gcc/cfglayout.c
parente0322d5ca59e5d8657799c2c5453319a89c7a5a5 (diff)
downloadgcc-918ed612a1b2328a11887b7166bc07a9efde130f.zip
gcc-918ed612a1b2328a11887b7166bc07a9efde130f.tar.gz
gcc-918ed612a1b2328a11887b7166bc07a9efde130f.tar.bz2
basic_block.h (struct basic_block_def): Added prev_bb and next_bb fields.
* basic_block.h (struct basic_block_def): Added prev_bb and next_bb fields. (FOR_BB_BETWEEN, FOR_ALL_BB, FOR_ALL_BB_REVERSE): New macros for traversing basic block chain. (create_basic_block_structure, create_basic_block): Declaration changed. (link_block, unlink_block): Declare. * cfg.c (entry_exit_blocks): Initialize new fields. (link_block, unlink_block): New. (expunge_block_nocompact): Unlink basic block. (dump_flow_info): Print prev_bb/next_bb fields. * cfgbuild.c (find_basic_blocks_1, find_basic_blocks): Modified. * cfgcleanup.c (merge_blocks_move_predecessor_nojumps): Modified. * cfglayout.c (fixup_reorder_chain, cfg_layout_duplicate_bb): Modified. * cfgrtl.c (create_basic_block_structure, create_basic_block, split_block, force_nonfallthru_and_redirect, split_edge): Modified. (verify_flow_info): Check that list agrees with numbering. From-SVN: r53642
Diffstat (limited to 'gcc/cfglayout.c')
-rw-r--r--gcc/cfglayout.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c
index 2820f0d..b3cdf84 100644
--- a/gcc/cfglayout.c
+++ b/gcc/cfglayout.c
@@ -357,7 +357,7 @@ scope_to_insns_finalize ()
static void
fixup_reorder_chain ()
{
- basic_block bb;
+ basic_block bb, prev_bb;
int index;
rtx insn = NULL;
@@ -541,11 +541,20 @@ fixup_reorder_chain ()
}
}
- for (bb = BASIC_BLOCK (0), index = 0; bb; bb = RBI (bb)->next, index ++)
+ prev_bb = ENTRY_BLOCK_PTR;
+ bb = BASIC_BLOCK (0);
+ index = 0;
+
+ for (; bb; prev_bb = bb, bb = RBI (bb)->next, index ++)
{
bb->index = index;
BASIC_BLOCK (index) = bb;
+
+ bb->prev_bb = prev_bb;
+ prev_bb->next_bb = bb;
}
+ prev_bb->next_bb = EXIT_BLOCK_PTR;
+ EXIT_BLOCK_PTR->prev_bb = prev_bb;
}
/* Perform sanity checks on the insn chain.
@@ -871,8 +880,9 @@ cfg_layout_duplicate_bb (bb, e)
#endif
insn = duplicate_insn_chain (bb->head, bb->end);
- new_bb = create_basic_block (n_basic_blocks, insn,
- insn ? get_last_insn () : NULL);
+ new_bb = create_basic_block (insn,
+ insn ? get_last_insn () : NULL,
+ EXIT_BLOCK_PTR->prev_bb);
alloc_aux_for_block (new_bb, sizeof (struct reorder_block_def));
if (RBI (bb)->header)