<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/88109>88109</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [LoongArch] Too many `sp` adjustment instructions in the prologue
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:loongarch
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            heiher
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          heiher
      </td>
    </tr>
</table>

<pre>
    For this reproducer:

```llvm
define void @large_frame_size() {
  %1 = alloca [16384 x { i32, i32 }], align 4
  ret void
}
```

There are too many instructions generated for `sp` adjustment in the prologue:

```bash
clang -target loongarch64 -S -o - large-frame-size.ll
```

```asm
        .text
        .file   "large-frame-size.ll"
        .globl  large_frame_size # -- Begin function large_frame_size
        .p2align        5
        .type   large_frame_size,@function
large_frame_size: # @large_frame_size
        .cfi_startproc
# %bb.0:
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -2048
        addi.d  $sp, $sp, -16
        .cfi_def_cfa_offset 131088
        lu12i.w $a0, 32
        ori     $a0, $a0, 16
        add.d   $sp, $sp, $a0
        ret
.Lfunc_end0:
        .size   large_frame_size, .Lfunc_end0-large_frame_size
        .cfi_endproc
 # -- End function
        .section        ".note.GNU-stack","",@progbits
        .addrsig
```


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsl82OozgQx5_GuZRApvhIOHDo7mz2MtrLzp4jgwvwjGMj28xO79OvgHx1T7o1D4AU8VH51d_lMof6C-9VZ4gqlj8zxJ5UT44hsny_EWPorauW2Ka28rU6WAehVx4cDc7KsSHH0ifG94xfrgVfflr_OC0hSa0yBD-sksAyroXr6Ng6caKjV_8Rwx3DEtj2ecEBGOYJsHQPQmvbCGD5c1Kkuwx-ThSoFBm-TDdg2z3L99Ob0KozkF0kHIV5wXNR2_276u5L_tqTIxCOIFgLJ2FeQRkf3NgEZY2Hjgw5EUhCax2wgvuBFRyE_Db6cCITQBkIPcHgrLbdSB-1pBa-X0KNFqaDKEytCKCtNZ1wTV9kEP0NkYUI5i5Fc5eiqUux1p9s4RoU_nSJl3Ggn-H21ipNjJcM8ZE24o3stK014-X7kwKGKUQRPFOnDLSjmRsEvxzoVWjA-VgYL_O7ql4HeiDO8IVl_CK64L8w6dNcw6Ov6KrftOrog3BhcLY5h6cczOs65ndnUwopVSznnmR-mL6i60OEPNut4Aqu4Aqu4Aqu4Aqu4Ar-LpgUbydSSe2xacXRtq2nAEma8N1NSY8JqvjfRUrwSSG9DeTWqft_rg93awgpP6hkoS-co7MjiL9Mo_aRjHwzEsfLLP1oOoe7lOjz8ZuMvA3fF9fwh5Hwdryf16NzYDImsbGB4j__-ifyQTTfJ1OCL_MVF3swONvVKvhbvpDSedV94o02skplmZZiQ1WyTbAokO_4pq-aZEuy2ZIQkvKkaErRprUk3KYNlyi3G1Uhx4xnvEwS3OZlnGRJwVPcFZjkPC9TlnE6CaXjyezG1nUb5f1I1W6X8HKjRU3an511LZrvZCRLn65u72yzXTVlR_XY-cnXKB_8TS-ooGdz_mXKepqy8j18vfjUx2b0zru-c6ab0emqD2Hw06HjgeGhU6Ef67ixJ4aH2bQvt2hw9hs1geFh3pRneJj39X8AAAD__58jM48">