diff options
author | Kewen Lin <linkw@linux.ibm.com> | 2021-08-17 03:18:02 -0500 |
---|---|---|
committer | Kewen Lin <linkw@linux.ibm.com> | 2021-08-17 03:18:02 -0500 |
commit | 2e0d7f16da0897fb2eb83f5c1ffe67f0ad747e92 (patch) | |
tree | 4932deb77cf2696cb21709ffa46dadfe55f9991c | |
parent | e45483c7c4badc4bf2d6ced22360ce1ab172967f (diff) | |
download | gcc-2e0d7f16da0897fb2eb83f5c1ffe67f0ad747e92.zip gcc-2e0d7f16da0897fb2eb83f5c1ffe67f0ad747e92.tar.gz gcc-2e0d7f16da0897fb2eb83f5c1ffe67f0ad747e92.tar.bz2 |
vect: Add extraction cost for slp reduc
As Richi pointed out, currently for BB reductions we don't
actually build a SLP node with IFN_REDUC_* information,
ideally we may end up with that eventually.
For now, it's costed as shuffles and reduc operations, it
misses the cost of lane extraction. This patch is to add
one time of vec_to_scalar cost for lane extraction, it's to
make the costings consistent and conservative for now.
gcc/ChangeLog:
* tree-vect-slp.c (vectorizable_bb_reduc_epilogue): Add the cost for
value extraction.
-rw-r--r-- | gcc/tree-vect-slp.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index d169bed..4dcc70c 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -4861,12 +4861,14 @@ vectorizable_bb_reduc_epilogue (slp_instance instance, return false; /* There's no way to cost a horizontal vector reduction via REDUC_FN so - cost log2 vector operations plus shuffles. */ + cost log2 vector operations plus shuffles and one extraction. */ unsigned steps = floor_log2 (vect_nunits_for_cost (vectype)); record_stmt_cost (cost_vec, steps, vector_stmt, instance->root_stmts[0], vectype, 0, vect_body); record_stmt_cost (cost_vec, steps, vec_perm, instance->root_stmts[0], vectype, 0, vect_body); + record_stmt_cost (cost_vec, 1, vec_to_scalar, instance->root_stmts[0], + vectype, 0, vect_body); return true; } |