brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.5 KiB · a99b29f Raw
190 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-windows -verify-machineinstrs | FileCheck %s --check-prefixes=DAGISEL3; RUN: llc < %s -mtriple=aarch64-windows -verify-machineinstrs -O0 -fast-isel | FileCheck %s --check-prefixes=O0,FASTISEL4; RUN: llc < %s -mtriple=aarch64-windows -verify-machineinstrs -O0 -global-isel | FileCheck %s --check-prefixes=O0,GISEL5 6define void @float_va_fn(float %a, i32 %b, ...) nounwind {7; DAGISEL-LABEL: float_va_fn:8; DAGISEL:       // %bb.0: // %entry9; DAGISEL-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill10; DAGISEL-NEXT:    fmov s0, w011; DAGISEL-NEXT:    add x8, sp, #1612; DAGISEL-NEXT:    add x0, sp, #1613; DAGISEL-NEXT:    stp x2, x3, [sp, #16]14; DAGISEL-NEXT:    stp x4, x5, [sp, #32]15; DAGISEL-NEXT:    stp x6, x7, [sp, #48]16; DAGISEL-NEXT:    str x8, [sp, #8]17; DAGISEL-NEXT:    bl f_va_list18; DAGISEL-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload19; DAGISEL-NEXT:    ret20;21; O0-LABEL: float_va_fn:22; O0:       // %bb.0: // %entry23; O0-NEXT:    sub sp, sp, #8024; O0-NEXT:    str x30, [sp, #16] // 8-byte Spill25; O0-NEXT:    str x7, [sp, #72]26; O0-NEXT:    str x6, [sp, #64]27; O0-NEXT:    str x5, [sp, #56]28; O0-NEXT:    str x4, [sp, #48]29; O0-NEXT:    str x3, [sp, #40]30; O0-NEXT:    str x2, [sp, #32]31; O0-NEXT:    fmov s0, w032; O0-NEXT:    add x8, sp, #3233; O0-NEXT:    str x8, [sp, #8]34; O0-NEXT:    ldr x0, [sp, #8]35; O0-NEXT:    bl f_va_list36; O0-NEXT:    ldr x30, [sp, #16] // 8-byte Reload37; O0-NEXT:    add sp, sp, #8038; O0-NEXT:    ret39entry:40  %ap = alloca ptr, align 841  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %ap)42  call void @llvm.va_start(ptr nonnull %ap)43  %0 = load ptr, ptr %ap, align 844  call void @f_va_list(float %a, ptr %0)45  call void @llvm.va_end(ptr nonnull %ap)46  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %ap)47  ret void48}49 50declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)51declare void @llvm.va_start(ptr)52declare void @f_va_list(float, ptr)53declare void @llvm.va_end(ptr)54declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)55 56define void @double_va_fn(double %a, i32 %b, ...) nounwind {57; DAGISEL-LABEL: double_va_fn:58; DAGISEL:       // %bb.0: // %entry59; DAGISEL-NEXT:    str x30, [sp, #-64]! // 8-byte Folded Spill60; DAGISEL-NEXT:    fmov d0, x061; DAGISEL-NEXT:    add x8, sp, #1662; DAGISEL-NEXT:    add x0, sp, #1663; DAGISEL-NEXT:    stp x2, x3, [sp, #16]64; DAGISEL-NEXT:    stp x4, x5, [sp, #32]65; DAGISEL-NEXT:    stp x6, x7, [sp, #48]66; DAGISEL-NEXT:    str x8, [sp, #8]67; DAGISEL-NEXT:    bl d_va_list68; DAGISEL-NEXT:    ldr x30, [sp], #64 // 8-byte Folded Reload69; DAGISEL-NEXT:    ret70;71; O0-LABEL: double_va_fn:72; O0:       // %bb.0: // %entry73; O0-NEXT:    sub sp, sp, #8074; O0-NEXT:    str x30, [sp, #16] // 8-byte Spill75; O0-NEXT:    str x7, [sp, #72]76; O0-NEXT:    str x6, [sp, #64]77; O0-NEXT:    str x5, [sp, #56]78; O0-NEXT:    str x4, [sp, #48]79; O0-NEXT:    str x3, [sp, #40]80; O0-NEXT:    str x2, [sp, #32]81; O0-NEXT:    fmov d0, x082; O0-NEXT:    add x8, sp, #3283; O0-NEXT:    str x8, [sp, #8]84; O0-NEXT:    ldr x0, [sp, #8]85; O0-NEXT:    bl d_va_list86; O0-NEXT:    ldr x30, [sp, #16] // 8-byte Reload87; O0-NEXT:    add sp, sp, #8088; O0-NEXT:    ret89entry:90  %ap = alloca ptr, align 891  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %ap)92  call void @llvm.va_start(ptr nonnull %ap)93  %0 = load ptr, ptr %ap, align 894  call void @d_va_list(double %a, ptr %0)95  call void @llvm.va_end(ptr nonnull %ap)96  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %ap)97  ret void98}99 100declare void @d_va_list(double, ptr)101 102define void @call_f_va() nounwind {103; DAGISEL-LABEL: call_f_va:104; DAGISEL:       // %bb.0: // %entry105; DAGISEL-NEXT:    mov w0, #1065353216 // =0x3f800000106; DAGISEL-NEXT:    mov w1, #2 // =0x2107; DAGISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000108; DAGISEL-NEXT:    mov w3, #4 // =0x4109; DAGISEL-NEXT:    b other_f_va_fn110;111; FASTISEL-LABEL: call_f_va:112; FASTISEL:       // %bb.0: // %entry113; FASTISEL-NEXT:    mov w0, #1065353216 // =0x3f800000114; FASTISEL-NEXT:    mov w1, #2 // =0x2115; FASTISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000116; FASTISEL-NEXT:    mov w3, #4 // =0x4117; FASTISEL-NEXT:    b other_f_va_fn118;119; GISEL-LABEL: call_f_va:120; GISEL:       // %bb.0: // %entry121; GISEL-NEXT:    fmov s0, #1.00000000122; GISEL-NEXT:    fmov w0, s0123; GISEL-NEXT:    mov w1, #2 // =0x2124; GISEL-NEXT:    fmov d0, #3.00000000125; GISEL-NEXT:    fmov x2, d0126; GISEL-NEXT:    mov w3, #4 // =0x4127; GISEL-NEXT:    b other_f_va_fn128entry:129  tail call void (float, i32, ...) @other_f_va_fn(float 1.000000e+00, i32 2, double 3.000000e+00, i32 4)130  ret void131}132 133declare void @other_f_va_fn(float, i32, ...)134 135define void @call_d_va() nounwind {136; DAGISEL-LABEL: call_d_va:137; DAGISEL:       // %bb.0: // %entry138; DAGISEL-NEXT:    mov x0, #4607182418800017408 // =0x3ff0000000000000139; DAGISEL-NEXT:    mov w1, #2 // =0x2140; DAGISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000141; DAGISEL-NEXT:    mov w3, #4 // =0x4142; DAGISEL-NEXT:    b other_d_va_fn143;144; FASTISEL-LABEL: call_d_va:145; FASTISEL:       // %bb.0: // %entry146; FASTISEL-NEXT:    mov x0, #4607182418800017408 // =0x3ff0000000000000147; FASTISEL-NEXT:    mov w1, #2 // =0x2148; FASTISEL-NEXT:    mov x2, #4613937818241073152 // =0x4008000000000000149; FASTISEL-NEXT:    mov w3, #4 // =0x4150; FASTISEL-NEXT:    b other_d_va_fn151;152; GISEL-LABEL: call_d_va:153; GISEL:       // %bb.0: // %entry154; GISEL-NEXT:    fmov d0, #1.00000000155; GISEL-NEXT:    fmov x0, d0156; GISEL-NEXT:    mov w1, #2 // =0x2157; GISEL-NEXT:    fmov d0, #3.00000000158; GISEL-NEXT:    fmov x2, d0159; GISEL-NEXT:    mov w3, #4 // =0x4160; GISEL-NEXT:    b other_d_va_fn161entry:162  tail call void (double, i32, ...) @other_d_va_fn(double 1.000000e+00, i32 2, double 3.000000e+00, i32 4)163  ret void164}165 166declare void @other_d_va_fn(double, i32, ...)167 168define void @call_d_non_va() nounwind {169; DAGISEL-LABEL: call_d_non_va:170; DAGISEL:       // %bb.0: // %entry171; DAGISEL-NEXT:    fmov d0, #1.00000000172; DAGISEL-NEXT:    fmov d1, #3.00000000173; DAGISEL-NEXT:    mov w0, #2 // =0x2174; DAGISEL-NEXT:    mov w1, #4 // =0x4175; DAGISEL-NEXT:    b other_d_non_va_fn176;177; O0-LABEL: call_d_non_va:178; O0:       // %bb.0: // %entry179; O0-NEXT:    fmov d0, #1.00000000180; O0-NEXT:    mov w0, #2 // =0x2181; O0-NEXT:    fmov d1, #3.00000000182; O0-NEXT:    mov w1, #4 // =0x4183; O0-NEXT:    b other_d_non_va_fn184entry:185  tail call void (double, i32, double, i32) @other_d_non_va_fn(double 1.000000e+00, i32 2, double 3.000000e+00, i32 4)186  ret void187}188 189declare void @other_d_non_va_fn(double, i32, double, i32)190