<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">