reload.c (push_reload): Check for subreg_lowpart_p instead of SUBREG_BYTE being 0 when...
* reload.c (push_reload): Check for subreg_lowpart_p instead of SUBREG_BYTE being 0 when determining if the inner part of a subreg can be reloaded. From-SVN: r45480
This commit is contained in:
parent
4a063bec6e
commit
b4905cba94
@ -1,3 +1,9 @@
|
||||
2001-09-07 Roman Lechtchinsky <rl@cs.tu-berlin.de>
|
||||
|
||||
* reload.c (push_reload): Check for subreg_lowpart_p instead of
|
||||
SUBREG_BYTE being 0 when determining if the inner part of a subreg
|
||||
can be reloaded.
|
||||
|
||||
2001-09-07 Roman Lechtchinsky <rl@cs.tu-berlin.de>
|
||||
|
||||
* c-common.c (signed_or_unsigned_type): Handle machine mode types
|
||||
|
@ -937,13 +937,13 @@ push_reload (in, out, inloc, outloc, class,
|
||||
|
||||
Finally, reload the inner expression if it is a register that is in
|
||||
the class whose registers cannot be referenced in a different size
|
||||
and M1 is not the same size as M2. If SUBREG_BYTE is nonzero, we
|
||||
and M1 is not the same size as M2. If subreg_lowpart_p is false, we
|
||||
cannot reload just the inside since we might end up with the wrong
|
||||
register class. But if it is inside a STRICT_LOW_PART, we have
|
||||
no choice, so we hope we do get the right register class there. */
|
||||
|
||||
if (in != 0 && GET_CODE (in) == SUBREG
|
||||
&& (SUBREG_BYTE (in) == 0 || strict_low)
|
||||
&& (subreg_lowpart_p (in) || strict_low)
|
||||
#ifdef CLASS_CANNOT_CHANGE_MODE
|
||||
&& (class != CLASS_CANNOT_CHANGE_MODE
|
||||
|| ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)), inmode))
|
||||
@ -977,7 +977,7 @@ push_reload (in, out, inloc, outloc, class,
|
||||
&& REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
|
||||
/* The case where out is nonzero
|
||||
is handled differently in the following statement. */
|
||||
&& (out == 0 || SUBREG_BYTE (in) == 0)
|
||||
&& (out == 0 || subreg_lowpart_p (in))
|
||||
&& ((GET_MODE_SIZE (inmode) <= UNITS_PER_WORD
|
||||
&& (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
|
||||
> UNITS_PER_WORD)
|
||||
@ -1056,7 +1056,7 @@ push_reload (in, out, inloc, outloc, class,
|
||||
(except in the case of STRICT_LOW_PART,
|
||||
and in that case the constraint should label it input-output.) */
|
||||
if (out != 0 && GET_CODE (out) == SUBREG
|
||||
&& (SUBREG_BYTE (out) == 0 || strict_low)
|
||||
&& (subreg_lowpart_p (out) || strict_low)
|
||||
#ifdef CLASS_CANNOT_CHANGE_MODE
|
||||
&& (class != CLASS_CANNOT_CHANGE_MODE
|
||||
|| ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)),
|
||||
|
Loading…
x
Reference in New Issue
Block a user