<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/78477>78477</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
AArch64 with global isel miscompile
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
tanmaytirpankar
</td>
</tr>
</table>
<pre>
The following LLVM IR:
```
define i32 @f(ptr %0) {
%2 = load <2 x i32>, ptr %0, align 8
store <4 x i32> zeroinitializer, ptr %0, align 16
%3 = extractelement <2 x i32> %2, i64 0
ret i32 %3
}
```
with `SDAG` lowers to
```
../../llvm-clone/llvm/build-release/bin/llc -march=aarch64 foo.ll -o foo1.ll
f:
ldr d0, [x0]
mov x8, x0
str xzr, [x0, #8]
str xzr, [x8]
fmov w0, s0
ret
```
but with `-global-isel` it lowers to
```
../../llvm-clone/llvm/build-release/bin/llc -march=aarch64 -global-isel foo.ll -o foo1.ll
f:
mov x8, x0
str xzr, [x0]
and x0, xzr, #0xffffffff
str xzr, [x8, #8]
ret
```
The `SDAG` version saves the value from memory pointed to by register `x0` first to `d0` and then to `w0` and zeros the memory content. The `global-isel` version on the other hand does not save the value and simply zeros the memory content. The final state of `w0` differs in both versions causing the return value to differ.
cc @regehr
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VE2v6jYQ_TVmMyJynA9gkQX3UqpKr5u26t5JxsStYyN7wsf99ZVNuPBa2r7VQyjEMz5nDseekSHog0VsWPXGqt1CTjQ435C0o7yS9kdp_5R-0br-2vw2IChnjDtre4AvX37_GX76hRVbxneMb1nN529a9qi0RdCFAFZyxcT6SB6YqDgTG2Crt9s2iCEBrNiBcbIHVrwLuEQYK35g4h0eqHeQRh8srO_IQM5jRJSfCPhA77TVpKXRH-hfM-T1U_EiFccLedkRGhzR0tcyksSI1nUJ_A71SLd_J6pidmC1e2nFWdMAwGr-6277I6s5GHdGH4Dcy-1ZxsQ-PYw5jcvOOIvzgol9O2nTLz0alCGGW21TsoPlKH03sGIn429dgnIuMwaWLr7lmTE3fvU4Mr4xvWd80ydzWPV24azafSZHd2J8c1nH5IV_hgNFzOXDP0DxRRTrZ_A_dn2VVTfuc4KGB7dHemlKOxEkH1nNlwfjWmmWOqCJdmr6Xo4-V_4me7_dwSdvpO1jNllz3yMKflHz578sfnEQ_2ZpbOenS3lCH7SzEOQJA9CAcJJmQlDejTDi6PwVjk5bwh7IQXsFjwcdCH1kuUReUNoHillW8z5FpO0jl52D589gbNRbmZm7c5bQUgazrr8d8l2eswnkaEAPQ2TqHQawjpLyJ-ExF_R4NNf_Kaa0lQYCSUJw6iGz10rFW6UttI6Gu4QAnZxCHIGR0CNN3s4lyc2g7O5-fHZdHIEeDzh4WPRN0W-KjVxgk694VeV5mYvF0FRyrYTqc1XLfF2UMl9h27aqU30l190aF7oRXJQ8z1f5Kue5yGShauyrvJKl4rIoWMlxlNpk8WJnzh8WOoQJm9W6XK0WRrZoQprzQlg8Q0oyIeLY903qjHY6BFZyowOFBwtpMthst7ceSF14OxxIfTDq0LnxqA0uJm-agegYYg-IPRP7g6ZharPOjY-GS6WO3v2BHTGxTzoCE_uk868AAAD__88z7-c">