<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">