On Tue, Mar 17, 2015 at 7:15 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > This patch fixes a regression where since the removal of specialized > builtin from _mm_storel_epi64 we force the extraction of DImode (or SImode) > low value out of 16/32/64 byte vector registers into memory. > As the vector extraction is from a vector register with a different > element mode, the expander doesn't know it might be beneficial to subreg it > to a vector mode with the same size, but different element mode and do > vector extraction out of that. This patch adds a pre-reload splitter that > will turn it into such a vector extraction. At least for the -m32 > DImode extraction directly into memory, I think teaching RA to do that would > be much harder.
Agreed. > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2015-03-17 Jakub Jelinek <ja...@redhat.com> > > PR target/65078 > * config/i386/sse.md (movsi/movdi -> vec_extract_*_0 splitter): New. > > * gcc.target/i386/pr65078-1.c: New test. > * gcc.target/i386/pr65078-2.c: New test. > * gcc.target/i386/pr65078-3.c: New test. > * gcc.target/i386/pr65078-4.c: New test. > * gcc.target/i386/pr65078-5.c: New test. > * gcc.target/i386/pr65078-6.c: New test. OK for mainline. Thanks, Uros.