https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115640

--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Stubbs from comment #10)
> On 26/06/2024 12:05, rguenth at gcc dot gnu.org wrote:
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115640
> > 
> > --- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
> > (In reply to Richard Biener from comment #7)
> >> I will have a look (and for run validation try to reproduce with gfx1036).
> > 
> > OK, so with gfx1036 we end up using 16 byte vectors and the testcase
> > passes.  The difference with gfx908 is
> > 
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > note:   ==> examining statement: _14 = aa[_13];
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > note:   vect_model_load_cost: aligned.
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > note:   vect_model_load_cost: inside_cost = 2, prologue_cost = 0 .
> > 
> > vs.
> > 
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > note:   ==> examining statement: _14 = aa[_13];
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > missed:   unsupported vect permute { 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 
> > 9 10
> > 10 11 11 12 12 13 13 14 14 15 15 }
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > missed:   unsupported load permutation
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:19:72:
> > missed:   not vectorized: relevant stmt not supported: _14 = aa[_13];
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > note:   removing SLP instance operations starting from: REALPART_EXPR
> > <(*hadcur_24(D))[_2]> = _86;
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > missed:  unsupported SLP instances
> > /space/rguenther/src/gcc-autopar_devel/gcc/testsuite/gfortran.dg/vect/pr115528.f:16:12:
> > note:  re-trying with SLP disabled
> > 
> > so gfx1036 cannot do such permutes but gfx908 can?
> 
> GFX10 has more limited permutation capabilities than GFX9 because it 
> only has 32-lane vectors natively, even though we're using the 64-lane 
> "compatibility" mode.
> 
> However, in theory, the permutation capabilities on V32 and below should 
> be the same, and some permutations on V64 are allowed, so I don't know 
> why it doesn't use it. It's possible I broke the logic in 
> gcn_vectorize_vec_perm_const:
> 
>    /* RDNA devices can only do permutations within each group of 32-lanes.
>       Reject permutations that cross the boundary.  */
>    if (TARGET_RDNA2_PLUS)
>      for (unsigned int i = 0; i < nelt; i++)
>        if (i < 31 ? perm[i] > 31 : perm[i] < 32)
>          return false;
> 
> It looks right to me though?

nelt == 32 so I think the last element has the wrong check applied?

It should be

>        if (i < 32 ? perm[i] > 31 : perm[i] < 32)

I think.  With that the vectorization happens in a similar way but the
failure still doesn't reproduce (without the patch, of course).

> The vec_extract patterns that also use permutations are likewise 
> supposedly still enabled for V32 and below.
> 
> Andrew

Reply via email to