aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2001-12-06 14:30:57 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2001-12-06 09:30:57 -0500
commitf189c7caeab86e208a54b85419dcfe8b331c0f63 (patch)
treee8e530723dfc9ff55042e20763899481816af0ac /gcc
parenta8571098ece1e8edbf74069c264e4a982cf4e5fb (diff)
downloadgcc-f189c7caeab86e208a54b85419dcfe8b331c0f63.zip
gcc-f189c7caeab86e208a54b85419dcfe8b331c0f63.tar.gz
gcc-f189c7caeab86e208a54b85419dcfe8b331c0f63.tar.bz2
function.c (handle_epilogue_set): Check for FP setting case when SP is set from FP in same insn.
* function.c (handle_epilogue_set): Check for FP setting case when SP is set from FP in same insn. From-SVN: r47719
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/function.c9
2 files changed, 11 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8f244e6..32ab317 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Dec 6 09:24:12 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * function.c (handle_epilogue_set): Check for FP setting case when
+ SP is set from FP in same insn.
+
2001-12-06 Nick Clifton <nickc@cambridge.redhat.com>
* config/arm/arm.c (load_multiple_sequence): Pass pointer to
diff --git a/gcc/function.c b/gcc/function.c
index 082d6c6..dbd76c0 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -7349,10 +7349,13 @@ handle_epilogue_set (set, p)
/* Next handle the case where we are setting SP's equivalent register.
If we already have a value to set it to, abort. We could update, but
- there seems little point in handling that case. */
- else if (p->sp_equiv_reg != 0 && reg_set_p (p->sp_equiv_reg, set))
+ there seems little point in handling that case. Note that we have
+ to allow for the case where we are setting the register set in
+ the previous part of a PARALLEL inside a single insn. But use the
+ old offset for any updates within this insn. */
+ else if (p->new_sp_equiv_reg != 0 && reg_set_p (p->new_sp_equiv_reg, set))
{
- if (!rtx_equal_p (p->sp_equiv_reg, SET_DEST (set))
+ if (!rtx_equal_p (p->new_sp_equiv_reg, SET_DEST (set))
|| p->equiv_reg_src != 0)
abort ();
else