diff options
author | Jan Hubicka <jh@suse.cz> | 2001-02-21 17:52:40 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-02-21 16:52:40 +0000 |
commit | ccfce8d2ee4d89fbaea68e412108a8c1e5d3434c (patch) | |
tree | dc3660bd32cc61a465802dd502d0534dbeb23740 /gcc/flow.c | |
parent | 0443f602bc9f5711c31e45a995ceaf6828d08283 (diff) | |
download | gcc-ccfce8d2ee4d89fbaea68e412108a8c1e5d3434c.zip gcc-ccfce8d2ee4d89fbaea68e412108a8c1e5d3434c.tar.gz gcc-ccfce8d2ee4d89fbaea68e412108a8c1e5d3434c.tar.bz2 |
flow.c (init_propagate_block_info): Canon address and use single_set for killing dead memory stores.
* flow.c (init_propagate_block_info): Canon address and use single_set
for killing dead memory stores.
From-SVN: r39949
Diffstat (limited to 'gcc/flow.c')
-rw-r--r-- | gcc/flow.c | 19 |
1 files changed, 10 insertions, 9 deletions
@@ -4110,25 +4110,26 @@ init_propagate_block_info (bb, live, local_set, cond_local_set, flags) || (bb->succ->succ_next == NULL && bb->succ->dest == EXIT_BLOCK_PTR))) { - rtx insn; + rtx insn, set; 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) + && (set = single_set (insn)) + && GET_CODE (SET_DEST (set)) == MEM) { - rtx mem = SET_DEST (PATTERN (insn)); + rtx mem = SET_DEST (set); + rtx canon_mem = canon_rtx (mem); /* This optimization is performed by faking a store to the memory at the end of the block. This doesn't work for unchanging memories because multiple stores to unchanging memory is illegal and alias analysis doesn't consider it. */ - if (RTX_UNCHANGING_P (mem)) + if (RTX_UNCHANGING_P (canon_mem)) continue; - 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)) + if (XEXP (canon_mem, 0) == frame_pointer_rtx + || (GET_CODE (XEXP (canon_mem, 0)) == PLUS + && XEXP (XEXP (canon_mem, 0), 0) == frame_pointer_rtx + && GET_CODE (XEXP (XEXP (canon_mem, 0), 1)) == CONST_INT)) { #ifdef AUTO_INC_DEC /* Store a copy of mem, otherwise the address may be scrogged |