Richard Biener <rguent...@suse.de> writes:
> The PR complains that when we only partially BB vectorize an
> if-converted loop body that this can leave unvectorized code
> unconditionally executed and thus effectively slow down code.
> For -O2 we already mitigated the issue by not doing BB vectorization
> when not all if-converted stmts were covered but the issue is
> present with -O3 as well.  Thus the following simply extends the
> fix to cover all but the unlimited cost models.  It is after all
> very likely that we vectorize some stmts, if only a single
> paired store.
>
> Bootstrap & regtest running on x86_64-unknown-linux-gnu, OK?
>
> Thanks,
> Richard.
>
> 2022-01-21  Richard Biener  <rguent...@suse.de>
>
>       PR tree-optimization/100089
>       * tree-vect-slp.cc (vect_slp_region): Reject BB vectorization
>       of if-converted loops with unvectorized COND_EXPRs for
>       all but the unlimited cost models.
> ---
>  gcc/tree-vect-slp.cc | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc
> index 5ffb63689f2..430da281e18 100644
> --- a/gcc/tree-vect-slp.cc
> +++ b/gcc/tree-vect-slp.cc
> @@ -5907,8 +5907,7 @@ vect_slp_region (vec<basic_block> bbs, 
> vec<data_reference_p> datarefs,
>           }
>  
>         /* When we're vectorizing an if-converted loop body with the
> -          very-cheap cost model make sure we vectorized all if-converted
> -          code.  */
> +          make sure we vectorized all if-converted code.  */

Nit: keeps too much of the old comment (“with the”).

But yeah, LGTM otherwise FWIW.

Thanks,
Richard

>         if (!profitable_subgraphs.is_empty ()
>             && orig_loop)
>           {
> @@ -5924,7 +5923,7 @@ vect_slp_region (vec<basic_block> bbs, 
> vec<data_reference_p> datarefs,
>                     gimple_set_visited (gsi_stmt (gsi), false);
>                     continue;
>                   }
> -               if (flag_vect_cost_model != VECT_COST_MODEL_VERY_CHEAP)
> +               if (flag_vect_cost_model == VECT_COST_MODEL_UNLIMITED)
>                   continue;
>  
>                 if (gassign *ass = dyn_cast <gassign *> (gsi_stmt (gsi)))

Reply via email to