Adds a check to ensure that the input vector arguments
to a function are not variable length. Previously, only the
output vector of a function was checked.

gcc/ChangeLog:

        * tree-vect-slp.cc (vectorizable_slp_permutation_1):
        Add variable-length check for vector input arguments
        to a function.
diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
index 086377a9ac08528880c90bee3b1d1e08341a6288..bbd2c51d60baa31ea4169081442e2e9d55055e80 100644
--- a/gcc/tree-vect-slp.cc
+++ b/gcc/tree-vect-slp.cc
@@ -8989,6 +8989,14 @@ vectorizable_slp_permutation_1 (vec_info *vinfo, gimple_stmt_iterator *gsi,
 	 instead of relying on the pattern described above.  */
       if (!nunits.is_constant (&npatterns))
 	return -1;
+      FOR_EACH_VEC_ELT (children, i, child)
+	if (SLP_TREE_VECTYPE (child))
+	  {
+	    tree child_vectype = SLP_TREE_VECTYPE (child);
+	    poly_uint64 child_nunits = TYPE_VECTOR_SUBPARTS (child_vectype);
+	    if (!child_nunits.is_constant ())
+	      return -1;
+	  }
       nelts_per_pattern = ncopies = 1;
       if (loop_vec_info linfo = dyn_cast <loop_vec_info> (vinfo))
 	if (!LOOP_VINFO_VECT_FACTOR (linfo).is_constant (&ncopies))

Reply via email to