------- 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

Reply via email to