<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/74680>74680</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Wrong register used on apple-m1
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AArch64,
miscompilation
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DianQK
</td>
</tr>
</table>
<pre>
I tried this IR/MIR:
```llvm
; ModuleID = 'repro_117902.54923e0577e9cdaf-cgu.0'
source_filename = "repro_117902.54923e0577e9cdaf-cgu.0"
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
target triple = "arm64-apple-macosx11.0.0"
define i1 @foo(i32 %self.0.val, i8 %self.4.val) #1 {
start:
switch i32 %self.0.val, label %bb2 [
i32 0, label %bb9
i32 1, label %bb4
i32 2, label %bb5
i32 3, label %bb1
]
bb2: ; preds = %start
unreachable
bb4: ; preds = %start
br label %bb9
bb5: ; preds = %start
br label %bb9
bb1: ; preds = %start
%trunc.not = icmp eq i8 %self.4.val, 0
br label %bb9
bb9: ; preds = %bb1, %start, %bb5, %bb4
%r = phi i1 [ true, %bb5 ], [ true, %bb4 ], [ false, %start ], [ %trunc.not, %bb1 ]
ret i1 %r
}
attributes #1 = { "frame-pointer"="non-leaf" "target-cpu"="apple-m1" }
```
I got:
```
_foo: ; @foo
mov x8, x0
mov w0, #0 ; =0x0
adrp x9, LJTI0_0@PAGE
add x9, x9, LJTI0_0@PAGEOFF
adr x10, LBB0_1
ldrb w11, [x9, x8]
add x10, x10, x11, lsl #2
br x10
...
```
If I run with `-O1`:
```
_foo: ; @foo
mov x8, x0
mov w8, w0
mov w0, #0 ; =0x0
adrp x9, LJTI0_0@PAGE
add x9, x9, LJTI0_0@PAGEOFF
adr x10, LBB0_1
ldrb w11, [x9, x8]
add x10, x10, x11, lsl #2
br x10
```
I think the first instruction should be `mov w8, w0`.
I'm not familiar with the MIR. But it looks like postrapseudos created `mov x8, x0` in lowercopy.
Then machine-cp removes late `mov w8, w0`.
godbolt: https://llvm.godbolt.org/z/1hfYvrGPG
from: https://github.com/rust-lang/rust/issues/117902
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVkuP2zYQ_jX0ZSCBol72wQd7XQduEyRNAxQ9LShqZLFLiSpJ7Sb99QUlWbY3m6yDHGoYenBmvnl8wxG5tfLYIq5JuiXpbsF7V2uz3kne_v7botDll_UBnJFYgqulhcNHwvbvDh9JvCF0R-jpmtHxr9RjMy3FW3iny17hYQck3gFhucHO6PsoyleUhWmyYjHSNM9xJUpeBeLYh5SwfLS3ujcC7yupsOUNThDsJgg2Qjhujuig5I4r_kX37gSCQUPijQ5klpB4kyWBjNiSxJuILYM2ZuPaH37tGZQzslNzLNw0WRLwrlMYNFxo-zmKQnoRwHgtsZItgoyAJLTSmrCljBkQllpUVUjDR64IuwO5nNeScW0FhMURkHw71cRx4-bSA9gn6UQNL6IpXqDyy0XBwLM72nhd-ky-OuHBII6eiZNrMXsmTi-Q42ey6GRK0t1lSYrCFxl8j3QGSztVNB0TnGz61iAXNS8UXtsmr9sW5oUET_bpT9pH3v6Hft93RljqTN-KsNVji0rRdID_vNARd0BvCnH18yH6PNndOdjx2Vfv9JRcJGAGs66WQ5-nW3Cmx7PN0AD-7bkkuZRUXFm8dHopvKzSbB6dOwvAoBu8s9RM1civuo47Z2TRO7TTvvKJ5h6ZVYY3GHRatg6N37_xjjDW6jZQyCvC_AZj4xAIRNfPGtPmjwaN2dtpGl46P8BRu2-NzfH13g-Hm3jzZE3DZMy90Y-D4PPSl-YzPW9Z_ztJn-hYuJi-Ah3v6IzBS9MN0Ctv_PbXTwd6T0lCP2ze_HLthpclnDVf0n-_359RR91oiOntdkvvo2s4VZpiiDqKph6YgJcXnJ89T0jzbRxj1u-PmF2rF6PvQXcQhGH4PeoqOIDpW3iSrgaS0eB95FX-ZzIH6dPrVH_F6Fy0HyH2FlLPwDdxeyOxF1A3kjvz-o2d6GrZPoCrESpprAPZWmd64aRuwda6VyUU6In21ZzrnNHwCoawvAE_siveSCW5GfvDw747fAxh2zuQDpTWDxaUfEDotHWGdxb7UlsQBrnD8uRnZjujIFtQ-gmN0N2XyemnGltouKhli4HowGCjH9GC4u7VUI-6LLTy0wdq5zrrO5ftCdv741o4SUNtjoTt_yVsH9XVX4_mzYc3o3lldPO17VG6ui9CoRvC9qa3LlC8PU7PhO2ltT1ajzYc1hblOi5X8YovcB3lNFrRFcuzRb3mVUo5TZaCLQuxTATmmFapiCrMaJmVq4VcM8riiNGc0jiJs1AkjLNoWYiELfOsiklCseFShUM62hwXg-91nmRLuhg-knY44DJWcPGAbUnizWZjRJ0lfpKzO8JYI63QTScV923gl9Pdwqw9ZFD0R0sSqqR19uzESadw_afR7REMHqV1aKC3WIJu4fRhWPRGrb9TuOHAPN6Czui_UVzVbkjhvwAAAP__JkcLBQ">