https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56766
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2015-05-12 CC| |uros at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- The vectorizer patch is now in (I added a testcase for addsubps because for that it happens to work). We still need to fixup the sse3_addsubv2df3 pattern or fix combine to try multiple "canonical" forms of vec_merge vs. (vec_select (vec_concat ...)). Or decide which one is canonical (I'd prefer simply dropping vec_merge - with AVX512 we've run out of bits for the CONST_INT selector....) One issue with the vec_select form is that it requires an intermediate mode of double-size while vec_merge avoids this. Eventually one can also teach combine that certain (vec_select (vec_concat ..)) can be treated as (vec_merge ...). void testd (double * __restrict__ p, double * __restrict q) { p[0] = p[0] - q[0]; p[1] = p[1] + q[1]; } should vectorize to addsubpd with -msse3.