Enable vectorization for unknown tripcount in very cheap cost model but disable epilog vectorization.
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. * doc/invoke.texi: Adjust documents for very-cheap cost model.
This commit is contained in:
parent
c8957c8779
commit
70c3db511b
2 changed files with 7 additions and 10 deletions
|
@ -14315,13 +14315,10 @@ counts that will likely execute faster than when executing the original
|
|||
scalar loop. The @samp{cheap} model disables vectorization of
|
||||
loops where doing so would be cost prohibitive for example due to
|
||||
required runtime checks for data dependence or alignment but otherwise
|
||||
is equal to the @samp{dynamic} model. The @samp{very-cheap} model only
|
||||
allows vectorization if the vector code would entirely replace the
|
||||
scalar code that is being vectorized. For example, if each iteration
|
||||
of a vectorized loop would only be able to handle exactly four iterations
|
||||
of the scalar loop, the @samp{very-cheap} model would only allow
|
||||
vectorization if the scalar iteration count is known to be a multiple
|
||||
of four.
|
||||
is equal to the @samp{dynamic} model. The @samp{very-cheap} model disables
|
||||
vectorization of loops when any runtime check for data dependence or alignment
|
||||
is required, it also disables vectorization of epilogue loops but otherwise is
|
||||
equal to the @samp{cheap} model.
|
||||
|
||||
The default cost model depends on other optimization flags and is
|
||||
either @samp{dynamic} or @samp{cheap}.
|
||||
|
|
|
@ -2375,8 +2375,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,
|
||||
|
@ -3683,7 +3682,8 @@ vect_analyze_loop (class loop *loop, gimple *loop_vectorized_call,
|
|||
/* 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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue