<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60946>60946</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang ignores the `min_vector_width` attribute
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
He3lixxx
</td>
</tr>
</table>
<pre>
Consider this code snippet ([godbolt](https://godbolt.org/z/b59MvarKq)):
```c++
void test(uint64_t* input_, uint64_t* output_) __attribute__((min_vector_width(512))) {
uint64_t* __restrict input = std::assume_aligned<64>(input_);
uint64_t* __restrict output = std::assume_aligned<64>(output_);
for (size_t i = 0; i < 64; ++i) {
output[i] = input[i] * 16;
}
}
```
When compiling on x86 with `-std=c++20 -O3 -march=icelake-server`, this resulting assembly does not use the 512-bit registers (`zmm`), but the AVX2 256-bit registers (`ymm`).
I understand that clang defaults to `-mprefer-vector-width=256`, but [according to the documentation](https://clang.llvm.org/docs/AttributeReference.html#min-vector-width), the `min_vector_width` attribute should overrule this default.
With `-mprefer-vector-width=512`, clang [uses the `zmm` registers](https://godbolt.org/z/eEoPE96xT).
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyMVF2PqzYQ_TWTl1Eix4CBBx7ysVGrqmpVVb19QwZmg1uDU3vIfvz6ypDs3u29bW9kJY5hzpwzZ8Y6BHMeiSrI9pAdV3ri3vnqO0qseX5-XjWue6kObgymI4_cm4Ct6wjDaC4XYgRZQLY_u65xliE7gix65kuAZAfyBPJ0e7Rx_gzy9Ary1GTlj1ftf_gLZBlXsgNxBLEDJZbVgtzHNZ9enemQKTDIYjIjq7RmkDs042XiGuQBPz91Ey_HJda1ZvammZjqOtKUxWDG-kotO18_mY57kEW2lTcaskTIb0kR8QNsXXsK7E3LS16E5IiBu8g92ekQpoFqbWMlO0gOKoXkAWRx51hC8v_AC_VvRH7X-QH6fffofPQmmFeqGc0MKyDZz9sDRpw9LnU2X0iPnyUDZHsD2XEOn9W8HcgdbtXH5PnxZuTb5u7o7e_8_amnEVs3XIw14xndiM-FwifDPYIS61n78dYCUuD6pwTXg_ZtD8nRtGT1n7QO5K_kI7A8LE3pKUyWI6AOgYbGvmDnKODoGKdAyD1htpXrxjB6OpvA5MPcvUq8DsMMVUa0ZuL55d1vv0uUmfpqxMs9YvO5su9xGjvygfXYIfeasbV6PGNHj3qyHJDdLHG4eHokv15acb20YnKUmbopihwg2-u2db6LmtjNnDrXTgONrNm48WvDNufbWHsdbvPWuTaAPO3uk_BLTExjS5ueBwsyGcz4kcdShZgNlPhiYJTAt6nC0LvJduiu5P1kaTHiJvZDYT7dzf0X5XEIF-VLwSDbT4HCncXiz7sJ33bN0IP7-aFUz79Gm1ZdlXRlUuoVVVuV59sszfNi1VdabqUoUirTQpUqT3PdJo9tq1JNudBKrEwlhUyElMlWbsuk2JDIRZ622yzXjdjmClJBgzb2rewrE8JElRJlqlZWN2TDfLtKOdITzg9BynjZ-irGrJvpHCAV1gQO7yhs2FJ1mAtizqPz7wX5T1tWk7fVP4pjuJ-aTesGkKeY4Pazvnj3B7UM8jTTiq0y0_47AAD__yID3ho">