[llvm-bugs] [Bug 43239] New: Missed optimization: extra XOR and FMA

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Sep 6 06:17:02 PDT 2019


            Bug ID: 43239
           Summary: Missed optimization: extra XOR and FMA
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++
          Assignee: unassignedclangbugs at nondot.org
          Reporter: zamazan4ik at tut.by
                CC: blitzrakete at gmail.com, dgregor at apple.com,
                    erik.pilkington at gmail.com, llvm-bugs at lists.llvm.org,
                    richard-llvm at metafoo.co.uk

For the code below:

#include <cmath>

double t1(double x, double y)
    return std::sqrt(x*x + y*y);

clang(trunk) with '-O3 -ffast-math' generates:

t1(double, double):                                # @t1(double, double)
        mulsd   xmm0, xmm0
        mulsd   xmm1, xmm1
        addsd   xmm1, xmm0
        xorps   xmm0, xmm0
        sqrtsd  xmm0, xmm1

gcc(trunk) with '-O3 -ffast-math' is better here (doesn't add extra xorps
instr) and generates:

t1(double, double):
        mulsd   xmm1, xmm1
        mulsd   xmm0, xmm0
        addsd   xmm0, xmm1
        sqrtsd  xmm0, xmm0

Godbolt playground: https://godbolt.org/z/Cx9EDI

Also note that with '-O3 -march=native -ffast-math' both compilers (gcc(trunk)
and clang(trunk)) generate equal code:

t1(double, double):
        vmulsd  xmm1, xmm1, xmm1
        vfmadd132sd     xmm0, xmm1, xmm0
        vsqrtsd xmm0, xmm0, xmm0

Godbolt playground: https://godbolt.org/z/fHgGxw

But without '-ffast-math' outputs are different: clang doesn't use FMA instr.

Godbolt playground: https://godbolt.org/z/X46_hD

You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190906/58406338/attachment-0001.html>

More information about the llvm-bugs mailing list