Commit b4905cba by Roman Lechtchinsky Committed by Richard Henderson

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
parent 4a063bec
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> 2001-09-07 Roman Lechtchinsky <rl@cs.tu-berlin.de>
* c-common.c (signed_or_unsigned_type): Handle machine mode types * c-common.c (signed_or_unsigned_type): Handle machine mode types
......
...@@ -937,13 +937,13 @@ push_reload (in, out, inloc, outloc, class, ...@@ -937,13 +937,13 @@ push_reload (in, out, inloc, outloc, class,
Finally, reload the inner expression if it is a register that is in Finally, reload the inner expression if it is a register that is in
the class whose registers cannot be referenced in a different size 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 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 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. */ no choice, so we hope we do get the right register class there. */
if (in != 0 && GET_CODE (in) == SUBREG if (in != 0 && GET_CODE (in) == SUBREG
&& (SUBREG_BYTE (in) == 0 || strict_low) && (subreg_lowpart_p (in) || strict_low)
#ifdef CLASS_CANNOT_CHANGE_MODE #ifdef CLASS_CANNOT_CHANGE_MODE
&& (class != CLASS_CANNOT_CHANGE_MODE && (class != CLASS_CANNOT_CHANGE_MODE
|| ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)), inmode)) || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (in)), inmode))
...@@ -977,7 +977,7 @@ push_reload (in, out, inloc, outloc, class, ...@@ -977,7 +977,7 @@ push_reload (in, out, inloc, outloc, class,
&& REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER && REGNO (SUBREG_REG (in)) < FIRST_PSEUDO_REGISTER
/* The case where out is nonzero /* The case where out is nonzero
is handled differently in the following statement. */ 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 (inmode) <= UNITS_PER_WORD
&& (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in))) && (GET_MODE_SIZE (GET_MODE (SUBREG_REG (in)))
> UNITS_PER_WORD) > UNITS_PER_WORD)
...@@ -1056,7 +1056,7 @@ push_reload (in, out, inloc, outloc, class, ...@@ -1056,7 +1056,7 @@ push_reload (in, out, inloc, outloc, class,
(except in the case of STRICT_LOW_PART, (except in the case of STRICT_LOW_PART,
and in that case the constraint should label it input-output.) */ and in that case the constraint should label it input-output.) */
if (out != 0 && GET_CODE (out) == SUBREG if (out != 0 && GET_CODE (out) == SUBREG
&& (SUBREG_BYTE (out) == 0 || strict_low) && (subreg_lowpart_p (out) || strict_low)
#ifdef CLASS_CANNOT_CHANGE_MODE #ifdef CLASS_CANNOT_CHANGE_MODE
&& (class != CLASS_CANNOT_CHANGE_MODE && (class != CLASS_CANNOT_CHANGE_MODE
|| ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)), || ! CLASS_CANNOT_CHANGE_MODE_P (GET_MODE (SUBREG_REG (out)),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment