[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / X86 / fp-strict-scalar-round-fp16.ll
blob5832301aeb4e5e294313d23456c50966b1fbccf9
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx512fp16 -O3 | FileCheck %s --check-prefixes=X86
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512fp16 -O3 | FileCheck %s --check-prefixes=X64
5 declare half @llvm.experimental.constrained.ceil.f16(half, metadata)
6 declare half @llvm.experimental.constrained.floor.f16(half, metadata)
7 declare half @llvm.experimental.constrained.trunc.f16(half, metadata)
8 declare half @llvm.experimental.constrained.rint.f16(half, metadata, metadata)
9 declare half @llvm.experimental.constrained.nearbyint.f16(half, metadata, metadata)
11 define half @fceil32(half %f) #0 {
12 ; X86-LABEL: fceil32:
13 ; X86:       # %bb.0:
14 ; X86-NEXT:    vrndscalesh $10, {{[0-9]+}}(%esp), %xmm0, %xmm0
15 ; X86-NEXT:    retl
17 ; X64-LABEL: fceil32:
18 ; X64:       # %bb.0:
19 ; X64-NEXT:    vrndscalesh $10, %xmm0, %xmm0, %xmm0
20 ; X64-NEXT:    retq
21   %res = call half @llvm.experimental.constrained.ceil.f16(
22                         half %f, metadata !"fpexcept.strict") #0
23   ret half %res
26 define half @ffloor32(half %f) #0 {
27 ; X86-LABEL: ffloor32:
28 ; X86:       # %bb.0:
29 ; X86-NEXT:    vrndscalesh $9, {{[0-9]+}}(%esp), %xmm0, %xmm0
30 ; X86-NEXT:    retl
32 ; X64-LABEL: ffloor32:
33 ; X64:       # %bb.0:
34 ; X64-NEXT:    vrndscalesh $9, %xmm0, %xmm0, %xmm0
35 ; X64-NEXT:    retq
36   %res = call half @llvm.experimental.constrained.floor.f16(
37                         half %f, metadata !"fpexcept.strict") #0
38   ret half %res
41 define half @ftrunc32(half %f) #0 {
42 ; X86-LABEL: ftrunc32:
43 ; X86:       # %bb.0:
44 ; X86-NEXT:    vrndscalesh $11, {{[0-9]+}}(%esp), %xmm0, %xmm0
45 ; X86-NEXT:    retl
47 ; X64-LABEL: ftrunc32:
48 ; X64:       # %bb.0:
49 ; X64-NEXT:    vrndscalesh $11, %xmm0, %xmm0, %xmm0
50 ; X64-NEXT:    retq
51   %res = call half @llvm.experimental.constrained.trunc.f16(
52                         half %f, metadata !"fpexcept.strict") #0
53   ret half %res
56 define half @frint32(half %f) #0 {
57 ; X86-LABEL: frint32:
58 ; X86:       # %bb.0:
59 ; X86-NEXT:    vrndscalesh $4, {{[0-9]+}}(%esp), %xmm0, %xmm0
60 ; X86-NEXT:    retl
62 ; X64-LABEL: frint32:
63 ; X64:       # %bb.0:
64 ; X64-NEXT:    vrndscalesh $4, %xmm0, %xmm0, %xmm0
65 ; X64-NEXT:    retq
66   %res = call half @llvm.experimental.constrained.rint.f16(
67                         half %f,
68                         metadata !"round.dynamic", metadata !"fpexcept.strict") #0
69   ret half %res
72 define half @fnearbyint32(half %f) #0 {
73 ; X86-LABEL: fnearbyint32:
74 ; X86:       # %bb.0:
75 ; X86-NEXT:    vrndscalesh $12, {{[0-9]+}}(%esp), %xmm0, %xmm0
76 ; X86-NEXT:    retl
78 ; X64-LABEL: fnearbyint32:
79 ; X64:       # %bb.0:
80 ; X64-NEXT:    vrndscalesh $12, %xmm0, %xmm0, %xmm0
81 ; X64-NEXT:    retq
82   %res = call half @llvm.experimental.constrained.nearbyint.f16(
83                         half %f,
84                         metadata !"round.dynamic", metadata !"fpexcept.strict") #0
85   ret half %res
88 attributes #0 = { strictfp }