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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] Fold `select (a != V1 & a != V2), V1, a` to `select (a == V2), V2, V1`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Alive2 proof: https://alive2.llvm.org/ce/z/4_WZ9s

### Description:

```llvm
define i32 @src(i32 %a, i32 noundef %v1, i32 noundef %v2)  {
entry:
  %cmp = icmp ne i32 %a, %v1
  %cmp1 = icmp ne i32 %a, %v2
  %or.cond = and i1 %cmp, %cmp1
  %select = select i1 %or.cond, i32 %v1, i32 %a
  ret i32 %select
}
```
can be folded to:
```llvm
define i32 @tgt(i32 %a, i32 noundef %v1, i32 noundef %v2) {
entry:
  %switch.selectcmp = icmp eq i32 %a, %v2
  %switch.select = select i1 %switch.selectcmp, i32 %v2, i32 %v1
  ret i32 %switch.select
}
```

### Real-world motivation

This snippet of IR is derived from [linux/lib/hexdump.c@hex_dump_to_buffer](https://github.com/torvalds/linux/blob/ceb6a6f023fd3e8b07761ed900352ef574010bcb/lib/hexdump.c#L127) (after O3 pipeline).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, see also:https://godbolt.org/z/8K3qqzMzr

**Let me know if you can confirm that it's an optimization opportunity, thanks.**
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVU1v4zYQ_TX0ZRBDGllfBx-SGAKCblFgUWyLXgJSHFnsUqRCUs7Hry8oKRs7G6TAAoItkm8eyfdmRtx7dTREe5bfsPyw4VPordv_fds_b4SVz_trrU6EMDprO5ZdQx_C6Fl2zbBh2PB5dav1adhad2TYtMSweWHY7O7_-qf2LDmw5Hr9xWx54EC-dWoMyppIdY4pkuWJlMuUpE4ZApUhsF3iXcuwmgeYc4a384Kxk5HUxblT-tEkMqwBWHmzcJIJ7vnH1hAh7TACyw6g4svrfusWC-0FNv0UjGdg67atNXLGcyNBpSvFCo5kZ3BPmtowo9fXJWCleb3cxU3nrVcKR-F1bolfhS0P7xRehi03IAg6qyVJCPbNj_9zIhzDLzvxmRH-UYW23y6Hv3CFHj4V-iLwZwHf854riZeyfiDlefDnir5P9q_E9dWjdVrCYIM68Tntz6B_9sqDN2ocKYDt4O4rKA-SnDqRhM7ZAVh-o5WZnhg2WgmGTU9PchrGbct2SU9P93FwH-y9mLqOHMsPDKvLUj2q0E9i29qBYROsO3Et_cy38AptxVy_ouBFl2DWyYwqkZRlkZKskyTLkbq83CVpIlrxwUkw-5JiOduLFe8COfgjg1GNpJUhhvX29b4E9MSHURNwYU8Ur8vBkZxaknAi55U1W7jr4NlODEtHoEwgRz6QBGUg9ATWqaMyXIOfhB2DGriOysUKextGWz0RcO1jZr9TxEphdVgbV-xZ1W_Zw8PL7y_u0sn4fKEAA8F3Yx9BzQeDWDqtNZ1yA4SeB1CBYemBm-UE6mW2Guw4Whcmo8JzPE_oufnutwvtRu4zWWc139A-LROs6rKu602_z9q2aLukrSkvJNZVlWZllVckckGi2tUbtccEsxTTKk3TLK23VKdSFnkppEirIs3ZLqGBK_2jO2-U9xPty7ysdhvNBWk_t31EQ48wLzLE-BVw-xhzJaajZ7tEKx_8G0tQQc_fizvjw60dRDQ3P0BjtQRWJK_1hxUHhmmsw2-xAAt4G8cmELX4NrcIzooEgv0pODtcgnENKZLN5PT-k_yee9bydzU6-28sWmzmK8acnyX4LwAA__91QwlY">