brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 4ee2fc6 Raw
130 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-windows-msvc < %s -mattr=-sse | FileCheck %s3; RUN: llc -mtriple=x86_64-windows-gnu < %s -mattr=-sse | FileCheck %s4 5define void @recv_double(double %v, ptr %p) {6; CHECK-LABEL: recv_double:7; CHECK:       # %bb.0:8; CHECK-NEXT:    movq %rcx, (%rdx)9; CHECK-NEXT:    retq10  store double %v, ptr %p11  ret void12}13 14define void @recv_float(float %v, ptr %p) {15; CHECK-LABEL: recv_float:16; CHECK:       # %bb.0:17; CHECK-NEXT:    movl %ecx, (%rdx)18; CHECK-NEXT:    retq19  store float %v, ptr %p20  ret void21}22 23define dso_local double @ret_double(ptr %p) {24; CHECK-LABEL: ret_double:25; CHECK:       # %bb.0: # %entry26; CHECK-NEXT:    movq (%rcx), %rax27; CHECK-NEXT:    retq28entry:29  %v = load double, ptr %p30  ret double %v31}32 33define dso_local float @ret_float(ptr %p) {34; CHECK-LABEL: ret_float:35; CHECK:       # %bb.0: # %entry36; CHECK-NEXT:    movl (%rcx), %eax37; CHECK-NEXT:    retq38entry:39  %v = load float, ptr %p40  ret float %v41}42 43declare void @take_double(double)44declare void @take_float(float)45 46define void @pass_double(ptr %p) {47; CHECK-LABEL: pass_double:48; CHECK:       # %bb.0:49; CHECK-NEXT:    subq $40, %rsp50; CHECK-NEXT:    .seh_stackalloc 4051; CHECK-NEXT:    .seh_endprologue52; CHECK-NEXT:    movq (%rcx), %rcx53; CHECK-NEXT:    callq take_double54; CHECK-NEXT:    nop55; CHECK-NEXT:    .seh_startepilogue56; CHECK-NEXT:    addq $40, %rsp57; CHECK-NEXT:    .seh_endepilogue58; CHECK-NEXT:    retq59; CHECK-NEXT:    .seh_endproc60  %v = load double, ptr %p61  call void @take_double(double %v)62  ret void63}64 65define void @pass_float(ptr %p) {66; CHECK-LABEL: pass_float:67; CHECK:       # %bb.0:68; CHECK-NEXT:    subq $40, %rsp69; CHECK-NEXT:    .seh_stackalloc 4070; CHECK-NEXT:    .seh_endprologue71; CHECK-NEXT:    movl (%rcx), %ecx72; CHECK-NEXT:    callq take_float73; CHECK-NEXT:    nop74; CHECK-NEXT:    .seh_startepilogue75; CHECK-NEXT:    addq $40, %rsp76; CHECK-NEXT:    .seh_endepilogue77; CHECK-NEXT:    retq78; CHECK-NEXT:    .seh_endproc79  %v = load float, ptr %p80  call void @take_float(float %v)81  ret void82}83 84declare double @produce_double()85declare float @produce_float()86 87define void @call_double(ptr %p) {88; CHECK-LABEL: call_double:89; CHECK:       # %bb.0:90; CHECK-NEXT:    pushq %rsi91; CHECK-NEXT:    .seh_pushreg %rsi92; CHECK-NEXT:    subq $32, %rsp93; CHECK-NEXT:    .seh_stackalloc 3294; CHECK-NEXT:    .seh_endprologue95; CHECK-NEXT:    movq %rcx, %rsi96; CHECK-NEXT:    callq produce_double97; CHECK-NEXT:    movq %rax, (%rsi)98; CHECK-NEXT:    .seh_startepilogue99; CHECK-NEXT:    addq $32, %rsp100; CHECK-NEXT:    popq %rsi101; CHECK-NEXT:    .seh_endepilogue102; CHECK-NEXT:    retq103; CHECK-NEXT:    .seh_endproc104  %v = call double @produce_double()105  store double %v, ptr %p106  ret void107}108 109define void @call_float(ptr %p) {110; CHECK-LABEL: call_float:111; CHECK:       # %bb.0:112; CHECK-NEXT:    pushq %rsi113; CHECK-NEXT:    .seh_pushreg %rsi114; CHECK-NEXT:    subq $32, %rsp115; CHECK-NEXT:    .seh_stackalloc 32116; CHECK-NEXT:    .seh_endprologue117; CHECK-NEXT:    movq %rcx, %rsi118; CHECK-NEXT:    callq produce_float119; CHECK-NEXT:    movl %eax, (%rsi)120; CHECK-NEXT:    .seh_startepilogue121; CHECK-NEXT:    addq $32, %rsp122; CHECK-NEXT:    popq %rsi123; CHECK-NEXT:    .seh_endepilogue124; CHECK-NEXT:    retq125; CHECK-NEXT:    .seh_endproc126  %v = call float @produce_float()127  store float %v, ptr %p128  ret void129}130