diff options
author | Jan Hubicka <jh@suse.cz> | 2001-10-27 12:17:44 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-10-27 10:17:44 +0000 |
commit | 7dddfb65cf6a30894855f54f7eeb7850879d7813 (patch) | |
tree | b89b7e441f71e3ff0c9fc64935848e5820a54a0c | |
parent | ba087771c0b6f374aff33c820c686cc4f707a41c (diff) | |
download | gcc-7dddfb65cf6a30894855f54f7eeb7850879d7813.zip gcc-7dddfb65cf6a30894855f54f7eeb7850879d7813.tar.gz gcc-7dddfb65cf6a30894855f54f7eeb7850879d7813.tar.bz2 |
cfgcleanup.c (merge_blocks_move_predecessor_nojumps, [...]): Set BB_UPDATE_LIFE.
* cfgcleanup.c (merge_blocks_move_predecessor_nojumps,
merge_blocks_move_successors_nojumps): Set BB_UPDATE_LIFE.
(merge_blocks): Properly udpate life after making edge nonfallthru.
* cfgrtl.c (merge_blocks_nomove): Update global_live_at_end.
From-SVN: r46564
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cfgcleanup.c | 10 | ||||
-rw-r--r-- | gcc/cfgrtl.c | 1 |
3 files changed, 16 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ae4743..686842a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +Sat Oct 27 12:12:09 CEST 2001 Jan Hubicka <jh@suse.cz> + + * cfgcleanup.c (merge_blocks_move_predecessor_nojumps, + merge_blocks_move_successors_nojumps): Set BB_UPDATE_LIFE. + (merge_blocks): Properly udpate life after making edge nonfallthru. + * cfgrtl.c (merge_blocks_nomove): Update global_live_at_end. + 2001-10-26 Kazu Hirata <kazu@hxi.com> * config/h8300/h8300.c (get_shift_alg): Remove redundant code. diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index a1c13f5..f386909 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -334,6 +334,7 @@ merge_blocks_move_predecessor_nojumps (a, b) /* Scramble the insn chain. */ if (a->end != PREV_INSN (b->head)) reorder_insns_nobb (a->head, a->end, PREV_INSN (b->head)); + BB_SET_FLAG (a, BB_UPDATE_LIFE); if (rtl_dump_file) { @@ -402,6 +403,7 @@ merge_blocks_move_successor_nojumps (a, b) /* Now blocks A and B are contiguous. Merge them. */ merge_blocks_nomove (a, b); + BB_SET_FLAG (a, BB_UPDATE_LIFE); if (rtl_dump_file) { @@ -488,10 +490,14 @@ merge_blocks (e, b, c, mode) if (b_has_incoming_fallthru) { + rtx bb; if (b_fallthru_edge->src == ENTRY_BLOCK_PTR) return false; - BB_SET_FLAG (b_fallthru_edge, BB_UPDATE_LIFE); - notice_new_block (force_nonfallthru (b_fallthru_edge)); + bb = force_nonfallthru (b_fallthru_edge); + if (bb) + notice_new_block (bb); + else + BB_SET_FLAG (b_fallthru_edge->src, BB_UPDATE_LIFE); } merge_blocks_move_predecessor_nojumps (b, c); return true; diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index edd88bd..88a6f49 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -603,6 +603,7 @@ merge_blocks_nomove (a, b) /* B hasn't quite yet ceased to exist. Attempt to prevent mishap. */ b->pred = b->succ = NULL; + a->global_live_at_end = b->global_live_at_end; expunge_block (b); |