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

    <tr>
        <th>Summary</th>
        <td>
            Missed Optimization: max(max(x, c1) << c2, c3) —> max(x, c3) when c3 >= c1 * 2 ^ c2
        </td>
    </tr>

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

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

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

<pre>
    ```llvm
define i8 @src(i8 %arg0) {
  %1 = call i8 @llvm.umax.i8(i8 %arg0, i8 1)
  %2 = shl nuw i8 %1, 1
  %3 = call i8 @llvm.umax.i8(i8 %2, i8 16)
  %4 = icmp sgt i8 %1, -1
  %5 = select i1 %4, i8 %3, i8 -1
  ret i8 %3
}

define i8 @tgt(i8 %arg0) {
  %1 = shl nuw i8 %arg0, 1
  %2 = call i8 @llvm.umax.i8(i8 %1, i8 16)
  %3 = icmp sgt i8 %2, -1
  %4 = select i1 %3, i8 %2, i8 -1
  ret i8 %2
}
```
Alive2: https://alive2.llvm.org/ce/z/on2tJE

Found this pattern at: https://github.com/dtcxzyw/llvm-opt-benchmark/blob/94dab89f901fdfae3e47dc6696c06d591fdd7993/bench/openssl/optimized/packet.ll#L1086-L1094

I think this transformation can be generalized to operations other than shift and also to min().
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVO2O4ygQfJrOHzQRNLZjfvhHdiaW7rSnewYM7ZgbjCNDZmbn6U-QZD52925XiixEd1W6igIdozsGog7qL1A_bPQ5Tcva3etgyHu_GRb7rYOGX37eP83A95ZGF4i5lkHF42oA27zGWq9HDqgY7L4A37O8JRjIB2a099f-zLE9z_pl69rvgPe5RQCqGxgLOE6ehfMzu7SK3CduHfK36PHG3XwgrwrUmfnE4jF9ZL97o68vA5Ank5gTBXblyn9-XV77V0pvBb6H3UP-fudWOqZfu_VZ8M0b8dmVX2kWP9Msf6YZP2uuftQs3zXjf2nGd823uADf7717IgS5Z1NKpwhyD9gD9rrsb8vky3oE7A0B9q-A_RIw_Xm4eNcv52BZmlxkJ50SrYHp9CPb0aXpPGzNMgP2NpmX12_PgH1mv1tO6W6gYKZZr4-A_eCXAbBXldVDq0bFxWhHTZKqnTVNoxrDG1srMVq7U0pmREbnwU4UYvRlldzsXskC9idtHiltvQeUXwVvm7uvgqvqMv8fefbweFGQVh3iuKyzTm4JzOjABmJHCrRqn9lYWthyorXUI1vSRCtLkw4sTm5MTAfLtI9L7ptdAGwB1XZjO2mVVHpDndhVO9E0qm43U2e0HfVYD7JRKDVyXgtjUVZD22oyldm4DjnWvBYSOVei3SpqlFI41nZotRgJKk6zdv7tnDYuxjN1Qqpd22y8HsjH8nQgBnpmpQqI-SVZu2L_cD7GHFEXU3ynSS556v5yMZJlf1_cLKrz2c76BbC9fF9y3Iwo10Teg7xnpiTQyLJ1QGg5qArkgX0ElOrzRIGZHPlDuTA5ynuGDOoDM7g5r777nxiVt-6aodO6_EMmAfZFYQTsrxY8dfhvAAAA___z-31e">