11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22; RUN: llc < %s -mtriple=aarch64-pc-win32 | FileCheck %s
3- ; RUN: llc < %s -global-isel -mtriple=aarch64-pc-win32 | FileCheck %s --check-prefix=GISEL
3+ ; RUN: llc < %s -global-isel -mtriple=aarch64-pc-win32 -global-isel-abort=0 | FileCheck %s --check-prefix=GISEL
4+
5+ %struct.__va_list = type { ptr , ptr , ptr , i32 , i32 }
46
57; Function Attrs: mustprogress noinline nounwind optnone uwtable
68define i1 @va_func (i32 %a , i8 %b , i8 %c , ...) {
79; CHECK-LABEL: va_func:
810; CHECK: .seh_proc va_func
911; CHECK-NEXT: // %bb.0:
10- ; CHECK-NEXT: sub sp, sp, #80
11- ; CHECK-NEXT: .seh_stackalloc 80
12- ; CHECK-NEXT: str x19, [sp, #16 ] // 8-byte Folded Spill
13- ; CHECK-NEXT: .seh_save_reg x19, 16
14- ; CHECK-NEXT: str x30, [sp, #24 ] // 8-byte Folded Spill
15- ; CHECK-NEXT: .seh_save_reg x30, 24
12+ ; CHECK-NEXT: sub sp, sp, #112
13+ ; CHECK-NEXT: .seh_stackalloc 112
14+ ; CHECK-NEXT: str x19, [sp, #48 ] // 8-byte Folded Spill
15+ ; CHECK-NEXT: .seh_save_reg x19, 48
16+ ; CHECK-NEXT: str x30, [sp, #56 ] // 8-byte Folded Spill
17+ ; CHECK-NEXT: .seh_save_reg x30, 56
1618; CHECK-NEXT: .seh_endprologue
19+ ; CHECK-NEXT: add x8, sp, #72
1720; CHECK-NEXT: mov w19, w0
18- ; CHECK-NEXT: stp x3, x4, [sp, #40]
19- ; CHECK-NEXT: stp x5, x6, [sp, #56]
20- ; CHECK-NEXT: str x7, [sp, #72]
21+ ; CHECK-NEXT: stp x3, x4, [sp, #72]
22+ ; CHECK-NEXT: stp x5, x6, [sp, #88]
23+ ; CHECK-NEXT: str x7, [sp, #104]
24+ ; CHECK-NEXT: str x8, [sp, #16]
2125; CHECK-NEXT: str w0, [sp, #12]
2226; CHECK-NEXT: strb w1, [sp, #11]
2327; CHECK-NEXT: strb w2, [sp, #10]
2428; CHECK-NEXT: bl other
2529; CHECK-NEXT: cmp w19, w0
2630; CHECK-NEXT: cset w0, ls
2731; CHECK-NEXT: .seh_startepilogue
28- ; CHECK-NEXT: ldr x30, [sp, #24 ] // 8-byte Folded Reload
29- ; CHECK-NEXT: .seh_save_reg x30, 24
30- ; CHECK-NEXT: ldr x19, [sp, #16 ] // 8-byte Folded Reload
31- ; CHECK-NEXT: .seh_save_reg x19, 16
32- ; CHECK-NEXT: add sp, sp, #80
33- ; CHECK-NEXT: .seh_stackalloc 80
32+ ; CHECK-NEXT: ldr x30, [sp, #56 ] // 8-byte Folded Reload
33+ ; CHECK-NEXT: .seh_save_reg x30, 56
34+ ; CHECK-NEXT: ldr x19, [sp, #48 ] // 8-byte Folded Reload
35+ ; CHECK-NEXT: .seh_save_reg x19, 48
36+ ; CHECK-NEXT: add sp, sp, #112
37+ ; CHECK-NEXT: .seh_stackalloc 112
3438; CHECK-NEXT: .seh_endepilogue
3539; CHECK-NEXT: ret
3640; CHECK-NEXT: .seh_endfunclet
@@ -39,34 +43,38 @@ define i1 @va_func(i32 %a, i8 %b, i8 %c, ...) {
3943; GISEL-LABEL: va_func:
4044; GISEL: .seh_proc va_func
4145; GISEL-NEXT: // %bb.0:
42- ; GISEL-NEXT: sub sp, sp, #80
43- ; GISEL-NEXT: .seh_stackalloc 80
44- ; GISEL-NEXT: str x19, [sp, #16 ] // 8-byte Folded Spill
45- ; GISEL-NEXT: .seh_save_reg x19, 16
46- ; GISEL-NEXT: str x30, [sp, #24 ] // 8-byte Folded Spill
47- ; GISEL-NEXT: .seh_save_reg x30, 24
46+ ; GISEL-NEXT: sub sp, sp, #112
47+ ; GISEL-NEXT: .seh_stackalloc 112
48+ ; GISEL-NEXT: str x19, [sp, #48 ] // 8-byte Folded Spill
49+ ; GISEL-NEXT: .seh_save_reg x19, 48
50+ ; GISEL-NEXT: str x30, [sp, #56 ] // 8-byte Folded Spill
51+ ; GISEL-NEXT: .seh_save_reg x30, 56
4852; GISEL-NEXT: .seh_endprologue
49- ; GISEL-NEXT: stp x3, x4, [ sp, #40]
53+ ; GISEL-NEXT: add x8, sp, #72
5054; GISEL-NEXT: mov w19, w0
51- ; GISEL-NEXT: stp x5, x6, [sp, #56]
52- ; GISEL-NEXT: str x7, [sp, #72]
55+ ; GISEL-NEXT: stp x3, x4, [sp, #72]
56+ ; GISEL-NEXT: stp x5, x6, [sp, #88]
57+ ; GISEL-NEXT: str x7, [sp, #104]
58+ ; GISEL-NEXT: str x8, [sp, #16]
5359; GISEL-NEXT: str w0, [sp, #12]
5460; GISEL-NEXT: strb w1, [sp, #11]
5561; GISEL-NEXT: strb w2, [sp, #10]
5662; GISEL-NEXT: bl other
5763; GISEL-NEXT: cmp w19, w0
5864; GISEL-NEXT: cset w0, ls
5965; GISEL-NEXT: .seh_startepilogue
60- ; GISEL-NEXT: ldr x30, [sp, #24 ] // 8-byte Folded Reload
61- ; GISEL-NEXT: .seh_save_reg x30, 24
62- ; GISEL-NEXT: ldr x19, [sp, #16 ] // 8-byte Folded Reload
63- ; GISEL-NEXT: .seh_save_reg x19, 16
64- ; GISEL-NEXT: add sp, sp, #80
65- ; GISEL-NEXT: .seh_stackalloc 80
66+ ; GISEL-NEXT: ldr x30, [sp, #56 ] // 8-byte Folded Reload
67+ ; GISEL-NEXT: .seh_save_reg x30, 56
68+ ; GISEL-NEXT: ldr x19, [sp, #48 ] // 8-byte Folded Reload
69+ ; GISEL-NEXT: .seh_save_reg x19, 48
70+ ; GISEL-NEXT: add sp, sp, #112
71+ ; GISEL-NEXT: .seh_stackalloc 112
6672; GISEL-NEXT: .seh_endepilogue
6773; GISEL-NEXT: ret
6874; GISEL-NEXT: .seh_endfunclet
6975; GISEL-NEXT: .seh_endproc
76+ %valist = alloca %struct.__va_list
77+ call void @llvm.va_start (ptr %valist )
7078 %a_alloc = alloca i32 , align 4
7179 %b_alloc = alloca i8 , align 1
7280 %c_alloc = alloca i8 , align 1
@@ -76,6 +84,7 @@ define i1 @va_func(i32 %a, i8 %b, i8 %c, ...) {
7684 %a_load = load i32 , ptr %a_alloc , align 4
7785 %ret = call noundef i32 @other ()
7886 %cmp = icmp ule i32 %a_load , %ret
87+ call void @llvm.va_end (ptr %valist )
7988 ret i1 %cmp
8089}
8190
0 commit comments