<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/59740>59740</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            MergeICmps does not work for non-eq comparisons
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Kmeakin
      </td>
    </tr>
</table>

<pre>
    Given a struct like
```c++
struct S {
 uint8_t a;
    uint8_t b;
    uint8_t c;
    uint8_t d;
 std::strong_ordering operator<=>(const S&) const = default;
};
```

`MergeICmps` is able to optimise the `operator==` implementation to a single `uint32_t` load and compare, but is not able to do the same for the other comparison operators

https://godbolt.org/z/Pnqa1cq5q
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsUtFu2zoM_Rr6RWigULYTP_ihba4vhmHAgH5AIVuMo1WWHIlusX39IDdNiqEAAZvHhzzkMXVKdvRELVQPUB0KvfApxPb7RPrF-qIP5nf7v30lL7RIHJeBhbMvBPIA8h5q-R4D4EOOFb3QngTsLohYrOf9MwsN6gMS4or2X6LDl6i5oYkNqHtQWTD48TlEQ9H6UYSZouYQQT2COoD6D3A_BJ9YPAHWgI14z0AdhKGjXhxfu8LucHv_WO-SfoA_KI707XGaE9RS2CR070hwEGFmO9lEgk8koJa3QQ45MnmaHU3kWbMNPtdokawf3crPSyp85sx0QRuhvRFDmGYdCfBR9AtnOR_4KmnCKpb0ROIY4poEPlG81NkU_NWQ9HmRE_OcsoHYAXZjMH1wvAlxBOz-AHY__Vlvh3N1LkyrTKMaXVC7rXeoylJhXZzaoyq3e2OOwyCbWpEZqqY_9rLRptruqaTCtigRt4gNSllhval1X9VUS2rkVjdNCaWkSVu3ce51ytqFTWmhtmp2pSyc7sml9TIRPb2J9SMg5kONba6565cxQSmdTZxuXdiyo_b2n4QJ9O7bW4gvq1E--Ds6f3IpFUt07T-uWD4t_WYIE2CXu18ed3MMv2hgwG6dKQF268x_AwAA___99waD">