https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105206
kargl at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |minor --- Comment #1 from kargl at gcc dot gnu.org --- Not sure if anyone cares. I don't use -ffast-math, but this might considered a mis-optimization with that option. #include <math.h> float foof(float x) { return (powf(10.f,x)); } double food(double x) { return (pow(10.,x)); } -fdump-tree-original shows ;; Function foof (null) ;; enabled by -tree-original { return powf (1.0e+1, x); } ;; Function food (null) ;; enabled by -tree-original { return pow (1.0e+1, x); } Compiling to assembly shows foof: .LFB3: .cfi_startproc movaps %xmm0, %xmm1 movss .LC0(%rip), %xmm0 jmp powf .cfi_endproc food: .LFB4: .cfi_startproc mulsd .LC1(%rip), %xmm0 jmp exp .cfi_endproc So, the middle-end is converting pow(10.x) to exp(x*log(10.0)) where log(10.0) is reduced, but the same transformation of powf(10.f,x) still yields a call to powf.