<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/72777>72777</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
miscompile of @llvm.sshl.sat.i32 for AArch64
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
llvm:codegen,
miscompilation
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
regehr
</td>
</tr>
</table>
<pre>
here'a function:
```llvm
define i32 @f(i32 %0, i32 %1) {
%3 = or i32 1, %1
%4 = add i32 %3, %0
%5 = add i32 %4, %0
%6 = call i32 @llvm.sshl.sat.i32(i32 %5, i32 1)
ret i32 %6
}
declare i32 @llvm.sshl.sat.i32(i32, i32) #0
```
let's call it with `f(0x00000009, 0x7ffffff8)`. this gives:
```
%3 = 7ffffff9
%4 = 80000002
%5 = 8000000b
%6 = 80000000
```
on the other hand, llc for AArch64 gives us:
```
_f:
orr w8, w1, #0x1
add w9, w0, w0
adds w8, w8, w9
mov w10, #-2147483648
lsl w9, w8, #1
cinv w10, w10, ge
cmp w8, w9, asr #1
csel w0, w10, w9, ne
ret
```
I didn't hand-execute these instructions but running them on my M1 Mac with the inputs above gives `7fffffff` as the output. I also see the obvious i64 version of this function getting miscompiled.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVNGyoygQ_Rp86boWgtH44ENmb6VqHuYbtlBaZRchBZh75--3QBJTd2dnrZSS7sPhcKBbeK9mg9iT0zdyei_EFhbreoczLq4YrPzZL-iQsFbAtJkxKGsIvxD6TuiFNHT_aX1f95DESRkExRmQmk6EndOQnShhf0AeV4R1QNpv-xSIIQ6Ev4N1CVJFbMIdgDoBhJQPEp5B9AV0-gqqfwFqEmgUWj9kRvml94suvQil4uyQfXrIjpofJA7DY4EmO9G-50F2YdTC4f_wZ-pkBuP0i6evfBoDYa3PogN8qLAAaZK_9JPuTxf56Gc7pecc9Ta0hLAoD7O6o__3ueW_D_vz1O4Z3k0_7_zsGT69hodnuHkN_2471kBYEGxY0MEijIzKtR5hsg4uFzcuTb1Lhu0_Vf85HRnaWecI7T7Okekj3x9OP6snQEgZAcmkD5rfL0l_TN_f3TO72ntMVjTTvrGqbuszb-ozAMATp70-ljhn8KFgVOaFJ39mPPLr7dCQSIR3Xyg8piVeGXaoOXgcht94_x2kkoawNiTn3_ATxy1gPBCPoIwPbktV7mHYArjNGGXmmF7BGlh_wo8Kfohxv4PxGJW5bcGDGOwd86mRhua7NJGGgvD7eW_htoUSvoPQ3oJH3MPDXdnNg2pquKPzyhqw035vHy0HZgwh6liVH-16UxplWciey453osC-ainlTcsbXiw9O4mhRdo1XUNriS0fcBRVNfHqXAvWyUL1jDJeVVVH66qhvGyFqHA6SS4r0YqBkpriKpQuU-laNxfK-w37lrVtW2gxoPapZTI2iPFvNJLwS765hMXKJoylrsgvo5U4o3mGn1sQqZkyFvuu6yP6bdhmHxuG8sEfawcVNPbH1qM9v2orr_VTbE73Swi3VEDsSth1VmHZhnK0K2HXJG7_vN2c_QvHQNg17dITdk0b_ScAAP__vZOs-A">