<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">