https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116463
--- Comment #19 from Tamar Christina <tnfchris at gcc dot gnu.org> --- The failing tests on the branch are: #include <complex.h> #define TYPE double #define N 200 void fms180snd(_Complex TYPE a[restrict N], _Complex TYPE b[restrict N], _Complex TYPE c[restrict N]) { for (int i = 0; i < N; i++) c[i] -= a[i] * (b[i] * I * I); } void fms180fst(_Complex TYPE a[restrict N], _Complex TYPE b[restrict N], _Complex TYPE c[restrict N]) { for (int i = 0; i < N; i++) c[i] -= (a[i] * I * I) * b[i]; } The issue is just a small difference in commutative operations. we look for {R,R} * {R,I} but found {R,I} * {R,R} which is a bit fragile. since the DF analysis is cached, we should be able to swap operands and retry for multiply. for the addition we can't as it's part of the TWO_OPERANDs and we require them to be in a particular order to have the right values. Testing a patch that fixes the tests on the gcc-14 branch. Will work on the one for master next.