<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/59597>59597</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] Redundant zero-extension in 32-bit popcount expansion
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64,
            missed-optimization
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          SamTebbs33
      </td>
    </tr>
</table>

<pre>
    ```
#include <stdint.h>

uint32_t
foo (uint32_t a)
{
  return __builtin_popcount (a);
}
```

LLVM at -O2 gives:
```
foo: // @foo
        mov     w8, w0
 fmov    d0, x8
        cnt     v0.8b, v0.8b
        uaddlv  h0, v0.8b
        fmov    w0, s0
        ret
```
The first MOV can be avoided by doing a 32-bit FMOV like GCC does:
```
foo:
        fmov s0, w0
        cnt     v0.8b, v0.8b
        addv    b0, v0.8b
 fmov    w0, s0
 ret
```
https://godbolt.org/z/GPre1d6Ge
This could be caused by `AArch64ISelLowering::LowerCTPOP_PARITY` emitting a 64-bit zero extension which is then bitcasted.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVFtvozgU_jXm5SiRMYHAAw80WaqROmo1E420T5Evh-AdsCNskk5__QpDdpRuq9Ui5Ms537l8nzHcOX0yiCVJH0i6j_joWzuU33l_QCFckkTCql8lyejy0j2hFWGJNrIbFQJJds4rbfy6JckfizuMozY-YUc_7xprgbD8ZgROWLGgtw_zAmBAPw4Gjkcx6s5rczzbs7Sj8VNoiEgebkH7ZfGuszA-Pf34CtzD6pnBSV_QkaT6EN5YS5IKCKsJq4Fs6GRYmpmf3l7CfM0J28F1iYNmsSs6mV_z-yBpfJgvdJ2LCTAv7jAjV6q7ALT0E8CtxDUAHL33Dug_ZHRoERo9OA9fn3-A5AYEAr9YrVCB-AXKanMCDglbCe2hnlCd_onwuNuBsv8l1QctOnqnzP-QgCsVGIp_SfAJ989It96fQ-PhHE9WCdv5tR1OhNVvhNWPLwPGKnvEm0bagbRjpyZxJB_drA3JaFUNss02X75j92SvOGhzmvImVdjtDi_PL8eX6tuXw58ko4C99n7WM9sEPd9wsICvHo3T1sC11bIF7cC3aEBoL7nzqNZzH5EqE1UkBY-wjLNtvNnSbZ5HbYmSZ4JtG9ZsZByzWKaxyCWNFRUMi7SJdMkoYzGLi3jLMpavC5oJVFLxRhRFiinZUOy57tZdd-knJSLt3IhlWqTFNuq4wM6FO8-Y4PInGkWSaiFPGCNsRxjrtXOoVvbsda_fuNfWTL50Hw3llHclxpMjG9pp593vSl77LvxQbvnSPXxDNRrFzazQ6rdC2tw-xX_uOr6eeXBG49CV785W-3YUa2l7wuqp4jKtzoP9C6UnrA5EHWF14Pp3AAAA__8Al2J3">