This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Deletion of dead stores
- To: gcc-patches at gcc dot gnu dot org
- Subject: Deletion of dead stores
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- Date: Wed, 31 May 00 08:09:47 EDT
This does the optimization described in its comment below.
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.
*** flow.c 2000/05/29 22:37:37 1.295
--- flow.c 2000/05/31 11:38:33
*************** propagate_block (bb, live, local_set, fl
*** 3773,3776 ****
--- 3773,3796 ----
}
+ /* 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. */