]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Do not call vect_determine_partial_vectors_and_peeling from transform
authorRichard Biener <rguenther@suse.de>
Fri, 14 Nov 2025 13:10:24 +0000 (14:10 +0100)
committerRichard Biener <rguenther@suse.de>
Sun, 16 Nov 2025 08:52:17 +0000 (09:52 +0100)
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.

gcc/tree-vect-loop-manip.cc
gcc/tree-vect-loop.cc
gcc/tree-vectorizer.h

index 3e121a96ddf0fbb7a8bbf99fd564a9ee58e5f265..af3f3aff2cc0a457e30585773bd77669f408b6be 100644 (file)
@@ -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 ();
index e5a3971f1501dcee9090fbb5a524ac3f3993d09f..0d5c3dddc422f4c93b0f08f8de4465e1c4bbb136 100644 (file)
@@ -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.  */
index c07fcb42d508c9393c7e4f7673553020f196bce0..55f0bee0eb7481d2d768fb0dafcdaa70ee35cf0a 100644 (file)
@@ -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);