<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59680>59680</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang does not optimize trivial case with bit operations
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
socketpair
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/5e3eKqPqs
```C
#include <stdint.h>
int firewall3(const uint8_t *restrict data) {
const uint32_t src = *((const uint32_t *)data);
if ((src & 0xFFFF0000) == 0x11220000) return 1;
if ((src & 0xFFFFFF00) == 0x11223300) return 1;
return 0;
}
int firewall4(const uint8_t *restrict data) {
const uint32_t src = *((const uint32_t *)data);
if ((src & 0xFFFFFF00) == 0x11223300) return 1;
if ((src & 0xFFFF0000) == 0x11220000) return 1;
return 0;
}
```
```asm
firewall3: # @firewall3
mov eax, dword ptr [rdi]
mov ecx, eax
and ecx, -65536
cmp ecx, 287440896
sete cl
and eax, -256
cmp eax, 287453952
sete al
or al, cl
movzx eax, al
ret
firewall4: # @firewall4
mov eax, dword ptr [rdi]
mov ecx, eax
and ecx, -256
cmp ecx, 287453952
sete cl
and eax, -65536
cmp eax, 287440896
sete al
or al, cl
movzx eax, al
ret
```
GCC:
```asm
firewall3:
movl (%rdi), %eax
xorw %ax, %ax
cmpl $287440896, %eax
sete %al
movzbl %al, %eax
ret
```
GCC can optimize such comparisons, but it failed to optimize `firewall4` https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108215
Clang can not optimize both functions.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMlsGOozgTx5_GuVgdmTImcODQnXzM4bvsG7SM7YB3Dc7YJsn2068MSZNkwqhHWo0WRSFyVf1c_v9NMPdeN71SJWJviO1WfAitdaW34i8VDly7VW3l32UbwsEj-oqgQlA1VtbWhLV1DYLqA0HFFFX___7Hd4_IDpHXy3dGps_2bhSo7oUZpMKIbn2Qug_rFtH_3SbpPuC9durEjaEIcmF7H_Cg-5C_B4zg1SkfnBYBSx44ggKjzdtUijHGczqF94C9ExjRXaxDkN_hxvg4XlxIiL7ddhJxeo-nuhEEGSbnqqoqQggZp6a7SCfnJAG4DjoVBtfj5BP3E1BE_QCidAE04y4hMoc2uyUV0_-qir-2-H_Nji-peN3AT3c19900Mm9UOgKXLwQUo5TMBZ9NxKuzx_Gu-BnBFsuTdRIfgsOIvTmpEdst5IsxP5bdxXkvb-MvGWM0u08R3eE2BfJNmpK8uGZ5FdSYZhbIU6cvwJa4_JPLaMHgPuuK5w946y7TmFj8OHlnjx_nK_mx1Klwb0r6q6akv9eUZenEU-m-asnPzOZPzf4Npjx9oL5tt_HN8uVH7MLu7NFM9uUIWLQCijg5AvaD6GfrTlMumzqcfjyqYzCCdJZlAXYVKDKeqFCba-ixfkmGb9stFrzH9hB0pz8U9oNosbDdgTvtbe8jqR4C1gHvuTZK4mDnbJTd7N2M4Id3tRDrph8u7-p6aD60MRxB5Vt7eq-HZi0ajWilJaK7hOSQsFsrtob3zdhdb8M8Z21Di_dDL4K2vV_fVqxkSWVBC75SZZJtkhySLIdVW-aSp7WUZEM4TXPK6jSXeS2KPaeFSrha6RIIQPz3T3KWprCuGU0LtuGFELUsFEEpUR3XZm3MsYsrWmnvB1WyIsvJyvBaGT8eZAB6dcJjEAHEc40rY81LPTQepcRoH_xMCToYVU5LlVb5-7UGp4-aGyy4V_ikQ4trHcPK8XH1q8GZxwOSDu1Qr4XtEFRxmsvt5eDsn0oEBNXYnI9Hp9j8PwEAAP__z8KHLA">