<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/153818>153818</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
missed auto vectorization
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Disservin
</td>
</tr>
</table>
<pre>
The following code doesn't get auto vectorized on clang trunk when compiled with
`-O3 -march=znver4`
```cpp
struct BitBoard
{
alignas(64) std::uint64_t chunks[4];
BitBoard& operator&=(const BitBoard& other);
};
BitBoard& BitBoard::operator&=(const BitBoard& other)
{
chunks[0] &= other.chunks[0];
chunks[1] &= other.chunks[1];
chunks[2] &= other.chunks[2];
chunks[3] &= other.chunks[3];
return *this;
}
```
resulting in
```asm
BitBoard::operator&=(BitBoard const&):
mov rcx, qword ptr [rsi]
mov rax, rdi
and qword ptr [rdi], rcx
mov rcx, qword ptr [rsi + 8]
and qword ptr [rdi + 8], rcx
mov rcx, qword ptr [rsi + 16]
and qword ptr [rdi + 16], rcx
mov rcx, qword ptr [rsi + 24]
and qword ptr [rdi + 24], rcx
ret
```
GCC performs such auto vectorization
see:
https://godbolt.org/z/8rKccboe1
same for arm
https://godbolt.org/z/9rT66P4hx
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVE1vszgQ_jXDZZTImI_AgQNplD3sYffQ-8rYDngLNmubpNtf_8qQNkmVvGoLSLY8z8d4bIY5p1otZQXZFrJdxCbfGVvtlHPSHpWOGiP-r547iQfT9-akdIvcCInCSKeBbjy20iObvMGj5N5Y9SYFGo28Z7pFbyf9gqdOauRmGFUvBZ6U74DUkJPVXwmuBmZ5B8nuTR-lTSEnS2z5-DgCqZ23E_e4VX5rmBUBsNkCqRERWa9azRzQIk-Blui8gKSGpJ6U9nn6j0feTfrFQbZNIdtBEohn7ocgzdGM0jJvLNAckh3Qghvt_C3Ed9ICLc8am4vYNepjPmfxHdnrbX0kTSDb4cJekOub0JLCDSN-zIjvM-hjBr3PSB4zks9VttJPViPQ2nfKXYp3dcxAaivd1Ptwv5TG6xhzw3WF71f1PYxzecNyOKb3DMIzmOM8Wv4K9An_OxkrcPQWIdtap0LSd8BsBluhQpBpMa_ecsXMDSj--nU_BLrF4uz6SPgC-pF8nN_u6rc2C_hHPjT9hs8CvvhY6T_dBCD1H09POEp7MHZw6Cbe3XYY5pXRC9JJuZxz5_3owpTuge5bIxrT-7WxLdD9G9B9Yf_kvDEyPvPYEHqaRWaHL7BL-5znf6fdaySqRJRJySJZxZssoxtSxkXUVeSQiaQggvMkbkSRlQ1jmSjFRjAii6KIVEUJzUgRZ_Obrnl8iHlGKZWHZpMfYkiJHJjq131_HIJ3pJybZBVnSREXUc8a2bu5UVOq5QnnKNDwh0a2CqRVM7UOUtIr591Fxivfy2oIPV3cKWQ02b76VADlu6lZczMA3Qed87AarflXcg90P7s7oPtzeseK_goAAP__9mPZXg">