130 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-linux-gnu | FileCheck %s3; RUN: llc < %s --global-isel=1 -mtriple=aarch64-apple-darwin | FileCheck %s --check-prefix=DARWIN4 5define win64cc void @pass_va(i32 %count, ...) nounwind {6; CHECK-LABEL: pass_va:7; CHECK: // %bb.0: // %entry8; CHECK-NEXT: sub sp, sp, #969; CHECK-NEXT: add x8, sp, #4010; CHECK-NEXT: add x0, sp, #4011; CHECK-NEXT: stp x30, x18, [sp, #16] // 16-byte Folded Spill12; CHECK-NEXT: stp x1, x2, [sp, #40]13; CHECK-NEXT: stp x3, x4, [sp, #56]14; CHECK-NEXT: stp x5, x6, [sp, #72]15; CHECK-NEXT: str x7, [sp, #88]16; CHECK-NEXT: str x8, [sp, #8]17; CHECK-NEXT: bl other_func18; CHECK-NEXT: ldp x30, x18, [sp, #16] // 16-byte Folded Reload19; CHECK-NEXT: add sp, sp, #9620; CHECK-NEXT: ret21;22; DARWIN-LABEL: pass_va:23; DARWIN: ; %bb.0: ; %entry24; DARWIN-NEXT: str x18, [sp, #-96]! ; 8-byte Folded Spill25; DARWIN-NEXT: add x8, sp, #826; DARWIN-NEXT: add x9, sp, #4027; DARWIN-NEXT: stp x29, x30, [sp, #16] ; 16-byte Folded Spill28; DARWIN-NEXT: str x9, [x8]29; DARWIN-NEXT: ldr x0, [sp, #8]30; DARWIN-NEXT: stp x1, x2, [sp, #40]31; DARWIN-NEXT: stp x3, x4, [sp, #56]32; DARWIN-NEXT: stp x5, x6, [sp, #72]33; DARWIN-NEXT: str x7, [sp, #88]34; DARWIN-NEXT: bl _other_func35; DARWIN-NEXT: ldp x29, x30, [sp, #16] ; 16-byte Folded Reload36; DARWIN-NEXT: ldr x18, [sp], #96 ; 8-byte Folded Reload37; DARWIN-NEXT: ret38entry:39 %ap = alloca ptr, align 840 call void @llvm.va_start(ptr %ap)41 %ap2 = load ptr, ptr %ap, align 842 call void @other_func(ptr %ap2)43 ret void44}45 46declare void @other_func(ptr) local_unnamed_addr47 48declare void @llvm.va_start(ptr) nounwind49declare void @llvm.va_copy(ptr, ptr) nounwind50 51define win64cc ptr @f9(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, ...) nounwind {52; CHECK-LABEL: f9:53; CHECK: // %bb.0: // %entry54; CHECK-NEXT: str x18, [sp, #-16]! // 8-byte Folded Spill55; CHECK-NEXT: add x8, sp, #2456; CHECK-NEXT: add x0, sp, #2457; CHECK-NEXT: str x8, [sp, #8]58; CHECK-NEXT: ldr x18, [sp], #16 // 8-byte Folded Reload59; CHECK-NEXT: ret60;61; DARWIN-LABEL: f9:62; DARWIN: ; %bb.0: ; %entry63; DARWIN-NEXT: str x18, [sp, #-16]! ; 8-byte Folded Spill64; DARWIN-NEXT: add x8, sp, #865; DARWIN-NEXT: add x9, sp, #2466; DARWIN-NEXT: str x9, [x8]67; DARWIN-NEXT: ldr x0, [sp, #8]68; DARWIN-NEXT: ldr x18, [sp], #16 ; 8-byte Folded Reload69; DARWIN-NEXT: ret70entry:71 %ap = alloca ptr, align 872 call void @llvm.va_start(ptr %ap)73 %ap2 = load ptr, ptr %ap, align 874 ret ptr %ap275}76 77define win64cc ptr @f8(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, ...) nounwind {78; CHECK-LABEL: f8:79; CHECK: // %bb.0: // %entry80; CHECK-NEXT: str x18, [sp, #-16]! // 8-byte Folded Spill81; CHECK-NEXT: add x8, sp, #1682; CHECK-NEXT: add x0, sp, #1683; CHECK-NEXT: str x8, [sp, #8]84; CHECK-NEXT: ldr x18, [sp], #16 // 8-byte Folded Reload85; CHECK-NEXT: ret86;87; DARWIN-LABEL: f8:88; DARWIN: ; %bb.0: ; %entry89; DARWIN-NEXT: str x18, [sp, #-16]! ; 8-byte Folded Spill90; DARWIN-NEXT: add x8, sp, #891; DARWIN-NEXT: add x9, sp, #1692; DARWIN-NEXT: str x9, [x8]93; DARWIN-NEXT: ldr x0, [sp, #8]94; DARWIN-NEXT: ldr x18, [sp], #16 ; 8-byte Folded Reload95; DARWIN-NEXT: ret96entry:97 %ap = alloca ptr, align 898 call void @llvm.va_start(ptr %ap)99 %ap2 = load ptr, ptr %ap, align 8100 ret ptr %ap2101}102 103define win64cc ptr @f7(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, ...) nounwind {104; CHECK-LABEL: f7:105; CHECK: // %bb.0: // %entry106; CHECK-NEXT: str x18, [sp, #-32]! // 8-byte Folded Spill107; CHECK-NEXT: add x8, sp, #24108; CHECK-NEXT: add x0, sp, #24109; CHECK-NEXT: str x7, [sp, #24]110; CHECK-NEXT: str x8, [sp, #8]111; CHECK-NEXT: ldr x18, [sp], #32 // 8-byte Folded Reload112; CHECK-NEXT: ret113;114; DARWIN-LABEL: f7:115; DARWIN: ; %bb.0: ; %entry116; DARWIN-NEXT: str x18, [sp, #-32]! ; 8-byte Folded Spill117; DARWIN-NEXT: add x8, sp, #8118; DARWIN-NEXT: add x9, sp, #24119; DARWIN-NEXT: str x7, [sp, #24]120; DARWIN-NEXT: str x9, [x8]121; DARWIN-NEXT: ldr x0, [sp, #8]122; DARWIN-NEXT: ldr x18, [sp], #32 ; 8-byte Folded Reload123; DARWIN-NEXT: ret124entry:125 %ap = alloca ptr, align 8126 call void @llvm.va_start(ptr %ap)127 %ap2 = load ptr, ptr %ap, align 8128 ret ptr %ap2129}130