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