<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/98831>98831</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] Unnecessary materialisation of `0xDF` for `and`
</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>
LLVM generates an unnecessary `mov` in `and_cmp`, but in all the other variants it is smart enough to emit the `0xDF` directly as an immediate argument in `and`: https://godbolt.org/z/xPfc5rh9c
```c
#include <stdbool.h>
#include <stdint.h>
typedef uint8_t u8;
bool and_cmp(u8 b) { return (b & 0xDF) >= 'A'; }
bool load_and_cmp(u8 *b) { return (*b & 0xDF) >= 'A'; }
u8 and (u8 b) { return b & 0xDF; }
u8 load_and(u8 *b) { return *b & 0xDF; }
```
```asm
and_cmp: // @and_cmp
mov w8, #223 // =0xdf
and w8, w0, w8
cmp w8, #64
cset w0, hi
ret
load_and_cmp: // @load_and_cmp
ldrb w8, [x0]
and w8, w8, #0xffffffdf
cmp w8, #64
cset w0, hi
ret
and: // @and
and w0, w0, #0xffffffdf
ret
load_and: // @load_and
ldrb w8, [x0]
and w0, w8, #0xffffffdf
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykVU2PozgQ_TXFpdSRUw7EHDiQZnLZWWkvu9eWgSJ4B3Bkm3R6fv0K0kmHnp7e0S6KjFIfr-q9sgrtvTkMzBnEO4iLSI-htS77rWf9zQxRaeuX7OvXv37HAw_sdGCPesBxGLhi77V7QUhEb0-QCDTD9EcP9VPVHyERQI9YjmGy667D0DLa0LLDk3ZGD8GjCWg8-l67gDzY8dBisMi9CXM0JEKci_2EXRvHVeheUM8NmL7n2ujAqN1h7HkIb9WnyjLHNoSjB5kD7YH2B1uXtgsr6w5A--9A-_MfTRW7Nq1AFCDy1zMRl9_VStIMVTfWjCAffahLa7tVC_LLT_xmCPfu-QwvR665wdEMQT0FHBXI3X3ABIpX3UiNCkugFGG7Q8dhdAMCqRKBEpz1mHzyC8gCgbY50BbkDmFb3KF1VtdPC0ig_APUyfqrwJdzVFOr-HGfd1j3maO6NfRJM_lPsm9D-XBS2vcXy5WtzPEyc4TN7TbOEfj69PY0v5_VdEWBJJG85chCnOtmmTARfkt4nm_2s1rGVP1xCZps3gV4DnPAnN6apddxuBgWk1twWXgWyV3tyrva8e4sIC4-5XDtUpyb-XlP-b_SufGYZi1v0Z89i2n92PSr3OJfGv5BwI_F-x_CiV8S7tbH7YZGdSbrVKY64my9JZEqGadp1GaNElWZVjphEddiS7WKuYlVKkpOE16ryGQkaCO2681axWmcrrhOUtKKKG2kWFcpbAT32nSrrjv103KLjPcjZ6lSch11uuTOz6udqNTVN55VyXNXtckGiIAegag33nP9YI_B9Oa7DsYOky8uIpdNuA_lePCThMYH_1YpmNDN340rXlzgn3cfhl4HdkZ3xs-QaJv7hd5Y97avo9F12buFbUI7lqvK9kD7qebr6-Ho7N9cBaD9TNUD7S9sTxn9EwAA__-VEtsp">