From: Kewen Lin Date: Tue, 17 Aug 2021 08:18:02 +0000 (-0500) Subject: vect: Add extraction cost for slp reduc X-Git-Tag: basepoints/gcc-13~5371 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e0d7f16da0897fb2eb83f5c1ffe67f0ad747e92;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index d169bed8e94d..4dcc70c5dd70 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; }