<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/104914>104914</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] LLVM >= 17 generates call to `__extendhfsf2` for bitcast -> and -> bitcast
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
regression
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
overmighty
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/exb7PbjnK
C++ code:
```cpp
_Float16 fabsf16(_Float16 x) {
return __builtin_bit_cast(
_Float16,
static_cast<unsigned short>(
__builtin_bit_cast(unsigned short, x) & 0x7fff
)
);
}
```
IR:
```llvm
define dso_local noundef half @fabsf16(_Float16)(half noundef %x) local_unnamed_addr {
entry:
%0 = bitcast half %x to i16
%1 = and i16 %0, 32767
%2 = bitcast i16 %1 to half
ret half %2
}
```
Clang 16 output assembly with `-O3`:
```asm
fabsf16(_Float16):
pextrw eax, xmm0, 0
and eax, 32767
pinsrw xmm0, eax, 0
ret
```
Clang 17 output assembly with `-O3`:
```asm
.LCPI0_0:
.long 0x7fffffff
.long 0x7fffffff
.long 0x7fffffff
.long 0x7fffffff
fabsf16(_Float16):
push rax
call __extendhfsf2@PLT
andps xmm0, xmmword ptr [rip + .LCPI0_0]
call __truncsfhf2@PLT
pop rax
ret
```
Related: https://github.com/llvm/llvm-project/pull/104869#issuecomment-2297563670.
cc @arsenm @lntue
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykld2O6yYQx58G36CN8BDbyYUvNsmJdNStujqqqt5Z2OCYUwwW4N1sn74CO5-7261UFCUOM_yZ-TEemHPyoIUoUbZB2S5ho--MLc2LsL08dP4tqQ1_KzvvB4foI4I9gv3B8NoovzD2gGD_N4K9ONbFc_1T_4LIDpHH6XuLYINggxvDRVh7ZUI5mT7NMEwz1V4Z5tMct6x2bZojWJ2njgjWGBWbyRNjjK3wo9W4qupRKi91VUtfNcx5BKuLVxgnEQTbW4PzzMtmWkS3o44cOHadsR7Rb--EothH-90the0cL-SYHIu2bWcdBOuLYvhD54RQsbujco3q-4_P2Cn10k9TXLRSC8ydqZRpmMLajJqLFndMtRgtyXuoIQBYRfvJGUEWI48S1ag16wWvGOf2Al9ob9_OAYU8MoIR3eFa-sBj3hGyI_YGyzS_ckyjI9M8zMeVARaFIi_OiDK4UZsd0yAWlE9qVlx2gv9CcauYPuA0x2b0w-gxc070tXrDr9J3GOXk4TcalnyCmrmZ9McgzzwGcfT2FWPBjrEQ-j7mSG5LKSAIY_a6JjCPQWoXdE4Cs-edjhX-65SL_5vy4mn7_J1U5OrUp7FQRh8wnqu8vVT6p4avFt7Y761foD-RG10X2bDjraFhSuGqEkcvNO9a1wJakuen398dzeDwBfyx71-N5XjwFqNsY-WAQ0s7M8nmopvkY4vwdtSNa7uPNxjMgG_j-_dT_CEU84Ij-ojvmrD03VgvGtMj2MdWMP08DNb8FI1HsB9GpRDsU7Jc5WsEVDo3isb0vdD-AWBdZDnNC7K43q9pQr9g1gndhyel_SgSXlK-pmuWiDItYJlmpKCQdGXarEnarFaUkrpZt1lDa2CiZS2rM57SJpElEFiSFZCULDMKiyJLYcWoYBmlXKQcLYnomVSLEHu4UZIYZZmS5TpdJorVQrl4OwHUrPlL6MDiz1WOAEJPB7DiYIVz0ugwle0SW0YO9XhwIQHpvLuoe-lVvO2CRLbDT09__IpDv6e78K4chBaWeeGmA_UmvCi3VZMT3Bp7blEPiH6Lb3R8mGeT0ar7S_Pr84qZu-nEQvIvJfwTAAD___0iIAs">