]> gcc.gnu.org Git - gcc.git/commitdiff
(push_reload): Don't use IN as the reload reg in in-out
authorRichard Stallman <rms@gnu.org>
Fri, 7 May 1993 22:05:09 +0000 (22:05 +0000)
committerRichard Stallman <rms@gnu.org>
Fri, 7 May 1993 22:05:09 +0000 (22:05 +0000)
reload if it is set elsewhere in the insn.

From-SVN: r4382

gcc/reload.c

index 46734683937c4f6cfbcb37f50207aecf17902b89..77cc05dea7e9bd3f6740ecea8c6008c01e39fc56 100644 (file)
@@ -1263,6 +1263,18 @@ push_reload (in, out, inloc, outloc, class,
                                                + HARD_REGNO_NREGS (regno,
                                                                    inmode)),
                                               PATTERN (this_insn), inloc)
+           /* If this is also an output reload, IN cannot be used as
+              the reload register if it is set in this insn unless IN
+              is also OUT.  */
+           && (out == 0 || in == out
+               || ! hard_reg_set_here_p (regno,
+                                         (regno
+                                          + HARD_REGNO_NREGS (regno,
+                                                              inmode)),
+                                         PATTERN (this_insn)))
+           /* ??? Why is this code so different from the previous?
+              Is there any simple coherent way to describe the two together?
+              What's going on here.  */
            && (in != out
                || (GET_CODE (in) == SUBREG
                    && (((GET_MODE_SIZE (GET_MODE (in)) + (UNITS_PER_WORD - 1))
This page took 0.064073 seconds and 5 git commands to generate.