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