(reload): Add IN_ADDR to IN_ADDR_ADDR when computing needs since they conflict.

From-SVN: r14635
This commit is contained in:
Richard Kenner 1997-08-02 17:46:08 -04:00
parent 505923a0ad
commit b080c137d7

View File

@ -1193,7 +1193,6 @@ reload (first, global, dumpfile)
new_basic_block_needs = 1; new_basic_block_needs = 1;
} }
mode = reload_inmode[i]; mode = reload_inmode[i];
if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode)) if (GET_MODE_SIZE (reload_outmode[i]) > GET_MODE_SIZE (mode))
mode = reload_outmode[i]; mode = reload_outmode[i];
@ -1325,11 +1324,10 @@ reload (first, global, dumpfile)
for (in_max = 0, out_max = 0, k = 0; for (in_max = 0, out_max = 0, k = 0;
k < reload_n_operands; k++) k < reload_n_operands; k++)
{ {
in_max
= MAX (in_max, insn_needs.in_addr[k].regs[j][i]);
in_max in_max
= MAX (in_max, = MAX (in_max,
insn_needs.in_addr_addr[k].regs[j][i]); (insn_needs.in_addr[k].regs[j][i]
+ insn_needs.in_addr_addr[k].regs[j][i]));
out_max out_max
= MAX (out_max, insn_needs.out_addr[k].regs[j][i]); = MAX (out_max, insn_needs.out_addr[k].regs[j][i]);
out_max out_max
@ -5437,12 +5435,14 @@ choose_reload_regs (insn, avoid_return_reg)
register int r = reload_order[j]; register int r = reload_order[j];
/* Ignore reloads that got marked inoperative. */ /* Ignore reloads that got marked inoperative. */
if (reload_out[r] == 0 && reload_in[r] == 0 && ! reload_secondary_p[r]) if (reload_out[r] == 0 && reload_in[r] == 0
&& ! reload_secondary_p[r])
continue; continue;
/* If find_reloads chose a to use reload_in or reload_out as a reload /* If find_reloads chose a to use reload_in or reload_out as a reload
register, we don't need to chose one. Otherwise, try even if it found register, we don't need to chose one. Otherwise, try even if it
one since we might save an insn if we find the value lying around. */ found one since we might save an insn if we find the value lying
around. */
if (reload_in[r] != 0 && reload_reg_rtx[r] != 0 if (reload_in[r] != 0 && reload_reg_rtx[r] != 0
&& (rtx_equal_p (reload_in[r], reload_reg_rtx[r]) && (rtx_equal_p (reload_in[r], reload_reg_rtx[r])
|| rtx_equal_p (reload_out[r], reload_reg_rtx[r]))) || rtx_equal_p (reload_out[r], reload_reg_rtx[r])))
@ -5474,9 +5474,9 @@ choose_reload_regs (insn, avoid_return_reg)
an object that is already in a register of the desired class. an object that is already in a register of the desired class.
This would avoid the need for the secondary reload register. This would avoid the need for the secondary reload register.
But this is complex because we can't easily determine what But this is complex because we can't easily determine what
objects might want to be loaded via this reload. So let a register objects might want to be loaded via this reload. So let a
be allocated here. In `emit_reload_insns' we suppress one of the register be allocated here. In `emit_reload_insns' we suppress
loads in the case described above. */ one of the loads in the case described above. */
if (inheritance) if (inheritance)
{ {