<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/118132>118132</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] Combine `and` and `lsl` into `ubfiz`
</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>
Kmeakin
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/jxbMMs3dP
```c
uint64_t u8(uint8_t x) { return x << 1; }
uint64_t u16(uint16_t x) { return x << 1; }
```
clang output:
```asm
u8:
and x8, x0, #0xff
lsl x0, x8, #1
ret
u16:
and x8, x0, #0xffff
lsl x0, x8, #1
ret
```
GCC output:
```asm
u8:
ubfiz x0, x0, 1, 8
ret
u16:
ubfiz x0, x0, 1, 16
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUU92OpCwQfZryhkwHCn8vvHDs-F18mWTfYIKK3cwgdAQmbj_9Bu3d-csmvYYUKavq1DkFCOfUyUhZQ_YI2TERwZ_tUv8_S_GqTNLb8Wd99v7igDeAHWB3smNvtT_Y5QTYXQG7l7V_enJ8_AG0iSun-xqANkEZn6fPnoQSsIxe-ezJClgRKB7JIn1YDFkJ8BZ4SxjwRwLF8VMly2-lLL-z9g-FndGghTkRG_wl-KjjQ4Jwc-xV7r_J7RNm3Pa1BGzJSqMF5HSdppilnd7DW2BPAuTsA8Ii_d47sr8X-1_RP6v8r23v0hj6SV3f8TfLoim_dfhG_q-1LI9ZX3glY83HilcikTUrOFYsZYwm5zqtikKKcZAVzXKesV4Mk5B0GhmtpmKgiaqRYsoYVsgoy-hBYMaQToPoC5RTWkFK5SyUPmj9Nse7mCjngqwZKxnHRItearddasReDK_SjMCbplmGc54CImALiLNyTo4P9uLVrK7CK2tiLDsmSx2BH_pwcpBSrZx376288np7Mb_xsiNp7dwrI0mctxkhp9tBQ06109FTxtvobhOMswmL_vqylD-H_jDYGbCLzW7bw2WxL3LwgN0m0gF2N51vNf4KAAD___B2B3s">