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, #32
11- ; CHECK-NEXT: .seh_stackalloc 32
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
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]
1825; CHECK-NEXT: str w0, [sp, #12]
1926; CHECK-NEXT: strb w1, [sp, #11]
2027; CHECK-NEXT: strb w2, [sp, #10]
2128; CHECK-NEXT: bl other
2229; CHECK-NEXT: cmp w19, w0
2330; CHECK-NEXT: cset w0, ls
2431; CHECK-NEXT: .seh_startepilogue
25- ; CHECK-NEXT: ldr x30, [sp, #24 ] // 8-byte Folded Reload
26- ; CHECK-NEXT: .seh_save_reg x30, 24
27- ; CHECK-NEXT: ldr x19, [sp, #16 ] // 8-byte Folded Reload
28- ; CHECK-NEXT: .seh_save_reg x19, 16
29- ; CHECK-NEXT: add sp, sp, #32
30- ; CHECK-NEXT: .seh_stackalloc 32
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
3138; CHECK-NEXT: .seh_endepilogue
3239; CHECK-NEXT: ret
3340; CHECK-NEXT: .seh_endfunclet
@@ -36,34 +43,38 @@ define i1 @va_func(i32 %a, i8 %b, i8 %c, ...) {
3643; GISEL-LABEL: va_func:
3744; GISEL: .seh_proc va_func
3845; GISEL-NEXT: // %bb.0:
39- ; GISEL-NEXT: sub sp, sp, #80
40- ; GISEL-NEXT: .seh_stackalloc 80
41- ; GISEL-NEXT: str x19, [sp, #16 ] // 8-byte Folded Spill
42- ; GISEL-NEXT: .seh_save_reg x19, 16
43- ; GISEL-NEXT: str x30, [sp, #24 ] // 8-byte Folded Spill
44- ; 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
4552; GISEL-NEXT: .seh_endprologue
46- ; GISEL-NEXT: stp x3, x4, [ sp, #40]
53+ ; GISEL-NEXT: add x8, sp, #72
4754; GISEL-NEXT: mov w19, w0
48- ; GISEL-NEXT: stp x5, x6, [sp, #56]
49- ; 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]
5059; GISEL-NEXT: str w0, [sp, #12]
5160; GISEL-NEXT: strb w1, [sp, #11]
5261; GISEL-NEXT: strb w2, [sp, #10]
5362; GISEL-NEXT: bl other
5463; GISEL-NEXT: cmp w19, w0
5564; GISEL-NEXT: cset w0, ls
5665; GISEL-NEXT: .seh_startepilogue
57- ; GISEL-NEXT: ldr x30, [sp, #24 ] // 8-byte Folded Reload
58- ; GISEL-NEXT: .seh_save_reg x30, 24
59- ; GISEL-NEXT: ldr x19, [sp, #16 ] // 8-byte Folded Reload
60- ; GISEL-NEXT: .seh_save_reg x19, 16
61- ; GISEL-NEXT: add sp, sp, #80
62- ; 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
6372; GISEL-NEXT: .seh_endepilogue
6473; GISEL-NEXT: ret
6574; GISEL-NEXT: .seh_endfunclet
6675; GISEL-NEXT: .seh_endproc
76+ %valist = alloca %struct.__va_list
77+ call void @llvm.va_start (ptr %valist )
6778 %a_alloc = alloca i32 , align 4
6879 %b_alloc = alloca i8 , align 1
6980 %c_alloc = alloca i8 , align 1
@@ -73,6 +84,7 @@ define i1 @va_func(i32 %a, i8 %b, i8 %c, ...) {
7384 %a_load = load i32 , ptr %a_alloc , align 4
7485 %ret = call noundef i32 @other ()
7586 %cmp = icmp ule i32 %a_load , %ret
87+ call void @llvm.va_end (ptr %valist )
7688 ret i1 %cmp
7789}
7890
0 commit comments