From 05b4ec4f0f3d4605246783e543720373f68fbd0e Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Fri, 7 May 1993 22:05:09 +0000 Subject: (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 --- gcc/reload.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'gcc') diff --git a/gcc/reload.c b/gcc/reload.c index 4673468..77cc05d 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -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)) -- cgit v1.1