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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization: add+add instead of lea
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86
      </td>
    </tr>

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

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

<pre>
    The code is:
```
void* alloc(long* base, long cl) {
        long header = base[cl];
        const long ptr_mask = ((1l << 56) - 1);
        if ((header & ptr_mask) == 0)
                return slowmalloc();
        void* ptr = (void*)(header & ptr_mask);
        void* next = *(void**)ptr;
        base[cl] = (long)next | (header & ~ptr_mask) + (1l << 56);
        return ptr;
}
```

clang 17.0.1 produces the following x86 code:
```
 movabs $0xffffffffffffff,%rcx
 ...
 add    %rdx,%rcx
 inc %rcx
```

The add+inc sequence could be `lea 1(%rdx, %rcx), %rcx`, which is 1 instruction and 1 byte less.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx0VM1yszgQfJrhMhVKSOZHBw7-Kd_2toe9bQlpbLSRkRcJx9nDPvtXwjix8yUuFzCip3t6NEiFYI8DUQvlBspdpqbY-7E1l_fp1V-yzpv39s-eUHtDaAOINbAdsDVUbPnP4cVbA3yNyjmvgTfOD8cUdyoQ8C2mGLUDLhHqzULB5LzckzI0IojdDV5utINyB-ITp_0Q4o3kHMe_Tyq8znjgDfCmcAhiC2KLZZUUXrAALh_z7WGB3rV49UE01yR2iY6ltHsOMDlSnMYBg_Nvp7uzL8x34-c43italhLwJ8HvGAa6xoVi_ciSiM5xfEx5bNNd9dZxeWOpt_is_f-TW77B39v2KLAYf5Ktd9_u_O2qnRqOWNQ5yws8j95MmgLGnvDgnfNvdjjitanmMfpphvDkL6oLCHzFroenH_At8HLU1wWZ5_nypIxBRExvzfUrzA4aHxe-LT1NtzIG-CbBA_070aDTwE_OYEcIFXOk0kg1Hyp31rTFH0HFUvDWW92jDVigHUIcJx2tH1ANBgvs3iOhoxDyzLTCSCFVRm1RSVlUsmlY1rdKCyXLmgpeSlZQyUnUnTRSCl2uSkmZbTnjoihYyWrRMJYzzrva1KtCqoaRFLBidFLW5c5dTrkfj5kNYaK2LgSrMqc6cmH-3DnvlH6lwYBY_9VUwHk6AcY25b100zHAijkbYvhkijY6av-wIZBBf472ZP9TySCI9dLFtCPJOSmD_oCOVDaNru1jPM_HB98D3x9t7Kcu1_4EfJ_Yl9vLefT_kI7A93PRAfh-rvtXAAAA__-zh1Lo">