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.

Reply via email to