diff options
author | Roman Lechtchinsky <rl@cs.tu-berlin.de> | 2001-09-07 22:19:05 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-09-07 15:19:05 -0700 |
commit | b4905cba94fdf2453bef733450cc2daa42f7f3c6 (patch) | |
tree | 3c0d11e97a3715d261f4563df14c5535a43ad08a | |
parent | 4a063bec6e3b164cf467ee99e423f9271177be86 (diff) | |
download | gcc-b4905cba94fdf2453bef733450cc2daa42f7f3c6.zip gcc-b4905cba94fdf2453bef733450cc2daa42f7f3c6.tar.gz gcc-b4905cba94fdf2453bef733450cc2daa42f7f3c6.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/reload.c | 8 |
2 files changed, 10 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 75d8514..23382d9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/reload.c b/gcc/reload.c index b069d18..ad4b4e8 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -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)), |