<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56926>56926</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization in InstCombine: replace usub with or
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:optimizations,
llvm:instcombine,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
chfast
</td>
</tr>
</table>
<pre>
When you have usub instructions chained by overflow (borrow) flag (e.g. for big integer "less than") you can replace all except one usubs with or.
```llvm
define i1 @src(i64 %0, i64 %1, i1 %2) {
%4 = zext i1 %2 to i64
%5 = call { i64, i1 } @llvm.usub.with.overflow.i64(i64 %0, i64 %4)
%6 = extractvalue { i64, i1 } %5, 1
%7 = zext i1 %6 to i64
%8 = call { i64, i1 } @llvm.usub.with.overflow.i64(i64 %1, i64 %7)
%9 = extractvalue { i64, i1 } %8, 1
ret i1 %9
}
define i1 @tgt(i64 %0, i64 %1, i1 %2) {
%4 = or i64 %1, %0
%5 = zext i1 %2 to i64
%6 = call { i64, i1 } @llvm.usub.with.overflow.i64(i64 %4, i64 %5)
%7 = extractvalue { i64, i1 } %6, 1
ret i1 %7
}
declare { i64, i1 } @llvm.usub.with.overflow.i64(i64, i64)
```
https://alive2.llvm.org/ce/z/yhrBrK
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytlEtvozAQgH8NXKwizDM-cGgbVVqt9rxnYwbwysGRbZImv37HDk1Jt62qVSVC7Hl-njHT6u7U_B5hIic9k5EfgMx2bomcrDOzcFJPloiRywk60p6IPoDplT6SKNu02hh9jDJGesUHL4FkSEivDWnlgCEcDGBQnimwlriRT7j29j6X4BMxsFdcAOFKEXgWsHdETxcCS47SjUSbJEq3UXq_vKv08ih12F1EHfQIRyQlUZFaIxBDVgVmLdMoeyTLmoY19ctAENUPF3fiRWiSb8kZnt2LDXHau65symAjPCo6B-USst761J4o8eSJB09eCpUEw_eQUMxW8asQHxEMF-7A1Qzv5UEOv6Urx_otfPUv_OY74OkKvr6FZ1-E39zAG3hBXmKh1brbN611g_v_1uKVXFuHCG9b-3n7q--oYLHCLm8rWH-xgtUHFaw_qKBQ3Lwb6gvIC-0V9Pr1Xbajc3sb5fdR9oQPV_IAWRKCajOgRAC-zvg7jebB_IyhoVXJKjx6SuOuyTuWMx476RQ0v6S1OGH03smdPHM_d3CAkB84hh71rsVrgImu8yKMqGU-xLNRzS3KgBo8ldA73IRJcfm72xv9BwTeoydMN4PFRVmxrIrHRvCizyhuup5RoKwtuqJiLUBX5CAoxIq3oGwTlQ9-oPmg-f0a14bZ9khetX6GigX-qtuFg96tPb2y3MayydIsSzdpQcu0KDcJcCoEY2nN8yJjPcOWwY5Lda1xbJpwrHYerO-ntM6-Krm1cpgAAjLG57MbtWnE2HPr4lCAJpz-L4AesLc">