The vectoriser was calling vect_get_smallest_scalar_type without
having proven that the type actually is a scalar. This seems to
be the intended behaviour: the ultimate test of whether the type
is interesting (and hence scalar) is whether an associated vector
type exists, but this is only tested later.
The patch simply makes the function cope gracefully with non-scalar
inputs.
2017-09-18 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* tree-vect-data-refs.c (vect_get_smallest_scalar_type): Cope
with types that aren't in fact scalar.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r252934
+2017-09-18 Richard Sandiford <richard.sandiford@linaro.org>
+ Alan Hayward <alan.hayward@arm.com>
+ David Sherwood <david.sherwood@arm.com>
+
+ * tree-vect-data-refs.c (vect_get_smallest_scalar_type): Cope
+ with types that aren't in fact scalar.
+
2017-09-18 Richard Sandiford <richard.sandiford@linaro.org>
* tree-vect-slp.c (vect_record_max_nunits): New function,
tree scalar_type = gimple_expr_type (stmt);
HOST_WIDE_INT lhs, rhs;
+ /* During the analysis phase, this function is called on arbitrary
+ statements that might not have scalar results. */
+ if (!tree_fits_uhwi_p (TYPE_SIZE_UNIT (scalar_type)))
+ return scalar_type;
+
lhs = rhs = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (scalar_type));
if (is_gimple_assign (stmt)