<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/90242>90242</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
incorrect coalescing of stores by AArch64 global isel backend
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
llvm:codegen,
miscompilation,
llvm:globalisel
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
regehr
</td>
</tr>
</table>
<pre>
this function is getting lowered incorrectly by global isel for AArch64:
```llvm
@G = external global [10 x i32]
define void @f(i64 %0) {
%2 = getelementptr [10 x i32], ptr @G, i64 0, i64 %0
store i32 0, ptr %2, align 4
store i32 0, ptr getelementptr inbounds ([10 x i32], ptr @G, i64 0, i64 1), align 4
ret void
}
```
it should be storing 0 to index 1 and also index `%0` but global isel is incorrectly coalescing these into a single store:
```
_f: ; @f
adrp x8, _G@GOTPAGE
lsl x9, x0, #2
ldr x8, [x8, _G@GOTPAGEOFF]
str xzr, [x8, x9]
ret
```
cc @hatsunespica
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVMFyozgQ_Rpx6YpLSALDgQNer33MHvaeEqIBzciSSxIZZ75-SmA7cZLLVLmwaL1-ar1-jQxBjxaxIcWOFPtMznFyvvE44uSzzvVvTZx0gGG2KmpnQQcYMUZtRzDuF3rsQVvlvEcVzRt0bzAa10kDOqCBwXloW6-mUhDeErontCUlXX_GvJ6uIUGPQPge8BLRW2luJKTY5RQuoDkjxf4KXp49DtoivDrdAxF0IKzSpQDCCkpYDWS7W3GQQmwhHzGiwRPaeI7-MzX7B5aooMe0Tlz0tlhIV7YQnceUs-4uKaxgaS2NHi2I27HfIB8L0LZzs-0DEFb9RTE5YfU3x3mMixhXjbb7T2KvrzpCmNxseuhwqTD1kUJ0oG2PF8hB2h6kCbdAyky3Lyl0c3zorQ4PnVdOGgwqEcYJA4K20YGEoO1o1sPwqwfW15eB8BYI362tvLa5lr0_E1pfqnTfl2OS4_n__9rjv3eECSYBFkEui0SEcfa-3ft7Pil2X4meD4cPvqpDXPC__UPCpf6I8Ri_vcP6VCpdYZIxzBbDWSu5xrO-4X3Na5lhk29zkRdCiG02NR3ndKB5V3OWy6rst9W2qLHjFVNFmVci0w2jTFDByryiVBQbVVVlUVQcOSurcqiJoHiS2mzSPG2cHzMdwoxNTZlgmZEdmrCMN2OdVD_R9oS3t6FkybqEsWUWeatcjyPae_ikg3KnszYyDf9n9OqGZIa0U-wz36Sdp24eAxHU6BDDe1VRR4PN3TIfDeOG1R8hfT-upT147Vp4NnvTTDGeQ3ISOxB2GHWc5m6j3Imww1LX-vd09u4HqkjYYZEjEHZYFPkTAAD__zMsb9g">