<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/86180>86180</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: imprecise range for `a u< C ? C - a : C1`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:optimizations,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
XChy
</td>
</tr>
</table>
<pre>
Alive2 proof: https://alive2.llvm.org/ce/z/rcjsTm
### Motivating example
```llvm
define void @src(i32 %a, i32 %b, i1 %c) {
entry:
%cmp = icmp ult i32 %a, 118
%sub = sub i32 118, %a
%s = select i1 %cmp, i32 %sub, i32 246
br i1 %c, label %loop, label %exit
loop: ; preds = %entry, %loop
%phi = phi i32 [ %b, %entry ], [ %add1, %loop ]
%add1 = add nuw nsw i32 %phi, 128
%add2 = add nuw nsw i32 %phi, 255
%ret = icmp ult i32 %add2, %s
call void @dummy()
br i1 %ret, label %loop, label %exit
exit: ; preds = %loop, %entry
ret void
}
```
Since `a u< 118`, `%sub u<= 118` and then `%s u<= 246`, but this example
can be folded to:
```llvm
define void @tgt(i32 %a, i32 %b, i1 %c) {
entry:
br i1 %c, label %loop, label %exit
loop: ; preds = %entry, %loop
call void @dummy()
br i1 false, label %loop, label %exit
exit: ; preds = %loop, %entry
ret void
}
```
A smaller testcase is like https://alive2.llvm.org/ce/z/nruCzw, which adds one more use to prevent combining select and disables undef input to speed up Alive2.
### Real-world motivation
This snippet of IR is derived from [php-src/ext/hash/hash_haval.c@PHP_HAVAL224Final](https://github.com/php/php-src/blob/530e0d68ebee5b21ad10311115c392072b8b4168/ext/hash/hash_haval.c#L464) (after O3 pipeline).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, see also:https://godbolt.org/z/fGaj44zaE
**Let me know if you can confirm that it's an optimization opportunity, thanks.**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVlFv2zYQ_jX0yyGGdJJs6cEPjjOvBVqs6IphbwUlniy2FEmQlNPk1w-kbMdpiyxDX2YIoqj7ePru-N3R3Ht50EQbVt2y6m7BpzAYt_l7NzwsWiMeNlslj4RgnTE9K7YwhGA9K7YM9wz3PFmXSh3HpXEHhvuOGO4fGe5d98V_Gll2x7Lt6Y7FfMF7E-SRB6kPQN_4aBXBM-Aqm6_od34lqJea4GikAFZm3nUMa1kgMKw4wx2cntv0nMfHjmEDbH07OyAd3EPknWbJPlpgxR3I-DCpANfu8rw-IeMrP7UJGseIilbczeAr1IwhRV04cxjtFTk_tecZlqvzytY9Ed6B4i2pOFPG2Gcv6JsM11lKgGILrLgF60jMn4_AFOrML4GeKNpBJlQcE6nq9pK180pg1V2azzYuRH7lLFmfHEZr8siFAD3dg_b353DtIFMqsX6-AP9lAVbV1QJH4efbJASeePkzvONKXTQipnF8YFgzbH5ItaPw35Kd5sUWXvr9sBFnr5c9mWnEiCLJk__13Xeqn6d_St0RsFXGYWLFrMhVltzFIWkyGuK3ZhtwLSAMpM-Iiz2qbV7bTgHCIP13dddxDS1Bb5QgAcFcCuW1BRkO4dcK8pfL4LW_V5fL68TUc-Xp_66lLfiRK0UOAvnQcU8gPSj5lV7fz7Wbdo_3kcL9ILsh1q8HowlG4wgmTxBMpHwkHaAzYyt17O-ndhilKaTnrSIPkxbUg9Q2itGAt0QCJgvzWbP8-Znxkbi6uTdOCRhPx4fR19BPUdZeS2spgOnh7ccYpCAnjySgd2aMLc0O9iadHnv6FhjuB-6H0_B54Eeulh0rsw9vPnx-s_1r-w6x3EvNVeqJ9fNkHWQYpnbZmZHh3g52vp-8t8q0DPdVkVEmVjW1RFWLORd5VuR5nldd0WC2xrZuy3xVv8gHi3flqkzVgzXvAzn4owArLSmpiWGzPGeALnXNW3NMu8zBkZg6EnAk56XRS3jbw4OZGK4dgdSBHPlAAqSO3QOMk4cYcjztjA1y5CrmMu7g0zTqwBMBVz42i-8SY0RrVDgpKIqn_51_KctH_tvzvY3XOwowEnzV5h5kIgaxG3VG99KNEAYeQAaGaw9czwzkY9p8MNYaFyYtQ6rfMHD91S9ntwuxKURTNHxBm3yd51lZ502-GDacCsRqVXXYFSVlK2qKrKzLdS-aCvuaFnKDGZZZgXneZE2VL7s1NjXlbVNghyJHVmY0cqkuZbKQ3k-0qVd5nS1S2fv0fwox9ctie83aM4znFkMcpfckbq6N0VbdLdwmLrxpp4NnZaakD_7pY0EGRZv3afGzfMSeIkfrqJOewHF9iB3dXZ0hO2DFHnZwAxwiepezVbaYnNq8oOwUwzzcWGe-UBd1mkL2DPcp6n8CAAD__4T58sw">