Commit faa5399b by Richard Biener Committed by Richard Biener

tree-vect-slp.c (vect_bb_slp_scalar_cost): Properly confine life to the active subtree.

2017-08-29  Richard Biener  <rguenther@suse.de>
	Dominik Infuehr <dominik.infuehr@theobroma-systems.com>

	* tree-vect-slp.c (vect_bb_slp_scalar_cost): Properly confine
	life to the active subtree.

	* gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp.c: New testcase.

Co-Authored-By: Dominik Infuehr <dominik.infuehr@theobroma-systems.com>

From-SVN: r251398
parent 14d62813
2017-08-29 Richard Biener <rguenther@suse.de>
Dominik Infuehr <dominik.infuehr@theobroma-systems.com>
* tree-vect-slp.c (vect_bb_slp_scalar_cost): Properly confine
life to the active subtree.
2017-08-28 Jeff Law <law@redhat.com> 2017-08-28 Jeff Law <law@redhat.com>
* tree-ssa-dom.c (edge_info::record_simple_equiv): Call * tree-ssa-dom.c (edge_info::record_simple_equiv): Call
......
2017-08-29 Richard Biener <rguenther@suse.de>
Dominik Infuehr <dominik.infuehr@theobroma-systems.com>
* gcc.dg/vect/costmodel/x86_64/costmodel-vect-slp.c: New testcase.
2017-08-28 Jeff Law <law@redhat.com> 2017-08-28 Jeff Law <law@redhat.com>
* gcc.dg/torture/pr57214.c: Fix type of loop counter. * gcc.dg/torture/pr57214.c: Fix type of loop counter.
......
/* { dg-do compile } */
/* { dg-additional-options "-fdump-tree-slp-details" } */
#define N 4
int s1[N], s2[N], s3[N];
void escape(int, int, int, int);
void
foo ()
{
int t1, t2, t3, t4;
t1 = s1[0] + s2[0] + s3[0];
t2 = s1[1] + s2[1] + s3[1];
t3 = s1[2] + s2[2] + s3[2];
t4 = s1[3] + s2[3] + s3[3];
s3[0] = t1 - s1[0] * s2[0];
s3[1] = t2 - s1[1] * s2[1];
s3[2] = t3 - s1[2] * s2[2];
s3[3] = t4 - s1[3] * s2[3];
escape (t1, t2, t3, t4);
}
/* { dg-final { scan-tree-dump-not "vectorization is not profitable" "slp2" } } */
/* { dg-final { scan-tree-dump "basic block vectorized" "slp2" } } */
...@@ -2690,9 +2690,18 @@ vect_bb_slp_scalar_cost (basic_block bb, ...@@ -2690,9 +2690,18 @@ vect_bb_slp_scalar_cost (basic_block bb,
scalar_cost += stmt_cost; scalar_cost += stmt_cost;
} }
auto_vec<bool, 20> subtree_life;
FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child) FOR_EACH_VEC_ELT (SLP_TREE_CHILDREN (node), i, child)
if (SLP_TREE_DEF_TYPE (child) == vect_internal_def) {
scalar_cost += vect_bb_slp_scalar_cost (bb, child, life); if (SLP_TREE_DEF_TYPE (child) == vect_internal_def)
{
/* Do not directly pass LIFE to the recursive call, copy it to
confine changes in the callee to the current child/subtree. */
subtree_life.safe_splice (*life);
scalar_cost += vect_bb_slp_scalar_cost (bb, child, &subtree_life);
subtree_life.truncate (0);
}
}
return scalar_cost; return scalar_cost;
} }
......
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