<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/187854>187854</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AggressiveInstCombine] Combine adjacent loads
</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>
aengelke
</td>
</tr>
</table>
<pre>
Adjacent loads used in comparison can be combined into wider load. I have a case where I want to quickly check that two adjacent elements of a char array are both zero.
```llvm
declare void @f(ptr)
define dso_local zeroext i1 @src() local_unnamed_addr #0 {
%1 = alloca [2 x i8], align 2
store i16 0, ptr %1, align 2
call void @f(ptr noundef nonnull %1) #3
%2 = load i8, ptr %1, align 2
%3 = icmp ne i8 %2, 0
%4 = getelementptr inbounds nuw i8, ptr %1, i64 1
%5 = load i8, ptr %4, align 1
%6 = icmp ne i8 %5, 0
%7 = select i1 %3, i1 true, i1 %6
ret i1 %7
}
define dso_local zeroext i1 @tgt() local_unnamed_addr #0 {
%1 = alloca [2 x i8], align 2
store i16 0, ptr %1, align 2
call void @f(ptr noundef nonnull %1) #3
%2 = load i16, ptr %1, align 2
%3 = icmp ne i16 %2, 0
ret i1 %3
}
```
https://alive2.llvm.org/ce/z/uq_vo5
NB: instead of icmp/icmp/select (`c[0] || c[1]`), also or/icmp can be generated from Clang (`c[0] | c[1]`).
Also NB: in my case, the offsets aren't 0/1, but some slightly larger values.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzUVdFuqzgQ_RrzMmpkDIbkgYc0UaS-7C9Uxh7At8bOtU1y069f2SGtbtXd1T5eCQmSOWfmeA4ziBD0aBE7wp8JPxZiiZPznUA7onnDonfq1u3VDyHRRjBOqABLQAXagnTzWXgdnAUpLPSY_um1zdHo4KoV-szZwAtM4oIgQIqAcJ3QI7zAVdgI0cHPRcs3cwM5oXyDOIkI8epAPOqiwRltDOCGlGISHoT34gbCI_QuTvCO3m0I3aeroffLmMtM6F6hNAl3cVoBqelA2PYcPWG7HBy0RVDBvRonhcmJ8FcEXSZs8JKwLWE7yNHXxVoxo3oVSnkgrKJA2mdC9wCE8RJIdQRhEhQIf2bwC_SW8CNhBxBGjxZYxoboPIIuG6ApdI4-07_CpDDmq2qwbrEKB7DO2sWYlbhLYqqHEJaFpMan-v9SgTBeZayW8xksgt5mfsLRB6LOiBHj6kJKpm2fdASwy_WbGrqpoXzw-T-oqT_VfGCbb9Tw39S0GRHQoLybxHiVS5YQ_YLrY0qVGR4fqDa9Gu3xvz2PY_zDPS-b_2d62Xxx_bNr1UfXPsbqPmVTjOdAqj1hJ8JOwugLsk2auI3zI2EniYSd3gk7LT9fL47fSX89k2oP2oaIQqVhThIIO6231dXU_YZKwp8p4Ucg7YG0B0i_y9TYhqbRzYcKDpxf-Y8dNKJFLyIqGLyb4WCEHb9J-SVf2h37lO8hEeZb3lWpUJwQ3DAEjCFtHEtYG5ONp9zbfokQ3IwQjB6naG5ghB_Rw0WYBcOmUF2ldtVOFNiVbVvTHaM1L6au5cOwY0LWFOm2oWU7NKIXAy_LRm4rrgrdMcoaWrGyLBNnM5TVdtfyhlLW1A1TpKY4C20-Gl_oEBbsym275XVhRI8m5NXOWN6G1T41f13ThCXLCWOzDgHVkztHPet3EbWzKcaPhe8S7alfxkBqanSI4bNW1NHkD8d-HD2GoC_4YkM8rNn5EdbHz0WePyDF4k33-_sz6jgt_Ua6mbBTVnq_PZ29-4EyJo_TyUJq-v1wl479HQAA__96C_3U">