aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1995-11-05 11:22:54 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1995-11-05 11:22:54 -0500
commitc96d01ab97046e1094188478d9f7585374305c8e (patch)
tree85acc6cb2e7ffdb2dbf3d83863eed025e4ee9be9
parent09f6940d6112163c758f3a3c81ebd0acb19e3ba6 (diff)
downloadgcc-c96d01ab97046e1094188478d9f7585374305c8e.zip
gcc-c96d01ab97046e1094188478d9f7585374305c8e.tar.gz
gcc-c96d01ab97046e1094188478d9f7585374305c8e.tar.bz2
(push_reload): Delete abort for RELOAD_OTHER case added in last
change. From-SVN: r10561
-rw-r--r--gcc/reload.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 36c721d..30719fb 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -901,6 +901,11 @@ push_reload (in, out, inloc, outloc, class,
!= HARD_REGNO_NREGS (REGNO (SUBREG_REG (in)),
GET_MODE (SUBREG_REG (in)))))))
{
+ /* This relies on the fact that emit_reload_insns outputs the
+ instructions for input reloads of type RELOAD_OTHER in the same
+ order as the reloads. Thus if the outer reload is also of type
+ RELOAD_OTHER, we are guaranteed that this inner reload will be
+ output before the outer reload. */
push_reload (SUBREG_REG (in), NULL_RTX, &SUBREG_REG (in), NULL_PTR,
GENERAL_REGS, VOIDmode, VOIDmode, 0, 0, opnum, type);
dont_remove_subreg = 1;
@@ -984,16 +989,17 @@ push_reload (in, out, inloc, outloc, class,
!= HARD_REGNO_NREGS (REGNO (SUBREG_REG (out)),
GET_MODE (SUBREG_REG (out)))))))
{
- if (type == RELOAD_OTHER)
- abort ();
-
+ /* This relies on the fact that emit_reload_insns outputs the
+ instructions for output reloads of type RELOAD_OTHER in reverse
+ order of the reloads. Thus if the outer reload is also of type
+ RELOAD_OTHER, we are guaranteed that this inner reload will be
+ output after the outer reload. */
dont_remove_subreg = 1;
push_reload (SUBREG_REG (out), SUBREG_REG (out), &SUBREG_REG (out),
&SUBREG_REG (out), ALL_REGS, VOIDmode, VOIDmode, 0, 0,
opnum, RELOAD_OTHER);
}
-
/* If IN appears in OUT, we can't share any input-only reload for IN. */
if (in != 0 && out != 0 && GET_CODE (out) == MEM
&& (GET_CODE (in) == REG || GET_CODE (in) == MEM)