(push_reload): Don't use IN as the reload reg in in-out

reload if it is set elsewhere in the insn.

From-SVN: r4382
This commit is contained in:
Richard Stallman 1993-05-07 22:05:09 +00:00
parent 1e558d3581
commit 05b4ec4f0f
1 changed files with 12 additions and 0 deletions

View 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))