]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
function.c (handle_epilogue_set): Check for FP setting case when SP is set from FP...
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>
Thu, 6 Dec 2001 14:30:57 +0000 (14:30 +0000)
committerRichard Kenner <kenner@gcc.gnu.org>
Thu, 6 Dec 2001 14:30:57 +0000 (09:30 -0500)
* function.c (handle_epilogue_set): Check for FP setting case when
SP is set from FP in same insn.

From-SVN: r47719

gcc/ChangeLog
gcc/function.c

index 8f244e6181519096d1ae9ef8fde1307e9c9c2f52..32ab317840f77860312cfe291c65852b5b7be65d 100644 (file)
@@ -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
index 082d6c6737bf80321b1b9752cb7c9bf7e83eb33a..dbd76c0121cc06297cbb6482ed19b8c514b745a2 100644 (file)
@@ -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