flow.c (propagate_block): If block has no successors, stores to frame are dead if not used.

* flow.c (propagate_block): If block has no successors, stores to
	frame are dead if not used.

From-SVN: r34296
This commit is contained in:
Richard Kenner 2000-05-31 11:58:35 +00:00 committed by Richard Kenner
parent efd5878344
commit 8c41041620
2 changed files with 25 additions and 0 deletions

View file

@ -1,3 +1,8 @@
Wed May 31 08:07:52 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* flow.c (propagate_block): If block has no successors, stores to
frame are dead if not used.
2000-05-31 Nathan Sidwell <nathan@codesourcery.com>
* stmt (expand_end_case): Reorder conversion sequence for jump

View file

@ -3772,6 +3772,26 @@ propagate_block (bb, live, local_set, flags)
{ REG_BASIC_BLOCK (i) = REG_BLOCK_GLOBAL; });
}
/* If this block has no successors, any stores to the frame that aren't
used later in the block are dead. So make a pass over the block
recording any such that are made and show them dead at the end. We do
a very conservative and simple job here. */
if (bb->succ != 0 && bb->succ->succ_next == 0
&& bb->succ->dest == EXIT_BLOCK_PTR)
for (insn = bb->end; insn != bb->head; insn = PREV_INSN (insn))
if (GET_CODE (insn) == INSN && GET_CODE (PATTERN (insn)) == SET
&& GET_CODE (SET_DEST (PATTERN (insn))) == MEM)
{
rtx mem = SET_DEST (PATTERN (insn));
if ((GET_CODE (XEXP (mem, 0)) == REG
&& REGNO (XEXP (mem, 0)) == FRAME_POINTER_REGNUM)
|| (GET_CODE (XEXP (mem, 0)) == PLUS
&& GET_CODE (XEXP (XEXP (mem, 0), 0)) == REG
&& REGNO (XEXP (XEXP (mem, 0), 0)) == FRAME_POINTER_REGNUM))
pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
}
/* Scan the block an insn at a time from end to beginning. */
for (insn = bb->end; ; insn = prev)