https://gcc.gnu.org/g:4eaffcd9962b3ff1685fc2fff6aea764cef70e9c
commit r16-4573-g4eaffcd9962b3ff1685fc2fff6aea764cef70e9c Author: Richard Biener <[email protected]> Date: Thu Oct 23 11:13:09 2025 +0200 Remove LOOP_VINFO_SLP_UNROLLING_FACTOR The following removes LOOP_VINFO_SLP_UNROLLING_FACTOR in favor of using LOOP_VINFO_VECT_FACTOR directly now that there's no difference between the two possible. * tree-vectorizer.h (_loop_vec_info::slp_unrolling_factor): Remove. (LOOP_VINFO_SLP_UNROLLING_FACTOR): Likewise. * tree-vect-loop.cc (_loop_vec_info::_loop_vec_info): Adjust. (vect_analyze_loop_2): Likewise. * tree-vect-slp.cc (vect_make_slp_decision): Set LOOP_VINFO_VECT_FACTOR directly. Diff: --- gcc/tree-vect-loop.cc | 8 +++----- gcc/tree-vect-slp.cc | 2 +- gcc/tree-vectorizer.h | 8 ++------ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index d44a77d85c3f..a98c06dd0664 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -738,7 +738,6 @@ _loop_vec_info::_loop_vec_info (class loop *loop_in, vec_info_shared *shared) nonlinear_iv (false), ivexpr_map (NULL), scan_map (NULL), - slp_unrolling_factor (1), inner_loop_cost_factor (param_vect_inner_loop_cost_factor), vectorizable (false), can_use_partial_vectors_p (param_vect_partial_vector_usage != 0), @@ -2236,16 +2235,15 @@ start_over: if (!ok) return ok; - /* If there are any SLP instances mark them as pure_slp. */ + /* If there are any SLP instances mark them as pure_slp and compute + the overall vectorization factor. */ if (!vect_make_slp_decision (loop_vinfo)) return opt_result::failure_at (vect_location, "no stmts to vectorize.\n"); if (dump_enabled_p ()) dump_printf_loc (MSG_NOTE, vect_location, "Loop contains only SLP stmts\n"); - /* Determine the vectorization factor from the SLP decision. */ - LOOP_VINFO_VECT_FACTOR (loop_vinfo) - = LOOP_VINFO_SLP_UNROLLING_FACTOR (loop_vinfo); + /* Dump the vectorization factor from the SLP decision. */ if (dump_enabled_p ()) { dump_printf_loc (MSG_NOTE, vect_location, "vectorization factor = "); diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc index 9698709f5671..3c760b495af2 100644 --- a/gcc/tree-vect-slp.cc +++ b/gcc/tree-vect-slp.cc @@ -8171,7 +8171,7 @@ vect_make_slp_decision (loop_vec_info loop_vinfo) decided_to_slp++; } - LOOP_VINFO_SLP_UNROLLING_FACTOR (loop_vinfo) = unrolling_factor; + LOOP_VINFO_VECT_FACTOR (loop_vinfo) = unrolling_factor; if (decided_to_slp && dump_enabled_p ()) { diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 905a29142d3e..56b3a5ad2a46 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -945,7 +945,8 @@ public: used. */ poly_uint64 versioning_threshold; - /* Unrolling factor */ + /* Unrolling factor. In case of suitable super-word parallelism + it can be that no unrolling is needed, and thus this is 1. */ poly_uint64 vectorization_factor; /* If this loop is an epilogue loop whose main loop can be skipped, @@ -1090,10 +1091,6 @@ public: rhs of the store of the initializer. */ hash_map<tree, tree> *scan_map; - /* The unrolling factor needed to SLP the loop. In case of that pure SLP is - applied to the loop, i.e., no unrolling is needed, this is 1. */ - poly_uint64 slp_unrolling_factor; - /* The factor used to over weight those statements in an inner loop relative to the loop being vectorized. */ unsigned int inner_loop_cost_factor; @@ -1294,7 +1291,6 @@ public: #define LOOP_VINFO_USER_UNROLL(L) (L)->user_unroll #define LOOP_VINFO_GROUPED_STORES(L) (L)->grouped_stores #define LOOP_VINFO_SLP_INSTANCES(L) (L)->slp_instances -#define LOOP_VINFO_SLP_UNROLLING_FACTOR(L) (L)->slp_unrolling_factor #define LOOP_VINFO_REDUCTIONS(L) (L)->reductions #define LOOP_VINFO_PEELING_FOR_GAPS(L) (L)->peeling_for_gaps #define LOOP_VINFO_PEELING_FOR_NITER(L) (L)->peeling_for_niter
