https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83348
Bug ID: 83348 Summary: Missed optimization in math expression: can be used std::pow function Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: zamazan4ik at tut dot by Target Milestone: --- gcc(trunk) with optimization flags '--std=c++17 -O3 -march=native -ffast-math' for this code: double f(double a) { return a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a* a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a* a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a* a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a* a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a* a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a*a; } generates this assembly: f(double): vmulsd xmm1, xmm0, xmm0 vmulsd xmm1, xmm1, xmm1 vmulsd xmm1, xmm1, xmm1 vmulsd xmm1, xmm1, xmm1 vmulsd xmm0, xmm1, xmm0 vmulsd xmm1, xmm0, xmm0 vmulsd xmm0, xmm1, xmm0 vmulsd xmm0, xmm0, xmm0 ret But here it can be simplified by using std::pow function. If you will increase length of this multiply chain, gcc just will add more and more multiplications.