aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@cygnus.co.uk>1999-10-13 06:47:15 +0000
committerJeff Law <law@gcc.gnu.org>1999-10-13 00:47:15 -0600
commit57850c857cf3384f2585b871bbfa7f23781b1bb7 (patch)
treee2459871cf7171c9ac8f168a2354f9622a79ba00 /gcc/reload1.c
parentc7847bc8f5efacafe1dc82fc68ebd39324bf478b (diff)
downloadgcc-57850c857cf3384f2585b871bbfa7f23781b1bb7.zip
gcc-57850c857cf3384f2585b871bbfa7f23781b1bb7.tar.gz
gcc-57850c857cf3384f2585b871bbfa7f23781b1bb7.tar.bz2
reload1.c (reload_reg_free_for_value_p): RELOAD_OTHER reloads with an earlyclobbered output conflict with RELOAD_INPUT...
* reload1.c (reload_reg_free_for_value_p): RELOAD_OTHER reloads with an earlyclobbered output conflict with RELOAD_INPUT reloads. From-SVN: r29935
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index caa7c10..8727770 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -5258,7 +5258,7 @@ reload_reg_free_for_value_p (regno, opnum, type, value, out, reloadnum,
if (! rld[i].in || ! rtx_equal_p (rld[i].in, value)
|| rld[i].out || out)
{
- int time2;
+ int j, time2;
switch (rld[i].when_needed)
{
case RELOAD_FOR_OTHER_ADDRESS:
@@ -5337,6 +5337,11 @@ reload_reg_free_for_value_p (regno, opnum, type, value, out, reloadnum,
if (! rld[i].in || rtx_equal_p (rld[i].in, value))
{
time2 = MAX_RECOG_OPERANDS * 4 + 4;
+ /* Earlyclobbered outputs must conflict with inputs. */
+ for (j = 0; j < n_earlyclobbers; j++)
+ if (reload_out[i] == reload_earlyclobbers[j])
+ time2 = MAX_RECOG_OPERANDS * 4 + 3;
+
break;
}
time2 = 1;