Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / half-zfa.ll
blob93ffcb8a1a05c2b5650003a8b3f0d79fb95c26cd
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfh < %s \
3 ; RUN:     | FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfh < %s \
5 ; RUN:     | FileCheck %s
7 declare half @llvm.minimum.f16(half, half)
9 define half @fminm_h(half %a, half %b) nounwind {
10 ; CHECK-LABEL: fminm_h:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    fminm.h fa0, fa0, fa1
13 ; CHECK-NEXT:    ret
14   %1 = call half @llvm.minimum.f16(half %a, half %b)
15   ret half %1
18 declare half @llvm.maximum.f16(half, half)
20 define half @fmaxm_h(half %a, half %b) nounwind {
21 ; CHECK-LABEL: fmaxm_h:
22 ; CHECK:       # %bb.0:
23 ; CHECK-NEXT:    fmaxm.h fa0, fa0, fa1
24 ; CHECK-NEXT:    ret
25   %1 = tail call half @llvm.maximum.f16(half %a, half %b)
26   ret half %1
29 define half @fround_h_1(half %a) nounwind {
30 ; CHECK-LABEL: fround_h_1:
31 ; CHECK:       # %bb.0:
32 ; CHECK-NEXT:    fround.h fa0, fa0, rmm
33 ; CHECK-NEXT:    ret
34   %call = tail call half @llvm.round.f16(half %a) nounwind readnone
35   ret half %call
38 declare half @llvm.round.f16(half) nounwind readnone
41 define half @fround_h_2(half %a) nounwind {
42 ; CHECK-LABEL: fround_h_2:
43 ; CHECK:       # %bb.0:
44 ; CHECK-NEXT:    fround.h fa0, fa0, rdn
45 ; CHECK-NEXT:    ret
46   %call = tail call half @llvm.floor.f16(half %a) nounwind readnone
47   ret half %call
50 declare half @llvm.floor.f16(half) nounwind readnone
53 define half @fround_h_3(half %a) nounwind {
54 ; CHECK-LABEL: fround_h_3:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    fround.h fa0, fa0, rup
57 ; CHECK-NEXT:    ret
58   %call = tail call half @llvm.ceil.f16(half %a) nounwind readnone
59   ret half %call
62 declare half @llvm.ceil.f16(half) nounwind readnone
65 define half @fround_h_4(half %a) nounwind {
66 ; CHECK-LABEL: fround_h_4:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    fround.h fa0, fa0, rtz
69 ; CHECK-NEXT:    ret
70   %call = tail call half @llvm.trunc.f16(half %a) nounwind readnone
71   ret half %call
74 declare half @llvm.trunc.f16(half) nounwind readnone
77 define half @fround_h_5(half %a) nounwind {
78 ; CHECK-LABEL: fround_h_5:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    fround.h fa0, fa0
81 ; CHECK-NEXT:    ret
82   %call = tail call half @llvm.nearbyint.f16(half %a) nounwind readnone
83   ret half %call
86 declare half @llvm.nearbyint.f16(half) nounwind readnone
89 define half @froundnx_h(half %a) nounwind {
90 ; CHECK-LABEL: froundnx_h:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    froundnx.h fa0, fa0
93 ; CHECK-NEXT:    ret
94   %call = tail call half @llvm.rint.f16(half %a) nounwind readnone
95   ret half %call
98 declare half @llvm.rint.f16(half) nounwind readnone
100 declare i1 @llvm.experimental.constrained.fcmp.f16(half, half, metadata, metadata)
102 define i32 @fcmp_olt_q(half %a, half %b) nounwind strictfp {
103 ; CHECK-LABEL: fcmp_olt_q:
104 ; CHECK:       # %bb.0:
105 ; CHECK-NEXT:    fltq.h a0, fa0, fa1
106 ; CHECK-NEXT:    ret
107   %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"olt", metadata !"fpexcept.strict") strictfp
108   %2 = zext i1 %1 to i32
109   ret i32 %2
112 define i32 @fcmp_ole_q(half %a, half %b) nounwind strictfp {
113 ; CHECK-LABEL: fcmp_ole_q:
114 ; CHECK:       # %bb.0:
115 ; CHECK-NEXT:    fleq.h a0, fa0, fa1
116 ; CHECK-NEXT:    ret
117   %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ole", metadata !"fpexcept.strict") strictfp
118   %2 = zext i1 %1 to i32
119   ret i32 %2
122 define i32 @fcmp_one_q(half %a, half %b) nounwind strictfp {
123 ; CHECK-LABEL: fcmp_one_q:
124 ; CHECK:       # %bb.0:
125 ; CHECK-NEXT:    fltq.h a0, fa0, fa1
126 ; CHECK-NEXT:    fltq.h a1, fa1, fa0
127 ; CHECK-NEXT:    or a0, a1, a0
128 ; CHECK-NEXT:    ret
129   %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"one", metadata !"fpexcept.strict") strictfp
130   %2 = zext i1 %1 to i32
131   ret i32 %2
134 define i32 @fcmp_ueq_q(half %a, half %b) nounwind strictfp {
135 ; CHECK-LABEL: fcmp_ueq_q:
136 ; CHECK:       # %bb.0:
137 ; CHECK-NEXT:    fltq.h a0, fa0, fa1
138 ; CHECK-NEXT:    fltq.h a1, fa1, fa0
139 ; CHECK-NEXT:    or a0, a1, a0
140 ; CHECK-NEXT:    xori a0, a0, 1
141 ; CHECK-NEXT:    ret
142   %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp
143   %2 = zext i1 %1 to i32
144   ret i32 %2