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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization: unnecessary register move
        </td>
    </tr>

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

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

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

<pre>
    The code is:

```
struct SlabList {
  bool Free(void* ptr) __restrict;

  void* head_ = nullptr;
 void* batch_ = nullptr;
  void* tail_ = nullptr;
  uint32_t size_ = 0;
  const uint32_t capacity_;
};

bool SlabList::Free(void* __restrict ptr) __restrict {
  constexpr uint32_t batch_size = 64;
  if (__builtin_expect((size_ & (batch_size - 1)) != 0, true)) {
 ((void**)ptr)[0] = head_;
    ((void**)ptr)[1] = batch_;
    head_ = ptr;
    size_ += 1;
    return true;
  }
  if (__builtin_expect(size_ == capacity_, false)) {
    return false;
 }
  tail_ = ptr;
  head_ = ptr;
  batch_ = ptr;
  size_ += 1;
 return true;
}
```

The fast path code that clang generates is:
``
SlabList::Free(void*):
 mov    0x18(%rdi),%eax
 test $0x3f,%al
 je     114b <SlabList::Free(void*)+0x1b>
 movups (%rdi),%xmm0
 movups %xmm0,(%rsi)
 mov    %rdi,%rcx
 mov %rsi,(%rcx)
 inc    %eax
 mov    %eax,0x18(%rdi)
 mov $0x1,%al
 ret
```

The `mov %rdi,%rcx` instruction is unnecessary. 

https://godbolt.org/z/zah88ecYf
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVU2TqzYQ_DXiMvVc-gADBw5rOz4lp-SSk0uIsdGLDJQkHHZ_fUpgDPZm31ZhbGt6enp6JJDO6UuDWJBkR5JDJHtft7aobu_9P-0tKtvqvfirRlBthaAdEW-EHgid71t6v8a_ztteefjTyPJ37TyQdDcFAMq2NXC0iIRnt1ZXhL9B5y3hOZxOFp23Wnkidmt2gBlZo6xOQMQBmt6YkDcjH5BSelV_gXmAvNTmK0yvGy_4yYPTHziB6Cqs2sb5BaRkJ5X276dFc3p40T_2PJsRnBNvLw4srX82Y-3eWByHzi4Cpn6D1lHqNl5p1WcgPDudyl4br5sTDh0qT3hGeHbvjm8DZEXyAxjheZBAOJua53vwtsd5-SFnIrr3MF75pJ4kO0qSwyhoHNlKE_wyjc1pk6KnvGX4zwODeVJ8F4LsKWTR97aZ9C_rYUbfefQYfyBdxsz3cJbGfXZjKTbFH9VWxZZ999zCV62tNvNz4KuO_6_dR_2XUzrdw6E-S-ehk76ejrevpQdlZHOBCzZopUf3dOZXJL_a1sGiOQeu7S1YRAeWjRsgsZUePdwTnqAc7jCP4XnBYzqI8xST5h76iYEAGItLIGL_XWW-owMrifhtEdB3Dj4XH65X-oqZFkN4RLsR_dTITBIYrBpWwTlhTlbDkqwbdU9eWl4Iwxrff7JoTR3Tgb34YtF_M1-ypbOwteQtBd1Mz2rdNqAd9E2DCp2T9n0Da5ba-27cAPxI-PHSVmVr_Ka1F8KPH-Ej6yxD9fc5qgpR5SKXERZsm-csZ0lCo7pIS8GESipV0QTTmCVl-InbGGmu8oxFuuCUC8ZowoTIGd2kmZI8FvKcVjLFKiUxxavUZmPM7RpqR9q5HouUCbaNjCzRuPH1xXmD_8IYJJyHt5ktQs6Psr84ElOjnXcLi9feYPGHdg4raDuvr_pDBkeIeFs7AhYv2nm0YRQY9dYUL7ZoX_flRrVXwo-B_v71o7Ptz_GhchxFOcKPo-j_AgAA___NDR2D">