Commit 696814ed by Richard Biener Committed by Richard Biener

re PR tree-optimization/64909 (Missed vectorization with bdver1)

2015-02-10  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/64909
	* tree-vect-loop.c (vect_estimate_min_profitable_iters): Properly
	pass a scalar-stmt count estimate to the cost model.
	* tree-vect-data-refs.c (vect_peeling_hash_get_lowest_cost): Likewise.

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

From-SVN: r220580
parent 644a4761
2015-02-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/64909
* tree-vect-loop.c (vect_estimate_min_profitable_iters): Properly
pass a scalar-stmt count estimate to the cost model.
* tree-vect-data-refs.c (vect_peeling_hash_get_lowest_cost): Likewise.
2015-02-10 Alexander Monakov <amonakov@ispras.ru> 2015-02-10 Alexander Monakov <amonakov@ispras.ru>
* doc/invoke.texi (-fvar-tracking-assignments): Clarify that VTA is * doc/invoke.texi (-fvar-tracking-assignments): Clarify that VTA is
......
2015-02-10 Richard Biener <rguenther@suse.de>
PR tree-optimization/64909
* gcc.dg/vect/costmodel/x86_64/costmodel-pr64909.c: New testcase.
2015-02-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2015-02-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gcc.dg/signbit-sa.c: New test. * gcc.dg/signbit-sa.c: New test.
......
/* { dg-do compile } */
/* { dg-require-effective-target vect_int } */
/* { dg-additional-options "-mtune=bdver1" } */
unsigned short a[32];
unsigned int b[32];
void t()
{
int i;
for (i=0;i<12;i++)
b[i]=a[i];
}
/* { dg-final { scan-tree-dump "vectorized 1 loops in function" "vect" } } */
/* { dg-final { cleanup-tree-dump "vect" } } */
...@@ -1184,10 +1184,13 @@ vect_peeling_hash_get_lowest_cost (_vect_peel_info **slot, ...@@ -1184,10 +1184,13 @@ vect_peeling_hash_get_lowest_cost (_vect_peel_info **slot,
} }
single_iter_cost = vect_get_single_scalar_iteration_cost (loop_vinfo); single_iter_cost = vect_get_single_scalar_iteration_cost (loop_vinfo);
outside_cost += vect_get_known_peeling_cost (loop_vinfo, elem->npeel, outside_cost += vect_get_known_peeling_cost
&dummy, single_iter_cost, (loop_vinfo, elem->npeel, &dummy,
&prologue_cost_vec, /* ??? We use this cost as number of stmts with scalar_stmt cost,
&epilogue_cost_vec); thus divide by that. This introduces rounding errors, thus better
introduce a new cost kind (raw_cost? scalar_iter_cost?). */
single_iter_cost / vect_get_stmt_cost (scalar_stmt),
&prologue_cost_vec, &epilogue_cost_vec);
/* Prologue and epilogue costs are added to the target model later. /* Prologue and epilogue costs are added to the target model later.
These costs depend only on the scalar iteration cost, the These costs depend only on the scalar iteration cost, the
......
...@@ -2834,6 +2834,11 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo, ...@@ -2834,6 +2834,11 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
statements. */ statements. */
scalar_single_iter_cost = vect_get_single_scalar_iteration_cost (loop_vinfo); scalar_single_iter_cost = vect_get_single_scalar_iteration_cost (loop_vinfo);
/* ??? Below we use this cost as number of stmts with scalar_stmt cost,
thus divide by that. This introduces rounding errors, thus better
introduce a new cost kind (raw_cost? scalar_iter_cost?). */
int scalar_single_iter_stmts
= scalar_single_iter_cost / vect_get_stmt_cost (scalar_stmt);
/* Add additional cost for the peeled instructions in prologue and epilogue /* Add additional cost for the peeled instructions in prologue and epilogue
loop. loop.
...@@ -2868,10 +2873,10 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo, ...@@ -2868,10 +2873,10 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
/* FORNOW: Don't attempt to pass individual scalar instructions to /* FORNOW: Don't attempt to pass individual scalar instructions to
the model; just assume linear cost for scalar iterations. */ the model; just assume linear cost for scalar iterations. */
(void) add_stmt_cost (target_cost_data, (void) add_stmt_cost (target_cost_data,
peel_iters_prologue * scalar_single_iter_cost, peel_iters_prologue * scalar_single_iter_stmts,
scalar_stmt, NULL, 0, vect_prologue); scalar_stmt, NULL, 0, vect_prologue);
(void) add_stmt_cost (target_cost_data, (void) add_stmt_cost (target_cost_data,
peel_iters_epilogue * scalar_single_iter_cost, peel_iters_epilogue * scalar_single_iter_stmts,
scalar_stmt, NULL, 0, vect_epilogue); scalar_stmt, NULL, 0, vect_epilogue);
} }
else else
...@@ -2887,7 +2892,7 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo, ...@@ -2887,7 +2892,7 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
(void) vect_get_known_peeling_cost (loop_vinfo, peel_iters_prologue, (void) vect_get_known_peeling_cost (loop_vinfo, peel_iters_prologue,
&peel_iters_epilogue, &peel_iters_epilogue,
scalar_single_iter_cost, scalar_single_iter_stmts,
&prologue_cost_vec, &prologue_cost_vec,
&epilogue_cost_vec); &epilogue_cost_vec);
......
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