(emit_reload_insns): Do nothing for SUBREG whose operand is unused subsequently.

(emit_reload_insns): Do nothing for SUBREG whose operand is unused
subsequently.
In secondary reload case, if paradoxical SUBREG for output, reload thing
inside SUBREG, just like gen_reload.

From-SVN: r10284
This commit is contained in:
Richard Kenner 1995-08-26 06:56:53 -04:00
parent 67340b0310
commit a7911cd2b4

View file

@ -6259,6 +6259,16 @@ emit_reload_insns (insn)
XEXP (note, 0) = reload_reg_rtx[j];
continue;
}
/* Likewise for a SUBREG of an operand that dies. */
else if (GET_CODE (old) == SUBREG
&& GET_CODE (SUBREG_REG (old)) == REG
&& 0 != (note = find_reg_note (insn, REG_UNUSED,
SUBREG_REG (old))))
{
XEXP (note, 0) = gen_lowpart_common (GET_MODE (old),
reload_reg_rtx[j]);
continue;
}
else if (GET_CODE (old) == SCRATCH)
/* If we aren't optimizing, there won't be a REG_UNUSED note,
but we don't want to make an output reload. */
@ -6344,11 +6354,23 @@ emit_reload_insns (insn)
{
rtx third_reloadreg
= reload_reg_rtx[reload_secondary_out_reload[secondary_reload]];
rtx tem;
/* Copy primary reload reg to secondary reload reg.
(Note that these have been swapped above, then
secondary reload reg to OLD using our insn. */
/* If REAL_OLD is a paradoxical SUBREG, remove it
and try to put the opposite SUBREG on
RELOADREG. */
if (GET_CODE (real_old) == SUBREG
&& (GET_MODE_SIZE (GET_MODE (real_old))
> GET_MODE_SIZE (GET_MODE (SUBREG_REG (real_old))))
&& 0 != (tem = gen_lowpart_common
(GET_MODE (SUBREG_REG (real_old)),
reloadreg)))
real_old = SUBREG_REG (real_old), reloadreg = tem;
gen_reload (reloadreg, second_reloadreg,
reload_opnum[j], reload_when_needed[j]);
emit_insn ((GEN_FCN (tertiary_icode)