diff options
author | Richard Biener <rguenther@suse.de> | 2020-05-29 11:23:05 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-06-04 15:57:45 +0200 |
commit | a0dae768c6f78eba6997930065b55184202d87ba (patch) | |
tree | 745fe20263889703d48e9d8673d29eb6687d6a07 /gcc/tree-vect-loop.c | |
parent | e1008cd1d8504775e6a5e39325e396e61b39b84c (diff) | |
download | gcc-a0dae768c6f78eba6997930065b55184202d87ba.zip gcc-a0dae768c6f78eba6997930065b55184202d87ba.tar.gz gcc-a0dae768c6f78eba6997930065b55184202d87ba.tar.bz2 |
Add explicit SLP_TREE_LANES
This adds an explicit number of scalar lanes to the SLP node
avoiding to dispatch between stmts/ops and eventually not require
those vectors at all.
2020-05-27 Richard Biener <rguenther@suse.de>
* tree-vectorizer.h (_slp_tree::lanes): New.
(SLP_TREE_LANES): Likewise.
* tree-vect-loop.c (vect_create_epilog_for_reduction): Use it.
(vectorizable_reduction): Likewise.
(vect_transform_cycle_phi): Likewise.
(vectorizable_induction): Likewise.
(vectorizable_live_operation): Likewise.
* tree-vect-slp.c (_slp_tree::_slp_tree): Initialize lanes.
(vect_create_new_slp_node): Likewise.
(slp_copy_subtree): Copy it.
(vect_optimize_slp): Use it.
(vect_slp_analyze_node_operations_1): Likewise.
(vect_slp_convert_to_external): Likewise.
(vect_bb_vectorization_profitable_p): Likewise.
* tree-vect-stmts.c (vectorizable_load): Likewise.
(get_vectype_for_scalar_type): Likewise.
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index ad26663..e3fbf9f 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -4516,7 +4516,7 @@ vect_create_epilog_for_reduction (loop_vec_info loop_vinfo, tree induction_index = NULL_TREE; if (slp_node) - group_size = SLP_TREE_SCALAR_STMTS (slp_node).length (); + group_size = SLP_TREE_LANES (slp_node); if (nested_in_vect_loop_p (loop, stmt_info)) { @@ -6594,7 +6594,7 @@ vectorizable_reduction (loop_vec_info loop_vinfo, which each SLP statement has its own initial value and in which that value needs to be repeated for every instance of the statement within the initial vector. */ - unsigned int group_size = SLP_TREE_SCALAR_STMTS (slp_node).length (); + unsigned int group_size = SLP_TREE_LANES (slp_node); if (!neutral_op && !can_duplicate_and_interleave_p (loop_vinfo, group_size, TREE_TYPE (vectype_out))) @@ -7110,9 +7110,8 @@ vect_transform_cycle_phi (loop_vec_info loop_vinfo, if (slp_node) { /* The size vect_schedule_slp_instance computes is off for us. */ - vec_num = vect_get_num_vectors - (LOOP_VINFO_VECT_FACTOR (loop_vinfo) - * SLP_TREE_SCALAR_STMTS (slp_node).length (), vectype_in); + vec_num = vect_get_num_vectors (LOOP_VINFO_VECT_FACTOR (loop_vinfo) + * SLP_TREE_LANES (slp_node), vectype_in); ncopies = 1; } else @@ -7558,7 +7557,7 @@ vectorizable_induction (loop_vec_info loop_vinfo, new_vec, step_vectype, NULL); /* Now generate the IVs. */ - unsigned group_size = SLP_TREE_SCALAR_STMTS (slp_node).length (); + unsigned group_size = SLP_TREE_LANES (slp_node); unsigned nvects = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); unsigned elts = const_nunits * nvects; /* Compute the number of distinct IVs we need. First reduce @@ -7999,7 +7998,7 @@ vectorizable_live_operation (loop_vec_info loop_vinfo, { gcc_assert (slp_index >= 0); - int num_scalar = SLP_TREE_SCALAR_STMTS (slp_node).length (); + int num_scalar = SLP_TREE_LANES (slp_node); int num_vec = SLP_TREE_NUMBER_OF_VEC_STMTS (slp_node); /* Get the last occurrence of the scalar index from the concatenation of |