xref: /llvm-project/llvm/test/CodeGen/LoongArch/stack-realignment-with-variable-sized-objects.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
1daf067daSwanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d --verify-machineinstrs < %s \
3daf067daSwanglei; RUN:   | FileCheck %s --check-prefix=LA32
4*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs < %s \
5daf067daSwanglei; RUN:   | FileCheck %s --check-prefix=LA64
6daf067daSwanglei
7779df382SNikita Popovdeclare void @callee(ptr, ptr)
8daf067daSwanglei
9daf067daSwangleidefine void @caller(i32 %n) {
10daf067daSwanglei; LA32-LABEL: caller:
11daf067daSwanglei; LA32:       # %bb.0:
12daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -64
13daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 64
14daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 60 # 4-byte Folded Spill
15daf067daSwanglei; LA32-NEXT:    st.w $fp, $sp, 56 # 4-byte Folded Spill
16daf067daSwanglei; LA32-NEXT:    st.w $s8, $sp, 52 # 4-byte Folded Spill
17daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
18daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
19daf067daSwanglei; LA32-NEXT:    .cfi_offset 31, -12
20daf067daSwanglei; LA32-NEXT:    addi.w $fp, $sp, 64
21daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
221bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 5, 0
23daf067daSwanglei; LA32-NEXT:    move $s8, $sp
24daf067daSwanglei; LA32-NEXT:    addi.w $a0, $a0, 15
2526021577SWeining Lu; LA32-NEXT:    bstrins.w $a0, $zero, 3, 0
26daf067daSwanglei; LA32-NEXT:    sub.w $a0, $sp, $a0
27daf067daSwanglei; LA32-NEXT:    move $sp, $a0
28daf067daSwanglei; LA32-NEXT:    addi.w $a1, $s8, 0
29daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
30daf067daSwanglei; LA32-NEXT:    addi.w $sp, $fp, -64
31daf067daSwanglei; LA32-NEXT:    ld.w $s8, $sp, 52 # 4-byte Folded Reload
32daf067daSwanglei; LA32-NEXT:    ld.w $fp, $sp, 56 # 4-byte Folded Reload
33daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 60 # 4-byte Folded Reload
34daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 64
35daf067daSwanglei; LA32-NEXT:    ret
36daf067daSwanglei;
37daf067daSwanglei; LA64-LABEL: caller:
38daf067daSwanglei; LA64:       # %bb.0:
39daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -64
40daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 64
41daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 56 # 8-byte Folded Spill
42daf067daSwanglei; LA64-NEXT:    st.d $fp, $sp, 48 # 8-byte Folded Spill
43daf067daSwanglei; LA64-NEXT:    st.d $s8, $sp, 40 # 8-byte Folded Spill
44daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
45daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
46daf067daSwanglei; LA64-NEXT:    .cfi_offset 31, -24
47daf067daSwanglei; LA64-NEXT:    addi.d $fp, $sp, 64
48daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
491bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 5, 0
50daf067daSwanglei; LA64-NEXT:    move $s8, $sp
51daf067daSwanglei; LA64-NEXT:    bstrpick.d $a0, $a0, 31, 0
52daf067daSwanglei; LA64-NEXT:    addi.d $a0, $a0, 15
5396dcd8cbSBen Shi; LA64-NEXT:    bstrpick.d $a0, $a0, 32, 4
5496dcd8cbSBen Shi; LA64-NEXT:    slli.d $a0, $a0, 4
55daf067daSwanglei; LA64-NEXT:    sub.d $a0, $sp, $a0
56daf067daSwanglei; LA64-NEXT:    move $sp, $a0
57daf067daSwanglei; LA64-NEXT:    addi.d $a1, $s8, 0
58daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
59daf067daSwanglei; LA64-NEXT:    addi.d $sp, $fp, -64
60daf067daSwanglei; LA64-NEXT:    ld.d $s8, $sp, 40 # 8-byte Folded Reload
61daf067daSwanglei; LA64-NEXT:    ld.d $fp, $sp, 48 # 8-byte Folded Reload
62daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 56 # 8-byte Folded Reload
63daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 64
64daf067daSwanglei; LA64-NEXT:    ret
65daf067daSwanglei  %1 = alloca i8, i32 %n
66daf067daSwanglei  %2 = alloca i32, align 64
67779df382SNikita Popov  call void @callee(ptr %1, ptr %2)
68daf067daSwanglei  ret void
69daf067daSwanglei}
70