mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 08:50:26 +08:00
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>
|
||||
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. */
|
||||
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
|
||||
architecture variant does not have an HImode register move. */
|
||||
if (base == NULL)
|
||||
{
|
||||
gcc_assert (REG_P (outval));
|
||||
emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 0),
|
||||
gen_rtx_SUBREG (SImode, outval, 0)));
|
||||
gcc_assert (REG_P (outval) || SUBREG_P (outval));
|
||||
|
||||
if (REG_P (outval))
|
||||
{
|
||||
emit_insn (gen_movsi (gen_rtx_SUBREG (SImode, ref, 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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user