On Tue, 3 Sep 2024, Tamar Christina wrote:

> Hi All,
> 
> When vectorizing a conditional operation we rely on the bool_recog pattern to
> hit and convert the bool of the operand to a valid mask.
> 
> However we are currently not using the converted operand as this is in a 
> pattern
> statement.  This change updates it to look at the actual statement to be
> vectorized so we pick up the pattern.
> 
> Note that there are no tests here since vectorization will fail until we
> correctly lower all boolean conditionals early.
> 
> Tests for these are in the next patch, namely vect-conditional_store_5.c and
> vect-conditional_store_6.c.  And the existing vect-conditional_store_[1-4].c
> checks that the other cases are still handled correctly.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu, arm-none-linux-gnueabihf,
> x86_64-pc-linux-gnu -m32, -m64 and no issues.
> 
> Ok for master?

OK.

> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       * tree-vect-patterns.cc (vect_recog_cond_store_pattern): Use pattern
>       statement.
> 
> ---
> diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
> index 
> f52de2b6972dc0b8f63f812b64c60e9414962743..4b112910df357e9f2783f7173b71812085126389
>  100644
> --- a/gcc/tree-vect-patterns.cc
> +++ b/gcc/tree-vect-patterns.cc
> @@ -6601,7 +6601,15 @@ vect_recog_cond_store_pattern (vec_info *vinfo,
>    if (TREE_CODE (st_rhs) != SSA_NAME)
>      return NULL;
>  
> -  gassign *cond_stmt = dyn_cast<gassign *> (SSA_NAME_DEF_STMT (st_rhs));
> +  auto cond_vinfo = vinfo->lookup_def (st_rhs);
> +
> +  /* If the condition isn't part of the loop then bool recog wouldn't have 
> seen
> +     it and so this transformation may not be valid.  */
> +  if (!cond_vinfo)
> +    return NULL;
> +
> +  cond_vinfo = vect_stmt_to_vectorize (cond_vinfo);
> +  gassign *cond_stmt = dyn_cast<gassign *> (STMT_VINFO_STMT (cond_vinfo));
>    if (!cond_stmt || gimple_assign_rhs_code (cond_stmt) != COND_EXPR)
>      return NULL;
>  
> 
> 
> 
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to