aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKewen Lin <linkw@linux.ibm.com>2021-08-17 03:18:02 -0500
committerKewen Lin <linkw@linux.ibm.com>2021-08-17 03:18:02 -0500
commit2e0d7f16da0897fb2eb83f5c1ffe67f0ad747e92 (patch)
tree4932deb77cf2696cb21709ffa46dadfe55f9991c
parente45483c7c4badc4bf2d6ced22360ce1ab172967f (diff)
downloadgcc-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.c4
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;
}