aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-03-06 20:09:57 +0000
committerRichard Stallman <rms@gnu.org>1993-03-06 20:09:57 +0000
commit210eed9496e21fe59e5c0cc963174643471a3007 (patch)
treeac300421ef9a82601f52d0586a6e9a4ffb050abf /gcc
parentf75d38a795408286b9e9e341108382a0cd935432 (diff)
downloadgcc-210eed9496e21fe59e5c0cc963174643471a3007.zip
gcc-210eed9496e21fe59e5c0cc963174643471a3007.tar.gz
gcc-210eed9496e21fe59e5c0cc963174643471a3007.tar.bz2
(choose_reload_regs): Handle SUBREG in reload_earlyclobber
when matching output reloads for setting reload_when_needed. From-SVN: r3670
Diffstat (limited to 'gcc')
-rw-r--r--gcc/reload1.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index cb3db79..15edd0b 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -4187,8 +4187,14 @@ choose_reload_regs (insn, avoid_return_reg)
{
/* But earlyclobber operands must stay as RELOAD_OTHER. */
for (i = 0; i < n_earlyclobbers; i++)
- if (rtx_equal_p (reload_out[j], reload_earlyclobbers[i]))
- break;
+ {
+ if (GET_CODE (reload_earlyclobbers[i]) == SUBREG
+ && reg_overlap_mentioned_for_reload_p (reload_out[j],
+ SUBREG_REG (reload_earlyclobbers[i])))
+ break;
+ if (rtx_equal_p (reload_out[j], reload_earlyclobbers[i]))
+ break;
+ }
if (i == n_earlyclobbers)
reload_when_needed[j] = RELOAD_FOR_OUTPUT;
}