<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/143636>143636</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: fold ceil(x/16) == 0 to x == 0
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Cancelll
</td>
</tr>
</table>
<pre>
```llvm
define i1 @src(i32 %arg0) {
%1 = add i32 %arg0, 1
%2 = lshr i32 %1, 4
%3 = and i32 %1, 15
%4 = icmp ne i32 %3, 0
%5 = zext i1 %4 to i32
%6 = add nuw nsw i32 %2, %5
%7 = icmp eq i32 %6, 0
ret i1 %7
}
define i1 @tgt(i32 %arg0) {
%5 = icmp eq i32 %arg0, -1
ret i1 %5
}
```
(x >> 4) + ((x & 0xF) ≠ 0) is equivalent to ceil(x/16).
ceil(x/16) equals to 0 only when x is 0.
Alive2: https://alive2.llvm.org/ce/z/E85DRW
godbolt: https://godbolt.org/z/Y5frz97Mh
The pattern is found in projects including wasmi, coreutils, ruff. An example:
https://github.com/dtcxzyw/llvm-opt-benchmark/blob/013f9638352b38eb8f26daddafeeb0d87fc6510b/bench/coreutils-rs/optimized/50z74lntrf1cjp27.ll#L1210-L1216
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8VMGOozgQ_ZrKxUpkl8HAgQM93Zx2LquVVns0uAiedUwGm046X78yCd2anlVLEQpVr-o9vyqsQ7BHT1RD_gT5804vcZzm-pv2PTnndt1k3mpQ_P5z7vUEvDE0WE_MCgYZD3MPWFqJDDDX85EDVgyKJ-ANSyHBQD4zbQz7BfONiQ2BK8KFcd4gIuWzLS_vHbz5JS3yLZ-tedufziypumNkwvANkq-QG13jqjrVxClBN4B6V-mXC_PhsvXB1Cd12JDFBxv93FDqg22mjaMA3kDxnJ6fPIvH-KVn-f9xbL7txSee_INnG1T6j-WVgXwB-cKytT8-McDyHkfF-LVdwy8IZQUNZ6sKGxj9XOyrduRjMqkn61INYCsUYHUA3nyOpRLtQoJzNnn3xi4jeXZN3fjhbkDj7CshyIaNMZ4DyAawBWz1Gj-k1TpM8xGw7QmwvQG2L2X-_OffwJvjZLrJxd-LH4lHYar5Jx_mW1V8H--sf43EzjpGmn0SM0xLWiPPzvP0g_oYmPW9W4z1R3bR4WSTwf000xKtC-llXobhwBrP6KpPZ0eJmjefVNg4Lt2hn06ArYn99fZ2AWzTkfbTOe478v140vO_gG3npg6w5UIOlZKlzLGTJXXlgMpoY_RA1HFTFkOvcsETdK1Otmyy9nMAbKdztCd7IwPY5vxWZM7HeRD9jzMWB-cA5R8CBd-np9qZWppKVnpHtSiySnFeynw31ooqrMrcaMIh451UplddJko1cOwqzXe2Ro45V0JwLmSeHwQqVH3Fq66SXZ8VkHE6aeveJ7izISxUi0wqqXZOd-TCer0gerqwNQuI6baZ69WjbjkGyLizIYaPNtFGR_V3GwIZ9jitjnbyaQ2GyZnfVjN9NenD4WkRr-9vu2V29RcTW2-1x7geewHYrjqT0Y-DvNb4XwAAAP__Dod3eA">