On Mon, 24 Feb 2025, Robin Dapp wrote:

> Hi,
> 
> in PR118950 we do not zero masked elements in a gather load.
> While recognizing a gather/scatter pattern we do not use the original
> type of the LHS.  This matters because the type can differ with bool
> patterns (e.g. _Bool vs unsigned char) and we don't notice the need
> for zeroing out the padding bytes.
> 
> This patch just uses the original LHS's type.
> 
> Bootstrapped and regtested on x86, aarch64, and power10.
> Regtested on rv64gcv_zvl512b.

OK.

Thanks,
Richard.

> 
>       PR middle-end/118950
> 
> gcc/ChangeLog:
> 
>       * tree-vect-patterns.cc (vect_recog_gather_scatter_pattern): Use
>       original LHS's type.
> 
> gcc/testsuite/ChangeLog:
> 
>       * gcc.target/riscv/rvv/autovec/pr118950.c: New test.
> ---
>  .../gcc.target/riscv/rvv/autovec/pr118950.c   | 29 +++++++++++++++++++
>  gcc/tree-vect-patterns.cc                     |  3 +-
>  2 files changed, 31 insertions(+), 1 deletion(-)
>  create mode 100644 gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
> 
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
> new file mode 100644
> index 00000000000..604d4264eac
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/pr118950.c
> @@ -0,0 +1,29 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target riscv_v_ok } */
> +/* { dg-add-options riscv_v } */
> +/* { dg-additional-options "-std=gnu99 -Wno-pedantic" } */
> +
> +unsigned char a;
> +long long r;
> +_Bool h = 1;
> +short j[23];
> +_Bool k[3][23];
> +
> +void b(_Bool h, short j[], _Bool k[][23]) {
> +  for (int m = 0; m < 23; m += 3)
> +    for (short n = 0; n < 22; n += 4)
> +      a = ({
> +        unsigned char o = a;
> +        unsigned char p = j[n] ? h : k[m][n];
> +        o > p ? o : p;
> +      });
> +}
> +
> +int main() {
> +  for (int m = 0; m < 23; ++m)
> +    j[m] = 10;
> +  b(h, j, k);
> +  r = a;
> +  if (r != 1)
> +    __builtin_abort ();
> +}
> diff --git a/gcc/tree-vect-patterns.cc b/gcc/tree-vect-patterns.cc
> index 6fc97d1b6ef..4f0a7ea162b 100644
> --- a/gcc/tree-vect-patterns.cc
> +++ b/gcc/tree-vect-patterns.cc
> @@ -6022,7 +6022,8 @@ vect_recog_gather_scatter_pattern (vec_info *vinfo,
>        else
>       pattern_stmt = gimple_build_call_internal (gs_info.ifn, 4, base,
>                                                  offset, scale, zero);
> -      tree load_lhs = vect_recog_temp_ssa_var (gs_info.element_type, NULL);
> +      tree lhs = gimple_get_lhs (stmt_info->stmt);
> +      tree load_lhs = vect_recog_temp_ssa_var (TREE_TYPE (lhs), NULL);
>        gimple_call_set_lhs (pattern_stmt, load_lhs);
>      }
>    else
> 

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