tree-optimization/100089 - BB vectorization of if-converted loop bodies

Message ID 20220121123443.9D34913AF2@imap2.suse-dmz.suse.de
State New
Headers
Series tree-optimization/100089 - BB vectorization of if-converted loop bodies |

Commit Message

Richard Biener Jan. 21, 2022, 12:34 p.m. UTC
  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 Sandiford Jan. 21, 2022, 12:42 p.m. UTC | #1
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)))
  
Richard Biener Jan. 21, 2022, 1:23 p.m. UTC | #2
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.
  

Patch

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.  */
 	  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)))