<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">