= fold_build2 (MINUS_EXPR, TREE_TYPE (epilogue_niters),
epilogue_niters,
build_one_cst (TREE_TYPE (epilogue_niters)));
-
- /* ??? 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 ();
/* True if the loop needs peeling or partial vectors when vectorized. */
-bool
+static bool
vect_need_peeling_or_partial_vectors_p (loop_vec_info loop_vinfo)
{
unsigned HOST_WIDE_INT const_vf;
th = LOOP_VINFO_COST_MODEL_THRESHOLD (LOOP_VINFO_ORIG_LOOP_INFO
(loop_vinfo));
+ loop_vec_info main_loop_vinfo
+ = (LOOP_VINFO_EPILOGUE_P (loop_vinfo)
+ ? LOOP_VINFO_MAIN_LOOP_INFO (loop_vinfo) : loop_vinfo);
if (LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
- && LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo) >= 0)
+ && LOOP_VINFO_PEELING_FOR_ALIGNMENT (main_loop_vinfo) >= 0)
{
/* Work out the (constant) number of iterations that need to be
peeled for reasons other than niters. */
- unsigned int peel_niter = LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo);
+ unsigned int peel_niter
+ = LOOP_VINFO_PEELING_FOR_ALIGNMENT (main_loop_vinfo);
if (LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo))
peel_niter += 1;
if (!multiple_p (LOOP_VINFO_INT_NITERS (loop_vinfo) - peel_niter,
LOOP_VINFO_VECT_FACTOR (loop_vinfo)))
return true;
}
- else if (LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo)
+ else if (LOOP_VINFO_PEELING_FOR_ALIGNMENT (main_loop_vinfo)
/* ??? When peeling for gaps but not alignment, we could
try to check whether the (variable) niters is known to be
VF * N + 1. That's something of a niche case though. */
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 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);