aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2003-04-19 14:57:36 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2003-04-19 12:57:36 +0000
commit070154442e8c3011007ae6f5e8f7dc87f90719d2 (patch)
tree7528a625fdf4ebac3efe2a35ac63b4ccf463908b /gcc
parentbced6edfc6c487a9cf671f08417be163904d8def (diff)
downloadgcc-070154442e8c3011007ae6f5e8f7dc87f90719d2.zip
gcc-070154442e8c3011007ae6f5e8f7dc87f90719d2.tar.gz
gcc-070154442e8c3011007ae6f5e8f7dc87f90719d2.tar.bz2
rtlanal.c (subreg_offset_representable_p): Fix call of subreg_lowpart.
* rtlanal.c (subreg_offset_representable_p): Fix call of subreg_lowpart. From-SVN: r65817
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/rtlanal.c13
2 files changed, 13 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4a987d56..176f4b1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Sat Apr 19 14:56:17 CEST 2003 Jan Hubicka <jh@suse.cz>
+
+ * rtlanal.c (subreg_offset_representable_p): Fix call of
+ subreg_lowpart.
+
2003-04-19 Neil Booth <neil@daikokuya.co.uk>
* cpphash.h (struct cpp_reader): New member warned_dollar.
diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c
index 80fff63..b0c76cc 100644
--- a/gcc/rtlanal.c
+++ b/gcc/rtlanal.c
@@ -3432,8 +3432,10 @@ subreg_offset_representable_p (xregno, xmode, offset, ymode)
redesigned. */
if (GET_MODE_SIZE (xmode) % GET_MODE_SIZE (ymode)
|| GET_MODE_SIZE (ymode) % nregs_ymode
- || mode_for_size (GET_MODE_SIZE (ymode) / nregs_ymode,
- MODE_INT, 0) == VOIDmode
+ || (GET_MODE_BITSIZE (mode_for_size (GET_MODE_BITSIZE (xmode)
+ / nregs_xmode,
+ MODE_INT, 0))
+ != GET_MODE_BITSIZE (xmode) / nregs_xmode)
|| nregs_xmode % nregs_ymode)
abort ();
#endif
@@ -3441,9 +3443,10 @@ subreg_offset_representable_p (xregno, xmode, offset, ymode)
/* The XMODE value can be seen as an vector of NREGS_XMODE
values. The subreg must represent an lowpart of given field.
Compute what field it is. */
- offset -= subreg_lowpart_offset (mode_for_size (GET_MODE_SIZE (ymode)
- / nregs_ymode,
- MODE_INT, 0), xmode);
+ offset -= subreg_lowpart_offset (ymode,
+ mode_for_size (GET_MODE_BITSIZE (xmode)
+ / nregs_xmode,
+ MODE_INT, 0));
/* size of ymode must not be greater than the size of xmode. */
mode_multiple = GET_MODE_SIZE (xmode) / GET_MODE_SIZE (ymode);