reload1.c (merge_assigned_reloads): Don't change reloads other than RELOAD_FOR_INPUT_ADDRESS /...
* reload1.c (merge_assigned_reloads): Don't change reloads other than RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS to RELOAD_OTHER when there are conflicting input reloads. From-SVN: r54703
This commit is contained in:
parent
0af5c89673
commit
dec0798ef3
2 changed files with 14 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
Mon Jun 17 12:32:24 2002 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
* reload1.c (merge_assigned_reloads): Don't change reloads
|
||||
other than RELOAD_FOR_INPUT_ADDRESS / RELOAD_FOR_INPADDR_ADDRESS
|
||||
to RELOAD_OTHER when there are conflicting input reloads.
|
||||
|
||||
2002-06-17 Richard Earnshaw (rearnsha@arm.com)
|
||||
|
||||
* function.c (epilogue_done): Correctly build a sequence of insns for
|
||||
|
|
|
@ -6096,11 +6096,19 @@ merge_assigned_reloads (insn)
|
|||
if they were for inputs, RELOAD_OTHER for outputs. Note that
|
||||
this test is equivalent to looking for reloads for this operand
|
||||
number. */
|
||||
/* We must take special care when there are two or more reloads to
|
||||
be merged and a RELOAD_FOR_OUTPUT_ADDRESS reload that loads the
|
||||
same value or a part of it; we must not change its type if there
|
||||
is a conflicting input. */
|
||||
|
||||
if (rld[i].when_needed == RELOAD_OTHER)
|
||||
for (j = 0; j < n_reloads; j++)
|
||||
if (rld[j].in != 0
|
||||
&& rld[j].when_needed != RELOAD_OTHER
|
||||
&& rld[j].when_needed != RELOAD_FOR_OTHER_ADDRESS
|
||||
&& (! conflicting_input
|
||||
|| rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
|
||||
|| rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
|
||||
&& reg_overlap_mentioned_for_reload_p (rld[j].in,
|
||||
rld[i].in))
|
||||
rld[j].when_needed
|
||||
|
|
Loading…
Add table
Reference in a new issue