]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rtlanal.c (subreg_get_info): Do not make register size computations for mode sizes...
authorJoseph Myers <joseph@codesourcery.com>
Thu, 21 Dec 2006 20:58:57 +0000 (20:58 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Thu, 21 Dec 2006 20:58:57 +0000 (20:58 +0000)
* rtlanal.c (subreg_get_info): Do not make register size
computations for mode sizes not divisible by the number of
registers.

From-SVN: r120119

gcc/ChangeLog
gcc/rtlanal.c

index e450bd7ba1dbc6cfe3b62750a2963968655cca16..a6829c9d43b69e4bbefe46b3df00e0d564da587f 100644 (file)
@@ -1,3 +1,9 @@
+2006-12-21  Joseph Myers  <joseph@codesourcery.com>
+
+       * rtlanal.c (subreg_get_info): Do not make register size
+       computations for mode sizes not divisible by the number of
+       registers.
+
 2006-12-21  Daniel Berlin  <dberlin@dberlin.org>
 
        * tree-ssa-structalias.c (build_constraint_graph): Insert complex
index c45a020709f5865c3d54c8cf0ab52256fd66d666..bc2da3c7e2a08e4e950f7a7b1e719af863c01344 100644 (file)
@@ -3028,12 +3028,12 @@ subreg_get_info (unsigned int xregno, enum machine_mode xmode,
   /* If registers store different numbers of bits in the different
      modes, we cannot generally form this subreg.  */
   if (!HARD_REGNO_NREGS_HAS_PADDING (xregno, xmode)
-      && !HARD_REGNO_NREGS_HAS_PADDING (xregno, ymode))
+      && !HARD_REGNO_NREGS_HAS_PADDING (xregno, ymode)
+      && (GET_MODE_SIZE (xmode) % nregs_xmode) == 0
+      && (GET_MODE_SIZE (ymode) % nregs_ymode) == 0)
     {
       regsize_xmode = GET_MODE_SIZE (xmode) / nregs_xmode;
-      gcc_assert (regsize_xmode * nregs_xmode == GET_MODE_SIZE (xmode));
       regsize_ymode = GET_MODE_SIZE (ymode) / nregs_ymode;
-      gcc_assert (regsize_ymode * nregs_ymode == GET_MODE_SIZE (ymode));
       if (!rknown && regsize_xmode > regsize_ymode && nregs_ymode > 1)
        {
          info->representable_p = false;