regmove.c (combine_stack_adjustments_for_blocks): Recognize pushes formed using PRE_M...
authorJan Hubicka <jh@suse.cz>
Wed, 8 Nov 2000 20:59:34 +0000 (21:59 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 8 Nov 2000 20:59:34 +0000 (20:59 +0000)
* regmove.c (combine_stack_adjustments_for_blocks): Recognize pushes
formed using PRE_MODIFY too.

From-SVN: r37326

gcc/ChangeLog
gcc/regmove.c

index 6c6fd051257344f6475831afb185c26af30351c7..aa5025d411b7ccc7e1ed6216a54967e24fe57bc7 100644 (file)
@@ -1,3 +1,8 @@
+Wed Nov  8 21:53:41 MET 2000  Jan Hubicka  <jh@suse.cz>
+
+       * regmove.c (combine_stack_adjustments_for_blocks): Recognize pushes
+       formed using PRE_MODIFY too.
+
 2000-11-08  Mark Mitchell  <mark@codesourcery.com>
 
        * c-tree.texi (VAR_DECL): Describe representation of GCC's
index ebd0ca444bf42ebdc53792fdd33679be99ad5695..008b22cae3ed878f527089db5a160d4ab271dbd8 100644 (file)
@@ -2340,10 +2340,17 @@ combine_stack_adjustments_for_block (bb)
             turn it into a direct store.  Obviously we can't do this if
             there were any intervening uses of the stack pointer.  */
          if (memlist == NULL
-             && (last_sp_adjust
-                 == (HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (dest)))
              && GET_CODE (dest) == MEM
-             && GET_CODE (XEXP (dest, 0)) == PRE_DEC
+             && ((GET_CODE (XEXP (dest, 0)) == PRE_DEC
+                  && (last_sp_adjust
+                      == (HOST_WIDE_INT) GET_MODE_SIZE (GET_MODE (dest))))
+                 || (GET_CODE (XEXP (dest, 0)) == PRE_MODIFY
+                     && GET_CODE (XEXP (XEXP (dest, 0), 1)) == PLUS
+                     && XEXP (XEXP (XEXP (dest, 0), 1), 0) == stack_pointer_rtx
+                     && (GET_CODE (XEXP (XEXP (XEXP (dest, 0), 1), 1))
+                         == CONST_INT)
+                     && (INTVAL (XEXP (XEXP (XEXP (dest, 0), 1), 1))
+                         == -last_sp_adjust)))
              && XEXP (XEXP (dest, 0), 0) == stack_pointer_rtx
              && ! reg_mentioned_p (stack_pointer_rtx, src)
              && memory_address_p (GET_MODE (dest), stack_pointer_rtx)