Hi!

Based on discussions on IRC, I'm submitting following fix for a regression
on aarch64 - partial reversion (the case where VCE works too, just I thought
using NOP_EXPR would be nicer) and change in the assert - op better be
some integral value if converting it to VECTOR_BOOLEAN_TYPE_P's element
type.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2016-01-11  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/69207
        * tree-vect-slp.c (vect_get_constant_vectors): For
        VECTOR_BOOLEAN_TYPE_P, assert op has integral type instead of
        fold_convertible_p to vector_type's element type, and always
        use VCE for non-VECTOR_BOOLEAN_TYPE_P.

--- gcc/tree-vect-slp.c.jj      2016-01-08 21:45:57.000000000 +0100
+++ gcc/tree-vect-slp.c 2016-01-11 12:07:19.633366712 +0100
@@ -2999,12 +2999,9 @@ vect_get_constant_vectors (tree op, slp_
                  gimple *init_stmt;
                  if (VECTOR_BOOLEAN_TYPE_P (vector_type))
                    {
-                     gcc_assert (fold_convertible_p (TREE_TYPE (vector_type),
-                                                     op));
+                     gcc_assert (INTEGRAL_TYPE_P (TREE_TYPE (op)));
                      init_stmt = gimple_build_assign (new_temp, NOP_EXPR, op);
                    }
-                 else if (fold_convertible_p (TREE_TYPE (vector_type), op))
-                   init_stmt = gimple_build_assign (new_temp, NOP_EXPR, op);
                  else
                    {
                      op = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (vector_type),

        Jakub

Reply via email to