re PR middle-end/36447 (simplify_subreg ICE with right shift more than length type...
authorAndy Hutchinson <hutchinsonandy@aim.com>
Mon, 9 Jun 2008 22:38:34 +0000 (22:38 +0000)
committerAndy Hutchinson <hutchinsonandy@gcc.gnu.org>
Mon, 9 Jun 2008 22:38:34 +0000 (22:38 +0000)
PR middle-end/36447
* simplify-rtx.c (simplify_subreg): Add check for shift count greater than size.

From-SVN: r136602

gcc/ChangeLog
gcc/simplify-rtx.c

index f3fbaa29f93e58002b70efb8ba9bf1be27445e6b..de089334244fe555da250e18d9a18a3c5e79c689 100644 (file)
@@ -1,3 +1,9 @@
+2008-06-09  Andy Hutchinson  <hutchinsonandy@aim.com>
+
+       PR middle-end/36447
+       * simplify-rtx.c (simplify_subreg): Add check for shift count 
+       greater than size.
+
 2008-06-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * doc/md.texi: Synchronize with later constraints.md change.
index 15e4c2a3424fe1ce295556d741dbbcade19fa64f..262c91949373d65f64749fd8a280c7dd37d7287d 100644 (file)
@@ -5265,6 +5265,7 @@ simplify_subreg (enum machine_mode outermode, rtx op,
       && GET_MODE_BITSIZE (innermode) >= (2 * GET_MODE_BITSIZE (outermode))
       && GET_CODE (XEXP (op, 1)) == CONST_INT
       && (INTVAL (XEXP (op, 1)) & (GET_MODE_BITSIZE (outermode) - 1)) == 0
+      && INTVAL (XEXP (op, 1)) < GET_MODE_BITSIZE (innermode)      
       && byte == subreg_lowpart_offset (outermode, innermode))
     {
       int shifted_bytes = INTVAL (XEXP (op, 1)) / BITS_PER_UNIT;