https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67609
--- Comment #24 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
(In reply to Richard Henderson from comment #23)
> Created attachment 36563 [details]
> possible patch
>
> Certainly this fixes the executable test case from #c13.
This patch could be a solution to generate a correct code. Unfortunately, it
generates ineffective code:
movdqa reg(%rip), %xmm1
movaps %xmm1, -24(%rsp)
movsd %xmm0, -24(%rsp)
movapd -24(%rsp), %xmm2
movaps %xmm2, reg(%rip)
instead of better code which would be expected for this case
movdqa reg(%rip), %xmm1
movlpd %xmm0, %xmm1
movaps %xmm1, reg(%rip)
The patch will force any pseudo which is accessed as a subregister of DImode to
be spilled. Although I don't know how it will affect performance of SPEC
benchmarks.