+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
{ 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)