diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-23 14:08:12 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-07-23 14:08:12 +0000 |
commit | b08cd5843569977ca1c079e1dd269a55fdaa2995 (patch) | |
tree | 3dbb57e04c149a6d0f4908ed9c0351fc46670790 /gcc/recog.c | |
parent | 4bfc3ff0532c344a3e605297432468d95e4e33c0 (diff) | |
download | gcc-b08cd5843569977ca1c079e1dd269a55fdaa2995.tar.gz |
* basic-block.h (find_sub_basic_block): Declare.
* flow.c (make_edges): New arguments MIN and MAX;
(find_sub_basic_blocks): Revamp to use make_edges
and purge_dead_edges.
(find_basic_blocks): Update call of find_sub_basic_block.
* recog.c (split_all_insns): Always expect CFG to be consistent;
call find_sub_basic_blocks in case something has changed.
* toplev.c (rest_of_compilation): Always call split_all_insns once CFG
has been built.
* basic-block.h (delete_noop_moves): Declare.
* combine.c (combine_instructions): Call it.
(recog_for_combine): Tolerate noop moves
(distribute_notes): Force refresh when register dies at noop move.
* flow.c (delete_noop_moves): Use BB structure; delete JUMP insns
too.
(life_analysis): Update delete_noop_moves call.
(set_noop_p): Move too ...
* rtlanal.c (noop_move_p): ... here.
* rtl.h (noop_move_p): Declare.
* basic-block.h (purge_all_dead_edges, purge_dead_edges): New functions.
* toplev.c (rest_of_compilation): Conditionally call purge_all_dead_edges
after combine.
* gcse.c (cprop_cc0_jump, cprop_insn): New argument "basic_block".
(cprop_jump): Likewise; call purge_dead_edges if substitution suceeded.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44267 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/recog.c')
-rw-r--r-- | gcc/recog.c | 27 |
1 files changed, 10 insertions, 17 deletions
diff --git a/gcc/recog.c b/gcc/recog.c index ef30528bd9e..b4b9b9d5bc2 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -2725,22 +2725,6 @@ split_all_insns (upd_life) int changed; int i; - if (!upd_life) - { - rtx next, insn; - - for (insn = get_insns (); insn ; insn = next) - { - rtx last; - - /* Can't use `next_real_insn' because that might go across - CODE_LABELS and short-out basic blocks. */ - next = NEXT_INSN (insn); - last = split_insn (insn); - } - return; - } - blocks = sbitmap_alloc (n_basic_blocks); sbitmap_zero (blocks); changed = 0; @@ -2775,12 +2759,21 @@ split_all_insns (upd_life) abort (); } - if (changed && upd_life) + if (changed) { compute_bb_for_insn (get_max_uid ()); + for (i = 0; i < n_basic_blocks; i++) + find_sub_basic_blocks (BASIC_BLOCK (i)); + } + + if (changed && upd_life) + { count_or_remove_death_notes (blocks, 1); update_life_info (blocks, UPDATE_LIFE_LOCAL, PROP_DEATH_NOTES); } +#ifdef ENABLE_CHECKING + verify_flow_info (); +#endif sbitmap_free (blocks); } |