<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/59855>59855</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64, CLANG]: unexpected generated instructions when passing two symmetric inputs to vceqq_f32,f64
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
seiko2plus
</td>
</tr>
</table>
<pre>
Using two symmetric inputs with `vceqq_f32` and `vceqq_f64` are commonly used to test NaNs,
we expect clang uses the instruction `fcmeq`(non-signaling) to avoid raising FP invalid exception, but instead:
```ASM
npyv_notnan_f32(__Float32x4_t): // @notnan_f32(__Float32x4_t)
fcmge v1.4s, v0.4s, #0.0
fcmlt v0.4s, v0.4s, #0.0
orr v0.16b, v0.16b, v1.16b
ret
```
which is equivalent to `a >= 0 | a < 0` kinda weird wasted watts, `fcmge`, and `fcmlt` raise invalid exceptions for qNaN of course.
references:
- https://godbolt.org/z/r65hKecds
- https://github.com/numpy/numpy/issues/22933#issue-1520567697
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8VE2vqzYQ_TVmM0pkzEdgwSLNLV20jSpVXUfGDOA-YxPbkJv--spO7ntRq3tRlBmGmaMzPp7hzslRIzak-IkUbwlf_WRs41B-M2xRq0s609-bv5zUI_ibAXefZ_RWCpB6Wb2Dm_QTkJJuAq_Xy5AxUlLgun-JlXmMWQRh5tlodYfVYQ_egEfn4czPjrAToW-EHm8I-L6g8CAU12PIdOAnBKmdt6vw0uiAPYgZr6SkhFXa6F1ogyupR8LqAMw3I3uwXEbm7R8g9caV7AHfBS4BhLATdKuPuMh7kh0fBAJm_B3__P0R0ct9u2jjNdexQVZdLq0y3GfsPb94wmqSHeH7Q1hLWAskp1_XROyPokHMIwLAlu7zcBiw0adDWEb39Jk9iFn5kEa_THs-xtpoN7pPy-6Z_uGl0XvkW_T_af4pxiTFBNIBXle5cYXah8MlJeVAsp9J9gYUyOEE4fUEoRC-Sd1zuKG0Pdy48xiM9w-SUbcRo26nj2sSmwqlQS78v1IOBmPheuZnMAMIs1qH-yff-G9xQItaoPuu4g4m75f4HuUYTd8Z5ffGjoS1_xDW2rKYfkXRu08KpJ_Wbi_MTFir13m5v1jp3IqOsJaxOssIy2JglxaMFuWhrA-v7JK-yfo6q3mCTVoeWF3VaXVIpmaoSypEhyUOrB-KfGCsryoUFa_TrCsxkQ2jLKMpLekhzehhf6iqvKJ13udUZFzkJKc4c6n2Sm1z6C2JRJqirooiUbxD5eJoM6bxBvEjYSxMum1Cza5bR0dyqqTz7geKl17FnXA8WjGVeRDr9Nvx_Asp3sJdX_VjRrGHETVaHryXAXVwm1DDEtbLZ4vDG_ixM9hpKHNIVquaL2QI_J5mt1jzNwr_Kkbs-t8AAAD__3lgeNA">