<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/143658>143658</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: InstCombine is blocked by other uses
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
GINN-Imp
</td>
</tr>
</table>
<pre>
The following reduced IR is derived from https://github.com/Kitware/CMake/blob/bbaa25bca7ef2a969c034a0c3c5cd47a6037b56f/Utilities/cmcurl/lib/ftp.c#L1386
Godbolt: https://godbolt.org/z/1ojq9Ynd4
alive2 proof: https://alive2.llvm.org/ce/z/VWCrxT
missed optimization: `tail call void @use(i64 %3)` --> `tail call void @use(i64 0)`
InstCombine can optimize as expected when `%3` is not used in block `common.ret`.
```llvm
declare void @use(i64)
define i64 @ftp_state_list(i64 %0, i64 %1) local_unnamed_addr {
%3 = sub i64 %0, %1
%4 = icmp eq i64 %0, %1
br i1 %4, label %5, label %common.ret
common.ret: ; preds = %2, %5
ret i64 %3
5: ; preds = %2
tail call void @use(i64 %3)
br label %common.ret
}
```
expected:
```llvm
define i64 @tgt(i64 %0, i64 %1) local_unnamed_addr {
%3 = sub i64 %0, %1
%4 = icmp eq i64 %0, %1
br i1 %4, label %5, label %common.ret
common.ret: ; preds = %2, %5
ret i64 %3
5: ; preds = %2
tail call void @use(i64 0)
br label %common.ret
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVU2P2zYQ_TXjC2GDGkq0fdBBu1sFizY5FGmLnhYUObKZUKJCUt4kv76g7CRud9tuLwViGKCo-XqPbzRUMdrDSFRDdQPV3UrN6ehD_er-zZv1_TCtOm8-1W-PxHrvnH-044EFMrMmw-5_ZjYyQ8GeyLA--IEdU5oiiAawBWwPNh3nbqP9ANj-aNOjCgTY3r5W7_PaOd_lpVMKq06rLfWo9nKvuSgV10JX2pRbJbnYdpXsAdtfknU2WYqArR70HBxg62zO0qdpowHFT4XYSeAN8OaVN513CUTzV1xnw8aHA2D7GbAt_LsP-99HUwJvlLMnQjYF7_unsWfrxrnTcInXdEny62-34ePbc-3BxkiG-SnZwX5Wyfox5wLJk7KOaeUcO3lrGJR8jgS4s7JkgJUA3IPkbL0G8cO_-fOzM_Dmfozp1g-dHYlpNX4pTExFRh8n0okMezzSmFMuZSTP6o0-sTkjtSPrnNfvs137YfDjJlACyTdnQjls-WfmwBtD2qlAT0FlSNncZygLqZL3aXqISSV6cDamb2Q54C27PBeAe-a8Vu5hHkc1kHlQxgQG2xvgDVvOhoG4Y3Hu2HX8EnvxKBcPq4eJ0YfnvbrAbLH45tdOdeTyrvrT7uoEFvZXe9Gwl_1A3LApkIkLJsAKLziqBUegxL5qvhSplg55GpW9X9I1F3Z_Q2J7d63iueKXzsjd_ZzE1xqmw_cv3P8mCf-veqxMLcxe7NWK6mJb7iUKXuDqWJMpTLFF3BosylKUhiTtRKH2stxJUZQrWyPHisui4BKFwE1fdFpyzdVWVAJlByWnQVn3dWatbIwz1UUpZLVbLfDiMv4RR3pkixUQ820Q6hy07uZDhJLnjzd-S5NsclS_fn7SXQ8kG8-zhQzrPjGfjhTy0ImrObj6H66MpQ_Py3oK_h3pBNgu-PINcCFwqvGPAAAA__8GfvEe">