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

    <tr>
        <th>Summary</th>
        <td>
            [AArch64] Redundant `cmp` not eliminated 
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:AArch64,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    https://godbolt.org/z/av7vTE7as
```c++
#include <cstdint>
#include <numeric>

typedef uint32_t u32;

u32 midpoint_u32(u32 a, u32 b) { return std::midpoint(a, b); }
```

Generated code:
```asm
_Z12midpoint_u32jj: // @_Z12midpoint_u32jj
        cmp     w0, w1
        csel w8, w0, w1, lo
        csel    w9, w0, w1, hi
        cmp     w0, w1
        sub     w8, w9, w8
        lsr     w8, w8, #1
 cneg    w8, w8, hi
        add     w0, w8, w0
 ret
```

The 2nd `cmp` is unnecessary: the flags register still contains the result of the first `cmp` instruction
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUlEtv6ywQhn_NeIMakcGXZOFFLs23-HZHXZ1NhWES02IccUnV_voj7EZNo-pIx0Ig8T68M4MBGYI5OaIWqi1U-0Km2I--_X8g-Wpc0Y36ve1jPAcQG8AD4OE06m60cTH6E-DhA_AgL83l6bGRAfge-AZqPjcFuM1tnkVhnLJJEwOxUyFq4yKIx59UlwbyRn2pUx_fz6TpyJJxUeBzZEkgiO0tkgSywejzaFx8zjKu8pQE3GWadYBrBs2WeYrJOxaiznWJzXUR4GqCMwhiy6DZ3xV1G-4_cuRlJM3UqCk7fWdlGOaZ599LvM3r5QXEhs37yaDkP-jTOvb5qeE8jW88J_e2vFMDWfa2mqQrgDtmxx-wbLK-J3vzL-FC6mZ1jji7rb4zNvhbZuoBxdVJOTrdy_dJSK1vk7iWNzOe4l_-y1NPDJ1m-QwOZ6g5M4El50hRCNK_582PPbGjlafAPJ1MiORZiMZapkYXpXFhIjyFZCMbjzNvfIi3ri5En1Q0oyt0K_RarGVB7bLBJVbLuuRF35aNqhpZE6_rqkElJNUCV1wvV3jsOuwK0yLHkjfTqgb5gnfVqim17MquEmrZQMlpkMYurL0M-doVJoRE7Xot1rywsiMbpuuL2En1Si6f6c3Gq74uARFwB4iDCYH0w3iOZjAfMqectWpf-Db7PnTpFKDk1oQYviJFE-30Nlz9qj37RTo5Ld3tTrgxMrJmMG66DkXy9v7ZMLFP3UKNA-Ah-38OD2c_vpCKgIeprAB4mCu7tPgnAAD__3RHTqM">