https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114075
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- In r14-321 this wasn't vectorized, in r14-322 it is with vf 2, but the floating point addition is performed in some weird unsigned long operation instead: _14 = VIEW_CONVERT_EXPR<unsigned long>(vect__17.11_42); _32 = VIEW_CONVERT_EXPR<unsigned long>(vect__18.12_29); _35 = _14 ^ _32; _34 = _32 & 9223372034707292159; _33 = _14 & 9223372034707292159; _51 = _35 & 9223372039002259456; _52 = _33 + _34; _53 = _52 ^ _51; _54 = VIEW_CONVERT_EXPR<vector(2) float>(_53); _19 = _17 + _18; MEM <vector(2) float> [(float *)&D.2632] = _54; The involved constants are 0x7fffffff7fffffff and 0x8000000080000000. Perhaps using the emulated vectors should be restricted only to integer types?