+2014-11-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/63910
+ * simplify-rtx.c (simplify_immed_subreg): Return NULL for integer
+ modes wider than MAX_BITSIZE_MODE_ANY_INT. If not using
+ CONST_WIDE_INT, make sure r fits into CONST_DOUBLE.
+
2014-11-21 Markus Trippelsdorf <markus@trippelsdorf.de>
* config/rs6000/rs6000.c (includes_rldic_lshift_p): Use
HOST_WIDE_INT tmp[MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_WIDE_INT];
wide_int r;
+ if (GET_MODE_PRECISION (outer_submode) > MAX_BITSIZE_MODE_ANY_INT)
+ return NULL_RTX;
for (u = 0; u < units; u++)
{
unsigned HOST_WIDE_INT buf = 0;
tmp[u] = buf;
base += HOST_BITS_PER_WIDE_INT;
}
- gcc_assert (GET_MODE_PRECISION (outer_submode)
- <= MAX_BITSIZE_MODE_ANY_INT);
r = wide_int::from_array (tmp, units,
GET_MODE_PRECISION (outer_submode));
+#if TARGET_SUPPORTS_WIDE_INT == 0
+ /* Make sure r will fit into CONST_INT or CONST_DOUBLE. */
+ if (wi::min_precision (r, SIGNED) > HOST_BITS_PER_DOUBLE_INT)
+ return NULL_RTX;
+#endif
elems[elem] = immed_wide_int_const (r, outer_submode);
}
break;
+2014-11-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/63910
+ * gcc.target/i386/pr63910.c: New test.
+
2014-11-21 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR lto/63998