OSDN Git Service

* rtlanal.c (subreg_offset_representable_p): Fix call of
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Apr 2003 12:57:36 +0000 (12:57 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 19 Apr 2003 12:57:36 +0000 (12:57 +0000)
subreg_lowpart.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65817 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/rtlanal.c

index 4a987d5..176f4b1 100644 (file)
@@ -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.
index 80fff63..b0c76cc 100644 (file)
@@ -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);