<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">