flow.c (propagate_one_insn): Call mark_set_regs for stack pointer updates too.
authorJ"orn Rennecke <joern.rennecke@superh.com>
Fri, 30 Apr 2004 11:28:57 +0000 (11:28 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Fri, 30 Apr 2004 11:28:57 +0000 (12:28 +0100)
* flow.c (propagate_one_insn): Call mark_set_regs for stack pointer
updates too.

From-SVN: r81334

gcc/ChangeLog
gcc/flow.c

index a972e93..cdf801a 100644 (file)
@@ -1,3 +1,8 @@
+2004-04-30  J"orn Rennecke <joern.rennecke@superh.com>
+
+       * flow.c (propagate_one_insn): Call mark_set_regs for stack pointer
+       updates too.
+
 2004-04-30  Paul Brook  <paul@codesourcery.com>
 
        * arm.c (arm_needs_doubleword_align): Use mode alignment.
index 686292c..1cd0823 100644 (file)
@@ -1707,12 +1707,18 @@ propagate_one_insn (struct propagate_block_info *pbi, rtx insn)
           && GET_CODE (SET_SRC (PATTERN (insn))) == PLUS
           && XEXP (SET_SRC (PATTERN (insn)), 0) == stack_pointer_rtx
           && GET_CODE (XEXP (SET_SRC (PATTERN (insn)), 1)) == CONST_INT)
-    /* We have an insn to pop a constant amount off the stack.
-       (Such insns use PLUS regardless of the direction of the stack,
-       and any insn to adjust the stack by a constant is always a pop.)
-       These insns, if not dead stores, have no effect on life, though
-       they do have an effect on the memory stores we are tracking.  */
-    invalidate_mems_from_set (pbi, stack_pointer_rtx);
+    {
+      /* We have an insn to pop a constant amount off the stack.
+         (Such insns use PLUS regardless of the direction of the stack,
+         and any insn to adjust the stack by a constant is always a pop
+        or part of a push.)
+         These insns, if not dead stores, have no effect on life, though
+         they do have an effect on the memory stores we are tracking.  */
+      invalidate_mems_from_set (pbi, stack_pointer_rtx);
+      /* Still, we need to update local_set, lest ifcvt.c:dead_or_predicable
+        concludes that the stack pointer is not modified.  */
+      mark_set_regs (pbi, PATTERN (insn), insn);
+    }
   else
     {
       rtx note;