reload1.c (choose_reload_regs): Check for invalid subregs before computing their locations, not after.

* reload1.c (choose_reload_regs): Check for invalid subregs before
computing their locations, not after.

From-SVN: r121198
This commit is contained in:
DJ Delorie 2007-01-25 20:15:05 -05:00 committed by DJ Delorie
parent e858910352
commit 21f14ff955
2 changed files with 15 additions and 8 deletions

View File

@ -1,3 +1,8 @@
2007-01-25 DJ Delorie <dj@redhat.com>
* reload1.c (choose_reload_regs): Check for invalid subregs before
computing their locations, not after.
2007-01-25 Geoffrey Keating <geoffk@apple.com>
PR 25127

View File

@ -5653,7 +5653,16 @@ choose_reload_regs (struct insn_chain *chain)
regno = subreg_regno (rld[r].in);
#endif
if (regno >= 0 && reg_last_reload_reg[regno] != 0)
if (regno >= 0
&& reg_last_reload_reg[regno] != 0
#ifdef CANNOT_CHANGE_MODE_CLASS
/* Verify that the register it's in can be used in
mode MODE. */
&& !REG_CANNOT_CHANGE_MODE_P (REGNO (reg_last_reload_reg[regno]),
GET_MODE (reg_last_reload_reg[regno]),
mode)
#endif
)
{
enum reg_class class = rld[r].class, last_class;
rtx last_reg = reg_last_reload_reg[regno];
@ -5673,13 +5682,6 @@ choose_reload_regs (struct insn_chain *chain)
if ((GET_MODE_SIZE (GET_MODE (last_reg))
>= GET_MODE_SIZE (need_mode))
#ifdef CANNOT_CHANGE_MODE_CLASS
/* Verify that the register in "i" can be obtained
from LAST_REG. */
&& !REG_CANNOT_CHANGE_MODE_P (REGNO (last_reg),
GET_MODE (last_reg),
mode)
#endif
&& reg_reloaded_contents[i] == regno
&& TEST_HARD_REG_BIT (reg_reloaded_valid, i)
&& HARD_REGNO_MODE_OK (i, rld[r].mode)