<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Missed optimization in math expression: squashing sqrt functions"
   href="https://bugs.llvm.org/show_bug.cgi?id=35592">35592</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Missed optimization in math expression: squashing sqrt functions
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>LLVM Codegen
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>zamazan4ik@tut.by
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>clang(trunk) with '--std=c++17 -O3 -march=native -ffast-math' flags for this
code:

#include <cmath>

double f(double a, double b, double c, double d)
{
    return sqrt(a)*sqrt(b)*sqrt(c)*sqrt(d);
}

generates this assembly:


f(double, double, double, double): # @f(double, double, double, double)
  vsqrtsd xmm0, xmm0, xmm0
  vsqrtsd xmm1, xmm1, xmm1
  vmulsd xmm0, xmm1, xmm0
  vsqrtsd xmm1, xmm2, xmm2
  vsqrtsd xmm2, xmm3, xmm3
  vmulsd xmm1, xmm1, xmm2
  vmulsd xmm0, xmm0, xmm1
  ret


GCC (trunk) with '--std=c++17 -O3 -march=native -ffast-math' flags generates
more optimal code:


f(double, double, double, double):
        vmulsd  xmm0, xmm0, xmm1
        vmulsd  xmm2, xmm2, xmm3
        vmulsd  xmm2, xmm2, xmm0
        vsqrtsd xmm0, xmm0, xmm2
        ret</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>