<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/128134>128134</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Missed optimization: AggressiveInstCombine misses combining loads from consecutive addresses
</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>
Example: https://godbolt.org/z/14cEnPoco
Alive2: https://alive2.llvm.org/ce/z/nQ5CMj
```llvm
define i32 @src(ptr %0) {
%2 = load i16, ptr %0, align 2
%3 = getelementptr inbounds nuw i8, ptr %0, i64 2
%4 = load i16, ptr %3, align 1
%5 = zext i16 %4 to i32
%6 = shl nuw i32 %5, 16
%7 = zext i16 %2 to i32
%8 = or disjoint i32 %6, %7
ret i32 %8
}
define i32 @tgt(ptr %0) {
%2 = load i32, ptr %0, align 2
ret i32 %2
}
```
AgressiveInstCombine should be able to do this optimization.
https://godbolt.org/z/hY4Gfcd66
I found this pattern in function DES_xcbc_encrypt in openssl/crypto/des/xcbc_enc.c
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEk01v2zAMhn-NfBEayPRnDj64ST30UGDDTjsVssTYKmTJsOT049cPspNmTbsNCBBYevhSfEly51RnECuS3ZJsH_HZ93aqdtwI1FpHrZWv1d0LH0aNJKlp7_3oSFITaAg0nZWt1X5jp45A80agiVNxZ75bYQmrCatrrY4InwP5cr7R-jicggWeFMyPbPfwtIaTnK2_ABJWSzwog1QlQEnK3CQIlKOfKIGMEdhSUtwSVodPoCTZU225pCrOCezohdtRrlVnKAQ2nCUL3KFHjQMaH1BlWjsb6aiZn6kqrxVUnl7i078lSy7J4jOcLfAbvvgAr-HehprORL4Qrtdr7lAsZFmQivMzU3xSgSuVciHsRKVyT1YZf1ZaHhgkFnLC94syOF7sV-s_Wu07_7XV114n8C-v_0gGl2TnJp9GppvQOXXEe-P8zg5teIbr7awlbZHyVmOoVFrqe-WoHb0a1Bv3ypoNYfX_BrT_lX47CJnna7Z7eghtXrVG7j1OhipDD7MRQZLu734-vohWPKIR0-vow6Ud0Tinw9SGI0ugkegINGdwIyJZJXKbbHmEVVykLI7zLE2ivspkWgo4MJZyYGUcbzNZxlDwVogiEwVGqgIGGQOIWZYCwCbPWihiLiBpk0QWjKQMB670-_ZEyrkZqxjKOEkjzVvUbtlnAIPPdLklAGG9pyoE3bRz50jKtHLeXWS88hqrB-Ucyg--hv2tu6_6MgTYUbF8KtMtU-DoYbIDFdY4FLNXR6RcyhCNLponXV31SPl-bjfCDgSaZdHXv5txsk8oPIFmKSEYfKrxWMHvAAAA__-WvmgW">