https://gcc.gnu.org/g:c6008611e9678991c763944ae8539aa90cad419d
commit r16-5314-gc6008611e9678991c763944ae8539aa90cad419d Author: Richard Biener <[email protected]> Date: Fri Nov 14 14:10:24 2025 +0100 Do not call vect_determine_partial_vectors_and_peeling from transform It gets more difficult to maintain this doesn't do any changes late (see followups), so kill it. We do have to retain re-setting of LOOP_VINFO_PEELING_FOR_NITER though, since vect_need_peeling_or_partial_vectors_p is incorrect for epilogues when done during analysis. We should fix this of course. * tree-vectorizer.h (vect_determine_partial_vectors_and_peeling): Remove. (vect_need_peeling_or_partial_vectors_p): Declare. * tree-vect-loop.cc (vect_determine_partial_vectors_and_peeling): Make static. (vect_need_peeling_or_partial_vectors_p): Export. * tree-vect-loop-manip.cc (vect_do_peeling): Do not call vect_determine_partial_vectors_and_peeling but instead re-compute LOOP_VINFO_PEELING_FOR_NITER using vect_need_peeling_or_partial_vectors_p. Diff: --- gcc/tree-vect-loop-manip.cc | 11 +++++------ gcc/tree-vect-loop.cc | 4 ++-- gcc/tree-vectorizer.h | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc index 3e121a96ddf0..af3f3aff2cc0 100644 --- a/gcc/tree-vect-loop-manip.cc +++ b/gcc/tree-vect-loop-manip.cc @@ -3726,12 +3726,11 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1, epilogue_niters, build_one_cst (TREE_TYPE (epilogue_niters))); - /* Decide what to do if the number of epilogue iterations is not - a multiple of the epilogue loop's vectorization factor. - We should have rejected the loop during the analysis phase - if this fails. */ - bool res = vect_determine_partial_vectors_and_peeling (epilogue_vinfo); - gcc_assert (res); + /* ??? During analysis phase this is computed wrongly, re-do it + here. */ + LOOP_VINFO_PEELING_FOR_NITER (epilogue_vinfo) + = (!LOOP_VINFO_USING_PARTIAL_VECTORS_P (epilogue_vinfo) + && vect_need_peeling_or_partial_vectors_p (epilogue_vinfo)); } adjust_vec.release (); diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc index e5a3971f1501..0d5c3dddc422 100644 --- a/gcc/tree-vect-loop.cc +++ b/gcc/tree-vect-loop.cc @@ -937,7 +937,7 @@ vect_min_prec_for_max_niters (loop_vec_info loop_vinfo, unsigned int factor) /* True if the loop needs peeling or partial vectors when vectorized. */ -static bool +bool vect_need_peeling_or_partial_vectors_p (loop_vec_info loop_vinfo) { unsigned HOST_WIDE_INT const_vf; @@ -2004,7 +2004,7 @@ vect_get_datarefs_in_loop (loop_p loop, basic_block *bbs, */ -opt_result +static opt_result vect_determine_partial_vectors_and_peeling (loop_vec_info loop_vinfo) { /* Determine whether there would be any scalar iterations left over. */ diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index c07fcb42d508..55f0bee0eb74 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -2636,7 +2636,7 @@ extern tree neutral_op_for_reduction (tree, code_helper, tree, bool = true); extern widest_int vect_iv_limit_for_partial_vectors (loop_vec_info loop_vinfo); bool vect_rgroup_iv_might_wrap_p (loop_vec_info, rgroup_controls *); /* Used in tree-vect-loop-manip.cc */ -extern opt_result vect_determine_partial_vectors_and_peeling (loop_vec_info); +extern bool vect_need_peeling_or_partial_vectors_p (loop_vec_info); /* Used in gimple-loop-interchange.c and tree-parloops.cc. */ extern bool check_reduction_path (dump_user_location_t, loop_p, gphi *, tree, enum tree_code);
