From 8026ebba9914ccc5526ecd5c848fc14100a1bb69 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 14 Jan 1997 20:35:27 +0000 Subject: [PATCH] Handle more cases when eliminating the FP to the hard FP From-SVN: r13491 --- gcc/reload1.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/gcc/reload1.c b/gcc/reload1.c index a102ccbaa0c8..85ac6f8c9304 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -1,5 +1,5 @@ /* Reload pseudo regs into hard regs for insns that require hard regs. - Copyright (C) 1987, 88, 89, 92-5, 1996 Free Software Foundation, Inc. + Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. @@ -3237,12 +3237,29 @@ eliminate_regs_in_insn (insn, replace) { rtx src = SET_SRC (old_set); int offset, ok = 0; + rtx prev_insn, prev_set; if (src == ep->to_rtx) offset = 0, ok = 1; else if (GET_CODE (src) == PLUS && GET_CODE (XEXP (src, 0)) == CONST_INT) offset = INTVAL (XEXP (src, 0)), ok = 1; + else if ((prev_insn = prev_nonnote_insn (insn)) != 0 + && (prev_set = single_set (prev_insn)) != 0 + && rtx_equal_p (SET_DEST (prev_set), src)) + { + src = SET_SRC (prev_set); + if (src == ep->to_rtx) + offset = 0, ok = 1; + else if (GET_CODE (src) == PLUS + && GET_CODE (XEXP (src, 0)) == CONST_INT + && XEXP (src, 1) == ep->to_rtx) + offset = INTVAL (XEXP (src, 0)), ok = 1; + else if (GET_CODE (src) == PLUS + && GET_CODE (XEXP (src, 1)) == CONST_INT + && XEXP (src, 0) == ep->to_rtx) + offset = INTVAL (XEXP (src, 1)), ok = 1; + } if (ok) {