https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85283
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- We can vectorize a variant with doubles but that results in awful code because the ABI isn't known. The float variant now looks like the following before vectorization: _1 = a.x; _2 = b.x; _3 = _1 + _2; _4 = a.y; _5 = b.y; _6 = _4 + _5; MEM[(struct *)&D.1915] = _3; MEM[(struct *)&D.1915 + 4B] = _6; return D.1915; here the issue is again that we do not know the ABI details plus MMX is disabled and the vectorizer expects 4 floats for vectorization (that is, it cannot vectorize using partial vector regs - the ABI may specify the upper half of %xmm0 is zero for example).