<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=http://email.email.llvm.org/c/eJytlstu4yAUhp_G3qBaNviWhRdNMiONVGk23UfY4IQWGw_gJs3Tz4GkaS5Wpai1iDHn8vsLHEhqxd6rjbWDCchjgH9DWytWK2kjpdcw2sMnz573tGhYG8TLIH483vP40BYXVkxE38iRcRSQhbFM9DbaBOTXeRDfWa57NIIvyVcW_dvyAC8QNcx1-13ju_0-IPPzNAhHrdB8S6UMcNmo3lgvUoJGgB81N1aLxiJGLQ3wDAXFMR_BdRkuhtWglVVAuXS5PoVMhntEZuxqUNp-xMP7LxB8kLfPnBQ8zhHBMLr6Dk5atOAuzwmcaFKANYd28S7n8dMzQ5rbEWYt-QFFP9M_qugX7WcVYf2_Vjy64k9XsZys0EkjNd3Bciop4lW_uKC4UZDGp4QTibs69eZ7Jl311u-Wo8FqFGRzzUSQLW-i9zvoebNz4Vul2Vm4L588ncryPac-K7n0Nt1wRpAUl96Xnvs-eprP4xWeTp2gEYOncUV4jTMpeRgU7ji5CIbVOg_ANwH34Kf34ruKv8E_KKIP4jO69Ft0-b10bvfcQZffSWe49WJU3g0Gm_Aa7EOtuVKjPUNHuzvMb7fHoeAPpXudfKqOyU27UN0gJGdoK-wGPfwlCE6QXZmv8jQ6pd3MQR4jYUB54NRCbqs0MqrjYKFG9RF63oAbGkX1uIYKQX-Q3Yj-NQpZRdiMzGhIR7tRujKqeeV2oEKHo5bXv5fANNZRozoYSPn20T3AQffCGwtDYczIDTxkpMyTcFNlvM7ThvC0SLKaU9LmBSdN2uISFyWt21DSmktTwVIEGPd8i7wEPMNyhN8nEBWOMbQkS3Jc4DLCmGQxw7MCz2jLEwzHHO-okJHTcX8FQl15SZgqA04pjDWfTmqMWPece2AgtMJKXi2eaL9GVo_9K2KKG9Qri9RgRSf2HOziTVCJGmp46PkqD_cfqTpQLQ>53861</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
CLang trunk does not optimize trivial case
</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/65Tza7cdf
```C
#include <stdint.h>
extern uint16_t qwe, asd, zxc, zzz;
int firewall(const uint8_t *restrict data) {
const uint8_t ip_proto = *data;
const uint16_t dst_port = *((const uint16_t *)data + 32);
if (ip_proto == 17 && dst_port == qwe) return 1;
if (ip_proto == 17 && dst_port == asd) return 1;
if (ip_proto == 17 && dst_port == zxc) return 1;
if (ip_proto == 17 && dst_port == zzz) return 1;
return 0;
}
```
```asm
firewall: # @firewall
mov dl, byte ptr [rdi]
movzx ecx, word ptr [rdi + 64]
mov eax, 1
cmp dl, 17
jne .LBB0_2
cmp cx, word ptr [rip + qwe]
jne .LBB0_2
.LBB0_7:
ret
.LBB0_2:
cmp dl, 17
jne .LBB0_4
cmp cx, word ptr [rip + asd]
je .LBB0_7
.LBB0_4:
cmp dl, 17
jne .LBB0_6
cmp cx, word ptr [rip + zxc]
je .LBB0_7
.LBB0_6:
cmp dl, 17
sete al
cmp cx, word ptr [rip + zzz]
sete cl
and cl, al
movzx eax, cl
ret
```
Compiled with -O3 to x86_64.
`cmp dl, 17` is repeated for some reason. This is a bug as I think.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVdtu4yAQ_Rr8gmrZOL49-KFJdqWVKu1L3yNsSEKLjRdwk_rrdyCXzcWqFG0t4oGZM4cTGHCt2Ge1tbY3KHlG5Ce0jWK1kjZUegOjEX5Z-jrSvGFrFC1R9Hx8Z9GhLa68JBFdIwfGMUoWxjLR2XCLkh-XIL63XHd4gFicrSz-s-OILDA1zJlx33gzjiiZX6YBHK-F5jsqJSJFozpjPUkBHIg8a26sFo3FjFqKSIlRfszH8FzDRb_qtbIKVC5drk9JJuFeIjN21SttT3iY_0qCB3l_6aigO8cJgdHNf3DUYg3h4lKBI41z8GbQruZyEb88JdbcDrBq8Tcw-pX-Vka_ad_LCPv_NeMxFP0L5cvJCp10UtMePOeSSjzrFw8UN0az6JxwVuKeVn14y6Sr3vrTctxbjVE610ygdHmHHvdgebN38J3S7ALuyyebTWV5y6nPiq-jTdtfKIjz6-hbx70NX-bzaEWmUyfUiN6rcUV4K2eS8jDI3XVyBYbdugSQO8Aj8mePyncVfyf_wIhPii_Uzf5LXfaoOnd6HlCXPajOcOvJqHxYGBzCW2EntuaGjXYMH_3uMr8_HoeCP5TubfK5OiYP7UK1vZCc4Z2wW_z0O8Fwg-yLbJXNwnPa3RpkERYGmHtOLeSulcZGtRw81KguxK9bCEOjuB42UCH4F7Zb0b2HAasSViYlDaywkleLF9ptsNVD946Z4gZ3ymLVW9GKkYNffAgqcUMNDwYtbz-nIHmow0a1MJDy42Se4B58442FoTBm4AY6aVJkcbCtCp6sKanLgrOakYgVTV7XMSmLMmVllrNA0ppLU8FOIUI6vsOeAvqwW4GoSESgxWmckZwUISFJGjFS5qSkax4TuMN4S4UMnQ73nQ905SXBOhgISmGs-RekxohNx7mfDvjpYLdKV0Y179z2VOjAz1559X8BVg86xQ">