<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57122>57122</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[ARM] Some bitwise logic instructions used by cmp-ne-zero are not combined into S-suffixed versions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:ARM
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
fzhinkin
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
fzhinkin
</td>
</tr>
</table>
<pre>
Majority of bitwise logic instructions have 'S'-version which update status flags but only subset of these instructions is supported by the `ARMBaseInstrInfo::optimizeCompareInstr` peephole.
For example, ORR with shifted second operand is not supported by the peephole:
https://godbolt.org/z/536GvzfP4
```
bool cmp_ne_orr_rsr(uint32_t a, uint32_t b) {
return (a | (b << 2)) != 0;
}
```
is currently compiled into:
```
cmp_ne_orr_rsr(unsigned int, unsigned int):
orr r0, r0, r1, lsl #2
cmp r0, #0
movwne r0, #1
bx lr
```
but a bit more optimal code will look like:
```
cmp_ne_orr_rsr(unsigned int, unsigned int):
orrs r0, r0, r1, lsl #2
movwne r0, #1
bx lr
```
The same is true for AND, ORR, EOR with shifted register operand and all versions of BIC.
The peephole also ignores shift instructions (except T2's LSR and LSL).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1FNtumzD0a8zLUSIwCYQHHtpknSp1FzV9rwwcglfHRrZJ23z9jgnplm6aNE1DvnB87tfKNK_lJ_HNWOlfwbRQSf8sHYIyO1mD1M7bofbSaAedOCAwnm9pzw5oHb3CcyfrDoa-ER7BeeEHB60SOwfV4MFo9QpuqBz6INx3SKIvhEpH-L431mMD1WsgAZbFV_efroXD20B6q1vD0itapvdyL4-4Nvte2BOWiKFH7DujcM7iDYuvTueNsYAvYt8rZHwNX-7v4Vn6Dlwn26DMYW10A6ZHK-gmQ7Txvxpzlh0sGOV23vcuQPyG1s40lVF-buyOoCPtZZp9PBzbr4vJmCye1ghWxiio9_2jxkdj7aN1lvHVILVP-aMHEUx9gyrGC2D59YkV6LPoB6spCytBiHX4qYCla1rAiXpk4AlLNxCzdGJk-ea3tpDL9WAtak9ZqimmUpHfpNy8OfuO41fDtZM7feIaTb-Aizc5MH3EOd42DtTTmYRTOUWWp_ySnhT-RE_4-BK_N4dnjT_hk0t89XK6lf19NqhGRah5EmQRxvoSlB_TIBWLUtQG5gmUfML_GRH3NxH5R49P5wMVthN7DFVPvYjQUrNcfd5MjRKuD1_e9YvFnXQe7VvHjJtiNI0CFzr8-nY9f6_o3EFE7AxQMCjU7iT2chZQ9PClxt7DA9Vy7uBuez9qudveUejmEZZJlsUpj_OiiJoybYq0EJGXXmHJltc0NNhyA1tDjv1hjg3u1N2UupnG2RGtAZomY_tTF1RyypaB7cwNbStfCD47GQ1Wle9GAEVpqObESoBSh_M16635hjVl_UY6N6ALwyFPOI-6sk0XVdYusF2ucFUUompXi2XWJPkqbpB-IyUqVC54xTivRP2EuiGNwUXOyctIljzmPF4lPMmSNFnOs2XSYp6nolguBGLKFjHuhVTzYEuYT5EtR7OqYecIqSib7gdSuLFOcVLZHjupn6SetInBd8aW59dodKgcvfkO_wXo4Q">