<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/77432>77432</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            (a < 2 and b < 2) should be optimized to (a | b) < 2
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Validark
      </td>
    </tr>
</table>

<pre>
    Currently, this code gets emitted naïvely:

```zig
export fn foo(a: u32, b: u32) bool {
    return a < 2 and b < 2;
}
```

This can be optimized to:

```zig
export fn foo(a: u32, b: u32) bool {
    return (a | b) < 2;
}
```

Reasoning: since `a` and `b` must be 0 and/or 1 for the condition to be true, then the bitwise OR of these must also be 0 or 1 for the condition to be true. 
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Uk2PnDAM_TXmYu0oJBk-DhxmZ8S10qrqPUwMpA3JKAm7nf31VWD7oW2lqodKCFvm-fkZPxWjmRxRB8dHOF4KtabZh-6Tskar8KUYvL535zUEcsnegZ8xzSbi1WvCiVJEWkxKpNEpOAs49c9k7yBOwC7Avr8rtj-vZtor9PXmQ8LR4eg98EaBOOEqeOYffuQtDt5bhPpx70JEDJTW4FAhiDNyVE7jsOcg3mBQX97N_VXMx02-cjgQ-lsyi3kljcn_f825B6HOaN7-k-YnUtE746Y8Jhp3JYSKKajY9gOgYkPOlzWmvNZWBd77gCWOPmCaCa_eaZOMd5h8BqWw0n5OchtgMOnFRMIPT-jHXIm0Myob_U77V8IDFroTuhWtKqgraybrVvCSFXPXNFJWamxqyetSKCmG47GVUjbHqmJNywrTccYlK1nL2hwOZVlrxduKjVpUigmQjBZl7MHa5-Xgw1SYGFfq6loKXlg1kI2bjTl39ILbR-A8uzp0uedhWKcIklkTU_zJkkyy1O3X-c1UvMU4-9Xq93750zmLNdhuTukWs5t4D7yfTJrX4XD1C_A-j3wLD7fgP9M1Ae83oRF4vy3yLQAA___Aqwe2">