diff options
author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-05-19 22:25:49 +0000 |
---|---|---|
committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-05-19 22:25:49 +0000 |
commit | 7fa55aef8e8e951f40edb73837f7a2ca2cd126d0 (patch) | |
tree | da3145061eccb50182bb789146df5bbe4f748226 /gcc/cfglayout.c | |
parent | 08eedad60368d251f0544a6376b0f999d0f8a54a (diff) | |
download | gcc-7fa55aef8e8e951f40edb73837f7a2ca2cd126d0.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53642 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cfglayout.c')
-rw-r--r-- | gcc/cfglayout.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/gcc/cfglayout.c b/gcc/cfglayout.c index 2820f0d5d96..b3cdf84b66a 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) |