mirror of git://gcc.gnu.org/git/gcc.git
re PR target/62254 (gcc-4.9 ICEs on linux kernel zlib for armv3)
PR target/62254 * config/arm/arm.c (arm_reload_out_hi): Add code to handle the case where we are already provided with an SImode SUBREG. From-SVN: r234568
This commit is contained in:
parent
41ec61d3ef
commit
1f73ef6c45
|
|
@ -1,3 +1,9 @@
|
||||||
|
2016-03-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR target/62254
|
||||||
|
* config/arm/arm.c (arm_reload_out_hi): Add code to handle the
|
||||||
|
case where we are already provided with an SImode SUBREG.
|
||||||
|
|
||||||
2016-03-30 Michael Matz <matz@suse.de>
|
2016-03-30 Michael Matz <matz@suse.de>
|
||||||
Richard Biener <rguenther@suse.de>
|
Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15596,14 +15596,27 @@ arm_reload_out_hi (rtx *operands)
|
||||||
/* The slot is out of range, or was dressed up in a SUBREG. */
|
/* The slot is out of range, or was dressed up in a SUBREG. */
|
||||||
base = reg_equiv_address (REGNO (ref));
|
base = reg_equiv_address (REGNO (ref));
|
||||||
|
|
||||||
/* PR 62554: If there is no equivalent memory location then just move
|
/* PR 62254: If there is no equivalent memory location then just move
|
||||||
the value as an SImode register move. This happens when the target
|
the value as an SImode register move. This happens when the target
|
||||||
architecture variant does not have an HImode register move. */
|
architecture variant does not have an HImode register move. */
|
||||||
if (base == NULL)
|
if (base == NULL)
|
||||||
{
|
{
|
||||||
gcc_assert (REG_P (outval));
|
gcc_assert (REG_P (outval) || SUBREG_P (outval));
|
||||||
|
|
||||||
|
if (REG_P (outval))
|
||||||
|
{
|
||||||
emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0),
|
emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0),
|
||||||
gen_rtx_SUBREG (SImode, outval, 0)));
|
gen_rtx_SUBREG (SImode, outval, 0)));
|
||||||
|
}
|
||||||
|
else /* SUBREG_P (outval) */
|
||||||
|
{
|
||||||
|
if (GET_MODE (SUBREG_REG (outval)) == SImode)
|
||||||
|
emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0),
|
||||||
|
SUBREG_REG (outval)));
|
||||||
|
else
|
||||||
|
/* FIXME: Handle other cases ? */
|
||||||
|
gcc_unreachable ();
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue