On Wed, Jun 26, 2019 at 10:47 AM Jakub Jelinek <ja...@redhat.com> wrote: > > On Wed, Jun 26, 2019 at 10:17:26AM +0200, Uros Bizjak wrote: > > Please note that the patch regresses > > > > FAIL: gcc.target/i386/sse2-vect-simd-11.c scan-tree-dump-times vect > > "vectorized [1-3] loops" 2 > > FAIL: gcc.target/i386/sse2-vect-simd-15.c scan-tree-dump-times vect > > "vectorized [1-3] loops" 2 > > > > For some reason, the compiler decides to vectorize with 8-byte > > vectors, resulting in: > > > > missed: not vectorized: relevant stmt not supported: _8 = (short > > unsigned int) _4; > > missed: bad operation or unsupported loop bound. > > missed: couldn't vectorize loop > > > > However, the unpatched compiler is able to vectorize loop using > > 16-byte vectors. It looks that the compiler should re-run > > vectorization with wider vectors, if vectorization with narrower > > vectors fails. Jakub, Richard, do you have any insight in this issue? > > > > 2019-06-26 Uroš Bizjak <ubiz...@gmail.com> > > > > * config/i386/i386.c (ix86_autovectorize_vector_sizes): > > Autovectorize 8-byte vectors for TARGET_MMX_WITH_SSE. > > The patch isn't correct if TARGET_MMX_WITH_SSE, but not TARGET_AVX, because > in that case it will push only that 8 and nothing else, while you really > want to have 16 and 8 in that order, so that it tries to vectorize first > with 16-byte vectors and fall back to 8-byte. The hook is supposed to > either push nothing at all, then only one vector size is tried, > one derived from preferred_simd_mode, or push all possible vectorization > sizes to be tried.
Thanks for the explanation and the patch! Yes, the patch works OK. I'll regression test it and push it later today. Thanks, Uros. > The following patch fixes the failures: > > --- gcc/config/i386/i386.c.jj 2019-06-26 09:15:53.474869259 +0200 > +++ gcc/config/i386/i386.c 2019-06-26 10:42:01.354106012 +0200 > @@ -21401,6 +21401,11 @@ ix86_autovectorize_vector_sizes (vector_ > sizes->safe_push (16); > sizes->safe_push (32); > } > + else if (TARGET_MMX_WITH_SSE) > + sizes->safe_push (16); > + > + if (TARGET_MMX_WITH_SSE) > + sizes->safe_push (8); > } > > /* Implemenation of targetm.vectorize.get_mask_mode. */ > > > Jakub