https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116979
--- Comment #35 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Thank you for the response. I still think GCC should stick to mul-mul-add in conformant mode (in absence of -ffp-contract=fast, -funsafe-math-optimizations). There are two overriding concerns. GCC decomposes complex multiplication in the middle of optimization pipeline (the decomposition introduces a conditional branch to a helper if we got a NaN in any component of the result). Prior to decomposition, complex mul is optimized as if it is commutative, i.e. a*b and b*a are considered to be the same expression. If complex mul is then expanded in a non-commutative manner, computations may change depending on optimization level. This alone can be viewed as a disqualifying factor. (and generally, if we optimize according to some rule and then fail to uphold that rule in code generation, we create a contradiction in compiler logic that can lead to miscompilations) Furthermore, I'm concerned that error introduced from asymmetric use of FMA can break numerical stability of the overall computation. We have seen one such case in PR 106902 (gcc broke IIR-based image filtering, see links in See Also). Not the same issue, but I hope it serves an a illustration.
