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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] Missed fold: `umax(x *nuw 2, x + 1)` => `x == 0 ? 1 : x *nuw 2`
        </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>
          Kmeakin
      </td>
    </tr>
</table>

<pre>
    https://godbolt.org/z/TEzxx8vbj

```rust
#[inline(never)]
pub unsafe fn src(x: usize) -> usize {
    std::cmp::max(x.unchecked_mul(2), x + 1)
}

#[inline(never)]
pub unsafe fn tgt(x: usize) -> usize {
    match x {
        0 => 1,
        _ => x.unchecked_mul(2),
 }
}
```

https://alive2.llvm.org/ce/z/ijq6ZJ
```llvm
define noundef i64 @src(i64 noundef %x) {
  %x2 = shl nuw i64 %x, 1
  %x1 = add i64 %x, 1
 %max = tail call noundef i64 @llvm.umax.i64(i64 %x2, i64 %x1)
  ret i64 %max
}

define noundef range(i64 1, 0) i64 @tgt(i64 noundef %x) {
  %eq = icmp eq i64 %x, 0
  %x2 = shl nuw i64 %x, 1
  %max = select i1 %eq, i64 1, i64 %x2
  ret i64 %max
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVE2z6jYM_TXKRgPjyCQkiywCPGbaTndddfPGiQ34Xsfhxg5N-fUd54Ny6bS9j8mQyJalc3QsCef02SpVQLKD5BCJ3l_arvilUeJd26hq5Z_FxfurA14CHYGO51ZWrfHrtjsDHe9Ax9--3Ychu1VvwMrwpGx6ut75YBOHZKet0VYBZVbdVAeUQ3IAVl77CnvrxEnhyaLraqBsAF5i7_RdAeW4Av5tshC2O2AlIqLzMgDiZd1cp49GDOHourf1RdXvSn5vegOUUUhFexwQaIdxsFgJ28OM9evY_Nl_DVsjfH0J-R4r4ccQ-CG4x0D7p_Xvy_q_Qg_OM-Dpf6nvROGzOsLom6K1MbdmVqhWs0z67SP9_efnAMELWCnVSVuFtu2tVCfU6QZhwyYtgrFsACVDYL0QCzYF-OguBm3_x3R09Npj_PCJRx8h5T_3gZJGDOO-F9pgLYx5BTJy6RsxrHW6mSGNqUOUxZiFReyUXxbDlXjS-oVmJ-xZzeGCJsgCtznnJPb_kFcfI3BdN1dUH5_IsR8p0FIBp4yqPep4Cr7Qi5950n-SXISNZMFlznMRqSLe8nSTJgnLokshtrJWijht-UZWRIJSmfI438q8TpKUIl0Qo4TFLCfO4022lkmaV5yfKpnHFatq2DDVCG0eVyzSzvWqiIl4lkVGVMq4cZoQjfeLl9o6X7dNNfZYUA2IGu2ckqv26nWj78Lr1oa95BB1RTi2qvqzC-Jr593fubz2ZpxVP1nn93PM5IC_juHw1JowFxBS1s8DAYHKUHl6GQLpoyEhZcP0fRi79Ijhwpb4dDRlUd-Z10Go_aWv1nXbAB1HqtNrde3aN1X70HKhNA7oOFfnVtBfAQAA__-4rITT">