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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] Missed optimization : fold `binop(select cond, C1, C2, zext(cond))`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:instcombine,
            missed-optimization
      </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/-f5J6T

### Motivating example 

```llvm
define i32 @src(i1 %c) {
entry:
  %cond_zext = zext i1 %c to i32
  %s = select i1 %c, i32 67108863, i32 0
  %or = or i32 %s, %cond_zext
  ret i32 %or
}
```
can be folded to:
```llvm
define i32 @tgt(i1 %c) {
entry:
  %s = select i1 %c, i32 67108863, i32 0
  ret i32 %s
}
```

### Real-world motivation

This snippet of IR is derived from [qemu/system/physmem.c@phys_page_set_level](https://github.com/qemu/qemu/blob/fea445e8fe9acea4f775a832815ee22bdf2b0222/system/physmem.c#L204) (after O3 pipeline).
The example above is a reduced version. If you're interested in the original suboptimal IR and optimal IR, please email me.

**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/eJycVE2PnDgQ_TXmUpqWKaChDxwm3UKaVaKVohz2NjK4aLwxNmubTnp-_cqmZ9ITrbKrlSzA-FWV36sP4b06G6KWVR9YdcrEGibr2j-O0zXrrby2j1pdCGFx1o6seIQphMWz4pFhx7AT6XSn9WXeWXdm2A3EsHth2D2M1W_7L4yfGH-8PbHYFnyyQV1EUOYM9F3MiyZ4B9zzbUW_2y9JozIEqkBgJfduYNioHBhWA8MDsPrDhiMT3DVeL-0gAayRzy_0PQArTpA-bpYQbPR4h_UJ40nT8IZieExx93XOm2ZfvO75nZ11ydC67YZY-Yi6D_4KdhReMdbd6Nann3hv20EY6AlGqyVJCPaN1r_qE87hv-vzvzjf0fC_ZvFz7j-T0A_frNMS5lsZWHMP_TIpD96oZaEAdoSnz6A8SHLqQhJGZ2dg1Ye_aF4Zdv7qA80Mu2W6-pnm3cBKHr-fF3GmZ0_hWdOFNKtODJv3xXtWYVr73WCj_c3f7dVr2zPsRhJlWVEz0kEMJMqxrivRFNjkFRFiL0fsOSL-80Ww-Ii8TPJjI8ZADn4vYFELaWWI4WH3Spje2kD09kKRrwBHch1IwoWcV9bs4GmEq10Z1o5AmUCOfCAJykCYCKxTZ2WEBr_2dglqFjpKJ4yEH9uYx0WT8AQ0C6Vhpt37NMX1kQLMBF-N_QYqBYVYi4M1o3IzhEkEUIFh7UGYzbt6SXkEuyzWhdWocI2xwiTMV7_b3GayLeShOIiM2rzOc17WiE02tSOv6lHkNcmKV5yw6MeD7Ot-xKHo8x4z1SLHkheY501VlM2OSxwHWRZDI_OhJM5Knvi8TaJMeb9S2-zzep9p0ZP2acQhpp4pHpXxYbBznzKBDI8McVbek3y4JxTPqlPm2mj20K9nz0qulQ_-R6iggk4D9Mn4cLz5rE7wKbl7r08cobGhge15r4xdGDa31oujImp2zNMz3ilNK4bNdnSIa8-z1en2F5WcCG6vh8XZP2kIDLukh2fYJUn-DgAA__9ocMYc">