------- Comment #3 from rguenth at gcc dot gnu dot org 2009-03-30 14:56 -------
We want to simplify
(ashift:V4SI (neg:V4SI (reg:V4SI 87))
(const_int 1 [0x1]))
to
(neg:V4SI (ashift:V4Si (reg:V4SI 87)
(const_int 1 [0x1]))
but the code obviously doesn't expect vector modes. For the particular
case of shifts we pass down zero, so the following would fix^Wworkaround
the issue
Index: gcc/combine.c
===================================================================
--- gcc/combine.c (revision 145291)
+++ gcc/combine.c (working copy)
@@ -8974,7 +8974,8 @@ merge_outer_ops (enum rtx_code *pop0, HO
/* ??? Slightly redundant with the above mask, but not entirely.
Moving this above means we'd have to sign-extend the mode mask
for the final test. */
- const0 = trunc_int_for_mode (const0, mode);
+ if (const0 != 0)
+ const0 = trunc_int_for_mode (const0, mode);
*pop0 = op0;
*pconst0 = const0;
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39588