https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100711
--- Comment #9 from Hongtao.liu <crazylht at gmail dot com> --- (In reply to jbeulich from comment #8) > Since the commit doesn't really explain it (maybe it's obvious to others, > but it isn't to me), may I ask why two splitters were introduced, yet then > still not covering all possible modes? VI48_128 only covers two of the four > possible SSE2 modes, while VI124_AVX2 leaves out all DI-element-size ones as > well as all 512-bit ones. Shouldn't both be folded, using VI_AVX2 as the > mode iterator? We don't have single instruction for V8HI/V16QImode broadcast without AVX2, that's why the first splitter only have VI48_128. And yes, for the second splitter, I think we should use VI_AVX2 to cover all modes. > > As an aside, it is also interesting that the 1st splitter uses TARGET_SSE > without the corresponding testcase limiting itself to just SSE. When > building that testcase with SSE2 turned off, foo() uses shufps and andnps as > expected, but the splitter doesn't appear to come into play at all for > bar(), when really it is only the broadcast that needs synthesizing, while > andnps can be used regardless of mode.