aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-10-27 12:17:44 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2001-10-27 10:17:44 +0000
commit7dddfb65cf6a30894855f54f7eeb7850879d7813 (patch)
treeb89b7e441f71e3ff0c9fc64935848e5820a54a0c
parentba087771c0b6f374aff33c820c686cc4f707a41c (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/cfgcleanup.c10
-rw-r--r--gcc/cfgrtl.c1
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);