Commit 3f27846b by Daniel Jacobowitz Committed by Daniel Jacobowitz

reload1.c (merge_assigned_reloads): Do not change any RELOAD_FOR_OUTPUT_ADDRESS reloads.

	* reload1.c (merge_assigned_reloads): Do not change any
	RELOAD_FOR_OUTPUT_ADDRESS reloads.

From-SVN: r104827
parent f46876f9
2005-09-30 Daniel Jacobowitz <dan@codesourcery.com>
* reload1.c (merge_assigned_reloads): Do not change any
RELOAD_FOR_OUTPUT_ADDRESS reloads.
2005-09-30 Geoffrey Keating <geoffk@apple.com> 2005-09-30 Geoffrey Keating <geoffk@apple.com>
* config/t-slibgcc-darwin (libgcc_s_%.dylib): Remove old symlinks * config/t-slibgcc-darwin (libgcc_s_%.dylib): Remove old symlinks
......
...@@ -6083,6 +6083,8 @@ merge_assigned_reloads (rtx insn) ...@@ -6083,6 +6083,8 @@ merge_assigned_reloads (rtx insn)
if (j == n_reloads if (j == n_reloads
&& max_input_address_opnum <= min_conflicting_input_opnum) && max_input_address_opnum <= min_conflicting_input_opnum)
{ {
gcc_assert (rld[i].when_needed != RELOAD_FOR_OUTPUT);
for (j = 0; j < n_reloads; j++) for (j = 0; j < n_reloads; j++)
if (i != j && rld[j].reg_rtx != 0 if (i != j && rld[j].reg_rtx != 0
&& rtx_equal_p (rld[i].reg_rtx, rld[j].reg_rtx) && rtx_equal_p (rld[i].reg_rtx, rld[j].reg_rtx)
...@@ -6101,16 +6103,17 @@ merge_assigned_reloads (rtx insn) ...@@ -6101,16 +6103,17 @@ merge_assigned_reloads (rtx insn)
if they were for inputs, RELOAD_OTHER for outputs. Note that if they were for inputs, RELOAD_OTHER for outputs. Note that
this test is equivalent to looking for reloads for this operand this test is equivalent to looking for reloads for this operand
number. */ number. */
/* We must take special care when there are two or more reloads to /* We must take special care with RELOAD_FOR_OUTPUT_ADDRESS; it may
be merged and a RELOAD_FOR_OUTPUT_ADDRESS reload that loads the share registers with a RELOAD_FOR_INPUT, so we can not change it
same value or a part of it; we must not change its type if there to RELOAD_FOR_OTHER_ADDRESS. We should never need to, since we
is a conflicting input. */ do not modify RELOAD_FOR_OUTPUT. */
if (rld[i].when_needed == RELOAD_OTHER) if (rld[i].when_needed == RELOAD_OTHER)
for (j = 0; j < n_reloads; j++) for (j = 0; j < n_reloads; j++)
if (rld[j].in != 0 if (rld[j].in != 0
&& rld[j].when_needed != RELOAD_OTHER && rld[j].when_needed != RELOAD_OTHER
&& rld[j].when_needed != RELOAD_FOR_OTHER_ADDRESS && rld[j].when_needed != RELOAD_FOR_OTHER_ADDRESS
&& rld[j].when_needed != RELOAD_FOR_OUTPUT_ADDRESS
&& (! conflicting_input && (! conflicting_input
|| rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS || rld[j].when_needed == RELOAD_FOR_INPUT_ADDRESS
|| rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS) || rld[j].when_needed == RELOAD_FOR_INPADDR_ADDRESS)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment