<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">