<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54736>54736</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Suboptimal code generation regarding stack variables (arm64)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
uncleasm
</td>
</tr>
</table>
<pre>
As in https://godbolt.org/z/zq81hEb3K, there are multiple opportunities for improvement in the generated code for
```
void foo(int stack, int k, int j) {
int my_stack[stack * 4];
my_stack[k] = j;
asm(""::"r"(my_stack):"memory");
}
stp x29, x30, [sp, #-16]! // 16-byte Folded Spill
mov x29, sp
lsl w8, w0, #2
sub x8, sp, w8, uxtw #2
mov sp, x8
str w2, [x8, w1, sxtw #2]
mov sp, x29
ldp x29, x30, [sp], #16
```
1) missed opportunity to merge
`lsl w8, w0, #2`
`sub x8, sp, w8, uxtw #2` to `sub x8, sp, w0, uxtw #4`
2) disregard of the `-fomit-frame-pointer`
a) no need to spill/restore LR
b) no need to use `x29`
c) no need to compute the address of `my_stack` to separate register as any element can be accessed through `sp`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNVN2WmyAQfhq84SQH0Zjkwots071pr7oP0IM6UbYgFjDZ9Ok7YP53t6ccEXC--ebHYSrTHMuNo7KnnfeDI9mG8Gd8WtNURvm5sS2e_oT5e5V2X6vsG-FfqO_AAhU49ai8HBRQMwzG-rGXXoKjO2Op1IM1e9DQ-2AAdWgLPVjhoaG1aSCgCNsStiEFOz3xuDeyQaEhfCVR2XlR_wpmw-GyeSV8TcnyaVKhOMJXffw5wRdPcaWEb2hOFluS3SBvUDi3lGRb5LtFCKfROuE8PJiVkBhu43l10ebr6bsGbewxCtcXFrLcXunCcH6I6xuCMIa3jIUlODrEDc9maRE85Sm9jul_0LSYVUcP9NmoBtP3Mkil7um12d_SI-mdWDkV18MqSA_sZJI_-DhWE8nqxBGwcT---cMHCmerExTVHkK2k1F-CnXiPaSR_cK42P6TFAO6D6X5PJEhfTGwtAjJ-6i6pncayodq6Rym81q8R-oN1WBboHdGUfvTDJ6Jr9D_SWPBgqkz-A7JbpH5hT-UF22ks9AKi07v4p1C8WxntPSznRUaZoPBewD2wSsRw6W9oT1gwGjZxRLizxacN3iTv_-4xVfv8KOLtkLS76nrd9Da6GHEYg3uiaZBCy54i3qXqzNF72AQoR9QDEk69BrvHRX9kYKa-kYtelohSV1D_FG-s2Zsu5i24eJH0pRZs87WIvHSKyhfxsoMXmqhpj5zajvS9HTKnezbqavQvbBSVApbFl5sYXWRYzTJaFX50BCl78ZqjpHhQan9eZlhj3uF2uMRS2kEh5tFvsyKpCurNIN82axzzqBumFit0gZSqBYs5-lqWSRKVKBciZWLvaOHA40UoY8stoksOeOc5SxPGWdZNmdVnonFLl8XO5GmNSM5Ay2kmgc_QqdObBldqsbWoVBhRt1VKJyTLf6haA75xeg7Y8uxrxVgt0ui7TL6_hdns7iW">