diff options
author | J"orn Rennecke <amylaar@cygnus.co.uk> | 1998-07-07 15:08:34 +0000 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 1998-07-07 16:08:34 +0100 |
commit | 3c785e47dc2e3fef919b5badac1f78a33d59ecb8 (patch) | |
tree | d857895d3e368f0acb992440ff5a252012530d29 /gcc | |
parent | 54303b5cb3076f7bae9102c08b59d57b1a9f5104 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/reload1.c | 26 |
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 |