<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/126892>126892</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [X86] Unnecessary promotion for fneg / fabs half calls
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            good first issue,
            backend:X86,
            missed-optimization,
            llvm:SelectionDAG
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          RKSimon
      </td>
    </tr>
</table>

<pre>
    https://gcc.godbolt.org/z/PGshMcsTY

```cpp
_Float16 fabs_f16(_Float16 x) {
    return static_cast<_Float16>(__builtin_elementwise_abs(x));
}
_Float16 fneg_f16(_Float16 x) {
    return static_cast<_Float16>(-(x));
}
```
These shouldn't require vcvtph2ps/vcvtps2ph or __extendhfsf2/__truncsfhf2 calls - we should be able to use the bitwise ops directly on the v8f16 type.
```asm
.LCPI0_0:
 .long 0x7fffffff # float NaN
  .long 0x7fffffff # float NaN
  .long 0x7fffffff # float NaN
  .long 0x7fffffff # float NaN
fabs_f16(_Float16): # @fabs_f16(_Float16)
# %bb.0: # %entry
  vcvtph2ps %xmm0, %xmm0
  vandps .LCPI0_0(%rip), %xmm0, %xmm0
  vcvtps2ph $4, %xmm0, %xmm0
  retq
  # -- End function
.LCPI1_0:
  .long 0x80000000 # float -0
  .long 0x80000000 # float -0
  .long 0x80000000 # float -0
  .long 0x80000000 # float -0
fneg_f16(_Float16): # @fneg_f16(_Float16)
# %bb.0: # %entry
  vcvtph2ps %xmm0, %xmm0
  vxorps .LCPI1_0(%rip), %xmm0, %xmm0
  vcvtps2ph $4, %xmm0, %xmm0
  retq
  # -- End function
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VV2vnDYQ_TXDy2hXZlgWeOCB3A1R1TaKmlRqn5ABs7g1NrHNZje_vsLbpWl005dG17KE5Tmej3PwmDsnz1qIEtJXkJ4ivvjR2PKXH9_LyeioNf2tHL2fHSQVUA1Un7tufzZ9a5TfG3sGqj8D1e_euPHnzn34HVi1ziO7z26egVVNrQz38REH3rpmiI9A-bZ3BSoQslfAKkREK_xiNTrPveyajjsPydMDDMnr9WjTLlJ5qRuhxCS0_ySdaHjrgPLV2zqT1R9kp39F1-L8_6Pvno-ylQys-jAKJ9CNZlG9Bso8WvFxkVbgpbv4eaTZAdVh7Wge0VhsGnH1Qvfj4AYCqpvG20V3bhgHwo4r5XCHnx5OsRXIWyXQG1ycQD8KbGXgAc3ssJdWdF7d0Ohgu-RDfER_m8X-y1S5m4BV-5-e3v3AGrZKzCrcK6PPyK7ZcB8IlOCwMoBv-dvA0wtBnvlbAulVQMKBfQPAqmCntG33bINTKrS3txB6k2Hdvk4TA3ralgHAdT873KihHCi1cg66P33z1KYo0OHwH0Ar_MewWDPb7fC17nFYdOel0Q9F4k2Rjamc3ccXTO3YiyGeuT5fyfE84HvIcTX2IUf84nJs9yXqy6QvkoJHooyzpEjSPMuLaCxTyoo470SfFUeepIc-S9mQUJx2rO1FNkSyJEYpo5jiOE5YsS-648D7Nu_jNCuSfIADExOXaq_UZVobaySdW0QZ0zEvKFK8FcqFLk10NqbHQVrnMYCACOgJiFre_Sl0D0n1W37cdifpnOh3ZvZykp95KOphW6NBUr0XSoRqT9Wb1ZaeIluutl27nB0cmJLOu39y89Kr8GascdIT_qq16IRz3N5wtmYyqy8cjA09F4Hq0Ppx5Gq4d7Noserrl0X6cWn3nZmA6pDY_bObrflDdB6oDuWuvfNvWi4l_RUAAP__scb8pA">