<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/121372>121372</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
vector miscompile from AArch64 backend
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
llvm:codegen,
miscompilation,
NEON
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
regehr
</td>
</tr>
</table>
<pre>
here's a function:
```llvm
define i32 @f(<4 x i32> %0) {
%2 = icmp ule <4 x i32> %0, zeroinitializer
%3 = sext <4 x i1> %2 to <4 x i32>
%4 = icmp sge <4 x i32> zeroinitializer, %3
%5 = extractelement <4 x i1> %4, i32 0
%6 = sext i1 %5 to i32
ret i32 %6
}
```
if we pass `<4 x i32><i32 0, i32 3, i32 3, i32 3>` as an argument, it should return -1.
but the AArch64 backend gives:
```
_f:
fmov w8, s0
cmp w8, #0
cset w8, eq
cmp w8, #1
csetm w0, lt
ret
```
which returns 0 for this input.
cc @nunoplopes
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0U92SszYMfRpxo9mMkfkJF1zwJZvLr4_QcYwAt4CpbbLb7-k7Jn_ddJvJDPigo6MjS8p708_MNeQ_ID8mag2DdbXjngeXnG37dz2wY6DSo8JunXUwdgbZgGigENf_OF4mEE3LnZkZjSSETHRAe5CHDD8jAvIdgXIBVCGUP0A0GM-EII9o9LTgOjJ-F3_AX-ysmU0wajS_2N25cuN6_gwPXnqjEQb7NdmdlD0Fff8q-CpEh03nzs03Ln8Gp3TgkSee_yudRVZsgYg0oLx4lmnSa5pgN8WY1nG4NozyIra0PP67sSAa0-EH46K8xwh88SQPV6GbovzmRb5DIVB5VDMq16-x5u1rQD_YdWxjBaub8S3dgWjOa8AwMDaN00OR4VnpP3lusTcX9i-3DqL5vQPZ4P_8YqyousleQFQf-6jqxRXU0_LAgOQd9RweMP_1bWj6DJ0ivpkfwxV1HF4K_BiMHm4WPQrsrMMwGI9mXtYQHWsdh3VeZ7uMdmGPSVvLtpKVSrhOS5kXRJJEMtRdtRc5q7LkrGyzNi-KPJVpnuqsVFkm08TUJChLSaYiT_eZ2O0pV5VipfOsKM6VhEzwpMy4iwuzs65PjPcr1ymlsqRkVGce_baJRLfOg2xudwFEQAcg2rZNNtq23PP8gCfjtZ0WM6ptQ-_wz_fffsZDfkxcHalv57X3kInR-OCflQQTRq4vrIN1-MjF2Dk7vY5DsrqxHkJYtpGgE9CpN2FYzzttJ6DTVuH18bY4-wfrAHTavHqg083upaZ_AgAA__9hlUIE">