1*eece6ba2SMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2*eece6ba2SMatt Arsenault; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s 3*eece6ba2SMatt Arsenault; RUN: llc < %s -mtriple=i386-pc-win32 | FileCheck %s -check-prefix=CHECK-WIN 4*eece6ba2SMatt Arsenault 5*eece6ba2SMatt Arsenaultdefine float @call_ldexpf(float %a, i32 %b) { 6*eece6ba2SMatt Arsenault; CHECK-LABEL: call_ldexpf: 7*eece6ba2SMatt Arsenault; CHECK: # %bb.0: 8*eece6ba2SMatt Arsenault; CHECK-NEXT: jmp ldexpf@PLT # TAILCALL 9*eece6ba2SMatt Arsenault; 10*eece6ba2SMatt Arsenault; CHECK-WIN-LABEL: call_ldexpf: 11*eece6ba2SMatt Arsenault; CHECK-WIN: # %bb.0: 12*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: subl $8, %esp 13*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: flds {{[0-9]+}}(%esp) 14*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl {{[0-9]+}}(%esp), %eax 15*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl %eax, {{[0-9]+}}(%esp) 16*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: fstps (%esp) 17*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: calll _ldexpf 18*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: addl $8, %esp 19*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: retl 20*eece6ba2SMatt Arsenault %result = call float @ldexpf(float %a, i32 %b) 21*eece6ba2SMatt Arsenault ret float %result 22*eece6ba2SMatt Arsenault} 23*eece6ba2SMatt Arsenault 24*eece6ba2SMatt Arsenaultdefine double @call_ldexp(double %a, i32 %b) { 25*eece6ba2SMatt Arsenault; CHECK-LABEL: call_ldexp: 26*eece6ba2SMatt Arsenault; CHECK: # %bb.0: 27*eece6ba2SMatt Arsenault; CHECK-NEXT: jmp ldexp@PLT # TAILCALL 28*eece6ba2SMatt Arsenault; 29*eece6ba2SMatt Arsenault; CHECK-WIN-LABEL: call_ldexp: 30*eece6ba2SMatt Arsenault; CHECK-WIN: # %bb.0: 31*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: subl $12, %esp 32*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: fldl {{[0-9]+}}(%esp) 33*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl {{[0-9]+}}(%esp), %eax 34*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl %eax, {{[0-9]+}}(%esp) 35*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: fstpl (%esp) 36*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: calll _ldexp 37*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: addl $12, %esp 38*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: retl 39*eece6ba2SMatt Arsenault %result = call double @ldexp(double %a, i32 %b) 40*eece6ba2SMatt Arsenault ret double %result 41*eece6ba2SMatt Arsenault} 42*eece6ba2SMatt Arsenault 43*eece6ba2SMatt Arsenaultdefine x86_fp80 @call_ldexpl(x86_fp80 %a, i32 %b) { 44*eece6ba2SMatt Arsenault; CHECK-LABEL: call_ldexpl: 45*eece6ba2SMatt Arsenault; CHECK: # %bb.0: 46*eece6ba2SMatt Arsenault; CHECK-NEXT: subq $24, %rsp 47*eece6ba2SMatt Arsenault; CHECK-NEXT: .cfi_def_cfa_offset 32 48*eece6ba2SMatt Arsenault; CHECK-NEXT: fldt {{[0-9]+}}(%rsp) 49*eece6ba2SMatt Arsenault; CHECK-NEXT: fstpt (%rsp) 50*eece6ba2SMatt Arsenault; CHECK-NEXT: callq ldexpl@PLT 51*eece6ba2SMatt Arsenault; CHECK-NEXT: addq $24, %rsp 52*eece6ba2SMatt Arsenault; CHECK-NEXT: .cfi_def_cfa_offset 8 53*eece6ba2SMatt Arsenault; CHECK-NEXT: retq 54*eece6ba2SMatt Arsenault; 55*eece6ba2SMatt Arsenault; CHECK-WIN-LABEL: call_ldexpl: 56*eece6ba2SMatt Arsenault; CHECK-WIN: # %bb.0: 57*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: pushl %ebp 58*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl %esp, %ebp 59*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: andl $-16, %esp 60*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: subl $48, %esp 61*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: fldt 8(%ebp) 62*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl 24(%ebp), %eax 63*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl %eax, {{[0-9]+}}(%esp) 64*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: fstpt (%esp) 65*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: calll _ldexpl 66*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: movl %ebp, %esp 67*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: popl %ebp 68*eece6ba2SMatt Arsenault; CHECK-WIN-NEXT: retl 69*eece6ba2SMatt Arsenault %result = call x86_fp80 @ldexpl(x86_fp80 %a, i32 %b) 70*eece6ba2SMatt Arsenault ret x86_fp80 %result 71*eece6ba2SMatt Arsenault} 72*eece6ba2SMatt Arsenault 73*eece6ba2SMatt Arsenaultdeclare float @ldexpf(float %a, i32 %b) #0 74*eece6ba2SMatt Arsenaultdeclare double @ldexp(double %a, i32 %b) #0 75*eece6ba2SMatt Arsenaultdeclare x86_fp80 @ldexpl(x86_fp80 %a, i32 %b) #0 76*eece6ba2SMatt Arsenault 77*eece6ba2SMatt Arsenaultattributes #0 = { nounwind readonly } 78