* flow.c (insn_dead_p): Detect dead memory stores with auto increments.
authorHerman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
Thu, 7 Sep 2000 01:22:07 +0000 (03:22 +0200)
committerJeff Law <law@gcc.gnu.org>
Thu, 7 Sep 2000 01:22:07 +0000 (19:22 -0600)
From-SVN: r36220

gcc/ChangeLog
gcc/flow.c

index f21bd1afe56ecb95d5cb0d4e88b228fbe03d1ded..0214e8d4d99508edc04ac6deda606c90dd6b2a89 100644 (file)
@@ -1,3 +1,7 @@
+2000-09-06 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
+
+        * flow.c (insn_dead_p): Detect dead memory stores with auto increments.
+
 2000-09-06  Kazu Hirata  <kazu@hxi.com>
 
        * calls.c: Fix formatting.
index 6f1ba7cf004bdd38e2578c9fce28149638ef62ef..ca6cac2a0d5d6341a3ed176227d955a825c5f194 100644 (file)
@@ -3954,8 +3954,21 @@ insn_dead_p (pbi, x, call_ok, notes)
          temp = pbi->mem_set_list;
          while (temp)
            {
-             if (rtx_equal_p (XEXP (temp, 0), r))
+             rtx mem = XEXP (temp, 0);
+
+             if (rtx_equal_p (mem, r))
+               return 1;
+#ifdef AUTO_INC_DEC
+             /* Check if memory reference matches an auto increment. Only
+                post increment/decrement or modify are valid.  */
+             if (GET_MODE (mem) == GET_MODE (r)
+                 && (GET_CODE (XEXP (mem, 0)) == POST_DEC
+                     || GET_CODE (XEXP (mem, 0)) == POST_INC
+                     || GET_CODE (XEXP (mem, 0)) == POST_MODIFY)
+                 && GET_MODE (XEXP (mem, 0)) == GET_MODE (r)
+                 && rtx_equal_p (XEXP (XEXP (mem, 0), 0), XEXP (r, 0)))
                return 1;
+#endif
              temp = XEXP (temp, 1);
            }
        }