<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63615>63615</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Callee saved ZMM[6-15] not preserved before being clobbered by inline asm as required by the Windows x64 ABI
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
omern1
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
omern1
</td>
</tr>
</table>
<pre>
Original discussion:
https://discourse.llvm.org/t/registers-xmm6-to-xmm15-are-not-saved-in-clang16-with-march-skylake-avx512-and-march-x86-64-v4
Notice how XMM6 is saved in `foo2` but not in `foo` (https://godbolt.org/z/ba9KfvavK):
```
foo: # @foo
vpxord zmm6, zmm6, zmm6
ret
foo2: # @foo2
sub rsp, 24
vmovaps xmmword ptr [rsp], xmm6 # 16-byte Spill
vpxord ymm6, ymm6, ymm6
vmovaps xmm6, xmmword ptr [rsp] # 16-byte Reload
add rsp, 24
vzeroupper
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxsU0GPqzgM_jXhEqWCACkcOLRTVVqNuivtHna0t0AMZCckvCTQdn79UyjTmb7XqsKK_eXzZ8fmzslOA1Qo3yNKzQBWJ4hSlB8iPvne2Ormi2ojrtVfVnZSc4WFdM3knDQapTsUH1C8670fXTjRI6LHADCTdbBRah42xnaIHj2iRwuddB6sI5dhYMSbYJOccAtEG08cn0EQqUmjuO4SRs7S92TgtumJe78q_g6Ez5c8oYRrsQYuBSMsI3N2k3L7_mm8bAD35ozfTieGpcMLOZYaIxa3xlDEYlxPHmvjv7zBiWjxWE9nRG2UXwv5QPRY8_K1nfn8imh5bwJi8fpfjoEt3WFEU4yyhXtx4_U3jxdjBcYfw8AQfXm03yr5xFvwd176SEwfkW6qbzfcGAjp2hg8D2bmo8OXYTiH1KO3GOX7AMsPARke5ZNkoU8Yqa8e8D-jVOqp_Ouq-sE-Uf8tN1tT_a7hae6_QRkuHtm4EE8r_Ez2AdZM4wh29d97d3-iSFSpKNOSR1AlrCiSJKeURn21FUm53RbZNikYFCmkZRu3wLaCC9rSkkeyojFNY5bGcZGnGd2wom0FlDXENGFt2qAshoFLdR_-SDo3QcVSluSR4jUot65czZt30AKlu7eCrZtnq3CP1FPnUBYr6bz7YvLSq2VfAz4_4BeuFMA62v-dTijfM5LkIRTGerTgwIZYDa2xgGuQusONMnUNNrivWGolNWDuBswdtvBjkmvE94D_lVqYs8MXluHd_o9osqr6ZTmk76d605gB0WMQuhoyWvM_NGHtl_odoselBT8DAAD__xKeUwQ">