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