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

    <tr>
        <th>Summary</th>
        <td>
            Poor codegen with __builtin_subcll
        </td>
    </tr>

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

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

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

<pre>
    In using __builtin_subcll to do a multi-precision comparison, clang fails to optimize to use a `cmp` and `sbb` operation. This seems to be a regression for trunk vs clang15.

https://godbolt.org/z/dsheW9YbK

```
bool edata_cmp_summary_less(edata_cmp_summary_t a, edata_cmp_summary_t b) {
 unsigned long long borrow = 0;
    __builtin_subcll(a.addr, b.addr, borrow, &borrow);
    __builtin_subcll(a.sn, b.sn, borrow, &borrow);
 return borrow != 0;
}
```

Clang trunk:
```
edata_cmp_summary_less(edata_cmp_summary_s, edata_cmp_summary_s):
        cmp     rsi, rcx
        setb    cl
 cmp     rdi, rdx
        setb    dl
        sete    al
 and     al, cl
        or      al, dl
        ret
```

Optimal assembly (gcc / clang 15.0):

```
edata_cmp_summary_less(edata_cmp_summary_s, edata_cmp_summary_s):
        cmp     rsi, rcx
        sbb     rdi, rdx
        setb    al
        ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMVMtu6zYQ_RpqM4ggUbIsLbRIYggoumgXBYquDD7GMluKFDhU0uTrC8rO0-7NvbtrGHzNnMPRGc4IIjM6xJ5t7thml4klHn3o5SSWgCGTXj_1vzhYyLgR9nu5GBuN29MilbUQPWgPAqbFRnMzB1SGjHeg_DSLYMg7xu9BWeFGOAhjKSH8HM1knjGtF0IQwJpCTTNrChBOpx1JmXZ-xiCi8S6HP46GgBCnlUImVMAxIK33HXyAGBb3DzzQ6bpyk7Nix4rb03iMcSZW3TI-MD6MXktvY-7DyPjwzPig6Yh_dn_JX9-DWFOc_-tWem8BtYhir6Z5T8s0ifC0t0jEeHtpiCDS118zSMY7YNu7EzEsbk2CBuvdeBqkD8E_Aqt2ULDqxRHgIgeMtyIXWod0l3xbrfi0Yrx52XRfM5E78ZznL1gCxiW412B5-TFett1dVfI03q_PYk1bysw1xx9Qm65rTWu8t29fnX5qmtc5kEmooP79aCeMcvWz5_NXgD4B9P8AtL04xzSLl_P0vs8Ha2F8dPcB3lk_kwWM31Dzt1RVwoIgwknaJ2C8HZUCxodzAZabvHivxk-luJTfJbD4UpNM95Xuqk5k2JdbXjfddtvx7NirbYeHSlc1SlnJwxZV21a1wBIV54p3mel5weui5U3Z1lVZ5g3XqtJlrcqqbDtZsLrASRibW_swpeaRGaIF-7JoyrLNrJBoaW2knDt8hNXKOE99NfQJdCOXkVhdWEOR3miiiRb7370PoLzGER08mni8qNBsCbb_1MpMPC4yV35ifEiE5-lmDv5vVJHxYQ2DGB_OcT70_L8AAAD___ClyU0">