+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.
/* 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)
{
/* 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)
{
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;
/* 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);