<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/125611>125611</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[AArch64] boolean or+sext can be done with addhn
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dzaima
</td>
</tr>
</table>
<pre>
https://godbolt.org/z/n3edx6Ko3
This function:
```c
#include<stdbool.h>
#include<arm_neon.h>
bool foo(float64x2_t x, float64x2_t y) {
uint32x2_t any_zeroes = vaddhn_u64(
vceqzq_f64(x),
vceqzq_f64(y)
);
return vget_lane_f64((float64x1_t)any_zeroes, 0) != 0;
}
```
compiles as:
```asm
foo:
fcmeq v0.2d, v0.2d, #0.0
fcmeq v1.2d, v1.2d, #0.0
orr v0.16b, v0.16b, v1.16b
xtn v0.2s, v0.2d
fcmp d0, #0.0
cset w0, ne
ret
```
although the addhn is better:
```asm
foo:
fcmeq v0.2d, v0.2d, 0
fcmeq v1.2d, v1.2d, 0
addhn v1.2s, v0.2d, v1.2d
fcmp d1, #0.0
cset w0, ne
ret
```
```llvm
define dso_local i1 @foo(<2 x double> noundef %x, <2 x double> noundef %y) local_unnamed_addr {
entry:
%0 = fcmp oeq <2 x double> %x, zeroinitializer
%1 = fcmp oeq <2 x double> %y, zeroinitializer
%2 = or <2 x i1> %0, %1
%vaddhn2.i = sext <2 x i1> %2 to <2 x i32>
%3 = bitcast <2 x i32> %vaddhn2.i to <1 x double>
%vget_lane = extractelement <1 x double> %3, i64 0
%cmp = fcmp une double %vget_lane, 0.000000e+00
ret i1 %cmp
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVU1z4jgQ_TXNRTWU1MYGDj6QZLjsde8u2WpjbQkpkWRC-PVbknECSXZ2qoaiSrb6vdcfVqtlCPpgiWooH6B8WsgxDs7X6iL1US5ap97qIcbnAMUOcA-4PzjVOhOXzh8A9xfAvS1Inau_XAF8B3z396AD60fbRe1sovEdVHz6d-kFC207MyqC4jFE1TpnlgMUPz_bpD82lpydjQnIeucAN71xMlarMzaRnQEf2e3GG-CWwfoB-I6xUdtYYN6X9q25kHcUGBRP7CSVGmwzVivATcKeOnq5vDR93jgDbgEfswa7NyX9vJ_WYnLjKY7estOBYmOkpSv0JlTRRMDtRwwpap4jRZHC4ZMUrJ9uCwZ817njszYUmAyfqinDEfguVSTvs-uv7470koLmS1TJzfsDYMGX_DuomKHiv6DO-7ye-FJU7VV2fhL56QN8jnYGY_gI4c7xc1oV_9ZZFyim9TWbLSWTp_ipMtLEwY2HgcWBWP6aTAfWUozk_7RUv1elW9QUwIQKd1oT_JvkxR8kf_tqzCmlp6jXlpgKrjGuk4ZpwWDFp5aB4hHZmSk3toag-MmsG62ingGWuYV-BcgtlTWb0Vp5JNVIpfy1y8hG_zYXFrDkub9ylo5evgrPHlMjaKujlkZfyM908f_0t1_QMdOdn4laXEnXo1aKGTndALjUmRHoHL9wkEX3vlngdBFlcpFJrY6dDPEecq89CYjbFJJGwsy3RZaic_Syi2ToSDZ-4WSfKQNdra7nDrBMRXqv1pg-fsbfqeeDuuT5R4APnM9XVj4gWeTrzbNQdaG2xVYuqBbrYlMVArflYqhx0_M1VZXg3brfiE2Hhdyu2vVGlas1x26ha-RYcuQrLvhGlMu-K_lm0_KWy-1aooAVp6PUZpnObRokCx3CSLXAshJiYWRLJuSBhGjplWUrIKb55OtE-tGOhwArbnSI4UMm6mjyJNvtfDdUKyifWJoaJC1zHvAhf-NOWtamSllirzoOU-cuRm8-jzodh7Fddu4IuM89Ni0_nr37h7oIuM-hBcD9NfZTjf8GAAD__8_FCd0">