mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-19 06:20:27 +08:00
re PR tree-optimization/84512 (Missed optimization: should be precalculated in compile-time)
2018-02-27 Richard Biener <rguenther@suse.de> PR tree-optimization/84512 * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost): Do not use the estimate returned from record_stmt_cost for the scalar iteration cost but sum properly using add_stmt_cost. * gcc.dg/tree-ssa/pr84512.c: New testcase. From-SVN: r258036
This commit is contained in:
parent
c16d3e3c87
commit
b1ddb654ab
@ -1,3 +1,10 @@
|
||||
2018-02-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/84512
|
||||
* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost):
|
||||
Do not use the estimate returned from record_stmt_cost for
|
||||
the scalar iteration cost but sum properly using add_stmt_cost.
|
||||
|
||||
2018-02-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/84466
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-02-27 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/84512
|
||||
* gcc.dg/tree-ssa/pr84512.c: New testcase.
|
||||
|
||||
2018-02-27 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR gcov-profile/84548
|
||||
|
15
gcc/testsuite/gcc.dg/tree-ssa/pr84512.c
Normal file
15
gcc/testsuite/gcc.dg/tree-ssa/pr84512.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -fdump-tree-optimized" } */
|
||||
|
||||
int foo()
|
||||
{
|
||||
int a[10];
|
||||
for(int i = 0; i < 10; ++i)
|
||||
a[i] = i*i;
|
||||
int res = 0;
|
||||
for(int i = 0; i < 10; ++i)
|
||||
res += a[i];
|
||||
return res;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump "return 285;" "optimized" } } */
|
@ -1384,16 +1384,10 @@ vect_compute_single_scalar_iteration_cost (loop_vec_info loop_vinfo)
|
||||
{
|
||||
struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
|
||||
basic_block *bbs = LOOP_VINFO_BBS (loop_vinfo);
|
||||
int nbbs = loop->num_nodes, factor, scalar_single_iter_cost = 0;
|
||||
int nbbs = loop->num_nodes, factor;
|
||||
int innerloop_iters, i;
|
||||
|
||||
/* Count statements in scalar loop. Using this as scalar cost for a single
|
||||
iteration for now.
|
||||
|
||||
TODO: Add outer loop support.
|
||||
|
||||
TODO: Consider assigning different costs to different scalar
|
||||
statements. */
|
||||
/* Gather costs for statements in the scalar loop. */
|
||||
|
||||
/* FORNOW. */
|
||||
innerloop_iters = 1;
|
||||
@ -1437,13 +1431,28 @@ vect_compute_single_scalar_iteration_cost (loop_vec_info loop_vinfo)
|
||||
else
|
||||
kind = scalar_stmt;
|
||||
|
||||
scalar_single_iter_cost
|
||||
+= record_stmt_cost (&LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),
|
||||
factor, kind, stmt_info, 0, vect_prologue);
|
||||
record_stmt_cost (&LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),
|
||||
factor, kind, stmt_info, 0, vect_prologue);
|
||||
}
|
||||
}
|
||||
LOOP_VINFO_SINGLE_SCALAR_ITERATION_COST (loop_vinfo)
|
||||
= scalar_single_iter_cost;
|
||||
|
||||
/* Now accumulate cost. */
|
||||
void *target_cost_data = init_cost (loop);
|
||||
stmt_info_for_cost *si;
|
||||
int j;
|
||||
FOR_EACH_VEC_ELT (LOOP_VINFO_SCALAR_ITERATION_COST (loop_vinfo),
|
||||
j, si)
|
||||
{
|
||||
struct _stmt_vec_info *stmt_info
|
||||
= si->stmt ? vinfo_for_stmt (si->stmt) : NULL;
|
||||
(void) add_stmt_cost (target_cost_data, si->count,
|
||||
si->kind, stmt_info, si->misalign,
|
||||
vect_body);
|
||||
}
|
||||
unsigned dummy, body_cost = 0;
|
||||
finish_cost (target_cost_data, &dummy, &body_cost, &dummy);
|
||||
destroy_cost_data (target_cost_data);
|
||||
LOOP_VINFO_SINGLE_SCALAR_ITERATION_COST (loop_vinfo) = body_cost;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user