https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111782
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|[11/12/13/14 Regression] |[11/12/13/14 Regression] |Extra move in complex |Extra move in double |double argument and |argument and multiplication |multiplication |and return --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Here is another testcase without complex (or even needing -ffast-math) being involved: ``` struct cmplx { double r; double i; }; struct cmplx f(double ar, double ai, double br, double bi, __complex double *r) { double t = ai * bi; double t1 = ai * br; double t2 = ar * bi + t1; double t3 = ar * br - t; return (struct cmplx){t3,t2}; } ``` This only shows up wih both arguments and returns and using the same registers. I am 99% sure this does not show up that much really either.