https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120808
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- With void f(double x[restrict], double *y, double *z) { x[0] = __builtin_fma (x[0], y[0], z[0]); x[1] = __builtin_fma (x[1], y[1], - z[1]); } it doesn't exactly reproduce because we fold fma (x, y, -z) to fms only when canonicalize_math_after_vectorization_p ().