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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] Incorrect constant folding for certain switch cases
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            llvm:instcombine
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            nikic
      </td>
    </tr>

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

<pre>
    After https://github.com/llvm/llvm-project/commit/4010a7a5d0ea21374f3dcab85aa26a9804e1c35d

`opt -instcombine` on the following test IR:

```llvm
define i8 @test_switch_bad(i8 %cond) {
entry:
  switch i8 %cond, label %merge [
  i8 1, label %sw.1
  i8 7, label %sw.7
  i8 19, label %merge
  ]
sw.1:
  br label %merge
sw.7:
  br label %merge
merge:
  %ret = phi i8 [ 1, %sw.1 ], [ 7, %sw.7 ], [ 19, %entry ], [ 19, %entry ]
  ret i8 %ret
}
```
incorrectly replaces `%ret` with `%cond` even though in case we got into `merge` from "default" case, it should've been `19`, not any value `%cond` happens to have.
Godbolt: https://godbolt.org/z/eGY498q9e
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyVVEuPmzAQ_jVwsTYyD8dw4JDdqKu99tbTysAAbo1NbZMo_fUdA2myaaVVJSCe-Wa-eXgmtWkv1aHzYMng_eSi7BClX_DppR_meteYEQWlTtefp8ma79B4FBEbZTjkNKGCC9ZSEGmS8bzL2kbUBRMi3YuyoDkkTcbaiB4jeti-e2omT56kdh6JaqkBVcRo4gcgnVHKnKXuiQfnydvXkNdH7_VZMltULXTIQWRBopwGr3d3lr4Z3mvRRmkR9ClrjEahJBF_Xr1Ae3v5Q07I6kPurV-IEjWooBjB9kAi9nw1R7vkg4U775I7kD-C_N6z_Jv8CkfsuB4Xwlt-tf2nw8L8qdV6vJkhasGTKDuSaZBL0ex5LWgrZckjiKjnNz2_169lILD08hNkixzCrj3G03al_Phwt6sodWOsxYlTF3SblGjAkYCuvjgzeGXDplluDFVwgjBIZu7xLjVphANyBtIbDKu9CdZrM9C2s2bETFIcIDErnOd0sQ-pS08ckiicAn4CUgOyogvWFaK9EI18Ql_ISagZHlIYxDSBdgSjDeIEu7WaV9PWBoNkh8d9W4GdsT1Kv_CF1295WfwsIW6rrC2zUsReegUVtvYNt-Zl2xp2JG_XHhGM7rzQPmxQG_anM5Y0YL3ANmzDHapz8WxV9d8rL52bweGBMZ4m8VDxPeRFzgqR7Tva1F0n8oymPM8pK2uaiXiZQxdyxsaO0iH7JJXw0mhUrPORLsGyw_1_AWLsGMsqpWlKWbpPOKMs3_EcIxcCWpTLpuW46zAKqXaBIjQvttWScz33DkElnXc3UDgnew2w5aPlD9lsocSM82KrVmhMb1TxUmq11PkbLwSE2A">