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