<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 - Unnecessary mov instruction"
   href="https://bugs.llvm.org/show_bug.cgi?id=43252">43252</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Unnecessary mov instruction
          </td>
        </tr>

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

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>Linux
          </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>-New Bugs
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>tspiteri@ieee.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>htmldeveloper@gmail.com, llvm-bugs@lists.llvm.org, neeilans@live.com, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>For the following code

    void foo(int i);
    void bar(int i) {
        if (i != 0)
            foo(i);
        bar(i);
    }

clang -O3 -S produces this (cleaned up)

    bar:
        pushq   %rbx
        movl    %edi, %ebx
        testl   %edi, %edi
        je      .LBB0_2
        movl    %ebx, %edi
        callq   foo
    .LBB0_2:
        movl    %ebx, %edi
        popq    %rbx
        jmp     foo

The marked mov instruction is not necessary, as edi is already equal to ebx.

Also, the LBB0_2 label can move down one line to just before the popq
instrucion, as if the branch is taken then edi is still equal to ebx.

This is for clang 8.0 on Fedora 30. clang --version produces

    clang version 8.0.0 (Fedora 8.0.0-1.fc30)
    Target: x86_64-unknown-linux-gnu
    Thread model: posix
    InstalledDir: /usr/bin</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>