https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77515

            Bug ID: 77515
           Summary: GCC fusing of multiply-add ["FMA"] occurring at "-O3"
                    withOUT "-ffast-math" and withOUT "-ffp-contract=fast"
           Product: gcc
           Version: 7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: abe_skolnik at yahoo dot com
  Target Milestone: ---

In GCC, on both x86_64 and AArch64, fusing of multiply-add ["FMA"] is occurring
at "-O3" withOUT "-ffast-math" and withOUT "-ffp-contract=fast".  This seems to
be in violation of preservation of exactly the same results as "-O2" and lower
without those "-f<...>" flags, since the fusing may result in higher precision
and therefor different results.

Clang/LLVM without "-f<...>" flags, on both x86_64 and AArch64, only performs
fusing at "-Ofast", not at "-O3".



fma_test.c
----------
double fma(double a, double b, double c) {
  return a*b+c;
}



example console log
-------------------
> clang_amd64 -march=haswell -O3    fma_test.c -S -o - |  grep -c fmadd
0
> clang_amd64 -march=haswell -O3    fma_test.c -S -o - | egrep -c 
> '(addsd|mulsd)'
2

> clang_amd64 -march=haswell -Ofast fma_test.c -S -o - |  grep -c fmadd
1
> clang_amd64 -march=haswell -Ofast fma_test.c -S -o - | egrep -c 
> '(addsd|mulsd)'
0

> clang_aarch64              -O3    fma_test.c -S -o - |  grep -c fmadd
0
> clang_aarch64              -O3    fma_test.c -S -o - | egrep -c '(fadd|fmul)'
2

> clang_aarch64              -Ofast fma_test.c -S -o - |  grep -c fmadd
1
> clang_aarch64              -Ofast fma_test.c -S -o - | egrep -c '(fadd|fmul)'
0

> gcc_aarch64                -O3    fma_test.c -S -o - |  grep -c fmadd
1
> gcc_aarch64                -O3    fma_test.c -S -o - | egrep -c '(fadd|fmul)'
0

> gcc_amd64   -march=haswell -O3    fma_test.c -S -o - | grep -c fmadd
1
> gcc_amd64   -march=haswell -O3    fma_test.c -S -o - | egrep -c 
> '(addsd|mulsd)'
0

Reply via email to