flow.c (init_propagate_block_info): Don't consider unchanging memories for dead frame...
authorRichard Henderson <rth@redhat.com>
Wed, 24 Jan 2001 02:23:54 +0000 (18:23 -0800)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 24 Jan 2001 02:23:54 +0000 (18:23 -0800)
        * flow.c (init_propagate_block_info): Don't consider unchanging
        memories for dead frame store elimination.

From-SVN: r39222

gcc/ChangeLog
gcc/flow.c

index 602dd5f..a1ca492 100644 (file)
@@ -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.
 
index 2e76e3d..00529d9 100644 (file)
@@ -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