Files
clang-p2996/llvm/test/CodeGen/X86/fp80-strict-libcalls.ll
Roman Lebedev 0aef747b84 [NFC][X86][Codegen] Megacommit: mass-regenerate all check lines that were already autogenerated
The motivation is that the update script has at least two deviations
(`<...>@GOT`/`<...>@PLT`/ and not hiding pointer arithmetics) from
what pretty much all the checklines were generated with,
and most of the tests are still not updated, so each time one of the
non-up-to-date tests is updated to see the effect of the code change,
there is a lot of noise. Instead of having to deal with that each
time, let's just deal with everything at once.

This has been done via:
```
cd llvm-project/llvm/test/CodeGen/X86
grep -rl "; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py" | xargs -L1 <...>/llvm-project/llvm/utils/update_llc_test_checks.py --llc-binary <...>/llvm-project/build/bin/llc
```

Not all tests were regenerated, however.
2021-06-11 23:57:02 +03:00

658 lines
20 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=i686-unknown-unknown -O3 | FileCheck %s --check-prefixes=X86
; RUN: llc < %s -mtriple=x86_64-unknown-unknown -O3 | FileCheck %s --check-prefixes=X64
define x86_fp80 @fma(x86_fp80 %x, x86_fp80 %y, x86_fp80 %z) nounwind strictfp {
; X86-LABEL: fma:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $36, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll fmal
; X86-NEXT: addl $36, %esp
; X86-NEXT: retl
;
; X64-LABEL: fma:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $56, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq fmal@PLT
; X64-NEXT: addq $56, %rsp
; X64-NEXT: retq
entry:
%fma = call x86_fp80 @llvm.experimental.constrained.fma.f80(x86_fp80 %x, x86_fp80 %y, x86_fp80 %z, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %fma
}
define x86_fp80 @frem(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {
; X86-LABEL: frem:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $24, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll fmodl
; X86-NEXT: addl $24, %esp
; X86-NEXT: retl
;
; X64-LABEL: frem:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $40, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq fmodl@PLT
; X64-NEXT: addq $40, %rsp
; X64-NEXT: retq
entry:
%div = call x86_fp80 @llvm.experimental.constrained.frem.f80(x86_fp80 %x, x86_fp80 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %div
}
define x86_fp80 @ceil(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: ceil:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll ceill
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: ceil:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq ceill@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%ceil = call x86_fp80 @llvm.experimental.constrained.ceil.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0
ret x86_fp80 %ceil
}
define x86_fp80 @cos(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: cos:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll cosl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: cos:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq cosl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%cos = call x86_fp80 @llvm.experimental.constrained.cos.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %cos
}
define x86_fp80 @exp(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: exp:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll expl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: exp:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq expl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%exp = call x86_fp80 @llvm.experimental.constrained.exp.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %exp
}
define x86_fp80 @exp2(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: exp2:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll exp2l
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: exp2:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq exp2l@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%exp2 = call x86_fp80 @llvm.experimental.constrained.exp2.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %exp2
}
define x86_fp80 @floor(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: floor:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll floorl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: floor:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq floorl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%floor = call x86_fp80 @llvm.experimental.constrained.floor.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0
ret x86_fp80 %floor
}
define x86_fp80 @log(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: log:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll logl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: log:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq logl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%log = call x86_fp80 @llvm.experimental.constrained.log.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %log
}
define x86_fp80 @log10(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: log10:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll log10l
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: log10:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq log10l@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%log10 = call x86_fp80 @llvm.experimental.constrained.log10.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %log10
}
define x86_fp80 @log2(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: log2:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll log2l
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: log2:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq log2l@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%log2 = call x86_fp80 @llvm.experimental.constrained.log2.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %log2
}
define x86_fp80 @maxnum(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {
; X86-LABEL: maxnum:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $24, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll fmaxl
; X86-NEXT: addl $24, %esp
; X86-NEXT: retl
;
; X64-LABEL: maxnum:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $40, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq fmaxl@PLT
; X64-NEXT: addq $40, %rsp
; X64-NEXT: retq
entry:
%maxnum = call x86_fp80 @llvm.experimental.constrained.maxnum.f80(x86_fp80 %x, x86_fp80 %y, metadata !"fpexcept.strict") #0
ret x86_fp80 %maxnum
}
define x86_fp80 @minnum(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {
; X86-LABEL: minnum:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $24, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll fminl
; X86-NEXT: addl $24, %esp
; X86-NEXT: retl
;
; X64-LABEL: minnum:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $40, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq fminl@PLT
; X64-NEXT: addq $40, %rsp
; X64-NEXT: retq
entry:
%minnum = call x86_fp80 @llvm.experimental.constrained.minnum.f80(x86_fp80 %x, x86_fp80 %y, metadata !"fpexcept.strict") #0
ret x86_fp80 %minnum
}
define x86_fp80 @nearbyint(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: nearbyint:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll nearbyintl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: nearbyint:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq nearbyintl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%nearbyint = call x86_fp80 @llvm.experimental.constrained.nearbyint.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %nearbyint
}
define x86_fp80 @pow(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {
; X86-LABEL: pow:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $24, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll powl
; X86-NEXT: addl $24, %esp
; X86-NEXT: retl
;
; X64-LABEL: pow:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $40, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq powl@PLT
; X64-NEXT: addq $40, %rsp
; X64-NEXT: retq
entry:
%pow = call x86_fp80 @llvm.experimental.constrained.pow.f80(x86_fp80 %x, x86_fp80 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %pow
}
define x86_fp80 @powi(x86_fp80 %x, i32 %y) nounwind strictfp {
; X86-LABEL: powi:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $16, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: wait
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
; X86-NEXT: movl %eax, {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll __powixf2
; X86-NEXT: addl $16, %esp
; X86-NEXT: retl
;
; X64-LABEL: powi:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq __powixf2@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%powi = call x86_fp80 @llvm.experimental.constrained.powi.f80(x86_fp80 %x, i32 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %powi
}
define x86_fp80 @rint(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: rint:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll rintl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: rint:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq rintl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%rint = call x86_fp80 @llvm.experimental.constrained.rint.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %rint
}
define x86_fp80 @round(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: round:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll roundl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: round:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq roundl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%round = call x86_fp80 @llvm.experimental.constrained.round.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0
ret x86_fp80 %round
}
define x86_fp80 @roundeven(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: roundeven:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll roundevenl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: roundeven:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq roundevenl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%roundeven = call x86_fp80 @llvm.experimental.constrained.roundeven.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0
ret x86_fp80 %roundeven
}
define x86_fp80 @sin(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: sin:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll sinl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: sin:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq sinl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%sin = call x86_fp80 @llvm.experimental.constrained.sin.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret x86_fp80 %sin
}
define x86_fp80 @trunc(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: trunc:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll truncl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: trunc:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq truncl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%trunc = call x86_fp80 @llvm.experimental.constrained.trunc.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0
ret x86_fp80 %trunc
}
define i32 @lrint(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: lrint:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll lrintl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: lrint:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq lrintl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%rint = call i32 @llvm.experimental.constrained.lrint.i32.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret i32 %rint
}
define i64 @llrint(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: llrint:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll llrintl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: llrint:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq llrintl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%rint = call i64 @llvm.experimental.constrained.llrint.i64.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0
ret i64 %rint
}
define i32 @lround(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: lround:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll lroundl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: lround:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq lroundl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%round = call i32 @llvm.experimental.constrained.lround.i32.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0
ret i32 %round
}
define i64 @llround(x86_fp80 %x) nounwind strictfp {
; X86-LABEL: llround:
; X86: # %bb.0: # %entry
; X86-NEXT: subl $12, %esp
; X86-NEXT: fldt {{[0-9]+}}(%esp)
; X86-NEXT: fstpt (%esp)
; X86-NEXT: wait
; X86-NEXT: calll llroundl
; X86-NEXT: addl $12, %esp
; X86-NEXT: retl
;
; X64-LABEL: llround:
; X64: # %bb.0: # %entry
; X64-NEXT: subq $24, %rsp
; X64-NEXT: fldt {{[0-9]+}}(%rsp)
; X64-NEXT: fstpt (%rsp)
; X64-NEXT: wait
; X64-NEXT: callq llroundl@PLT
; X64-NEXT: addq $24, %rsp
; X64-NEXT: retq
entry:
%round = call i64 @llvm.experimental.constrained.llround.i64.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0
ret i64 %round
}
attributes #0 = { strictfp }
declare x86_fp80 @llvm.experimental.constrained.fma.f80(x86_fp80, x86_fp80, x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.frem.f80(x86_fp80, x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.ceil.f80(x86_fp80, metadata)
declare x86_fp80 @llvm.experimental.constrained.cos.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.exp.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.exp2.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.floor.f80(x86_fp80, metadata)
declare x86_fp80 @llvm.experimental.constrained.log.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.log10.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.log2.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.maxnum.f80(x86_fp80, x86_fp80, metadata)
declare x86_fp80 @llvm.experimental.constrained.minnum.f80(x86_fp80, x86_fp80, metadata)
declare x86_fp80 @llvm.experimental.constrained.nearbyint.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.pow.f80(x86_fp80, x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.powi.f80(x86_fp80, i32, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.rint.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.round.f80(x86_fp80, metadata)
declare x86_fp80 @llvm.experimental.constrained.roundeven.f80(x86_fp80, metadata)
declare x86_fp80 @llvm.experimental.constrained.sin.f80(x86_fp80, metadata, metadata)
declare x86_fp80 @llvm.experimental.constrained.trunc.f80(x86_fp80, metadata)
declare i32 @llvm.experimental.constrained.lrint.i32.f80(x86_fp80, metadata, metadata)
declare i64 @llvm.experimental.constrained.llrint.i64.f80(x86_fp80, metadata, metadata)
declare i32 @llvm.experimental.constrained.lround.i32.f80(x86_fp80, metadata)
declare i64 @llvm.experimental.constrained.llround.i64.f80(x86_fp80, metadata)