diff options
author | Richard Biener <rguenther@suse.de> | 2020-03-25 14:42:49 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-06-18 12:05:37 +0200 |
commit | da2b7c7f0a136b4d00520a08d4c443fc2e3a467d (patch) | |
tree | 93af9b90f477e9e91da6c5a873dc5286340212bb /gcc/tree-vect-stmts.c | |
parent | 2ab42c70a62fe10f40a623adf48002ac8cdb9bf8 (diff) | |
download | gcc-da2b7c7f0a136b4d00520a08d4c443fc2e3a467d.zip gcc-da2b7c7f0a136b4d00520a08d4c443fc2e3a467d.tar.gz gcc-da2b7c7f0a136b4d00520a08d4c443fc2e3a467d.tar.bz2 |
remove SLP_TREE_TWO_OPERATORS, add SLP permutation node
This removes the SLP_TREE_TWO_OPERATORS hack in favor of having
explicit SLP nodes for both computations and the blend operation.
For this introduce a generic merge + select + permute SLP node
(with implementation limits).
Building upon earlier patches it adds vect_stmt_dominates_stmt_p
and the ability to compute a vector insertion place from
vectorized stmts (which now have UID zero) as needed for
the permute node.
2020-06-17 Richard Biener <rguenther@suse.de>
* tree-vectorizer.h (_slp_tree::two_operators): Remove.
(_slp_tree::lane_permutation): New member.
(_slp_tree::code): Likewise.
(SLP_TREE_TWO_OPERATORS): Remove.
(SLP_TREE_LANE_PERMUTATION): New.
(SLP_TREE_CODE): Likewise.
(vect_stmt_dominates_stmt_p): Declare.
* tree-vectorizer.c (vect_stmt_dominates_stmt_p): New function.
* tree-vect-stmts.c (vect_model_simple_cost): Remove
SLP_TREE_TWO_OPERATORS handling.
* tree-vect-slp.c (_slp_tree::_slp_tree): Amend.
(_slp_tree::~_slp_tree): Likewise.
(vect_two_operations_perm_ok_p): Remove.
(vect_build_slp_tree_1): Remove verification of two-operator
permutation here.
(vect_build_slp_tree_2): When we have two different operators
build two computation SLP nodes and a blend.
(vect_print_slp_tree): Print the lane permutation if it exists.
(slp_copy_subtree): Copy it.
(vect_slp_rearrange_stmts): Re-arrange it.
(vect_slp_analyze_node_operations_1): Handle SLP_TREE_CODE
VEC_PERM_EXPR explicitely.
(vect_schedule_slp_instance): Likewise. Remove old
SLP_TREE_TWO_OPERATORS code.
(vectorizable_slp_permutation): New function.
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r-- | gcc/tree-vect-stmts.c | 8 |
1 files changed, 0 insertions, 8 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index c917439..23799f0 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -820,14 +820,6 @@ vect_model_simple_cost (vec_info *, prologue_cost += record_stmt_cost (cost_vec, 1, scalar_to_vec, stmt_info, 0, vect_prologue); - /* Adjust for two-operator SLP nodes. */ - if (node && SLP_TREE_TWO_OPERATORS (node)) - { - ncopies *= 2; - inside_cost += record_stmt_cost (cost_vec, ncopies, vec_perm, - stmt_info, 0, vect_body); - } - /* Pass the inside-of-loop statements to the target-specific cost model. */ inside_cost += record_stmt_cost (cost_vec, ncopies, kind, stmt_info, 0, vect_body); |