tree-optimization/100089 - BB vectorization of if-converted loop bodies
Commit Message
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 <rguenther@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(-)
Comments
Richard Biener <rguenther@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 <rguenther@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)))
On Fri, 21 Jan 2022, Richard Sandiford wrote:
> Richard Biener <rguenther@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 <rguenther@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”).
Oops, fixed and pushed.
Richard.
@@ -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. */
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)))