<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/102355>102355</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Save a comparison when checking integer is within two disjoint ranges
</td>
</tr>
<tr>
<th>Labels</th>
<td>
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Kmeakin
</td>
</tr>
</table>
<pre>
I think the code describes it better than words could:
https://godbolt.org/z/rWY8acb46
```src
#include <stdbool.h>
#include <stdint.h>
typedef uint32_t u32;
typedef int32_t i32;
bool src1(u32 x) { return (1 <= x && x <= 2) || (4 <= x && x <= 5); }
bool tgt1(u32 x) { return (1 <= x && x <= 5) && (x != 3); }
bool src2(u32 x) { return (x <= 2) || (4 <= x && x <= 5); }
bool tgt2(u32 x) { return (x <= 5) && (x != 3); }
bool src3(i32 x) { return (1 <= x && x <= 2) || (4 <= x && x <= 5); }
bool tgt3(i32 x) { return (1 <= x && x <= 5) && (x != 3); }
bool src4(i32 x) { return (x <= 2) || (4 <= x && x <= 5); }
bool tgt4(i32 x) { return (x <= 5) && (x != 3); }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzElEFr6zgUhX_N9ebSIF9Fib3wYtJMYJjlLIa3esjSja3WloIkN21__cNJymsLgRIKD8y1uefIHwfjo1NynWduQG1AbQs95T7E5t-R9aPzRRvsS_MP5t75R8w9owmW0XIy0bWc0GVsOWeOmHvt8RiiTWjCNFiQf4HYgrjMPudDmne0A9p1wbZhyIsQO6DdK9Au_v-j0qZdri6HVuJ8pWguG5LOm2GyjCDvU7ZtCMOiB_n3Fd35_F4-zfxyYMt7nJzPkn5mnCSB3HwU3zT3TjvPGYkpmhKomiThM1CNsN5g5DxFj0BVOdNBbvEZgVZAq_nhvKGz-x7W97Nzed2pgGqQG4T19h04d_k2sDq5z0ugajaU815-xnxMSddh35npK5gbE0igyv2J73Qb-MaUy-uw78z0FczXE7z934VtpK1lrQtuyjVJoWpRi6Jv9tSKSpFSulRcl4ZlLVZ73Sq2-1VZ1YVrSNBSVGJd1rKUYlFVK7s2Zq9MbSsll7AUPGo3LIbhaZyrpnApTdyUgqRSxaBbHtKp94hGlxLbu3DIbnSvOrvggWguxNjMx-_aqUuwFINLOf1-YXZ54OY__cSo0YTxoKNLweOxZ4-mZ_PofDcXCncc0SU8urlKMR8DWpcegvMZo_Ydp2KKQ_OpJV3up3Zhwgi0m5mX290hhgc2GWh3SpSAdpdQTw39CgAA__9m1o5B">