brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.0 KiB · 0f4cb44 Raw
323 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-pc-win32 | FileCheck %s3 4define void @pass_va(i32 %count, ...) nounwind {5; CHECK-LABEL: pass_va:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    str x30, [sp, #-80]! // 8-byte Folded Spill8; CHECK-NEXT:    add x8, sp, #249; CHECK-NEXT:    add x0, sp, #2410; CHECK-NEXT:    stp x1, x2, [sp, #24]11; CHECK-NEXT:    stp x3, x4, [sp, #40]12; CHECK-NEXT:    stp x5, x6, [sp, #56]13; CHECK-NEXT:    str x7, [sp, #72]14; CHECK-NEXT:    str x8, [sp, #8]15; CHECK-NEXT:    bl other_func16; CHECK-NEXT:    ldr x30, [sp], #80 // 8-byte Folded Reload17; CHECK-NEXT:    ret18entry:19  %ap = alloca ptr, align 820  call void @llvm.va_start(ptr %ap)21  %ap2 = load ptr, ptr %ap, align 822  call void @other_func(ptr %ap2)23  ret void24}25 26declare void @other_func(ptr) local_unnamed_addr27 28declare void @llvm.va_start(ptr) nounwind29declare void @llvm.va_copy(ptr, ptr) nounwind30 31define ptr @f9(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, i64 %a8, ...) nounwind {32; CHECK-LABEL: f9:33; CHECK:       // %bb.0: // %entry34; CHECK-NEXT:    sub sp, sp, #1635; CHECK-NEXT:    add x8, sp, #2436; CHECK-NEXT:    add x0, sp, #2437; CHECK-NEXT:    str x8, [sp, #8]38; CHECK-NEXT:    add sp, sp, #1639; CHECK-NEXT:    ret40entry:41  %ap = alloca ptr, align 842  call void @llvm.va_start(ptr %ap)43  %ap2 = load ptr, ptr %ap, align 844  ret ptr %ap245}46 47define ptr @f8(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, i64 %a7, ...) nounwind {48; CHECK-LABEL: f8:49; CHECK:       // %bb.0: // %entry50; CHECK-NEXT:    sub sp, sp, #1651; CHECK-NEXT:    add x8, sp, #1652; CHECK-NEXT:    add x0, sp, #1653; CHECK-NEXT:    str x8, [sp, #8]54; CHECK-NEXT:    add sp, sp, #1655; CHECK-NEXT:    ret56entry:57  %ap = alloca ptr, align 858  call void @llvm.va_start(ptr %ap)59  %ap2 = load ptr, ptr %ap, align 860  ret ptr %ap261}62 63define ptr @f7(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64 %a4, i64 %a5, i64 %a6, ...) nounwind {64; CHECK-LABEL: f7:65; CHECK:       // %bb.0: // %entry66; CHECK-NEXT:    sub sp, sp, #3267; CHECK-NEXT:    add x8, sp, #2468; CHECK-NEXT:    add x0, sp, #2469; CHECK-NEXT:    str x7, [sp, #24]70; CHECK-NEXT:    str x8, [sp, #8]71; CHECK-NEXT:    add sp, sp, #3272; CHECK-NEXT:    ret73entry:74  %ap = alloca ptr, align 875  call void @llvm.va_start(ptr %ap)76  %ap2 = load ptr, ptr %ap, align 877  ret ptr %ap278}79 80define void @copy1(i64 %a0, ...) nounwind {81; CHECK-LABEL: copy1:82; CHECK:       // %bb.0: // %entry83; CHECK-NEXT:    sub sp, sp, #8084; CHECK-NEXT:    add x8, sp, #2485; CHECK-NEXT:    stp x1, x2, [sp, #24]86; CHECK-NEXT:    stp x3, x4, [sp, #40]87; CHECK-NEXT:    stp x5, x6, [sp, #56]88; CHECK-NEXT:    str x7, [sp, #72]89; CHECK-NEXT:    stp x8, x8, [sp], #8090; CHECK-NEXT:    ret91entry:92  %ap = alloca ptr, align 893  %cp = alloca ptr, align 894  call void @llvm.va_start(ptr %ap)95  call void @llvm.va_copy(ptr %cp, ptr %ap)96  ret void97}98 99declare void @llvm.va_end(ptr)100declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1101declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1102 103declare i32 @__stdio_common_vsprintf(i64, ptr, i64, ptr, ptr, ptr) local_unnamed_addr #3104declare ptr @__local_stdio_printf_options() local_unnamed_addr #4105 106define i32 @fp(ptr, i64, ptr, ...) local_unnamed_addr #6 {107; CHECK-LABEL: fp:108; CHECK:       .seh_proc fp109; CHECK-NEXT:  // %bb.0:110; CHECK-NEXT:    stp x19, x20, [sp, #-96]! // 16-byte Folded Spill111; CHECK-NEXT:    .seh_save_regp_x x19, 96112; CHECK-NEXT:    str x21, [sp, #16] // 8-byte Spill113; CHECK-NEXT:    .seh_save_reg x21, 16114; CHECK-NEXT:    stp x29, x30, [sp, #24] // 16-byte Folded Spill115; CHECK-NEXT:    .seh_save_fplr 24116; CHECK-NEXT:    add x29, sp, #24117; CHECK-NEXT:    .seh_add_fp 24118; CHECK-NEXT:    .seh_endprologue119; CHECK-NEXT:    add x8, x29, #32120; CHECK-NEXT:    mov x19, x2121; CHECK-NEXT:    mov x20, x1122; CHECK-NEXT:    mov x21, x0123; CHECK-NEXT:    stp x3, x4, [x29, #32]124; CHECK-NEXT:    stp x5, x6, [x29, #48]125; CHECK-NEXT:    str x7, [x29, #64]126; CHECK-NEXT:    str x8, [x29, #16]127; CHECK-NEXT:    bl __local_stdio_printf_options128; CHECK-NEXT:    ldr x8, [x0]129; CHECK-NEXT:    add x5, x29, #32130; CHECK-NEXT:    mov x1, x21131; CHECK-NEXT:    mov x2, x20132; CHECK-NEXT:    mov x3, x19133; CHECK-NEXT:    mov x4, xzr134; CHECK-NEXT:    orr x0, x8, #0x2135; CHECK-NEXT:    bl __stdio_common_vsprintf136; CHECK-NEXT:    cmn w0, #1137; CHECK-NEXT:    csinv w0, w0, wzr, gt138; CHECK-NEXT:    .seh_startepilogue139; CHECK-NEXT:    ldp x29, x30, [sp, #24] // 16-byte Folded Reload140; CHECK-NEXT:    .seh_save_fplr 24141; CHECK-NEXT:    ldr x21, [sp, #16] // 8-byte Reload142; CHECK-NEXT:    .seh_save_reg x21, 16143; CHECK-NEXT:    ldp x19, x20, [sp], #96 // 16-byte Folded Reload144; CHECK-NEXT:    .seh_save_regp_x x19, 96145; CHECK-NEXT:    .seh_endepilogue146; CHECK-NEXT:    ret147; CHECK-NEXT:    .seh_endfunclet148; CHECK-NEXT:    .seh_endproc149  %4 = alloca ptr, align 8150  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #2151  call void @llvm.va_start(ptr nonnull %4)152  %5 = load ptr, ptr %4, align 8153  %6 = call ptr @__local_stdio_printf_options() #2154  %7 = load i64, ptr %6, align 8155  %8 = or i64 %7, 2156  %9 = call i32 @__stdio_common_vsprintf(i64 %8, ptr %0, i64 %1, ptr %2, ptr null, ptr %5) #2157  %10 = icmp sgt i32 %9, -1158  %11 = select i1 %10, i32 %9, i32 -1159  call void @llvm.va_end(ptr nonnull %4)160  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #2161  ret i32 %11162}163 164attributes #6 = { "frame-pointer"="all" }165 166define void @vla(i32, ptr, ...) local_unnamed_addr {167; CHECK-LABEL: vla:168; CHECK:       .seh_proc vla169; CHECK-NEXT:  // %bb.0:170; CHECK-NEXT:    stp x19, x20, [sp, #-112]! // 16-byte Folded Spill171; CHECK-NEXT:    .seh_save_regp_x x19, 112172; CHECK-NEXT:    stp x21, x22, [sp, #16] // 16-byte Folded Spill173; CHECK-NEXT:    .seh_save_regp x21, 16174; CHECK-NEXT:    str x23, [sp, #32] // 8-byte Spill175; CHECK-NEXT:    .seh_save_reg x23, 32176; CHECK-NEXT:    stp x29, x30, [sp, #40] // 16-byte Folded Spill177; CHECK-NEXT:    .seh_save_fplr 40178; CHECK-NEXT:    add x29, sp, #40179; CHECK-NEXT:    .seh_add_fp 40180; CHECK-NEXT:    .seh_endprologue181; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0182; CHECK-NEXT:    add x8, x29, #24183; CHECK-NEXT:    mov w9, w0184; CHECK-NEXT:    mov x19, x1185; CHECK-NEXT:    str x8, [x29, #16]186; CHECK-NEXT:    add x8, x9, #15187; CHECK-NEXT:    mov x23, sp188; CHECK-NEXT:    lsr x15, x8, #4189; CHECK-NEXT:    stp x2, x3, [x29, #24]190; CHECK-NEXT:    stp x4, x5, [x29, #40]191; CHECK-NEXT:    stp x6, x7, [x29, #56]192; CHECK-NEXT:    bl __chkstk193; CHECK-NEXT:    sub x20, sp, x15, lsl #4194; CHECK-NEXT:    mov sp, x20195; CHECK-NEXT:    ldr x21, [x29, #16]196; CHECK-NEXT:    sxtw x22, w0197; CHECK-NEXT:    bl __local_stdio_printf_options198; CHECK-NEXT:    ldr x8, [x0]199; CHECK-NEXT:    mov x1, x20200; CHECK-NEXT:    mov x2, x22201; CHECK-NEXT:    mov x3, x19202; CHECK-NEXT:    mov x4, xzr203; CHECK-NEXT:    mov x5, x21204; CHECK-NEXT:    orr x0, x8, #0x2205; CHECK-NEXT:    bl __stdio_common_vsprintf206; CHECK-NEXT:    mov sp, x23207; CHECK-NEXT:    .seh_startepilogue208; CHECK-NEXT:    sub sp, x29, #40209; CHECK-NEXT:    .seh_add_fp 40210; CHECK-NEXT:    ldp x29, x30, [sp, #40] // 16-byte Folded Reload211; CHECK-NEXT:    .seh_save_fplr 40212; CHECK-NEXT:    ldr x23, [sp, #32] // 8-byte Reload213; CHECK-NEXT:    .seh_save_reg x23, 32214; CHECK-NEXT:    ldp x21, x22, [sp, #16] // 16-byte Folded Reload215; CHECK-NEXT:    .seh_save_regp x21, 16216; CHECK-NEXT:    ldp x19, x20, [sp], #112 // 16-byte Folded Reload217; CHECK-NEXT:    .seh_save_regp_x x19, 112218; CHECK-NEXT:    .seh_endepilogue219; CHECK-NEXT:    ret220; CHECK-NEXT:    .seh_endfunclet221; CHECK-NEXT:    .seh_endproc222  %3 = alloca ptr, align 8223  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #5224  call void @llvm.va_start(ptr nonnull %3)225  %4 = zext i32 %0 to i64226  %5 = call ptr @llvm.stacksave()227  %6 = alloca i8, i64 %4, align 1228  %7 = load ptr, ptr %3, align 8229  %8 = sext i32 %0 to i64230  %9 = call ptr @__local_stdio_printf_options()231  %10 = load i64, ptr %9, align 8232  %11 = or i64 %10, 2233  %12 = call i32 @__stdio_common_vsprintf(i64 %11, ptr nonnull %6, i64 %8, ptr %1, ptr null, ptr %7)234  call void @llvm.va_end(ptr nonnull %3)235  call void @llvm.stackrestore(ptr %5)236  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #5237  ret void238}239 240declare ptr @llvm.stacksave()241declare void @llvm.stackrestore(ptr)242 243define i32 @snprintf(ptr, i64, ptr, ...) local_unnamed_addr #5 {244; CHECK-LABEL: snprintf:245; CHECK:       .seh_proc snprintf246; CHECK-NEXT:  // %bb.0:247; CHECK-NEXT:    sub sp, sp, #96248; CHECK-NEXT:    .seh_stackalloc 96249; CHECK-NEXT:    stp x19, x20, [sp, #16] // 16-byte Folded Spill250; CHECK-NEXT:    .seh_save_regp x19, 16251; CHECK-NEXT:    stp x21, x30, [sp, #32] // 16-byte Folded Spill252; CHECK-NEXT:    .seh_save_lrpair x21, 32253; CHECK-NEXT:    .seh_endprologue254; CHECK-NEXT:    add x8, sp, #56255; CHECK-NEXT:    mov x19, x2256; CHECK-NEXT:    mov x20, x1257; CHECK-NEXT:    mov x21, x0258; CHECK-NEXT:    stp x3, x4, [sp, #56]259; CHECK-NEXT:    stp x5, x6, [sp, #72]260; CHECK-NEXT:    str x7, [sp, #88]261; CHECK-NEXT:    str x8, [sp, #8]262; CHECK-NEXT:    bl __local_stdio_printf_options263; CHECK-NEXT:    ldr x8, [x0]264; CHECK-NEXT:    add x5, sp, #56265; CHECK-NEXT:    mov x1, x21266; CHECK-NEXT:    mov x2, x20267; CHECK-NEXT:    mov x3, x19268; CHECK-NEXT:    mov x4, xzr269; CHECK-NEXT:    orr x0, x8, #0x2270; CHECK-NEXT:    bl __stdio_common_vsprintf271; CHECK-NEXT:    cmn w0, #1272; CHECK-NEXT:    csinv w0, w0, wzr, gt273; CHECK-NEXT:    .seh_startepilogue274; CHECK-NEXT:    ldp x21, x30, [sp, #32] // 16-byte Folded Reload275; CHECK-NEXT:    .seh_save_lrpair x21, 32276; CHECK-NEXT:    ldp x19, x20, [sp, #16] // 16-byte Folded Reload277; CHECK-NEXT:    .seh_save_regp x19, 16278; CHECK-NEXT:    add sp, sp, #96279; CHECK-NEXT:    .seh_stackalloc 96280; CHECK-NEXT:    .seh_endepilogue281; CHECK-NEXT:    ret282; CHECK-NEXT:    .seh_endfunclet283; CHECK-NEXT:    .seh_endproc284  %4 = alloca ptr, align 8285  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %4) #2286  call void @llvm.va_start(ptr nonnull %4)287  %5 = load ptr, ptr %4, align 8288  %6 = call ptr @__local_stdio_printf_options() #2289  %7 = load i64, ptr %6, align 8290  %8 = or i64 %7, 2291  %9 = call i32 @__stdio_common_vsprintf(i64 %8, ptr %0, i64 %1, ptr %2, ptr null, ptr %5) #2292  %10 = icmp sgt i32 %9, -1293  %11 = select i1 %10, i32 %9, i32 -1294  call void @llvm.va_end(ptr nonnull %4)295  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %4) #2296  ret i32 %11297}298 299define void @fixed_params(i32, double, i32, double, i32, double, i32, double, i32, double) nounwind {300; CHECK-LABEL: fixed_params:301; CHECK:       // %bb.0:302; CHECK-NEXT:    sub sp, sp, #32303; CHECK-NEXT:    mov w8, w4304; CHECK-NEXT:    mov w6, w3305; CHECK-NEXT:    mov w4, w2306; CHECK-NEXT:    mov w2, w1307; CHECK-NEXT:    fmov x1, d0308; CHECK-NEXT:    fmov x3, d1309; CHECK-NEXT:    fmov x5, d2310; CHECK-NEXT:    fmov x7, d3311; CHECK-NEXT:    str x30, [sp, #16] // 8-byte Spill312; CHECK-NEXT:    str d4, [sp, #8]313; CHECK-NEXT:    str w8, [sp]314; CHECK-NEXT:    bl varargs315; CHECK-NEXT:    ldr x30, [sp, #16] // 8-byte Reload316; CHECK-NEXT:    add sp, sp, #32317; CHECK-NEXT:    ret318  tail call void (i32, ...) @varargs(i32 %0, double %1, i32 %2, double %3, i32 %4, double %5, i32 %6, double %7, i32 %8, double %9)319  ret void320}321 322declare void @varargs(i32, ...) local_unnamed_addr323