<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/76769>76769</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
likely miscompile of vector code by AArch64 backend
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
miscompilation,
NEON
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
regehr
</td>
</tr>
</table>
<pre>
I'm pretty sure this code is getting miscompiled by the AArch64 backend:
```llvm
define i32 @f(ptr %0) {
%2 = load <4 x i8>, ptr %0, align 8
%3 = zext <4 x i8> %2 to <4 x i32>
%4 = add <4 x i32> %3, %3
%5 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %4)
ret i32 %5
}
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>)
```
llc gives:
```
_f:
ldr s0, [x0]
ushll.8h v0, v0, #0
uaddlv.8h s0, v0
fmov w0, s0
ret
```
but this is just adding up the values, the other addition that doubles the value of each vector element seems to be getting dropped, the immediate argument to the ushll should be 1, not 0.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVMGOozgQ_RpzKQ0yZQjhwCHdmUh7mf2ElcEFeMbEkW3Yzn79yiYJPTt7GikKuHjv2fVcVdJ7PV6JWla9seqcySVM1rWORppc1ll1b_9gWM9wcxTCHfziCMKkPfRWEWgPI4WgryPM2vd2vmlDCro7hIngdHL9dCihk_0PuiomToyfGT-xA99-xqzzFlI06CuBFgis5APD4y04YFhxhg2w-m2DQQwhMHEGY6UCJt5L-AB9ZOIrw3fYSe8gjR6vcPxEFIn4D32En4ibZrCvoMAot_PKxJNK_YxIknGn9NzhVYL30phnPjHPfKU-WJc7UktPuVQqX8sohMdfVEuGzUPQUdhUsKoe7tXnx8vDud5IR7-z1WuX14V8Fjamh1Gv5H-9t23518DECZ6UxijHeOOT96x6--Cseh20WfxkTH6cGG_WhNj-GQq-Y6RSZt1A_gl6fhxmuzLe_J3ifo87Cv97uG4JW51qD98XH-L1xTJdbqk0V2kW8lErrmyYyCVE0PYKYZIBlF06Q35Hgx2AZD_B5i6QoZmuATzR7GP5dPRqBuXs7Ubqqa_nmZSWgUC6cUmsYNOX5Av4yS5GRYEiUq42AM8z1QrViEZm1BY1L7EsDgXPppYPWNTDYailamrREe_EUIuyxpqjKHrKdIscS15wwTkeKp4XoujqohHloVMF1kdWcpqlNnmqFuvGTHu_UFsf6kOTGdmR8WkiIO69--hmhsjwnSG-Gl5G017hb1___BYX1TlzbdT_0i2jj5WpffD7jkEHQ63RP8jcPw2P6PLD4DRhuvt_x0i2ONNOIdxSYeKF4WXUYVq6vLczw0saKtvjy83Z79QHhpeUoGd4STn-GwAA__8bV3Bo">