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

--- Comment #7 from Marc Glisse <glisse at gcc dot gnu.org> ---
Created attachment 41331
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41331&action=edit
recognize a VEC_CONCAT from a constructor (not clean)

One piece of the issue is v4di = { v2di, v2di } where we currently generate
        vmovdqa %xmm3, -48(%rsp)
        vmovdqa %xmm5, -32(%rsp)
        vmovdqa -48(%rsp), %ymm0
and the attached patch generates
        vinsertf128     $0x1, %xmm1, %ymm0, %ymm0

I am not very familiar with expansion and RTL, the patch probably has many
issues. I don't know if there is something significantly more general to try. I
was tempted to cast (aka subreg) V2DI to TI, construct a V2TI, and cast back to
V4DI, since the code nearby is supposed to handle constructors with only scalar
elements, but an experiment with __int128 seems to indicate that we don't
discover vec_concat for scalars either :-(

Reply via email to