>So should we adjust very-cheap to allow niter peeling as proposed or
>should we switch the default at -O2 to cheap?
I prefer the former.

Update in V2:
Adjust testcase after relax O2 vectorization.

Ok for trunk?

gcc/ChangeLog:

        * tree-vect-loop.cc (vect_analyze_loop_costing): Enable
        vectorization for LOOP_VINFO_PEELING_FOR_NITER in very cheap
        cost model.
        (vect_analyze_loop): Disable epilogue vectorization in very
        cheap cost model.
---
 gcc/tree-vect-loop.cc | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/gcc/tree-vect-loop.cc b/gcc/tree-vect-loop.cc
index 242d5e2d916..06afd8cae79 100644
--- a/gcc/tree-vect-loop.cc
+++ b/gcc/tree-vect-loop.cc
@@ -2356,8 +2356,7 @@ vect_analyze_loop_costing (loop_vec_info loop_vinfo,
      a copy of the scalar code (even if we might be able to vectorize it).  */
   if (loop_cost_model (loop) == VECT_COST_MODEL_VERY_CHEAP
       && (LOOP_VINFO_PEELING_FOR_ALIGNMENT (loop_vinfo)
-         || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo)
-         || LOOP_VINFO_PEELING_FOR_NITER (loop_vinfo)))
+         || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo)))
     {
       if (dump_enabled_p ())
        dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
@@ -3638,7 +3637,8 @@ vect_analyze_loop (class loop *loop, vec_info_shared 
*shared)
                           /* No code motion support for multiple epilogues so 
for now
                              not supported when multiple exits.  */
                         && !LOOP_VINFO_EARLY_BREAKS (first_loop_vinfo)
-                        && !loop->simduid);
+                        && !loop->simduid
+                        && loop_cost_model (loop) > 
VECT_COST_MODEL_VERY_CHEAP);
   if (!vect_epilogues)
     return first_loop_vinfo;
 
-- 
2.31.1

Reply via email to