<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/86918>86918</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Question] Weird AArch64 assemblies
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
wormtql
</td>
</tr>
</table>
<pre>
LLVM: 17.0.2
When I compile libgmp into AArch64 assemblies (clang++ -O3), I got some weird instructions:
```
.LBB28_35:
sub x8, x29, #312
ldur x8, [x8, #-256] // 8-byte Folded Reload
lsr x8, x8, #0 // that's weird
add x8, x8, #15
and x9, x8, #0xfffffffffffffff0
mov x8, sp
subs x0, x8, x9
mov sp, x0
sub x8, x29, #328
stur x0, [x8, #-256] // 8-byte Folded Spill
b .LBB28_37
```
the instruction `lsr x8, x8, #0` is confusing. To my best knowledge, I think it just did nothing
another problem:
```
.LBB200_16:
ldr x8, [sp, #72] // 8-byte Folded Reload
ldr x12, [sp, #88] // 8-byte Folded Reload
ldur x11, [x29, #-24] // 8-byte Folded Reload
ldur w13, [x29, #-68] // 4-byte Folded Reload
ldur w14, [x29, #-72] // 4-byte Folded Reload
ldr x9, [sp, #96] // 8-byte Folded Reload
mov w10, w9 // move to w10
and w10, w10, w14, lsl #1 // but immediately overwrite w10
eor w10, w10, w13
asr x13, x11, #63
add x11, x11, x13
eor x11, x11, x13
stur x12, [x29, #-112] // 8-byte Folded Spill
stur x11, [x29, #-104] // 8-byte Folded Spill
stur w10, [x29, #-92] // 4-byte Folded Spill
stur x9, [x29, #-88] // 8-byte Folded Spill
stur x8, [x29, #-80] // 8-byte Folded Spill
b .LBB200_17
```
why not use one instruction `and w10, w9, w14, lsl #1` instead of the two instruction above?
another problem:
```
add x11, x11, x13
subs x8, x8, x11
cset w14, ne
// implicit-def: $x8
mov w8, w14
sbfx x11, x8, #0, #1
mov w8, #2 // =0x2
// kill: def $x8 killed $w8
and w14, w14, #0x1 // I think this instruction is redundant?
ands w14, w14, #0x1
csinc x8, x8, xzr, ne
subs x10, x10, #31
add x12, x12, x13
subs x10, x10, x12
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyklttu4zYQhp-GvhnY4EHW4cIXdgMDC6QoekD3ciGJtMQNRboiFdl9-kJHS7GSuLtGAMWk-Hk4__DnxNbKTAuxQ9sD2j6t4srlptzVpizcP2qVGH7dPT___StieyDBBm8owk8I77_mQsMXSE1xlkqAkklWnEFqZ2C_L9Pc9yC2VhSJksIComGqYp0hekD0AOvfGKIRor_AF8iMA2sKAbWQJQeprSur1EmjLWL77seQj_u_9uvm-XCg4Te2HV-wVYJwdAkb5KUjI8oY6YNVvCrHebQ99P9QtqZbH22f4O0H0SOiRwjXydUJOBrFBYc_hDIx74n2BhxpeFjn8tghGthuT92KmPP7FWTbT-p2MprjLqf5p99-YV5Hkj2PCbDNIL4RLtH0dXtux_CH-aJhP-26fOGfytefZ6lUB2x-bVAtWNTU5WKqPSAfK1vC2wwjH4O0kBp9qqzU2Qb-MlBcIRHWwYs2tRI8E11luVzqF5AOvlfWAZcctGnGsj6APvPG5aKEc2kSJYoPSw7jb8Qf31B8VlNdghFlAV3K0CM11QEJfUsMw0XiA8BORkIGHUep19RbYD5KrAm7J_pLUfZE73Oid09czOQDxHI8S9MsRouV-8CmuwNUk_Y01NECYgYqzKsAZ6BZMDncw_rh0e5XWdXawJyQVA5kUQguYyfUFcyrKOtSOnFjClMuMFn_g505dSIN6lPms5kTdePjg03B70wOvjCW6EQsQhbU-swXRuBChRK8UKIPAvuMzIHRw-W0EGF0z1s-lo9uOVwA4p_y1saels21zq-N90FlBRh9Z7Sx5mMNRQvV2Zqutk7EHMwJGqt2tZlR4sS8CsSOU2v9Xwb7YVEOt9vkMmheaedSK9zNQLToRt89pEuplcVZyVS6NRenps9B1LuEs7MfDlnpwklOl0mwt8upv9TvlyLK6KdhIPaEL_QH4n9paoHtgYtTF3s7InjzpQ7nJuRN9G17DLIAHO5Ol0s7k1laKAWvNI-1G9WONbfvsAeJpE7f6vdvOdVrULirwv7RtnDz8qDdNF0sj9niy9D8jYW24jvGIxbFK7EjASE-wZ7nr_JdkgZBgsOY-mlAiRcGIqQnemI4SUiQpnQldxRTDzMa4oBiz99so5D4WxyQiIg4IgR5WBSxVBulXouNKbOVtLYSu9CPSLhScSKUbTtsSrWooZ1EtPGjVblr1qyTKrPIw0paZ28UJ51qW_PfK2EbBRqD-No2yvdd9qoq1S537tw2zq2SmXR5lWxSUyB6bKj9Y30uzXeROkSPbSwW0WMb638BAAD__1hBJwM">