<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/152788>152788</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: max(max(x<<C1, x+C2), C3) -> max(x<<C1, C3) when C2 <= (2^C1-1)/2^C1*C3
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
zxt5
</td>
</tr>
</table>
<pre>
```
define i64 @src(i32 %0) {
%v0 = add nsw i32 %0, 1
%v1 = shl nsw i32 %0, 1
%v2 = tail call i32 @llvm.smax.i32(i32 %v1, i32 %v0)
%v3 = tail call i32 @llvm.smax.i32(i32 %v2, i32 4)
%v4 = zext nneg i32 %v3 to i64
%v5 = shl nuw nsw i64 %v4, 3
ret i64 %v5
}
define i64 @tgt(i32 %0) {
%v1 = shl nsw i32 %0, 1
%v2 = tail call i32 @llvm.smax.i32(i32 %v1, i32 4)
%v3 = zext nneg i32 %v2 to i64
%v4 = shl nuw nsw i64 %v3, 3
ret i64 %v4
}
```
alive2: https://alive2.llvm.org/ce/z/BbxTr2
godbolt: https://godbolt.org/z/d557qnq49
Found this pattern in https://github.com/dtcxzyw/llvm-opt-benchmark/blob/main/bench/opencv/optimized/repeated_ptr_field.ll
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVEFvozwQ_TXDxUpkxpjAgQOh5fbdvntl8DR410CKnYTm169M0qRqu12tVkIW43nzPO95ZOWc2Q1EBcgtyIdIHXw3TsV59jJqRv1aQMqvHy81PZuBmEkTBgl3UwuYGYEMUHLAnMFmC7xkIT5yBuKBKa3Z4E7sjqpYfMPEC8Z19hsMLhivjGWtsvaCSri1x37tejWvjcB7G8c4VL8Foakbkfg7InwjSt6TJAvJmWbPhoF2t5ME82Pw5QaUd2mH00VecC1QBGKxACfyt20JvITNQ1g_Gu13_huj_2Div3iYfPbvs3T8KD35rXTxtfTkLv3dsAEvlTVHQhAl67zfOxAlYA1YX_bXS__jtAOsWwKsz4D1tpn_nxB4uRt1M1r_ufiauBaGGi3l5mV4SfLLqfV4GDTznXFsr7ynaWBm-EhifHdo1u3Yh3rfzufXE2AdOlqNe79qaGi7Xk0_AevGjg1g3SszhChkAOtxT0N7XH686c2ZNGA90Z6UJ_2099PTsyGr19YCLyNdCJ2LXEVUxBuZpFmSo4y6ItukSSzaNiVsMkEtz1tKm7zVeUxZmuWRKZCj5BnPkGOWyHWW6VziM8pEpzIXGhJOvTL25mZknDtQEUvcZFlkVUPWLa8D4kAntmQBMTwWU7EIbg47F8bJOO_uNN54S8V_xjnS7CpSeTMO4Up6NQNml3UGUYGoqmXsZsBthWHusGKVCMO-AvHIvoBesqeOBlaFCa_C2AFmCPKxilfxQlJfIsCyEtFhssU39xhaf7vE_TT-oNYD1otgB1hfHTkW-CsAAP__9eJ17Q">