Commit 071e8018 by Richard Sandiford Committed by Richard Sandiford

[3/7] Fix load/store costs for strided groups

vect_model_store_cost had:

      /* Costs of the stores.  */
      if (STMT_VINFO_STRIDED_P (stmt_info)
          && !STMT_VINFO_GROUPED_ACCESS (stmt_info))
        {
          /* N scalar stores plus extracting the elements.  */
          inside_cost += record_stmt_cost (body_cost_vec,
				       ncopies * TYPE_VECTOR_SUBPARTS (vectype),
				       scalar_store, stmt_info, 0, vect_body);

But non-SLP strided groups also use individual scalar stores rather than
vector stores, so I think we should skip this only for SLP groups.

The same applies to vect_model_load_cost.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.

gcc/
	* tree-vect-stmts.c (vect_model_store_cost): For non-SLP
	strided groups, use the cost of N scalar accesses instead
	of ncopies vector accesses.
	(vect_model_load_cost): Likewise.

From-SVN: r238035
parent 892a981f
2016-07-06 Richard Sandiford <richard.sandiford@arm.com> 2016-07-06 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-stmts.c (vect_model_store_cost): For non-SLP
strided groups, use the cost of N scalar accesses instead
of ncopies vector accesses.
(vect_model_load_cost): Likewise.
2016-07-06 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-stmts.c (vect_cost_group_size): Delete. * tree-vect-stmts.c (vect_cost_group_size): Delete.
(vect_model_store_cost): Avoid calling it. Use first_stmt_p (vect_model_store_cost): Avoid calling it. Use first_stmt_p
variable to indicate when once-per-group costs are being used. variable to indicate when once-per-group costs are being used.
......
...@@ -926,8 +926,7 @@ vect_model_store_cost (stmt_vec_info stmt_info, int ncopies, ...@@ -926,8 +926,7 @@ vect_model_store_cost (stmt_vec_info stmt_info, int ncopies,
tree vectype = STMT_VINFO_VECTYPE (stmt_info); tree vectype = STMT_VINFO_VECTYPE (stmt_info);
/* Costs of the stores. */ /* Costs of the stores. */
if (STMT_VINFO_STRIDED_P (stmt_info) if (STMT_VINFO_STRIDED_P (stmt_info) && !slp_node)
&& !STMT_VINFO_GROUPED_ACCESS (stmt_info))
{ {
/* N scalar stores plus extracting the elements. */ /* N scalar stores plus extracting the elements. */
inside_cost += record_stmt_cost (body_cost_vec, inside_cost += record_stmt_cost (body_cost_vec,
...@@ -1059,8 +1058,7 @@ vect_model_load_cost (stmt_vec_info stmt_info, int ncopies, ...@@ -1059,8 +1058,7 @@ vect_model_load_cost (stmt_vec_info stmt_info, int ncopies,
} }
/* The loads themselves. */ /* The loads themselves. */
if (STMT_VINFO_STRIDED_P (stmt_info) if (STMT_VINFO_STRIDED_P (stmt_info) && !slp_node)
&& !STMT_VINFO_GROUPED_ACCESS (stmt_info))
{ {
/* N scalar loads plus gathering them into a vector. */ /* N scalar loads plus gathering them into a vector. */
tree vectype = STMT_VINFO_VECTYPE (stmt_info); tree vectype = STMT_VINFO_VECTYPE (stmt_info);
......
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