Commit a23644f2 by Richard Sandiford Committed by Richard Sandiford

poly_int: vect_get_constant_vectors

For now, vect_get_constant_vectors can only cope with constant-length
vectors, although a patch after the main SVE submission relaxes this.
This patch adds an appropriate guard for variable-length vectors.
The TYPE_VECTOR_SUBPARTS use in vect_get_constant_vectors will then
have a to_constant call when TYPE_VECTOR_SUBPARTS becomes a poly_int.

2018-01-03  Richard Sandiford  <richard.sandiford@linaro.org>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

gcc/
	* tree-vect-slp.c (vect_get_and_check_slp_defs): Reject
	constant and extern definitions for variable-length vectors.
	(vect_get_constant_vectors): Note that the number of units
	is known to be constant.

Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>

From-SVN: r256140
parent 062d5ccc
...@@ -2,6 +2,15 @@ ...@@ -2,6 +2,15 @@
Alan Hayward <alan.hayward@arm.com> Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com> David Sherwood <david.sherwood@arm.com>
* tree-vect-slp.c (vect_get_and_check_slp_defs): Reject
constant and extern definitions for variable-length vectors.
(vect_get_constant_vectors): Note that the number of units
is known to be constant.
2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* tree-vect-stmts.c (vectorizable_conversion): Treat the number * tree-vect-stmts.c (vectorizable_conversion): Treat the number
of units as polynomial. Choose between WIDE and NARROW based of units as polynomial. Choose between WIDE and NARROW based
on multiple_p. on multiple_p.
...@@ -405,6 +405,20 @@ again: ...@@ -405,6 +405,20 @@ again:
{ {
case vect_constant_def: case vect_constant_def:
case vect_external_def: case vect_external_def:
/* We must already have set a vector size by now. */
gcc_checking_assert (maybe_ne (current_vector_size, 0U));
if (!current_vector_size.is_constant ())
{
if (dump_enabled_p ())
{
dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
"Build SLP failed: invalid type of def "
"for variable-length SLP ");
dump_generic_expr (MSG_MISSED_OPTIMIZATION, TDF_SLIM, oprnd);
dump_printf (MSG_MISSED_OPTIMIZATION, "\n");
}
return -1;
}
break; break;
case vect_reduction_def: case vect_reduction_def:
...@@ -3233,6 +3247,7 @@ vect_get_constant_vectors (tree op, slp_tree slp_node, ...@@ -3233,6 +3247,7 @@ vect_get_constant_vectors (tree op, slp_tree slp_node,
= build_same_sized_truth_vector_type (STMT_VINFO_VECTYPE (stmt_vinfo)); = build_same_sized_truth_vector_type (STMT_VINFO_VECTYPE (stmt_vinfo));
else else
vector_type = get_vectype_for_scalar_type (TREE_TYPE (op)); vector_type = get_vectype_for_scalar_type (TREE_TYPE (op));
/* Enforced by vect_get_and_check_slp_defs. */
nunits = TYPE_VECTOR_SUBPARTS (vector_type); nunits = TYPE_VECTOR_SUBPARTS (vector_type);
if (STMT_VINFO_DATA_REF (stmt_vinfo)) if (STMT_VINFO_DATA_REF (stmt_vinfo))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment