aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@cygnus.co.uk>1998-07-07 15:08:34 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1998-07-07 16:08:34 +0100
commit3c785e47dc2e3fef919b5badac1f78a33d59ecb8 (patch)
treed857895d3e368f0acb992440ff5a252012530d29 /gcc
parent54303b5cb3076f7bae9102c08b59d57b1a9f5104 (diff)
downloadgcc-3c785e47dc2e3fef919b5badac1f78a33d59ecb8.zip
gcc-3c785e47dc2e3fef919b5badac1f78a33d59ecb8.tar.gz
gcc-3c785e47dc2e3fef919b5badac1f78a33d59ecb8.tar.bz2
reload1.c (choose_reload_regs): Don't set reload_override_in if EQUIV is clobbered in INSN and the reload is...
* reload1.c (choose_reload_regs): Don't set reload_override_in if EQUIV is clobbered in INSN and the reload is done after INSN. From-SVN: r20999
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/reload1.c26
2 files changed, 26 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 04cd1d8..226d54c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jul 7 23:03:34 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * reload1.c (choose_reload_regs): Don't set reload_override_in
+ if EQUIV is clobbered in INSN and the reload is done after INSN.
+
Tue Jul 7 21:23:36 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* expr.c (emit_queue): If emitting a SEQUENCE, set QUEUED_INSN
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 456abb0..b6c0d8d 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -5826,14 +5826,30 @@ choose_reload_regs (insn, avoid_return_reg)
break;
}
- /* JRV: If the equiv register we have found is
- explicitly clobbered in the current insn, mark but
- don't use, as above. */
+ /* If the equiv register we have found is explicitly clobbered
+ in the current insn, it depends on the reload type if we
+ can use it, use it for reload_override_in, or not at all.
+ In particular, we then can't use EQUIV for a
+ RELOAD_FOR_OUTPUT_ADDRESS reload. */
if (equiv != 0 && regno_clobbered_p (regno, insn))
{
- reload_override_in[r] = equiv;
- equiv = 0;
+ switch (reload_when_needed[r])
+ {
+ case RELOAD_FOR_OTHER_ADDRESS:
+ case RELOAD_FOR_INPADDR_ADDRESS:
+ case RELOAD_FOR_INPUT_ADDRESS:
+ case RELOAD_FOR_OPADDR_ADDR:
+ break;
+ case RELOAD_OTHER:
+ case RELOAD_FOR_INPUT:
+ case RELOAD_FOR_OPERAND_ADDRESS:
+ reload_override_in[r] = equiv;
+ /* Fall through. */
+ default:
+ equiv = 0;
+ break;
+ }
}
/* If we found an equivalent reg, say no code need be generated