]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Revert my previous patch.
authorBernd Schmidt <bernd.schmidt@analog.com>
Fri, 3 Jun 2005 09:55:28 +0000 (09:55 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Fri, 3 Jun 2005 09:55:28 +0000 (09:55 +0000)
From-SVN: r100536

gcc/ChangeLog
gcc/reload1.c

index e746ffd50ef150813a31f2954801624cf61f12ab..b2b7575840e50c257fd6dd4d51208e13976147c5 100644 (file)
@@ -1,3 +1,7 @@
+2005-06-02  Bernd Schmidt  <bernd.schmidt@analog.com>
+
+       * reload1.c (reload): Revert my previous patch.
+
 2005-06-03  Nick Clifton  <nickc@redhat.com>
 
        * config/arm/semi.h (ASM_SPEC): Fix typo passing -mfloat-abi to
index 78484aa75361bafdbc91b0ef4bd13cf1fdb7b5d8..0caa411fb4b67c61f11709ab253148bdd754352b 100644 (file)
@@ -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));