<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/118104>118104</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [KnownBits] `(Trunc X) != 1` implies `X != 1`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            missed-optimization,
            llvm:analysis
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            dtcxzyw
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          dtcxzyw
      </td>
    </tr>
</table>

<pre>
    Alive2: https://alive2.llvm.org/ce/z/3yxP4T
```
define i1 @src1(i64 %x) {
entry:
 %trunc = trunc i64 %x to i32
  %cond = icmp ne i32 %trunc, 1
  call void @llvm.assume(i1 %cond)
  %cmp = icmp eq i64 %x, 1
  ret i1 %cmp
}

define i1 @tgt1(i64 %x) {
entry:
  ret i1 false
}

define i1 @src2(i64 %x) {
entry:
  %trunc = trunc i64 %x to i1
  %not = xor i1 %trunc, true
  call void @llvm.assume(i1 %not)
  %cmp = icmp eq i64 %x, 1
 ret i1 %cmp
}

define i1 @tgt2(i64 %x) {
entry:
  ret i1 false
}
```
The second pattern is common in Rust applications. See also https://github.com/dtcxzyw/llvm-tools/issues/36.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVMFu2zAM_Rr6IjSwKNuxDz64DXzZZdh66FWW2USDLHmWnCb9-kGekxbFtmZAEMjS4yPfEynpvd5bohrye0Dsgzq9nl8AEfJdIudwcFO9biad6891Y_SREETDDiGMHkQD2AK2ctnfGHMcNm7aA7aKANtXwFacT1-zR0gbKNL1lzY9PWtLTHMGWeonxQFLXWQMMD8BVgy295A2ZMN0jjnSJp6EabaKgdix36tLAAuOaYERFb-Vs_2C0moYWcwi8BoO-MD4glTSGHZ0uo8lLIVL7-eBYiX8wgNYXWmH8Y2VfrK3ci-MEwW2hg5jFLzdxf8PasM-fK72wvUsjae_UvlJ4edUnznHLyjrwoI5uWnVcbUsTDPd5pp14X9Mu9mzG4T-2bN3Xfd4IOZp6Y9RhkCTZdoz5YbBWaYt-zb7wOQ4Gq1k0M76DftOxKTx7kO_73U4zN1GuQGwvY5NGw25C84ZD9hq72eKC1FsIG2SvhZ9JSqZUM23AsuqyMsiOdRFwWWeVZkoOPaYI1GWbdW2Vz3npKhLdI0pZpxjxYu0yrIN70opeCdKEl2qhIIspUFqc52_ZMldc17yNEuM7Mj4dcYH7T31d24MetCvi8w47_gAiDEcRCOtNGev_foOTPUiq5v3Pt659sG_JQo6mOX5-GLdi73XwUO-Y9FuLB-XXntabgt5bAMORcr0MBpNPoKe3h8k82Tqf9i8VLd6PE7uB6nw3uVV7LHGXwEAAP__qvJo8Q">