From: Bernd Schmidt Date: Fri, 3 Jun 2005 09:55:28 +0000 (+0000) Subject: Revert my previous patch. X-Git-Tag: misc/cutover-cvs2svn~2667 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=badea87de498912a933a33931e632eb98f5fdfe3;p=thirdparty%2Fgcc.git Revert my previous patch. From-SVN: r100536 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e746ffd50ef1..b2b7575840e5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2005-06-02 Bernd Schmidt + + * reload1.c (reload): Revert my previous patch. + 2005-06-03 Nick Clifton * config/arm/semi.h (ASM_SPEC): Fix typo passing -mfloat-abi to diff --git a/gcc/reload1.c b/gcc/reload1.c index 78484aa75361..0caa411fb4b6 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -752,7 +752,7 @@ reload (rtx first, int global) for equivalences. This is overly conservative as we could find all sets of the destination pseudo and remove them as they should be redundant. */ - if (memory_operand (x, VOIDmode)) + if (memory_operand (x, VOIDmode) && ! MEM_READONLY_P (x)) { /* Always unshare the equivalence, so we can substitute into this insn without touching the @@ -787,8 +787,14 @@ reload (rtx first, int global) else continue; - reg_equiv_init[i] - = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv_init[i]); + /* If this register is being made equivalent to a MEM + and the MEM is not SET_SRC, the equivalencing insn + is one with the MEM as a SET_DEST and it occurs later. + So don't mark this insn now. */ + if (!MEM_P (x) + || rtx_equal_p (SET_SRC (set), x)) + reg_equiv_init[i] + = gen_rtx_INSN_LIST (VOIDmode, insn, reg_equiv_init[i]); } } } @@ -800,12 +806,9 @@ reload (rtx first, int global) && reg_equiv_memory_loc[REGNO (SET_SRC (set))] && rtx_equal_p (SET_DEST (set), reg_equiv_memory_loc[REGNO (SET_SRC (set))])) - /* Equivalences made this way only have one initializing insn. - Previously, we may have set reg_equiv_init when encountering a - SET of this pseudo; discard that insn since it does not set up - an equivalence. */ reg_equiv_init[REGNO (SET_SRC (set))] - = gen_rtx_INSN_LIST (VOIDmode, insn, NULL_RTX); + = gen_rtx_INSN_LIST (VOIDmode, insn, + reg_equiv_init[REGNO (SET_SRC (set))]); if (INSN_P (insn)) scan_paradoxical_subregs (PATTERN (insn));