<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110190>110190</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86_64] [AMX] Wrong tile register reload instruction is generated
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ienkovich
</td>
</tr>
</table>
<pre>
[amx-reload-bug.txt](https://github.com/user-attachments/files/17157112/amx-reload-bug.txt)
I build LLC from the main branch and compile the attached test case with `-mcpu=sapphirerapids`. The resulting assembly code has the following instructions:
```
tilestored %tmm0, 6016(%rsp,%rax) # 1024-byte Folded Spill
tileloadd 6016(%rsp), %tmm7 # 1024-byte Folded Reload
```
Here tile reload misses index register with a stride, therefore zero stride is used and the first row of the stored tile is broadcasted. Also, it looks like this spill/reload pair can be avoided.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U02PrDYQ_DXm0pqRaT5mOHDYt6NRIr1ckkh5t8jgZuiswcht9iO_PjLwlChZBSFs01DlrnIZEX7MRK2qvqjqlpk1jj60TPOLf-V-zDpvP1LRTO-nQM4be-rWxzm-R1XdFF7HGBdRxZPCu8L7g-O4dufeTwrvq1A4mRhNP040R1F4H9hRGvNLXl3yHBXePwHGRumb0k_780foVnYWvn59hiH4CeJIMBmeoQtm7kcws4XeTws72mo7JVmIJBF6IwRvHEdQtT5N_bKq4iZmWUYOFMzCVlStz_DrSBBIVhd5foARoalzH9B7SzAa2ZAH75x_S3WeJYa1j-znrft9v7U-7m0JxxVT09EHsvtaYRWnSSt8hlrntcKrwirIovA5Tcy7wiZ9VUCusTx1H5Hg7p0lC78s7Nx_0ZN6B_i_IZtEszNe4Dv_J8g_byCf9vEDBdpoYPcJJhYhAZ4tvUOgB0uksGtsQGJgS4k1jhRo8IHgTwr-KAALrEJ2c23TlINECP4N_LC9OKTaCFmgC97Y3kgke4YnJz5BcwTn_YuA45dkOgvIJg3ejz0uhgP0ZoaOwLx6tmTPmW0L2xSNyajNL3gpmrLAJhtbqq6oC025vZZdUXWYm0FfuqZobGmars-4RY2lbrDGoqywOWM96NoMtda26gcyqtQ0GXZn516nsw-PjEVWavNc543OnOnIyRYyxJneYKsqxJS50Kaf0ukXVWrHEuVvmMjRben8dq1_r0tV3UBVX55--pZmvwU_P75bc9hw9P-PA5pUfNBMwUSy2Rpc-z-hTcTHcFqC_4P6qPC-bXcL7t7Pa4t_BQAA__8BPVhn">