This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Deletion of dead stores
- To: Richard Kenner <kenner at vlsi1 dot ultra dot nyu dot edu>
- Subject: Re: Deletion of dead stores
- From: Richard Henderson <rth at cygnus dot com>
- Date: Wed, 31 May 2000 15:31:15 -0700
- Cc: gcc-patches at gcc dot gnu dot org
- References: <10005311209.AA22564@vlsi1.ultra.nyu.edu>
On Wed, May 31, 2000 at 07:58:12AM -0400, Richard Kenner wrote:
> + /* 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. */
A good idea. I've moved the code to the proper place, and
fixed the conditions under which we collect this information.
r~
* flow.c (propagate_block): Move initialization of mem_set_list ...
(init_propagate_block_info): ... here. Also track blocks with
no successors; don't scan insns if ! PROP_SCAN_DEAD_CODE.
Index: flow.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/flow.c,v
retrieving revision 1.296
diff -c -p -d -r1.296 flow.c
*** flow.c 2000/05/31 11:58:35 1.296
--- flow.c 2000/05/31 22:27:38
*************** init_propagate_block_info (bb, live, loc
*** 3639,3645 ****
/* If this block ends in a conditional branch, for each register live
from one side of the branch and not the other, record the register
as conditionally dead. */
! if (GET_CODE (bb->end) == JUMP_INSN
&& any_condjump_p (bb->end))
{
regset_head diff_head;
--- 3639,3646 ----
/* If this block ends in a conditional branch, for each register live
from one side of the branch and not the other, record the register
as conditionally dead. */
! if ((flags & (PROP_DEATH_NOTES | PROP_SCAN_DEAD_CODE))
! && GET_CODE (bb->end) == JUMP_INSN
&& any_condjump_p (bb->end))
{
regset_head diff_head;
*************** init_propagate_block_info (bb, live, loc
*** 3717,3722 ****
--- 3718,3748 ----
}
#endif
+ /* 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 ((flags & PROP_SCAN_DEAD_CODE)
+ && (bb->succ == NULL
+ || (bb->succ->succ_next == NULL
+ && bb->succ->dest == EXIT_BLOCK_PTR)))
+ {
+ rtx insn;
+ 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 (XEXP (mem, 0) == frame_pointer_rtx
+ || (GET_CODE (XEXP (mem, 0)) == PLUS
+ && XEXP (XEXP (mem, 0), 0) == frame_pointer_rtx
+ && GET_CODE (XEXP (XEXP (mem, 0), 1)) == CONST_INT))
+ pbi->mem_set_list = alloc_EXPR_LIST (0, mem, pbi->mem_set_list);
+ }
+ }
+
return pbi;
}
*************** propagate_block (bb, live, local_set, fl
*** 3771,3796 ****
EXECUTE_IF_SET_IN_REG_SET (live, 0, i,
{ 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. */
--- 3797,3802 ----