xref: /llvm-project/llvm/test/CodeGen/X86/ldexp-libcall.ll (revision eece6ba283bd763e6d7109ae9e155e81cfee0651)
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