xref: /llvm-project/llvm/test/CodeGen/X86/ldexp-f80.ll (revision eece6ba283bd763e6d7109ae9e155e81cfee0651)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck -check-prefixes=X64 %s
3; FIXME: Expansion without libcall
4; XUN: llc -mtriple=i386-pc-win32 < %s | FileCheck -check-prefix=WIN32 %s
5
6define x86_fp80 @ldexp_f80(x86_fp80 %arg0, i32 %arg1) {
7; X64-LABEL: ldexp_f80:
8; X64:       # %bb.0:
9; X64-NEXT:    subq $24, %rsp
10; X64-NEXT:    .cfi_def_cfa_offset 32
11; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
12; X64-NEXT:    fstpt (%rsp)
13; X64-NEXT:    callq ldexpl@PLT
14; X64-NEXT:    addq $24, %rsp
15; X64-NEXT:    .cfi_def_cfa_offset 8
16; X64-NEXT:    retq
17  %ldexp = call x86_fp80 @llvm.ldexp.f80.i32(x86_fp80 %arg0, i32 %arg1)
18  ret x86_fp80 %ldexp
19}
20
21define x86_fp80 @test_strict_ldexp_f80_i32(ptr addrspace(1) %out, x86_fp80 %a, i32 %b) #2 {
22; X64-LABEL: test_strict_ldexp_f80_i32:
23; X64:       # %bb.0:
24; X64-NEXT:    subq $24, %rsp
25; X64-NEXT:    .cfi_def_cfa_offset 32
26; X64-NEXT:    movl %esi, %edi
27; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
28; X64-NEXT:    fstpt (%rsp)
29; X64-NEXT:    wait
30; X64-NEXT:    callq ldexpl@PLT
31; X64-NEXT:    addq $24, %rsp
32; X64-NEXT:    .cfi_def_cfa_offset 8
33; X64-NEXT:    retq
34  %result = call x86_fp80 @llvm.experimental.constrained.ldexp.f80.i32(x86_fp80 %a, i32 %b, metadata !"round.dynamic", metadata !"fpexcept.strict")
35  ret x86_fp80 %result
36}
37
38declare x86_fp80 @llvm.ldexp.f80.i32(x86_fp80, i32)
39declare x86_fp80 @llvm.experimental.constrained.ldexp.f80.i32(x86_fp80, i32, metadata, metadata) #1
40
41attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
42attributes #1 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
43attributes #2 = { strictfp }
44