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)