Commit 062d5ccc by Richard Sandiford Committed by Richard Sandiford

poly_int: vectorizable_conversion

This patch makes vectorizable_conversion cope with variable-length
vectors.  We already require the number of elements in one vector
to be a multiple of the number of elements in the other vector,
so the patch uses that to choose between widening and narrowing.

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

gcc/
	* tree-vect-stmts.c (vectorizable_conversion): Treat the number
	of units as polynomial.  Choose between WIDE and NARROW based
	on multiple_p.

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

From-SVN: r256139
parent cf1b2ba4
...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
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-stmts.c (vectorizable_conversion): Treat the number
of units as polynomial. Choose between WIDE and NARROW based
on multiple_p.
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 (simd_clone_subparts): New function. * tree-vect-stmts.c (simd_clone_subparts): New function.
(vectorizable_simd_clone_call): Use it instead of TYPE_VECTOR_SUBPARTS. (vectorizable_simd_clone_call): Use it instead of TYPE_VECTOR_SUBPARTS.
...@@ -4115,8 +4115,8 @@ vectorizable_conversion (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -4115,8 +4115,8 @@ vectorizable_conversion (gimple *stmt, gimple_stmt_iterator *gsi,
int ndts = 2; int ndts = 2;
gimple *new_stmt = NULL; gimple *new_stmt = NULL;
stmt_vec_info prev_stmt_info; stmt_vec_info prev_stmt_info;
int nunits_in; poly_uint64 nunits_in;
int nunits_out; poly_uint64 nunits_out;
tree vectype_out, vectype_in; tree vectype_out, vectype_in;
int ncopies, i, j; int ncopies, i, j;
tree lhs_type, rhs_type; tree lhs_type, rhs_type;
...@@ -4251,12 +4251,15 @@ vectorizable_conversion (gimple *stmt, gimple_stmt_iterator *gsi, ...@@ -4251,12 +4251,15 @@ vectorizable_conversion (gimple *stmt, gimple_stmt_iterator *gsi,
nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in); nunits_in = TYPE_VECTOR_SUBPARTS (vectype_in);
nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out); nunits_out = TYPE_VECTOR_SUBPARTS (vectype_out);
if (nunits_in < nunits_out) if (known_eq (nunits_out, nunits_in))
modifier = NARROW;
else if (nunits_out == nunits_in)
modifier = NONE; modifier = NONE;
else if (multiple_p (nunits_out, nunits_in))
modifier = NARROW;
else else
modifier = WIDEN; {
gcc_checking_assert (multiple_p (nunits_in, nunits_out));
modifier = WIDEN;
}
/* Multiple types in SLP are handled by creating the appropriate number of /* Multiple types in SLP are handled by creating the appropriate number of
vectorized stmts for each SLP node. Hence, NCOPIES is always 1 in vectorized stmts for each SLP node. Hence, NCOPIES is always 1 in
......
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