summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-24 02:23:54 +0000
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>2001-01-24 02:23:54 +0000
commita476dbbe50772db09e589a2f226eef48e49900a4 (patch)
tree31f209b5414359b26dd62c5d1d1950f8d20b6d29
parentf41715af5f36952a9719aa68fc52cb82bbb925de (diff)
downloadppe42-gcc-a476dbbe50772db09e589a2f226eef48e49900a4.tar.gz
ppe42-gcc-a476dbbe50772db09e589a2f226eef48e49900a4.zip
* flow.c (init_propagate_block_info): Don't consider unchanging
memories for dead frame store elimination. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@39222 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/flow.c7
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 602dd5fa7e4..a1ca492a17c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2001-01-23 Richard Henderson <rth@redhat.com>
+ * flow.c (init_propagate_block_info): Don't consider unchanging
+ memories for dead frame store elimination.
+
+2001-01-23 Richard Henderson <rth@redhat.com>
+
* varasm.c (UNIQUE_SECTION): Move default implementation ...
* defaults.h: ... here.
diff --git a/gcc/flow.c b/gcc/flow.c
index 2e76e3d398f..00529d9d5e8 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -4100,6 +4100,13 @@ init_propagate_block_info (bb, live, local_set, cond_local_set, flags)
{
rtx mem = SET_DEST (PATTERN (insn));
+ /* 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))
+ continue;
+
if (XEXP (mem, 0) == frame_pointer_rtx
|| (GET_CODE (XEXP (mem, 0)) == PLUS
&& XEXP (XEXP (mem, 0), 0) == frame_pointer_rtx
OpenPOWER on IntegriCloud