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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] `clz` on u8/u16 unnecessarily zero-extended to u32
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    The result of the `clz` instruction on an 8-bit or 16-bit value is unecessarily zero-extended to 32-bits via `and`

# C++ example
https://godbolt.org/z/rc9P4a54a
```c++
#include <cstdint>

using u8 = uint8_t;
using u16 = uint16_t;
using u32 = uint32_t;
using u64 = uint64_t;
using u128 = __uint128_t;

auto src8(u8 x) { return __builtin_clzg(x); }
auto src16(u16 x) { return __builtin_clzg(x); }
```

# Clang assembly
```asm
src8(unsigned char):
        and     w8, w0, #0xff
        clz     w8, w8
        sub     w8, w8, #24
        and w0, w8, #0xff
        ret

src16(unsigned short):
        and     w8, w0, #0xffff
        clz     w8, w8
        sub     w8, w8, #16
        and w0, w8, #0xffff
        ret
```

# GCC assembly
```asm
src8(unsigned char):
        and     w0, w0, 255
 clz     w0, w0
        sub     w0, w0, #24
        ret
src16(unsigned short):
        and     w0, w0, 65535
        clz     w0, w0
        sub w0, w0, #16
        ret
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJysVE1v6zYQ_DWryyIBtZQY-aCD7dQ99NJD7wZFbSy2NBXwIx_-9YWkxHHcoA_BewZhCpjd2dldaXSM9uCZW6g3UN8XOqdhDO0fR9b_WF90Y__a_jUwBo7ZJRwfMA2MoIRxJ1ACrY8pZJPs6HH0qD02N51NOAYs1fz0pF1mtBGzZ8Mx6mDdK544jDf8ktj33GMaUdIUHfHJ6ole-x6UALGeDkncAm2ANsgv-vjoGMR6SOkxglwD7YB2h7HvRpdux3AA2p2AdsGs_qx0XemJQYnlmIVmIbXeuNwzgtyamHrrE8jflpI5Wn_A3CDIe8zWp2afQG4-kFKdoVJdYZLOmKQrTFVnTFXXnLTU2-9nWjrXBLHWOY0Yg2mAmtzgC9AK4W6DgVMOHvf7LluXrN8bdzoANVMAyA3C3f1Fdqmm9FJ9N_88v4uFOO0PqGPkY-deL2N0PIJYv2v18_vVoxl0mDknAnz7ad_P93MDtMVnMf0DSfHy8HARZdzpMqq5gGLuPkMLAVVXRRbqM35VIHBaGjuP6F11HMaQviP7J4WX6sfCv5L-3_38vt3-su2IjzaprqeIc2fv0BediU_D-bSSRfV3p31BqOpa1l9N-ms9V1o-TflqgkXfyn4lV7rgtryr6nIlRKWKoZWm46ms6ntl6poFrZhrLpU0HWnVFLYlQbWoSJCccm4bwb3pq76u7jR3zQoqwUdt3a1zT8fJqQobY-a2lKouVeF0xy7ORkzk-RlnFIgmXw7tlHTT5UOESjgbU_ygSTa52cHX62AGVUF9f2HRo8fcAO2m7z77_zXhLKnIwbVX3mrTkLtbMx6BdlPRt-vmMYx_s0lAu1lqBNq99fLU0r8BAAD__4fuxDs">