aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@vlsi1.ultra.nyu.edu>2001-11-03 15:56:17 +0000
committerRichard Kenner <kenner@gcc.gnu.org>2001-11-03 10:56:17 -0500
commit6b3736a12b14c2d2dddafeea0941aaaf413af393 (patch)
tree8f97ad08360a62515f315d4af00d268994015a1e /gcc/reload.c
parent1285011e67bc94e8ed28b9711ace7445d4588254 (diff)
downloadgcc-6b3736a12b14c2d2dddafeea0941aaaf413af393.zip
gcc-6b3736a12b14c2d2dddafeea0941aaaf413af393.tar.gz
gcc-6b3736a12b14c2d2dddafeea0941aaaf413af393.tar.bz2
reload.c (combine_reloads): Don't combine an output reload if there are other reloads around for part of...
* reload.c (combine_reloads): Don't combine an output reload if there are other reloads around for part of the output. From-SVN: r46734
Diffstat (limited to 'gcc/reload.c')
-rw-r--r--gcc/reload.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/reload.c b/gcc/reload.c
index 9ed9cd0..ad884ae 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -1641,6 +1641,16 @@ combine_reloads ()
if (earlyclobber_operand_p (rld[output_reload].out))
return;
+ /* If there is a reload for part of the address of this operand, we would
+ need to chnage it to RELOAD_FOR_OTHER_ADDRESS. But that would extend
+ its life to the point where doing this combine would not lower the
+ number of spill registers needed. */
+ for (i = 0; i < n_reloads; i++)
+ if ((rld[i].when_needed == RELOAD_FOR_OUTPUT_ADDRESS
+ || rld[i].when_needed == RELOAD_FOR_OUTADDR_ADDRESS)
+ && rld[i].opnum == rld[output_reload].opnum)
+ return;
+
/* Check each input reload; can we combine it? */
for (i = 0; i < n_reloads; i++)