]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR rtl-optimization/10352 (ICE in find_reloads_toplev)
authorRichard Henderson <rth@redhat.com>
Thu, 10 Apr 2003 22:17:36 +0000 (15:17 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Thu, 10 Apr 2003 22:17:36 +0000 (15:17 -0700)
        PR opt/10352
        Tue Jul 23 21:49:24 2002  J"orn Rennecke <joern.rennecke@superh.com>
        * simplify-rtx.c (simplify_subreg): When converting to a non-int
        mode, try to convert to an integer mode of matching size first.
* g++.dg/opt/reload2.C: New.

From-SVN: r65441

gcc/ChangeLog
gcc/simplify-rtx.c

index 95bc948fe15ca61e7a8e644a219da95a1402ab15..1e7b58270aa2f3907f5b03efe1faa87c49536514 100644 (file)
@@ -1,3 +1,10 @@
+2003-04-09  Richard Henderson  <rth@redhat.com>
+
+       PR opt/10352
+       Tue Jul 23 21:49:24 2002  J"orn Rennecke <joern.rennecke@superh.com>
+       * simplify-rtx.c (simplify_subreg): When converting to a non-int
+       mode, try to convert to an integer mode of matching size first.
+
 2003-04-09  Alan Modra  <amodra@bigpond.net.au>
 
        * config/rs6000/rs6000.c (rs6000_emit_prologue): Use correct mode to
index 2896041c4fd9f3ddaf210e529607f08ca9001f96..afd2b3c5d704a7ea6cd451265309401e102bda22 100644 (file)
@@ -2484,6 +2484,20 @@ simplify_subreg (outermode, op, innermode, byte)
            return new;
        }
 
+      if (GET_MODE_CLASS (outermode) != MODE_INT
+         && GET_MODE_CLASS (outermode) != MODE_CC)
+       {
+         enum machine_mode new_mode = int_mode_for_mode (outermode);
+
+         if (new_mode != innermode || byte != 0)
+           {
+             op = simplify_subreg (new_mode, op, innermode, byte);
+             if (! op)
+               return NULL_RTX;
+             return simplify_subreg (outermode, op, new_mode, 0);
+           }
+       }
+
       offset = byte * BITS_PER_UNIT;
       switch (GET_CODE (op))
        {