80 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc < %s --global-isel=0 -mtriple=aarch64-linux-gnu -mattr=+fp-armv8 | FileCheck %s3; RUN: llc < %s --global-isel=1 -mtriple=aarch64-linux-gnu -mattr=+fp-armv8 | FileCheck %s --check-prefix=GISEL4 5%struct.__va_list = type { ptr, ptr, ptr, i32, i32 }6 7define void @va(i32 %count, half %f, ...) nounwind {8; CHECK-LABEL: va:9; CHECK: // %bb.0: // %entry10; CHECK-NEXT: ret11;12; GISEL-LABEL: va:13; GISEL: // %bb.0: // %entry14; GISEL-NEXT: sub sp, sp, #17615; GISEL-NEXT: stp x1, x2, [sp, #120]16; GISEL-NEXT: stp x3, x4, [sp, #136]17; GISEL-NEXT: stp x5, x6, [sp, #152]18; GISEL-NEXT: str x7, [sp, #168]19; GISEL-NEXT: stp q1, q2, [sp]20; GISEL-NEXT: stp q3, q4, [sp, #32]21; GISEL-NEXT: stp q5, q6, [sp, #64]22; GISEL-NEXT: str q7, [sp, #96]23; GISEL-NEXT: add sp, sp, #17624; GISEL-NEXT: ret25entry:26 ret void27}28 29define void @va_used(i32 %count, half %f, ...) nounwind {30; CHECK-LABEL: va_used:31; CHECK: // %bb.0:32; CHECK-NEXT: sub sp, sp, #20833; CHECK-NEXT: mov x8, #-56 // =0xffffffffffffffc834; CHECK-NEXT: mov x9, sp35; CHECK-NEXT: add x10, sp, #12036; CHECK-NEXT: movk x8, #65424, lsl #3237; CHECK-NEXT: add x9, x9, #11238; CHECK-NEXT: stp x2, x3, [sp, #128]39; CHECK-NEXT: stp x9, x8, [sp, #192]40; CHECK-NEXT: add x8, x10, #5641; CHECK-NEXT: add x9, sp, #20842; CHECK-NEXT: str x1, [sp, #120]43; CHECK-NEXT: stp x4, x5, [sp, #144]44; CHECK-NEXT: stp x6, x7, [sp, #160]45; CHECK-NEXT: stp q1, q2, [sp]46; CHECK-NEXT: stp q3, q4, [sp, #32]47; CHECK-NEXT: stp q5, q6, [sp, #64]48; CHECK-NEXT: str q7, [sp, #96]49; CHECK-NEXT: stp x9, x8, [sp, #176]50; CHECK-NEXT: add sp, sp, #20851; CHECK-NEXT: ret52;53; GISEL-LABEL: va_used:54; GISEL: // %bb.0:55; GISEL-NEXT: sub sp, sp, #20856; GISEL-NEXT: mov x8, sp57; GISEL-NEXT: add x9, sp, #20858; GISEL-NEXT: add x10, sp, #20859; GISEL-NEXT: stp x9, x10, [x8]60; GISEL-NEXT: add x9, sp, #14461; GISEL-NEXT: mov w10, #-112 // =0xffffff9062; GISEL-NEXT: str x9, [x8, #16]63; GISEL-NEXT: mov w9, #-56 // =0xffffffc864; GISEL-NEXT: stp x1, x2, [sp, #152]65; GISEL-NEXT: stp x3, x4, [sp, #168]66; GISEL-NEXT: stp x5, x6, [sp, #184]67; GISEL-NEXT: str x7, [sp, #200]68; GISEL-NEXT: stp q1, q2, [sp, #32]69; GISEL-NEXT: stp q3, q4, [sp, #64]70; GISEL-NEXT: stp q5, q6, [sp, #96]71; GISEL-NEXT: str q7, [sp, #128]72; GISEL-NEXT: stp w9, w10, [x8, #24]73; GISEL-NEXT: add sp, sp, #20874; GISEL-NEXT: ret75 %valist = alloca %struct.__va_list76 call void @llvm.va_start(ptr %valist)77 call void @llvm.va_end(ptr %valist)78 ret void79}80