<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/133928>133928</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
miscompile from AArch64 backend
</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>
take this function:
```llvm
define i4 @f(ptr %0, i8 %1, i1 %2) {
%4 = trunc i8 %1 to i4
%5 = getelementptr i8, ptr %0, i8 %1
%6 = icmp uge ptr %5, %0
br i1 %6, label %common.ret, label %7
common.ret: ; preds = %10, %7, %3
%common.ret.op = phi i4 [ 0, %10 ], [ 1, %3 ], [ 0, %7 ]
ret i4 %common.ret.op
7: ; preds = %3
%8 = add nuw i8 0, 0
%9 = icmp ult i8 %8, %1
br i1 %2, label %common.ret, label %10
10: ; preds = %7
%11 = udiv i4 1, 1
br label %common.ret
}
```
when invoked like this `f((char *)0xd, -5, 0)`, Alive believes that it should return 0, and I agree:
%5 = 0x8
%6 = false
branch to label %7
branch to label %10
branch to label %common.ret
return 0
on the other hand, the AArch64 backend is giving this:
```
~/reduce$ ~/llvm-project/for-alive/bin/llc -march=aarch64 -o - reduced.ll
.build_version macos, 15, 0
.section __TEXT,__text,regular,pure_instructions
.globl _f ; -- Begin function f
.p2align 2
_f: ; @f
.cfi_startproc
; %bb.0:
add x8, x0, w1, uxtb
cmp x8, x0
b.lo LBB0_2
; %bb.1:
mov w0, #1 ; =0x1
ret
LBB0_2:
mov w0, wzr
ret
.cfi_endproc
; -- End function
.subsections_via_symbols
~/reduce$
```
which returns 1 when called with those same arguments. it looks like maybe the add should be sxtb instead of uxtb since GEP offsets are signed?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMVU2PqzYU_TXO5iqRMSGBRRZk5qWq1EUXb9FdZOwLuGNsZJtMXhf97ZUN5M28yaJSpODL_Tycc829V51BPJHiTIrXDZ9Cb93JYYe92zRW_jgF_oYQeuWhnYwIyhqS14TW5EDnn9a3gdBaYqsMgtoD2dOWsHIMDggrKGEvoMr4mKXHLD4ywiogxzOhNcTzHkj-CsFNRqzOECyo_epQJIcOA2oc0ISYXZUx4bM6S9AhBSkxjDB1uHoW0TNFRLfGLS0dolnzBnU8CTsM1uwchk_mY5yc1h_e5jWQ_AyjQ-lTudgAXUocl_987ehn4M6OyX3sVQKtOMMalVEgxWs6FGfI1hwfjY8CyRiTOwwpzy815n6PT9t8dFUmC5cSzPQeQUzp6fq6-gCjDgvI5drsZxTZ_0Exo3NbGX3a13EtnGXJNEl1i7MlJB71nhWhNTm-fiQnofV7jwaUudk3lKDVymZySCwlrBQ9j7yoCavoXcYa22Ken1UxBXuBWqsbQoNa4Q09hJ4HUAF8byctI_STMzNo3Ej4HXjnEBedrNyl93I-zqxsufZIaN04bkQfyf6JZE_MCbUn9k_zP3pJAFsDoUewoUcHPTdpumipayf6wx4aLt7QSFAeOnVTpkvg_KJwQut_Cbs4lJNAwvYQT1H229HZv1EEwi6tdVseUSLs0iiTHARsB-5ET_JXzud6WwtbmBPJndapy2rXTErL6w2dV9bAwIX16VMXKw2jk8d5-9Dqev3-7a_vhL1crwHvkVoOu0lzR9jLODm8KuODm5K7X6I7bRsdY9vEt-0Wztgp81hq0C6OI-NadbEMI7S-titD01abXUSrrj5wF0ZnRbTF16xomh1dkKMVl5LQ6p5Uck_MeE_0ne6hmT3EMH70SLZmpy2h1R_nM72yT5mzR-bB3git3pcNkGdzd_krvWezw0yEJcezqPd_3EfPdSQ0chloheibkT-3Pq13fmqWr-CvN8Wv_sfQWO2_8OOLApXoF5V4yCApUnCtUcK7Cj2E3noEzwcE7rop7ne_iwLT1r75WbQD_9Fg4m7cU4vyGgR_Dw3ED45cgm0TwOCVEQi_ffsTbNt6DB64Q0h3nST5hdB6I0-5rPKKb_CUHfd5wXJalZv-RA85b0sUx5bSA8uOzSEv2gZZ1SJlZYsbdWKUFXRPs6woyqzcVZwfJZWSspY24kDJnuLAld5Fieys6zbK-wlPWZ5XrNwk3fp04zK26I_k9aJIwuIGJYylazWvhZXYoXmYB-WFHUalefoojMVr252SGpup82RPtfLB_yweVNB4esQhtM4Ovy6AzeT0qQ9hTNpnF8IunQr91OyEHRa1fxV9mssTdllGu53YfwEAAP__j09pDg">