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 | 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 3e121a96ddf..af3f3aff2cc 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 0ad328f7905..62c74d6d4ac 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -941,7 +941,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;
@@ -2005,7 +2005,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 bb153594f8e..84d3f911e70 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);
--
2.51.0