<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 - [X86] Extra move instructons after fma3 instructions in sqrt and reciprocal tests."
   href="https://bugs.llvm.org/show_bug.cgi?id=45065">45065</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[X86] Extra move instructons after fma3 instructions in sqrt and reciprocal tests.
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </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>Backend: X86
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>craig.topper@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>craig.topper@gmail.com, llvm-bugs@lists.llvm.org, llvm-dev@redking.me.uk, spatel+llvm@rotateright.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>For example this case from recip-fastmath.ll 

; HASWELL-LABEL: f32_one_step_variables:
; HASWELL:       # %bb.0:
; HASWELL-NEXT:    vrcpss %xmm1, %xmm1, %xmm2
; HASWELL-NEXT:    vmulss %xmm2, %xmm0, %xmm3
; HASWELL-NEXT:    vfmsub213ss {{.*#+}} xmm1 = (xmm3 * xmm1) - xmm0
; HASWELL-NEXT:    vfnmadd213ss {{.*#+}} xmm2 = -(xmm1 * xmm2) + xmm3
; HASWELL-NEXT:    vmovaps %xmm2, %xmm0
; HASWELL-NEXT:    retq

If the vfmsub213ss was commuted to overwrite xmm0 we could use it as the input
to vfnmadd213ss instead of xmm1. Then we could write xmm0 as the result and
avoid the vmovaps.

Probably requires a more advanced heuristic in TwoAddressInstructionPass</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>