reload.c (find_reloads): Use a hard reg destination as reload reg for an input reload of the source.
* reload.c (find_reloads): Use a hard reg destination as reload reg for an input reload of the source. From-SVN: r48822
This commit is contained in:
parent
332a685b95
commit
02a10130ff
@ -1,3 +1,8 @@
|
|||||||
|
2002-01-13 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* reload.c (find_reloads): Use a hard reg destination as reload reg
|
||||||
|
for an input reload of the source.
|
||||||
|
|
||||||
2002-01-13 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
|
2002-01-13 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
|
||||||
|
|
||||||
* doc/install.texi (Binaries): Make link to ftp.writtenword.com
|
* doc/install.texi (Binaries): Make link to ftp.writtenword.com
|
||||||
|
17
gcc/reload.c
17
gcc/reload.c
@ -4241,6 +4241,23 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p)
|
|||||||
rld[i].nregs = CLASS_MAX_NREGS (rld[i].class, rld[i].mode);
|
rld[i].nregs = CLASS_MAX_NREGS (rld[i].class, rld[i].mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Special case a simple move with an input reload and a
|
||||||
|
destination of a hard reg, if the hard reg is ok, use it. */
|
||||||
|
for (i = 0; i < n_reloads; i++)
|
||||||
|
if (rld[i].when_needed == RELOAD_FOR_INPUT
|
||||||
|
&& GET_CODE (PATTERN (insn)) == SET
|
||||||
|
&& GET_CODE (SET_DEST (PATTERN (insn))) == REG
|
||||||
|
&& SET_SRC (PATTERN (insn)) == rld[i].in)
|
||||||
|
{
|
||||||
|
rtx dest = SET_DEST (PATTERN (insn));
|
||||||
|
unsigned int regno = REGNO (dest);
|
||||||
|
|
||||||
|
if (regno < FIRST_PSEUDO_REGISTER
|
||||||
|
&& TEST_HARD_REG_BIT (reg_class_contents[rld[i].class], regno)
|
||||||
|
&& HARD_REGNO_MODE_OK (regno, rld[i].mode))
|
||||||
|
rld[i].reg_rtx = dest;
|
||||||
|
}
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user