[Bug c/70777] New: x*x pessimised to pow(x,2) with -Og -ffast-math

suckfish at ihug dot co.nz gcc-bugzilla@gcc.gnu.org
Sun Apr 24 10:00:00 GMT 2016


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

            Bug ID: 70777
           Summary: x*x pessimised to pow(x,2) with -Og -ffast-math
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: suckfish at ihug dot co.nz
  Target Milestone: ---

Compiling the function

double foo(double x) { return x*x; }

on x86_64 with "gcc -Og -ffast-math" converts the multiplication to a call to
pow():

foo:
.LFB0:
        .cfi_startproc
        subq    $8, %rsp
        .cfi_def_cfa_offset 16
        movsd   .LC0(%rip), %xmm1
        call    pow
        addq    $8, %rsp
        .cfi_def_cfa_offset 8
        ret


Removing the -ffast-math or using -O/-O2/-O3 with -ffast-math, the
multiplication compiles to a multiply instruction.

Observed with gcc 4.8.3, 5.4.1 and 6.0.


More information about the Gcc-bugs mailing list