90 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-pc-win32 | FileCheck %s3; RUN: llc < %s -global-isel -mtriple=aarch64-pc-win32 -global-isel-abort=0 | FileCheck %s --check-prefix=GISEL4 5; Function Attrs: mustprogress noinline nounwind optnone uwtable6define i1 @va_func(i32 %a, i8 %b, i8 %c, ...) {7; CHECK-LABEL: va_func:8; CHECK: .seh_proc va_func9; CHECK-NEXT: // %bb.0:10; CHECK-NEXT: sub sp, sp, #8011; CHECK-NEXT: .seh_stackalloc 8012; CHECK-NEXT: str x19, [sp, #16] // 8-byte Spill13; CHECK-NEXT: .seh_save_reg x19, 1614; CHECK-NEXT: str x30, [sp, #24] // 8-byte Spill15; CHECK-NEXT: .seh_save_reg x30, 2416; CHECK-NEXT: .seh_endprologue17; CHECK-NEXT: add x8, sp, #4018; CHECK-NEXT: mov w19, w019; CHECK-NEXT: stp x3, x4, [sp, #40]20; CHECK-NEXT: stp x5, x6, [sp, #56]21; CHECK-NEXT: str x7, [sp, #72]22; CHECK-NEXT: str x8, [sp, #8]23; CHECK-NEXT: str w0, [sp, #4]24; CHECK-NEXT: strb w1, [sp, #3]25; CHECK-NEXT: strb w2, [sp, #2]26; CHECK-NEXT: bl other27; CHECK-NEXT: cmp w19, w028; CHECK-NEXT: cset w0, ls29; CHECK-NEXT: .seh_startepilogue30; CHECK-NEXT: ldr x30, [sp, #24] // 8-byte Reload31; CHECK-NEXT: .seh_save_reg x30, 2432; CHECK-NEXT: ldr x19, [sp, #16] // 8-byte Reload33; CHECK-NEXT: .seh_save_reg x19, 1634; CHECK-NEXT: add sp, sp, #8035; CHECK-NEXT: .seh_stackalloc 8036; CHECK-NEXT: .seh_endepilogue37; CHECK-NEXT: ret38; CHECK-NEXT: .seh_endfunclet39; CHECK-NEXT: .seh_endproc40;41; GISEL-LABEL: va_func:42; GISEL: .seh_proc va_func43; GISEL-NEXT: // %bb.0:44; GISEL-NEXT: sub sp, sp, #8045; GISEL-NEXT: .seh_stackalloc 8046; GISEL-NEXT: str x19, [sp, #16] // 8-byte Spill47; GISEL-NEXT: .seh_save_reg x19, 1648; GISEL-NEXT: str x30, [sp, #24] // 8-byte Spill49; GISEL-NEXT: .seh_save_reg x30, 2450; GISEL-NEXT: .seh_endprologue51; GISEL-NEXT: add x8, sp, #4052; GISEL-NEXT: mov w19, w053; GISEL-NEXT: stp x3, x4, [sp, #40]54; GISEL-NEXT: stp x5, x6, [sp, #56]55; GISEL-NEXT: str x7, [sp, #72]56; GISEL-NEXT: str x8, [sp, #8]57; GISEL-NEXT: str w0, [sp, #4]58; GISEL-NEXT: strb w1, [sp, #3]59; GISEL-NEXT: strb w2, [sp, #2]60; GISEL-NEXT: bl other61; GISEL-NEXT: cmp w19, w062; GISEL-NEXT: cset w0, ls63; GISEL-NEXT: .seh_startepilogue64; GISEL-NEXT: ldr x30, [sp, #24] // 8-byte Reload65; GISEL-NEXT: .seh_save_reg x30, 2466; GISEL-NEXT: ldr x19, [sp, #16] // 8-byte Reload67; GISEL-NEXT: .seh_save_reg x19, 1668; GISEL-NEXT: add sp, sp, #8069; GISEL-NEXT: .seh_stackalloc 8070; GISEL-NEXT: .seh_endepilogue71; GISEL-NEXT: ret72; GISEL-NEXT: .seh_endfunclet73; GISEL-NEXT: .seh_endproc74 %valist = alloca ptr75 call void @llvm.va_start(ptr %valist)76 %a_alloc = alloca i32, align 477 %b_alloc = alloca i8, align 178 %c_alloc = alloca i8, align 179 store i32 %a, ptr %a_alloc, align 480 store i8 %b, ptr %b_alloc, align 181 store i8 %c, ptr %c_alloc, align 182 %a_load = load i32, ptr %a_alloc, align 483 %ret = call noundef i32 @other()84 %cmp = icmp ule i32 %a_load, %ret85 call void @llvm.va_end(ptr %valist)86 ret i1 %cmp87}88 89declare i32 @other()90