aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2000-11-08 21:59:34 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2000-11-08 20:59:34 +0000
commit756d6f0c51001dc24438088c7961d507d4835b57 (patch)
tree995729b3efee569d81acd377402557bd54c09abe /gcc
parent136c35df1c6a37c2f831db88221178b091b7e50f (diff)
downloadgcc-756d6f0c51001dc24438088c7961d507d4835b57.zip
gcc-756d6f0c51001dc24438088c7961d507d4835b57.tar.gz
gcc-756d6f0c51001dc24438088c7961d507d4835b57.tar.bz2
regmove.c (combine_stack_adjustments_for_blocks): Recognize pushes formed using PRE_MODIFY too.
* regmove.c (combine_stack_adjustments_for_blocks): Recognize pushes formed using PRE_MODIFY too. From-SVN: r37326
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/regmove.c13
2 files changed, 15 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6c6fd05..aa5025d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/regmove.c b/gcc/regmove.c
index ebd0ca4..008b22c 100644
--- a/gcc/regmove.c
+++ b/gcc/regmove.c
@@ -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)