From c96d01ab97046e1094188478d9f7585374305c8e Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Sun, 5 Nov 1995 11:22:54 -0500 Subject: [PATCH] (push_reload): Delete abort for RELOAD_OTHER case added in last change. From-SVN: r10561 --- gcc/reload.c | 14 ++++++++++---- 1 file 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) -- 2.7.4