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
This commit is contained in:
parent
644a47612e
commit
696814edb8
@ -1,3 +1,10 @@
|
|||||||
|
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
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
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.
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
/* { 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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
/* 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,
|
|||||||
|
|
||||||
(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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user