aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2001-01-23 18:23:54 -0800
committerRichard Henderson <rth@gcc.gnu.org>2001-01-23 18:23:54 -0800
commit240f9c2b138280b1ed94ead778cf68c24a8a48d7 (patch)
tree31f209b5414359b26dd62c5d1d1950f8d20b6d29 /gcc
parentfc9f395ad284656571c28d8cbb8e68e93ece4a75 (diff)
downloadgcc-240f9c2b138280b1ed94ead778cf68c24a8a48d7.zip
gcc-240f9c2b138280b1ed94ead778cf68c24a8a48d7.tar.gz
gcc-240f9c2b138280b1ed94ead778cf68c24a8a48d7.tar.bz2
flow.c (init_propagate_block_info): Don't consider unchanging memories for dead frame store elimination.
* flow.c (init_propagate_block_info): Don't consider unchanging memories for dead frame store elimination. From-SVN: r39222
Diffstat (limited to 'gcc')
-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 602dd5f..a1ca492 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 2e76e3d..00529d9 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