<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">