From 922d9d40d1932088a59f6ab9370363dce5feb121 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Fri, 11 Jun 1993 21:40:32 -0400 Subject: [PATCH] (eliminate_regs_in_insn): Don't use a later elimination than eliminate_regs would use. From-SVN: r4663 --- gcc/reload1.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/gcc/reload1.c b/gcc/reload1.c index 08813427e0b..87076c8a011 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -3107,14 +3107,22 @@ eliminate_regs_in_insn (insn, replace) for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++) if (ep->from_rtx == XEXP (SET_SRC (old_body), 0) - && ep->can_eliminate - && ep->offset == - INTVAL (XEXP (SET_SRC (old_body), 1))) + && ep->can_eliminate) { - PATTERN (insn) = gen_rtx (SET, VOIDmode, - SET_DEST (old_body), ep->to_rtx); - INSN_CODE (insn) = -1; - val = 1; - goto done; + /* We must stop at the first elimination that will be used. + If this one would replace the PLUS with a REG, do it + now. Otherwise, quit the loop and let eliminate_regs + do its normal replacement. */ + if (ep->offset == - INTVAL (XEXP (SET_SRC (old_body), 1))) + { + PATTERN (insn) = gen_rtx (SET, VOIDmode, + SET_DEST (old_body), ep->to_rtx); + INSN_CODE (insn) = -1; + val = 1; + goto done; + } + + break; } }