<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/107086>107086</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Useless SIMD<->GPR transfers for f16 arithmetic
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
https://simd.godbolt.org/z/MfT8oe61d
```ll
define half @test_half_add(half %a0, half %a1) {
%res = fadd half %a0, %a1
ret half %res
}
define void @test_half_add_store(half %a0, half %a1, ptr %p0) {
%res = fadd half %a0, %a1
store half %res, ptr %p0, align 2
ret void
}
```
Not only do we perform unnecessary transfers from/to the xmm registers, when we fail to fold the store into a vpextrw
```asm
test_half_add: # @test_half_add
vpextrw $0, %xmm1, %eax
vmovd %eax, %xmm1
vpextrw $0, %xmm0, %eax
vcvtph2ps %xmm1, %xmm0
vmovd %eax, %xmm1
vcvtph2ps %xmm1, %xmm1
vaddss %xmm0, %xmm1, %xmm0
vcvtps2ph $4, %xmm0, %xmm0
vmovd %xmm0, %eax
vpinsrw $0, %eax, %xmm0, %xmm0
retq
test_half_add_store: # @test_half_add_store
vpextrw $0, %xmm0, %eax
vpextrw $0, %xmm1, %ecx
vmovd %ecx, %xmm0
vmovd %eax, %xmm1
vcvtph2ps %xmm0, %xmm0
vcvtph2ps %xmm1, %xmm1
vaddss %xmm0, %xmm1, %xmm0
vcvtps2ph $4, %xmm0, %xmm0
vmovd %xmm0, %eax
movw %ax, (%rdi)
retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vdtu4zYQ_RrqZRCDGl0sPegha9dFUWxR7LZA3wJKHFlsSVElacfZry90iRs7iVtsu4IBi5c5c87waCi8V_ueqGLZB5ZtI3EInXXVpx8_K2P7qLbyqepCGDxL7hnuGO68MnK1t7K2Oqys2zPcfWG4-9j-UljKY8n4lvF7lvP5p_U8IalVPUEndAss5YF8eBgHD0JKhsU8j5ngDDdwHsUMS2DrDzMGjHOOPLBkC62QEi7D5oh5q6NwXnXkF1br7fLyktPRKvmK04MP1tFNZhsYghsHA_9qmjCluWB6ibsBodW-B3wOGIWNjK8VPRd8Hv5kA9heP4G08EgwkGutM3Doe2rIe-GeIDjR-5ach9ZZw3AXLISO4GQMONorH8hNbB476keQVigNwUJrtZx2ztxVHywIOA50Cu7xio3wZp65PPDkHt59GCavHbKIn58lFTBMnwt6MiZeXkmcrrYbe5QT8LT2IuBfoPJ3UZtjGDoc_Jn2SxJT5Fex-CfY6_1CSu_hiu1tJmMKj0N3TpGmrwXfVHCzMIPq_WUdLwS_n8BR-PMNtyyf4tueecstS8B_Ot3bFmtuWKw5fRsP3DiY8_5v6pb_2SfGHh8Xdc-1KMYWKBXD8j1jnBtLJKtElkkpIqriNWZJjvE6jrqKeIkZz4uywEJg2iR1WSZxXeQ8LuoiE5GqkGPKS57EcZzH8apFmSHmkkRcJ1TWLOVkhNIrrY9mvOIi5f2BqpiveZFHWtSk_XRhItai-YP6saH9VuQMkeGGIRrlPck7OwRl1BcRlO3HtWwbuWoEvasPe89SrpUP_u80QQU93cQjVraFXz1p8h4-__Bxy5LNHUu--_7nTy8bt3XQxjkIp0JnKKgmOjh9dWHvVegO9aqZevyYa_m7G5z9nZrAcDfp8wx3i8RjhX8FAAD___EOO9o">