xref: /llvm-project/llvm/test/CodeGen/AArch64/win-align-chkstk.ll (revision 20b758445515ec17d7669b71b9b0e60be228255a)
1; RUN: llc < %s -mtriple=aarch64-windows | FileCheck %s
2
3define dso_local void @func() {
4entry:
5  %buf = alloca [8192 x i8], align 32
6  %arraydecay = getelementptr inbounds [8192 x i8], ptr %buf, i64 0, i64 0
7  call void @other(ptr noundef %arraydecay)
8  ret void
9}
10
11declare dso_local void @other(ptr noundef)
12
13; CHECK-LABEL: func:
14; CHECK-NEXT: .seh_proc func
15; CHECK-NEXT: // %bb.0:
16; CHECK-NEXT: str x28, [sp, #-32]!
17; CHECK-NEXT: .seh_save_reg_x x28, 32
18; CHECK-NEXT: stp x29, x30, [sp, #8]
19; CHECK-NEXT: .seh_save_fplr 8
20; CHECK-NEXT: add x29, sp, #8
21; CHECK-NEXT: .seh_add_fp 8
22; CHECK-NEXT: .seh_endprologue
23; CHECK-NEXT: mov x15, #513
24; CHECK-NEXT: bl __chkstk
25; CHECK-NEXT: sub sp, sp, x15, lsl #4
26; CHECK-NEXT: add x15, sp, #16
27; CHECK-NEXT: and sp, x15, #0xffffffffffffffe0
28
29define dso_local void @func2() {
30entry:
31  %buf = alloca [8192 x i8], align 8192
32  %arraydecay = getelementptr inbounds [8192 x i8], ptr %buf, i64 0, i64 0
33  call void @other(ptr noundef %arraydecay)
34  ret void
35}
36
37; CHECK-LABEL: func2:
38; CHECK-NEXT: .seh_proc func2
39; CHECK-NEXT: // %bb.0:
40; CHECK-NEXT: str x28, [sp, #-32]!
41; CHECK-NEXT: .seh_save_reg_x x28, 32
42; CHECK-NEXT: stp x29, x30, [sp, #8]
43; CHECK-NEXT: .seh_save_fplr 8
44; CHECK-NEXT: add x29, sp, #8
45; CHECK-NEXT: .seh_add_fp 8
46; CHECK-NEXT: .seh_endprologue
47; CHECK-NEXT: mov x15, #1533
48; CHECK-NEXT: bl __chkstk
49; CHECK-NEXT: sub sp, sp, x15, lsl #4
50; CHECK-NEXT: mov x16, #8176
51; CHECK-NEXT: add x15, sp, x16
52; CHECK-NEXT: and sp, x15, #0xffffffffffffe000
53