rtl.h (subreg_info): Expand commentary

gcc/
	* rtl.h (subreg_info): Expand commentary
	* rtlanal.c (subreg_get_info): Likewise.

From-SVN: r215447
This commit is contained in:
Richard Sandiford 2014-09-22 07:36:51 +00:00 committed by Richard Sandiford
parent 853d50d3c8
commit 0cb07998ae
3 changed files with 24 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2014-09-22 Richard Sandiford <richard.sandiford@arm.com>
* rtl.h (subreg_info): Expand commentary
* rtlanal.c (subreg_get_info): Likewise.
2014-09-22 Richard Sandiford <richard.sandiford@arm.com>
* hard-reg-set.h (COPY_HARD_REG_SET, COMPL_HARD_REG_SET)

View File

@ -2875,10 +2875,13 @@ struct subreg_info
{
/* Offset of first hard register involved in the subreg. */
int offset;
/* Number of hard registers involved in the subreg. */
/* Number of hard registers involved in the subreg. In the case of
a paradoxical subreg, this is the number of registers that would
be modified by writing to the subreg; some of them may be don't-care
when reading from the subreg. */
int nregs;
/* Whether this subreg can be represented as a hard reg with the new
mode. */
mode (by adding OFFSET to the original hard register). */
bool representable_p;
};

View File

@ -3410,7 +3410,20 @@ subreg_lsb (const_rtx x)
xmode - The mode of xregno.
offset - The byte offset.
ymode - The mode of a top level SUBREG (or what may become one).
info - Pointer to structure to fill in. */
info - Pointer to structure to fill in.
Rather than considering one particular inner register (and thus one
particular "outer" register) in isolation, this function really uses
XREGNO as a model for a sequence of isomorphic hard registers. Thus the
function does not check whether adding INFO->offset to XREGNO gives
a valid hard register; even if INFO->offset + XREGNO is out of range,
there might be another register of the same type that is in range.
Likewise it doesn't check whether HARD_REGNO_MODE_OK accepts the new
register, since that can depend on things like whether the final
register number is even or odd. Callers that want to check whether
this particular subreg can be replaced by a simple (reg ...) should
use simplify_subreg_regno. */
void
subreg_get_info (unsigned int xregno, enum machine_mode xmode,
unsigned int offset, enum machine_mode ymode,