> -----Original Message----- > From: Richard Biener <rguent...@suse.de> > Sent: Tuesday, October 15, 2024 1:22 PM > To: Tamar Christina <tamar.christ...@arm.com> > Cc: gcc-patches@gcc.gnu.org; nd <n...@arm.com> > Subject: Re: [PATCH 2/4]middle-end: Fix VEC_PERM_EXPR lowering since > relaxation of vector sizes > > On Mon, 14 Oct 2024, Tamar Christina wrote: > > > Hi All, > > > > In GCC 14 VEC_PERM_EXPR was relaxed to be able to permute to a 2x larger > vector > > than the size of the input vectors. However various passes and > > transformations > > were not updated to account for this. > > > > I have patches in these area that I will be upstreaming with individual > > patches > > that expose them. > > > > This one is that vectlower tries to lower based on the size of the input > > vectors > > rather than the size of the output. As a consequence it creates an invalid > > vector of half the size. > > > > Luckily we ICE because the resulting nunits doesn't match the vector size. > > > > Tests in the AArch64 patch test for this behaviour. > > > > 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. > > Do you have a testcase btw?
It was relying on the auto-vect of the zero extends as TBLs. But I'll create one using the gimple front-end. Today __shufflevector zero pads permutes so you can't generate this yet.. (in my next patch series). I'll write a gimple one and commit with this then. Thanks, Tamar > > > Thanks, > > Tamar > > > > gcc/ChangeLog: > > > > * tree-vect-generic.cc (lower_vec_perm): Use output vector size instead > > of input vector when determining output nunits. > > > > --- > > diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc > > index > 3041fb8fcf235ba86f37ef73aa089330a2fd0b77..f86f7eabb255fde50b30fa3b85 > db367df930f321 100644 > > --- a/gcc/tree-vect-generic.cc > > +++ b/gcc/tree-vect-generic.cc > > @@ -1500,6 +1500,7 @@ lower_vec_perm (gimple_stmt_iterator *gsi) > > tree mask = gimple_assign_rhs3 (stmt); > > tree vec0 = gimple_assign_rhs1 (stmt); > > tree vec1 = gimple_assign_rhs2 (stmt); > > + tree res_vect_type = TREE_TYPE (gimple_assign_lhs (stmt)); > > tree vect_type = TREE_TYPE (vec0); > > tree mask_type = TREE_TYPE (mask); > > tree vect_elt_type = TREE_TYPE (vect_type); > > @@ -1512,7 +1513,7 @@ lower_vec_perm (gimple_stmt_iterator *gsi) > > location_t loc = gimple_location (gsi_stmt (*gsi)); > > unsigned i; > > > > - if (!TYPE_VECTOR_SUBPARTS (vect_type).is_constant (&elements)) > > + if (!TYPE_VECTOR_SUBPARTS (res_vect_type).is_constant (&elements)) > > return; > > > > if (TREE_CODE (mask) == SSA_NAME) > > @@ -1672,9 +1673,9 @@ lower_vec_perm (gimple_stmt_iterator *gsi) > > } > > > > if (constant_p) > > - constr = build_vector_from_ctor (vect_type, v); > > + constr = build_vector_from_ctor (res_vect_type, v); > > else > > - constr = build_constructor (vect_type, v); > > + constr = build_constructor (res_vect_type, v); > > gimple_assign_set_rhs_from_tree (gsi, constr); > > update_stmt (gsi_stmt (*gsi)); > > } > > > > > > > > > > > > -- > 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)