On Fri, 6 Sep 2024, Tamar Christina wrote:

> Hi All,
> 
> Because the vect_recog_bool_pattern can at the moment still transition
> out of GIMPLE and back into GENERIC the vect_recog_cond_store_pattern can
> end up using an expression as a mask rather than an SSA_NAME.
> 
> This adds an explicit check that we have a mask and not an expression.
> 
> Bootstrapped Regtested on aarch64-none-linux-gnu and no issues.
> 
> Ok for master?

OK.

> Thanks,
> Tamar
> 
> gcc/ChangeLog:
> 
>       PR tree-optimization/116628
>       * tree-vect-patterns.cc (vect_recog_cond_store_pattern): Add SSA_NAME
>       check on expression.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR tree-optimization/116628
>       * gcc.dg/vect/pr116628.c: New test.
> 
> ---
> diff --git a/gcc/testsuite/gcc.dg/vect/pr116628.c 
> b/gcc/testsuite/gcc.dg/vect/pr116628.c
> new file mode 100644
> index 
> 0000000000000000000000000000000000000000..4068c657ac5570b10f2dca4be5109abbaf574f55
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/vect/pr116628.c
> @@ -0,0 +1,14 @@
> +/* { dg-do compile } */
> +/* { dg-require-effective-target vect_float } */
> +/* { dg-require-effective-target vect_masked_store } */
> +/* { dg-additional-options "-Ofast -march=armv9-a" { target aarch64-*-* } } 
> */
> +
> +typedef float c;
> +c a[2000], b[0];
> +void d() {
> +  for (int e = 0; e < 2000; e++)
> +    if (b[e])
> +      a[e] = b[e];
> +}
> +
> +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
> diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
> index 
> f7c3c623ea46ea09f4f86139d2a92bb6363aee3c..3a0d4cb7092cb59fe8b8664b682ade73ab5e9645
>  100644
> --- a/gcc/tree-vect-patterns.cc
> +++ b/gcc/tree-vect-patterns.cc
> @@ -6685,6 +6685,9 @@ vect_recog_cond_store_pattern (vec_info *vinfo,
>    /* Check if the else value matches the original loaded one.  */
>    bool invert = false;
>    tree cmp_ls = gimple_arg (cond_stmt, 0);
> +  if (TREE_CODE (cmp_ls) != SSA_NAME)
> +    return NULL;
> +
>    tree cond_arg1 = gimple_arg (cond_stmt, 1);
>    tree cond_arg2 = gimple_arg (cond_stmt, 2);
>  
> 
> 
> 
> 
> 

-- 
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