Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-setcc-fp-vp.ll
blobd7b6dccba3f8a5f257eec14c7775ef29c6027d44
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+m,+zfh,+zvfh -target-abi=ilp32d \
3 ; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
4 ; RUN: llc -mtriple=riscv64 -mattr=+v,+m,+zfh,+zvfh -target-abi=lp64d \
5 ; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH
6 ; RUN: llc -mtriple=riscv32 -mattr=+v,+m,+zfh,+zvfhmin -target-abi=ilp32d \
7 ; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
8 ; RUN: llc -mtriple=riscv64 -mattr=+v,+m,+zfh,+zvfhmin -target-abi=lp64d \
9 ; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN
11 declare <7 x i1> @llvm.vp.fcmp.v7f16(<7 x half>, <7 x half>, metadata, <7 x i1>, i32)
13 define <7 x i1> @fcmp_oeq_vv_v7f16(<7 x half> %va, <7 x half> %vb, <7 x i1> %m, i32 zeroext %evl) {
14 ; ZVFH-LABEL: fcmp_oeq_vv_v7f16:
15 ; ZVFH:       # %bb.0:
16 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
17 ; ZVFH-NEXT:    vmfeq.vv v0, v8, v9, v0.t
18 ; ZVFH-NEXT:    ret
20 ; ZVFHMIN-LABEL: fcmp_oeq_vv_v7f16:
21 ; ZVFHMIN:       # %bb.0:
22 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
23 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
24 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
25 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
26 ; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v10, v0.t
27 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
28 ; ZVFHMIN-NEXT:    ret
29   %v = call <7 x i1> @llvm.vp.fcmp.v7f16(<7 x half> %va, <7 x half> %vb, metadata !"oeq", <7 x i1> %m, i32 %evl)
30   ret <7 x i1> %v
33 declare <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half>, <8 x half>, metadata, <8 x i1>, i32)
35 define <8 x i1> @fcmp_oeq_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
36 ; ZVFH-LABEL: fcmp_oeq_vv_v8f16:
37 ; ZVFH:       # %bb.0:
38 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
39 ; ZVFH-NEXT:    vmfeq.vv v0, v8, v9, v0.t
40 ; ZVFH-NEXT:    ret
42 ; ZVFHMIN-LABEL: fcmp_oeq_vv_v8f16:
43 ; ZVFHMIN:       # %bb.0:
44 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
45 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
46 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
47 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
48 ; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v10, v0.t
49 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
50 ; ZVFHMIN-NEXT:    ret
51   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oeq", <8 x i1> %m, i32 %evl)
52   ret <8 x i1> %v
55 define <8 x i1> @fcmp_oeq_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
56 ; ZVFH-LABEL: fcmp_oeq_vf_v8f16:
57 ; ZVFH:       # %bb.0:
58 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
59 ; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0, v0.t
60 ; ZVFH-NEXT:    ret
62 ; ZVFHMIN-LABEL: fcmp_oeq_vf_v8f16:
63 ; ZVFHMIN:       # %bb.0:
64 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
65 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
66 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
67 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
68 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
69 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
70 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
71 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
72 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
73 ; ZVFHMIN-NEXT:    vmfeq.vv v8, v10, v12, v0.t
74 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
75 ; ZVFHMIN-NEXT:    ret
76   %elt.head = insertelement <8 x half> poison, half %b, i32 0
77   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
78   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oeq", <8 x i1> %m, i32 %evl)
79   ret <8 x i1> %v
82 define <8 x i1> @fcmp_oeq_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
83 ; ZVFH-LABEL: fcmp_oeq_vf_swap_v8f16:
84 ; ZVFH:       # %bb.0:
85 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
86 ; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0, v0.t
87 ; ZVFH-NEXT:    ret
89 ; ZVFHMIN-LABEL: fcmp_oeq_vf_swap_v8f16:
90 ; ZVFHMIN:       # %bb.0:
91 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
92 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
93 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
94 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
95 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
96 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
97 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
98 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
99 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
100 ; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v10, v0.t
101 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
102 ; ZVFHMIN-NEXT:    ret
103   %elt.head = insertelement <8 x half> poison, half %b, i32 0
104   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
105   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"oeq", <8 x i1> %m, i32 %evl)
106   ret <8 x i1> %v
109 define <8 x i1> @fcmp_ogt_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
110 ; ZVFH-LABEL: fcmp_ogt_vv_v8f16:
111 ; ZVFH:       # %bb.0:
112 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
113 ; ZVFH-NEXT:    vmflt.vv v0, v9, v8, v0.t
114 ; ZVFH-NEXT:    ret
116 ; ZVFHMIN-LABEL: fcmp_ogt_vv_v8f16:
117 ; ZVFHMIN:       # %bb.0:
118 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
119 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
120 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
121 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
122 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
123 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
124 ; ZVFHMIN-NEXT:    ret
125   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ogt", <8 x i1> %m, i32 %evl)
126   ret <8 x i1> %v
129 define <8 x i1> @fcmp_ogt_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
130 ; ZVFH-LABEL: fcmp_ogt_vf_v8f16:
131 ; ZVFH:       # %bb.0:
132 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
133 ; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
134 ; ZVFH-NEXT:    ret
136 ; ZVFHMIN-LABEL: fcmp_ogt_vf_v8f16:
137 ; ZVFHMIN:       # %bb.0:
138 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
139 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
140 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
141 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
142 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
143 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
144 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
145 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
146 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
147 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
148 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
149 ; ZVFHMIN-NEXT:    ret
150   %elt.head = insertelement <8 x half> poison, half %b, i32 0
151   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
152   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ogt", <8 x i1> %m, i32 %evl)
153   ret <8 x i1> %v
156 define <8 x i1> @fcmp_ogt_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
157 ; ZVFH-LABEL: fcmp_ogt_vf_swap_v8f16:
158 ; ZVFH:       # %bb.0:
159 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
160 ; ZVFH-NEXT:    vmflt.vf v0, v8, fa0, v0.t
161 ; ZVFH-NEXT:    ret
163 ; ZVFHMIN-LABEL: fcmp_ogt_vf_swap_v8f16:
164 ; ZVFHMIN:       # %bb.0:
165 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
166 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
167 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
168 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
169 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
170 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
171 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
172 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
173 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
174 ; ZVFHMIN-NEXT:    vmflt.vv v8, v10, v12, v0.t
175 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
176 ; ZVFHMIN-NEXT:    ret
177   %elt.head = insertelement <8 x half> poison, half %b, i32 0
178   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
179   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"ogt", <8 x i1> %m, i32 %evl)
180   ret <8 x i1> %v
183 define <8 x i1> @fcmp_oge_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
184 ; ZVFH-LABEL: fcmp_oge_vv_v8f16:
185 ; ZVFH:       # %bb.0:
186 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
187 ; ZVFH-NEXT:    vmfle.vv v0, v9, v8, v0.t
188 ; ZVFH-NEXT:    ret
190 ; ZVFHMIN-LABEL: fcmp_oge_vv_v8f16:
191 ; ZVFHMIN:       # %bb.0:
192 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
193 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
194 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
195 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
196 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
197 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
198 ; ZVFHMIN-NEXT:    ret
199   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oge", <8 x i1> %m, i32 %evl)
200   ret <8 x i1> %v
203 define <8 x i1> @fcmp_oge_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
204 ; ZVFH-LABEL: fcmp_oge_vf_v8f16:
205 ; ZVFH:       # %bb.0:
206 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
207 ; ZVFH-NEXT:    vmfge.vf v0, v8, fa0, v0.t
208 ; ZVFH-NEXT:    ret
210 ; ZVFHMIN-LABEL: fcmp_oge_vf_v8f16:
211 ; ZVFHMIN:       # %bb.0:
212 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
213 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
214 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
215 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
216 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
217 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
218 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
219 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
220 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
221 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
222 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
223 ; ZVFHMIN-NEXT:    ret
224   %elt.head = insertelement <8 x half> poison, half %b, i32 0
225   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
226   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"oge", <8 x i1> %m, i32 %evl)
227   ret <8 x i1> %v
230 define <8 x i1> @fcmp_oge_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
231 ; ZVFH-LABEL: fcmp_oge_vf_swap_v8f16:
232 ; ZVFH:       # %bb.0:
233 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
234 ; ZVFH-NEXT:    vmfle.vf v0, v8, fa0, v0.t
235 ; ZVFH-NEXT:    ret
237 ; ZVFHMIN-LABEL: fcmp_oge_vf_swap_v8f16:
238 ; ZVFHMIN:       # %bb.0:
239 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
240 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
241 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
242 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
243 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
244 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
245 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
246 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
247 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
248 ; ZVFHMIN-NEXT:    vmfle.vv v8, v10, v12, v0.t
249 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
250 ; ZVFHMIN-NEXT:    ret
251   %elt.head = insertelement <8 x half> poison, half %b, i32 0
252   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
253   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"oge", <8 x i1> %m, i32 %evl)
254   ret <8 x i1> %v
257 define <8 x i1> @fcmp_olt_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
258 ; ZVFH-LABEL: fcmp_olt_vv_v8f16:
259 ; ZVFH:       # %bb.0:
260 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
261 ; ZVFH-NEXT:    vmflt.vv v0, v8, v9, v0.t
262 ; ZVFH-NEXT:    ret
264 ; ZVFHMIN-LABEL: fcmp_olt_vv_v8f16:
265 ; ZVFHMIN:       # %bb.0:
266 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
267 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
268 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
269 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
270 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
271 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
272 ; ZVFHMIN-NEXT:    ret
273   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"olt", <8 x i1> %m, i32 %evl)
274   ret <8 x i1> %v
277 define <8 x i1> @fcmp_olt_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
278 ; ZVFH-LABEL: fcmp_olt_vf_v8f16:
279 ; ZVFH:       # %bb.0:
280 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
281 ; ZVFH-NEXT:    vmflt.vf v0, v8, fa0, v0.t
282 ; ZVFH-NEXT:    ret
284 ; ZVFHMIN-LABEL: fcmp_olt_vf_v8f16:
285 ; ZVFHMIN:       # %bb.0:
286 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
287 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
288 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
289 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
290 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
291 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
292 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
293 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
294 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
295 ; ZVFHMIN-NEXT:    vmflt.vv v8, v10, v12, v0.t
296 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
297 ; ZVFHMIN-NEXT:    ret
298   %elt.head = insertelement <8 x half> poison, half %b, i32 0
299   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
300   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"olt", <8 x i1> %m, i32 %evl)
301   ret <8 x i1> %v
304 define <8 x i1> @fcmp_olt_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
305 ; ZVFH-LABEL: fcmp_olt_vf_swap_v8f16:
306 ; ZVFH:       # %bb.0:
307 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
308 ; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0, v0.t
309 ; ZVFH-NEXT:    ret
311 ; ZVFHMIN-LABEL: fcmp_olt_vf_swap_v8f16:
312 ; ZVFHMIN:       # %bb.0:
313 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
314 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
315 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
316 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
317 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
318 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
319 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
320 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
321 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
322 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
323 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
324 ; ZVFHMIN-NEXT:    ret
325   %elt.head = insertelement <8 x half> poison, half %b, i32 0
326   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
327   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"olt", <8 x i1> %m, i32 %evl)
328   ret <8 x i1> %v
331 define <8 x i1> @fcmp_ole_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
332 ; ZVFH-LABEL: fcmp_ole_vv_v8f16:
333 ; ZVFH:       # %bb.0:
334 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
335 ; ZVFH-NEXT:    vmfle.vv v0, v8, v9, v0.t
336 ; ZVFH-NEXT:    ret
338 ; ZVFHMIN-LABEL: fcmp_ole_vv_v8f16:
339 ; ZVFHMIN:       # %bb.0:
340 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
341 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
342 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
343 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
344 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
345 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
346 ; ZVFHMIN-NEXT:    ret
347   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ole", <8 x i1> %m, i32 %evl)
348   ret <8 x i1> %v
351 define <8 x i1> @fcmp_ole_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
352 ; ZVFH-LABEL: fcmp_ole_vf_v8f16:
353 ; ZVFH:       # %bb.0:
354 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
355 ; ZVFH-NEXT:    vmfle.vf v0, v8, fa0, v0.t
356 ; ZVFH-NEXT:    ret
358 ; ZVFHMIN-LABEL: fcmp_ole_vf_v8f16:
359 ; ZVFHMIN:       # %bb.0:
360 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
361 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
362 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
363 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
364 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
365 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
366 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
367 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
368 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
369 ; ZVFHMIN-NEXT:    vmfle.vv v8, v10, v12, v0.t
370 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
371 ; ZVFHMIN-NEXT:    ret
372   %elt.head = insertelement <8 x half> poison, half %b, i32 0
373   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
374   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ole", <8 x i1> %m, i32 %evl)
375   ret <8 x i1> %v
378 define <8 x i1> @fcmp_ole_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
379 ; ZVFH-LABEL: fcmp_ole_vf_swap_v8f16:
380 ; ZVFH:       # %bb.0:
381 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
382 ; ZVFH-NEXT:    vmfge.vf v0, v8, fa0, v0.t
383 ; ZVFH-NEXT:    ret
385 ; ZVFHMIN-LABEL: fcmp_ole_vf_swap_v8f16:
386 ; ZVFHMIN:       # %bb.0:
387 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
388 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
389 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
390 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
391 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
392 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
393 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
394 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
395 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
396 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
397 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
398 ; ZVFHMIN-NEXT:    ret
399   %elt.head = insertelement <8 x half> poison, half %b, i32 0
400   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
401   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"ole", <8 x i1> %m, i32 %evl)
402   ret <8 x i1> %v
405 define <8 x i1> @fcmp_one_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
406 ; ZVFH-LABEL: fcmp_one_vv_v8f16:
407 ; ZVFH:       # %bb.0:
408 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
409 ; ZVFH-NEXT:    vmflt.vv v10, v8, v9, v0.t
410 ; ZVFH-NEXT:    vmflt.vv v8, v9, v8, v0.t
411 ; ZVFH-NEXT:    vmor.mm v0, v8, v10
412 ; ZVFH-NEXT:    ret
414 ; ZVFHMIN-LABEL: fcmp_one_vv_v8f16:
415 ; ZVFHMIN:       # %bb.0:
416 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
417 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
418 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
419 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
420 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
421 ; ZVFHMIN-NEXT:    vmflt.vv v9, v10, v12, v0.t
422 ; ZVFHMIN-NEXT:    vmor.mm v0, v9, v8
423 ; ZVFHMIN-NEXT:    ret
424   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"one", <8 x i1> %m, i32 %evl)
425   ret <8 x i1> %v
428 define <8 x i1> @fcmp_one_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
429 ; ZVFH-LABEL: fcmp_one_vf_v8f16:
430 ; ZVFH:       # %bb.0:
431 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
432 ; ZVFH-NEXT:    vmflt.vf v9, v8, fa0, v0.t
433 ; ZVFH-NEXT:    vmfgt.vf v8, v8, fa0, v0.t
434 ; ZVFH-NEXT:    vmor.mm v0, v8, v9
435 ; ZVFH-NEXT:    ret
437 ; ZVFHMIN-LABEL: fcmp_one_vf_v8f16:
438 ; ZVFHMIN:       # %bb.0:
439 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
440 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
441 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
442 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
443 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
444 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
445 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
446 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
447 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
448 ; ZVFHMIN-NEXT:    vmflt.vv v8, v10, v12, v0.t
449 ; ZVFHMIN-NEXT:    vmflt.vv v9, v12, v10, v0.t
450 ; ZVFHMIN-NEXT:    vmor.mm v0, v9, v8
451 ; ZVFHMIN-NEXT:    ret
452   %elt.head = insertelement <8 x half> poison, half %b, i32 0
453   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
454   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"one", <8 x i1> %m, i32 %evl)
455   ret <8 x i1> %v
458 define <8 x i1> @fcmp_one_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
459 ; ZVFH-LABEL: fcmp_one_vf_swap_v8f16:
460 ; ZVFH:       # %bb.0:
461 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
462 ; ZVFH-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
463 ; ZVFH-NEXT:    vmflt.vf v8, v8, fa0, v0.t
464 ; ZVFH-NEXT:    vmor.mm v0, v8, v9
465 ; ZVFH-NEXT:    ret
467 ; ZVFHMIN-LABEL: fcmp_one_vf_swap_v8f16:
468 ; ZVFHMIN:       # %bb.0:
469 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
470 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
471 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
472 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
473 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
474 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
475 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
476 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
477 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
478 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
479 ; ZVFHMIN-NEXT:    vmflt.vv v9, v10, v12, v0.t
480 ; ZVFHMIN-NEXT:    vmor.mm v0, v9, v8
481 ; ZVFHMIN-NEXT:    ret
482   %elt.head = insertelement <8 x half> poison, half %b, i32 0
483   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
484   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"one", <8 x i1> %m, i32 %evl)
485   ret <8 x i1> %v
488 define <8 x i1> @fcmp_ord_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
489 ; ZVFH-LABEL: fcmp_ord_vv_v8f16:
490 ; ZVFH:       # %bb.0:
491 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
492 ; ZVFH-NEXT:    vmfeq.vv v9, v9, v9, v0.t
493 ; ZVFH-NEXT:    vmfeq.vv v8, v8, v8, v0.t
494 ; ZVFH-NEXT:    vmand.mm v0, v8, v9
495 ; ZVFH-NEXT:    ret
497 ; ZVFHMIN-LABEL: fcmp_ord_vv_v8f16:
498 ; ZVFHMIN:       # %bb.0:
499 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
500 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
501 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
502 ; ZVFHMIN-NEXT:    vmfeq.vv v9, v10, v10, v0.t
503 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
504 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
505 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
506 ; ZVFHMIN-NEXT:    vmfeq.vv v8, v10, v10, v0.t
507 ; ZVFHMIN-NEXT:    vmand.mm v0, v8, v9
508 ; ZVFHMIN-NEXT:    ret
509   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ord", <8 x i1> %m, i32 %evl)
510   ret <8 x i1> %v
513 define <8 x i1> @fcmp_ord_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
514 ; ZVFH-LABEL: fcmp_ord_vf_v8f16:
515 ; ZVFH:       # %bb.0:
516 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
517 ; ZVFH-NEXT:    vfmv.v.f v9, fa0
518 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
519 ; ZVFH-NEXT:    vmfeq.vf v9, v9, fa0, v0.t
520 ; ZVFH-NEXT:    vmfeq.vv v8, v8, v8, v0.t
521 ; ZVFH-NEXT:    vmand.mm v0, v8, v9
522 ; ZVFH-NEXT:    ret
524 ; ZVFHMIN-LABEL: fcmp_ord_vf_v8f16:
525 ; ZVFHMIN:       # %bb.0:
526 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
527 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
528 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
529 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
530 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
531 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
532 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
533 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
534 ; ZVFHMIN-NEXT:    vmfeq.vv v8, v10, v10, v0.t
535 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
536 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
537 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
538 ; ZVFHMIN-NEXT:    vmfeq.vv v9, v10, v10, v0.t
539 ; ZVFHMIN-NEXT:    vmand.mm v0, v8, v9
540 ; ZVFHMIN-NEXT:    ret
541   %elt.head = insertelement <8 x half> poison, half %b, i32 0
542   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
543   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ord", <8 x i1> %m, i32 %evl)
544   ret <8 x i1> %v
547 define <8 x i1> @fcmp_ord_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
548 ; ZVFH-LABEL: fcmp_ord_vf_swap_v8f16:
549 ; ZVFH:       # %bb.0:
550 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
551 ; ZVFH-NEXT:    vfmv.v.f v9, fa0
552 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
553 ; ZVFH-NEXT:    vmfeq.vf v9, v9, fa0, v0.t
554 ; ZVFH-NEXT:    vmfeq.vv v8, v8, v8, v0.t
555 ; ZVFH-NEXT:    vmand.mm v0, v9, v8
556 ; ZVFH-NEXT:    ret
558 ; ZVFHMIN-LABEL: fcmp_ord_vf_swap_v8f16:
559 ; ZVFHMIN:       # %bb.0:
560 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
561 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
562 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
563 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
564 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
565 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
566 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
567 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
568 ; ZVFHMIN-NEXT:    vmfeq.vv v8, v10, v10, v0.t
569 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
570 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
571 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
572 ; ZVFHMIN-NEXT:    vmfeq.vv v9, v10, v10, v0.t
573 ; ZVFHMIN-NEXT:    vmand.mm v0, v9, v8
574 ; ZVFHMIN-NEXT:    ret
575   %elt.head = insertelement <8 x half> poison, half %b, i32 0
576   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
577   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"ord", <8 x i1> %m, i32 %evl)
578   ret <8 x i1> %v
581 define <8 x i1> @fcmp_ueq_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
582 ; ZVFH-LABEL: fcmp_ueq_vv_v8f16:
583 ; ZVFH:       # %bb.0:
584 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
585 ; ZVFH-NEXT:    vmflt.vv v10, v8, v9, v0.t
586 ; ZVFH-NEXT:    vmflt.vv v8, v9, v8, v0.t
587 ; ZVFH-NEXT:    vmnor.mm v0, v8, v10
588 ; ZVFH-NEXT:    ret
590 ; ZVFHMIN-LABEL: fcmp_ueq_vv_v8f16:
591 ; ZVFHMIN:       # %bb.0:
592 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
593 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
594 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
595 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
596 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
597 ; ZVFHMIN-NEXT:    vmflt.vv v9, v10, v12, v0.t
598 ; ZVFHMIN-NEXT:    vmnor.mm v0, v9, v8
599 ; ZVFHMIN-NEXT:    ret
600   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ueq", <8 x i1> %m, i32 %evl)
601   ret <8 x i1> %v
604 define <8 x i1> @fcmp_ueq_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
605 ; ZVFH-LABEL: fcmp_ueq_vf_v8f16:
606 ; ZVFH:       # %bb.0:
607 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
608 ; ZVFH-NEXT:    vmflt.vf v9, v8, fa0, v0.t
609 ; ZVFH-NEXT:    vmfgt.vf v8, v8, fa0, v0.t
610 ; ZVFH-NEXT:    vmnor.mm v0, v8, v9
611 ; ZVFH-NEXT:    ret
613 ; ZVFHMIN-LABEL: fcmp_ueq_vf_v8f16:
614 ; ZVFHMIN:       # %bb.0:
615 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
616 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
617 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
618 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
619 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
620 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
621 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
622 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
623 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
624 ; ZVFHMIN-NEXT:    vmflt.vv v8, v10, v12, v0.t
625 ; ZVFHMIN-NEXT:    vmflt.vv v9, v12, v10, v0.t
626 ; ZVFHMIN-NEXT:    vmnor.mm v0, v9, v8
627 ; ZVFHMIN-NEXT:    ret
628   %elt.head = insertelement <8 x half> poison, half %b, i32 0
629   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
630   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ueq", <8 x i1> %m, i32 %evl)
631   ret <8 x i1> %v
634 define <8 x i1> @fcmp_ueq_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
635 ; ZVFH-LABEL: fcmp_ueq_vf_swap_v8f16:
636 ; ZVFH:       # %bb.0:
637 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
638 ; ZVFH-NEXT:    vmfgt.vf v9, v8, fa0, v0.t
639 ; ZVFH-NEXT:    vmflt.vf v8, v8, fa0, v0.t
640 ; ZVFH-NEXT:    vmnor.mm v0, v8, v9
641 ; ZVFH-NEXT:    ret
643 ; ZVFHMIN-LABEL: fcmp_ueq_vf_swap_v8f16:
644 ; ZVFHMIN:       # %bb.0:
645 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
646 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
647 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
648 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
649 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
650 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
651 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
652 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
653 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
654 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
655 ; ZVFHMIN-NEXT:    vmflt.vv v9, v10, v12, v0.t
656 ; ZVFHMIN-NEXT:    vmnor.mm v0, v9, v8
657 ; ZVFHMIN-NEXT:    ret
658   %elt.head = insertelement <8 x half> poison, half %b, i32 0
659   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
660   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"ueq", <8 x i1> %m, i32 %evl)
661   ret <8 x i1> %v
664 define <8 x i1> @fcmp_ugt_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
665 ; ZVFH-LABEL: fcmp_ugt_vv_v8f16:
666 ; ZVFH:       # %bb.0:
667 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
668 ; ZVFH-NEXT:    vmfle.vv v8, v8, v9, v0.t
669 ; ZVFH-NEXT:    vmnot.m v0, v8
670 ; ZVFH-NEXT:    ret
672 ; ZVFHMIN-LABEL: fcmp_ugt_vv_v8f16:
673 ; ZVFHMIN:       # %bb.0:
674 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
675 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
676 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
677 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
678 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
679 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
680 ; ZVFHMIN-NEXT:    ret
681   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)
682   ret <8 x i1> %v
685 define <8 x i1> @fcmp_ugt_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
686 ; ZVFH-LABEL: fcmp_ugt_vf_v8f16:
687 ; ZVFH:       # %bb.0:
688 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
689 ; ZVFH-NEXT:    vmfle.vf v8, v8, fa0, v0.t
690 ; ZVFH-NEXT:    vmnot.m v0, v8
691 ; ZVFH-NEXT:    ret
693 ; ZVFHMIN-LABEL: fcmp_ugt_vf_v8f16:
694 ; ZVFHMIN:       # %bb.0:
695 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
696 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
697 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
698 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
699 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
700 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
701 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
702 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
703 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
704 ; ZVFHMIN-NEXT:    vmfle.vv v8, v10, v12, v0.t
705 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
706 ; ZVFHMIN-NEXT:    ret
707   %elt.head = insertelement <8 x half> poison, half %b, i32 0
708   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
709   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)
710   ret <8 x i1> %v
713 define <8 x i1> @fcmp_ugt_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
714 ; ZVFH-LABEL: fcmp_ugt_vf_swap_v8f16:
715 ; ZVFH:       # %bb.0:
716 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
717 ; ZVFH-NEXT:    vmfge.vf v8, v8, fa0, v0.t
718 ; ZVFH-NEXT:    vmnot.m v0, v8
719 ; ZVFH-NEXT:    ret
721 ; ZVFHMIN-LABEL: fcmp_ugt_vf_swap_v8f16:
722 ; ZVFHMIN:       # %bb.0:
723 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
724 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
725 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
726 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
727 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
728 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
729 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
730 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
731 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
732 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
733 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
734 ; ZVFHMIN-NEXT:    ret
735   %elt.head = insertelement <8 x half> poison, half %b, i32 0
736   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
737   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)
738   ret <8 x i1> %v
741 define <8 x i1> @fcmp_uge_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
742 ; ZVFH-LABEL: fcmp_uge_vv_v8f16:
743 ; ZVFH:       # %bb.0:
744 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
745 ; ZVFH-NEXT:    vmflt.vv v8, v8, v9, v0.t
746 ; ZVFH-NEXT:    vmnot.m v0, v8
747 ; ZVFH-NEXT:    ret
749 ; ZVFHMIN-LABEL: fcmp_uge_vv_v8f16:
750 ; ZVFHMIN:       # %bb.0:
751 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
752 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
753 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
754 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
755 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
756 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
757 ; ZVFHMIN-NEXT:    ret
758   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)
759   ret <8 x i1> %v
762 define <8 x i1> @fcmp_uge_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
763 ; ZVFH-LABEL: fcmp_uge_vf_v8f16:
764 ; ZVFH:       # %bb.0:
765 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
766 ; ZVFH-NEXT:    vmflt.vf v8, v8, fa0, v0.t
767 ; ZVFH-NEXT:    vmnot.m v0, v8
768 ; ZVFH-NEXT:    ret
770 ; ZVFHMIN-LABEL: fcmp_uge_vf_v8f16:
771 ; ZVFHMIN:       # %bb.0:
772 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
773 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
774 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
775 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
776 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
777 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
778 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
779 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
780 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
781 ; ZVFHMIN-NEXT:    vmflt.vv v8, v10, v12, v0.t
782 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
783 ; ZVFHMIN-NEXT:    ret
784   %elt.head = insertelement <8 x half> poison, half %b, i32 0
785   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
786   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)
787   ret <8 x i1> %v
790 define <8 x i1> @fcmp_uge_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
791 ; ZVFH-LABEL: fcmp_uge_vf_swap_v8f16:
792 ; ZVFH:       # %bb.0:
793 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
794 ; ZVFH-NEXT:    vmfgt.vf v8, v8, fa0, v0.t
795 ; ZVFH-NEXT:    vmnot.m v0, v8
796 ; ZVFH-NEXT:    ret
798 ; ZVFHMIN-LABEL: fcmp_uge_vf_swap_v8f16:
799 ; ZVFHMIN:       # %bb.0:
800 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
801 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
802 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
803 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
804 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
805 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
806 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
807 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
808 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
809 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
810 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
811 ; ZVFHMIN-NEXT:    ret
812   %elt.head = insertelement <8 x half> poison, half %b, i32 0
813   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
814   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"uge", <8 x i1> %m, i32 %evl)
815   ret <8 x i1> %v
818 define <8 x i1> @fcmp_ult_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
819 ; ZVFH-LABEL: fcmp_ult_vv_v8f16:
820 ; ZVFH:       # %bb.0:
821 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
822 ; ZVFH-NEXT:    vmfle.vv v8, v9, v8, v0.t
823 ; ZVFH-NEXT:    vmnot.m v0, v8
824 ; ZVFH-NEXT:    ret
826 ; ZVFHMIN-LABEL: fcmp_ult_vv_v8f16:
827 ; ZVFHMIN:       # %bb.0:
828 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
829 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
830 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
831 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
832 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
833 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
834 ; ZVFHMIN-NEXT:    ret
835   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)
836   ret <8 x i1> %v
839 define <8 x i1> @fcmp_ult_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
840 ; ZVFH-LABEL: fcmp_ult_vf_v8f16:
841 ; ZVFH:       # %bb.0:
842 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
843 ; ZVFH-NEXT:    vmfge.vf v8, v8, fa0, v0.t
844 ; ZVFH-NEXT:    vmnot.m v0, v8
845 ; ZVFH-NEXT:    ret
847 ; ZVFHMIN-LABEL: fcmp_ult_vf_v8f16:
848 ; ZVFHMIN:       # %bb.0:
849 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
850 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
851 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
852 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
853 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
854 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
855 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
856 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
857 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
858 ; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v10, v0.t
859 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
860 ; ZVFHMIN-NEXT:    ret
861   %elt.head = insertelement <8 x half> poison, half %b, i32 0
862   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
863   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)
864   ret <8 x i1> %v
867 define <8 x i1> @fcmp_ult_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
868 ; ZVFH-LABEL: fcmp_ult_vf_swap_v8f16:
869 ; ZVFH:       # %bb.0:
870 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
871 ; ZVFH-NEXT:    vmfle.vf v8, v8, fa0, v0.t
872 ; ZVFH-NEXT:    vmnot.m v0, v8
873 ; ZVFH-NEXT:    ret
875 ; ZVFHMIN-LABEL: fcmp_ult_vf_swap_v8f16:
876 ; ZVFHMIN:       # %bb.0:
877 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
878 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
879 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
880 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
881 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
882 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
883 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
884 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
885 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
886 ; ZVFHMIN-NEXT:    vmfle.vv v8, v10, v12, v0.t
887 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
888 ; ZVFHMIN-NEXT:    ret
889   %elt.head = insertelement <8 x half> poison, half %b, i32 0
890   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
891   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"ult", <8 x i1> %m, i32 %evl)
892   ret <8 x i1> %v
895 define <8 x i1> @fcmp_ule_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
896 ; ZVFH-LABEL: fcmp_ule_vv_v8f16:
897 ; ZVFH:       # %bb.0:
898 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
899 ; ZVFH-NEXT:    vmflt.vv v8, v9, v8, v0.t
900 ; ZVFH-NEXT:    vmnot.m v0, v8
901 ; ZVFH-NEXT:    ret
903 ; ZVFHMIN-LABEL: fcmp_ule_vv_v8f16:
904 ; ZVFHMIN:       # %bb.0:
905 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
906 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
907 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
908 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
909 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
910 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
911 ; ZVFHMIN-NEXT:    ret
912   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ule", <8 x i1> %m, i32 %evl)
913   ret <8 x i1> %v
916 define <8 x i1> @fcmp_ule_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
917 ; ZVFH-LABEL: fcmp_ule_vf_v8f16:
918 ; ZVFH:       # %bb.0:
919 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
920 ; ZVFH-NEXT:    vmfgt.vf v8, v8, fa0, v0.t
921 ; ZVFH-NEXT:    vmnot.m v0, v8
922 ; ZVFH-NEXT:    ret
924 ; ZVFHMIN-LABEL: fcmp_ule_vf_v8f16:
925 ; ZVFHMIN:       # %bb.0:
926 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
927 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
928 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
929 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
930 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
931 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
932 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
933 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
934 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
935 ; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v10, v0.t
936 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
937 ; ZVFHMIN-NEXT:    ret
938   %elt.head = insertelement <8 x half> poison, half %b, i32 0
939   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
940   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"ule", <8 x i1> %m, i32 %evl)
941   ret <8 x i1> %v
944 define <8 x i1> @fcmp_ule_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
945 ; ZVFH-LABEL: fcmp_ule_vf_swap_v8f16:
946 ; ZVFH:       # %bb.0:
947 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
948 ; ZVFH-NEXT:    vmflt.vf v8, v8, fa0, v0.t
949 ; ZVFH-NEXT:    vmnot.m v0, v8
950 ; ZVFH-NEXT:    ret
952 ; ZVFHMIN-LABEL: fcmp_ule_vf_swap_v8f16:
953 ; ZVFHMIN:       # %bb.0:
954 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
955 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
956 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
957 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
958 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
959 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
960 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
961 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
962 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
963 ; ZVFHMIN-NEXT:    vmflt.vv v8, v10, v12, v0.t
964 ; ZVFHMIN-NEXT:    vmnot.m v0, v8
965 ; ZVFHMIN-NEXT:    ret
966   %elt.head = insertelement <8 x half> poison, half %b, i32 0
967   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
968   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"ule", <8 x i1> %m, i32 %evl)
969   ret <8 x i1> %v
972 define <8 x i1> @fcmp_une_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
973 ; ZVFH-LABEL: fcmp_une_vv_v8f16:
974 ; ZVFH:       # %bb.0:
975 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
976 ; ZVFH-NEXT:    vmfne.vv v0, v8, v9, v0.t
977 ; ZVFH-NEXT:    ret
979 ; ZVFHMIN-LABEL: fcmp_une_vv_v8f16:
980 ; ZVFHMIN:       # %bb.0:
981 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
982 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
983 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
984 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
985 ; ZVFHMIN-NEXT:    vmfne.vv v8, v12, v10, v0.t
986 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
987 ; ZVFHMIN-NEXT:    ret
988   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"une", <8 x i1> %m, i32 %evl)
989   ret <8 x i1> %v
992 define <8 x i1> @fcmp_une_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
993 ; ZVFH-LABEL: fcmp_une_vf_v8f16:
994 ; ZVFH:       # %bb.0:
995 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
996 ; ZVFH-NEXT:    vmfne.vf v0, v8, fa0, v0.t
997 ; ZVFH-NEXT:    ret
999 ; ZVFHMIN-LABEL: fcmp_une_vf_v8f16:
1000 ; ZVFHMIN:       # %bb.0:
1001 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
1002 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
1003 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
1004 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1005 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
1006 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1007 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1008 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1009 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1010 ; ZVFHMIN-NEXT:    vmfne.vv v8, v10, v12, v0.t
1011 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
1012 ; ZVFHMIN-NEXT:    ret
1013   %elt.head = insertelement <8 x half> poison, half %b, i32 0
1014   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
1015   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"une", <8 x i1> %m, i32 %evl)
1016   ret <8 x i1> %v
1019 define <8 x i1> @fcmp_une_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
1020 ; ZVFH-LABEL: fcmp_une_vf_swap_v8f16:
1021 ; ZVFH:       # %bb.0:
1022 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1023 ; ZVFH-NEXT:    vmfne.vf v0, v8, fa0, v0.t
1024 ; ZVFH-NEXT:    ret
1026 ; ZVFHMIN-LABEL: fcmp_une_vf_swap_v8f16:
1027 ; ZVFHMIN:       # %bb.0:
1028 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
1029 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
1030 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
1031 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1032 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
1033 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1034 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1035 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v9
1036 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1037 ; ZVFHMIN-NEXT:    vmfne.vv v8, v12, v10, v0.t
1038 ; ZVFHMIN-NEXT:    vmv1r.v v0, v8
1039 ; ZVFHMIN-NEXT:    ret
1040   %elt.head = insertelement <8 x half> poison, half %b, i32 0
1041   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
1042   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"une", <8 x i1> %m, i32 %evl)
1043   ret <8 x i1> %v
1046 define <8 x i1> @fcmp_uno_vv_v8f16(<8 x half> %va, <8 x half> %vb, <8 x i1> %m, i32 zeroext %evl) {
1047 ; ZVFH-LABEL: fcmp_uno_vv_v8f16:
1048 ; ZVFH:       # %bb.0:
1049 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1050 ; ZVFH-NEXT:    vmfne.vv v9, v9, v9, v0.t
1051 ; ZVFH-NEXT:    vmfne.vv v8, v8, v8, v0.t
1052 ; ZVFH-NEXT:    vmor.mm v0, v8, v9
1053 ; ZVFH-NEXT:    ret
1055 ; ZVFHMIN-LABEL: fcmp_uno_vv_v8f16:
1056 ; ZVFHMIN:       # %bb.0:
1057 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1058 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1059 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1060 ; ZVFHMIN-NEXT:    vmfne.vv v9, v10, v10, v0.t
1061 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1062 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1063 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1064 ; ZVFHMIN-NEXT:    vmfne.vv v8, v10, v10, v0.t
1065 ; ZVFHMIN-NEXT:    vmor.mm v0, v8, v9
1066 ; ZVFHMIN-NEXT:    ret
1067   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uno", <8 x i1> %m, i32 %evl)
1068   ret <8 x i1> %v
1071 define <8 x i1> @fcmp_uno_vf_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
1072 ; ZVFH-LABEL: fcmp_uno_vf_v8f16:
1073 ; ZVFH:       # %bb.0:
1074 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1075 ; ZVFH-NEXT:    vfmv.v.f v9, fa0
1076 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1077 ; ZVFH-NEXT:    vmfne.vf v9, v9, fa0, v0.t
1078 ; ZVFH-NEXT:    vmfne.vv v8, v8, v8, v0.t
1079 ; ZVFH-NEXT:    vmor.mm v0, v8, v9
1080 ; ZVFH-NEXT:    ret
1082 ; ZVFHMIN-LABEL: fcmp_uno_vf_v8f16:
1083 ; ZVFHMIN:       # %bb.0:
1084 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
1085 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
1086 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
1087 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1088 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
1089 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1090 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1091 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1092 ; ZVFHMIN-NEXT:    vmfne.vv v8, v10, v10, v0.t
1093 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1094 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1095 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1096 ; ZVFHMIN-NEXT:    vmfne.vv v9, v10, v10, v0.t
1097 ; ZVFHMIN-NEXT:    vmor.mm v0, v8, v9
1098 ; ZVFHMIN-NEXT:    ret
1099   %elt.head = insertelement <8 x half> poison, half %b, i32 0
1100   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
1101   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"uno", <8 x i1> %m, i32 %evl)
1102   ret <8 x i1> %v
1105 define <8 x i1> @fcmp_uno_vf_swap_v8f16(<8 x half> %va, half %b, <8 x i1> %m, i32 zeroext %evl) {
1106 ; ZVFH-LABEL: fcmp_uno_vf_swap_v8f16:
1107 ; ZVFH:       # %bb.0:
1108 ; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1109 ; ZVFH-NEXT:    vfmv.v.f v9, fa0
1110 ; ZVFH-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
1111 ; ZVFH-NEXT:    vmfne.vf v9, v9, fa0, v0.t
1112 ; ZVFH-NEXT:    vmfne.vv v8, v8, v8, v0.t
1113 ; ZVFH-NEXT:    vmor.mm v0, v9, v8
1114 ; ZVFH-NEXT:    ret
1116 ; ZVFHMIN-LABEL: fcmp_uno_vf_swap_v8f16:
1117 ; ZVFHMIN:       # %bb.0:
1118 ; ZVFHMIN-NEXT:    fcvt.s.h fa5, fa0
1119 ; ZVFHMIN-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
1120 ; ZVFHMIN-NEXT:    vfmv.v.f v10, fa5
1121 ; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma
1122 ; ZVFHMIN-NEXT:    vfncvt.f.f.w v9, v10
1123 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1124 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8
1125 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1126 ; ZVFHMIN-NEXT:    vmfne.vv v8, v10, v10, v0.t
1127 ; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1128 ; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9
1129 ; ZVFHMIN-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1130 ; ZVFHMIN-NEXT:    vmfne.vv v9, v10, v10, v0.t
1131 ; ZVFHMIN-NEXT:    vmor.mm v0, v9, v8
1132 ; ZVFHMIN-NEXT:    ret
1133   %elt.head = insertelement <8 x half> poison, half %b, i32 0
1134   %vb = shufflevector <8 x half> %elt.head, <8 x half> poison, <8 x i32> zeroinitializer
1135   %v = call <8 x i1> @llvm.vp.fcmp.v8f16(<8 x half> %vb, <8 x half> %va, metadata !"uno", <8 x i1> %m, i32 %evl)
1136   ret <8 x i1> %v
1139 declare <128 x i1> @llvm.vp.fcmp.v128f16(<128 x half>, <128 x half>, metadata, <128 x i1>, i32)
1141 define <128 x i1> @fcmp_oeq_vv_v128f16(<128 x half> %va, <128 x half> %vb, <128 x i1> %m, i32 zeroext %evl) {
1142   %v = call <128 x i1> @llvm.vp.fcmp.v128f16(<128 x half> %va, <128 x half> %vb, metadata !"oeq", <128 x i1> %m, i32 %evl)
1143   ret <128 x i1> %v
1146 declare <7 x i1> @llvm.vp.fcmp.v7f64(<7 x double>, <7 x double>, metadata, <7 x i1>, i32)
1148 define <7 x i1> @fcmp_oeq_vv_v7f64(<7 x double> %va, <7 x double> %vb, <7 x i1> %m, i32 zeroext %evl) {
1149 ; CHECK-LABEL: fcmp_oeq_vv_v7f64:
1150 ; CHECK:       # %bb.0:
1151 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1152 ; CHECK-NEXT:    vmfeq.vv v16, v8, v12, v0.t
1153 ; CHECK-NEXT:    vmv1r.v v0, v16
1154 ; CHECK-NEXT:    ret
1155   %v = call <7 x i1> @llvm.vp.fcmp.v7f64(<7 x double> %va, <7 x double> %vb, metadata !"oeq", <7 x i1> %m, i32 %evl)
1156   ret <7 x i1> %v
1159 declare <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double>, <8 x double>, metadata, <8 x i1>, i32)
1161 define <8 x i1> @fcmp_oeq_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1162 ; CHECK-LABEL: fcmp_oeq_vv_v8f64:
1163 ; CHECK:       # %bb.0:
1164 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1165 ; CHECK-NEXT:    vmfeq.vv v16, v8, v12, v0.t
1166 ; CHECK-NEXT:    vmv1r.v v0, v16
1167 ; CHECK-NEXT:    ret
1168   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oeq", <8 x i1> %m, i32 %evl)
1169   ret <8 x i1> %v
1172 define <8 x i1> @fcmp_oeq_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1173 ; CHECK-LABEL: fcmp_oeq_vf_v8f64:
1174 ; CHECK:       # %bb.0:
1175 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1176 ; CHECK-NEXT:    vmfeq.vf v12, v8, fa0, v0.t
1177 ; CHECK-NEXT:    vmv1r.v v0, v12
1178 ; CHECK-NEXT:    ret
1179   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1180   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1181   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oeq", <8 x i1> %m, i32 %evl)
1182   ret <8 x i1> %v
1185 define <8 x i1> @fcmp_oeq_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1186 ; CHECK-LABEL: fcmp_oeq_vf_swap_v8f64:
1187 ; CHECK:       # %bb.0:
1188 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1189 ; CHECK-NEXT:    vmfeq.vf v12, v8, fa0, v0.t
1190 ; CHECK-NEXT:    vmv1r.v v0, v12
1191 ; CHECK-NEXT:    ret
1192   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1193   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1194   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"oeq", <8 x i1> %m, i32 %evl)
1195   ret <8 x i1> %v
1198 define <8 x i1> @fcmp_ogt_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1199 ; CHECK-LABEL: fcmp_ogt_vv_v8f64:
1200 ; CHECK:       # %bb.0:
1201 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1202 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
1203 ; CHECK-NEXT:    vmv1r.v v0, v16
1204 ; CHECK-NEXT:    ret
1205   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ogt", <8 x i1> %m, i32 %evl)
1206   ret <8 x i1> %v
1209 define <8 x i1> @fcmp_ogt_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1210 ; CHECK-LABEL: fcmp_ogt_vf_v8f64:
1211 ; CHECK:       # %bb.0:
1212 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1213 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
1214 ; CHECK-NEXT:    vmv1r.v v0, v12
1215 ; CHECK-NEXT:    ret
1216   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1217   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1218   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ogt", <8 x i1> %m, i32 %evl)
1219   ret <8 x i1> %v
1222 define <8 x i1> @fcmp_ogt_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1223 ; CHECK-LABEL: fcmp_ogt_vf_swap_v8f64:
1224 ; CHECK:       # %bb.0:
1225 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1226 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
1227 ; CHECK-NEXT:    vmv1r.v v0, v12
1228 ; CHECK-NEXT:    ret
1229   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1230   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1231   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"ogt", <8 x i1> %m, i32 %evl)
1232   ret <8 x i1> %v
1235 define <8 x i1> @fcmp_oge_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1236 ; CHECK-LABEL: fcmp_oge_vv_v8f64:
1237 ; CHECK:       # %bb.0:
1238 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1239 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
1240 ; CHECK-NEXT:    vmv1r.v v0, v16
1241 ; CHECK-NEXT:    ret
1242   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oge", <8 x i1> %m, i32 %evl)
1243   ret <8 x i1> %v
1246 define <8 x i1> @fcmp_oge_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1247 ; CHECK-LABEL: fcmp_oge_vf_v8f64:
1248 ; CHECK:       # %bb.0:
1249 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1250 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
1251 ; CHECK-NEXT:    vmv1r.v v0, v12
1252 ; CHECK-NEXT:    ret
1253   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1254   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1255   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"oge", <8 x i1> %m, i32 %evl)
1256   ret <8 x i1> %v
1259 define <8 x i1> @fcmp_oge_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1260 ; CHECK-LABEL: fcmp_oge_vf_swap_v8f64:
1261 ; CHECK:       # %bb.0:
1262 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1263 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
1264 ; CHECK-NEXT:    vmv1r.v v0, v12
1265 ; CHECK-NEXT:    ret
1266   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1267   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1268   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"oge", <8 x i1> %m, i32 %evl)
1269   ret <8 x i1> %v
1272 define <8 x i1> @fcmp_olt_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1273 ; CHECK-LABEL: fcmp_olt_vv_v8f64:
1274 ; CHECK:       # %bb.0:
1275 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1276 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
1277 ; CHECK-NEXT:    vmv1r.v v0, v16
1278 ; CHECK-NEXT:    ret
1279   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"olt", <8 x i1> %m, i32 %evl)
1280   ret <8 x i1> %v
1283 define <8 x i1> @fcmp_olt_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1284 ; CHECK-LABEL: fcmp_olt_vf_v8f64:
1285 ; CHECK:       # %bb.0:
1286 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1287 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
1288 ; CHECK-NEXT:    vmv1r.v v0, v12
1289 ; CHECK-NEXT:    ret
1290   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1291   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1292   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"olt", <8 x i1> %m, i32 %evl)
1293   ret <8 x i1> %v
1296 define <8 x i1> @fcmp_olt_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1297 ; CHECK-LABEL: fcmp_olt_vf_swap_v8f64:
1298 ; CHECK:       # %bb.0:
1299 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1300 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
1301 ; CHECK-NEXT:    vmv1r.v v0, v12
1302 ; CHECK-NEXT:    ret
1303   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1304   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1305   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"olt", <8 x i1> %m, i32 %evl)
1306   ret <8 x i1> %v
1309 define <8 x i1> @fcmp_ole_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1310 ; CHECK-LABEL: fcmp_ole_vv_v8f64:
1311 ; CHECK:       # %bb.0:
1312 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1313 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
1314 ; CHECK-NEXT:    vmv1r.v v0, v16
1315 ; CHECK-NEXT:    ret
1316   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ole", <8 x i1> %m, i32 %evl)
1317   ret <8 x i1> %v
1320 define <8 x i1> @fcmp_ole_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1321 ; CHECK-LABEL: fcmp_ole_vf_v8f64:
1322 ; CHECK:       # %bb.0:
1323 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1324 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
1325 ; CHECK-NEXT:    vmv1r.v v0, v12
1326 ; CHECK-NEXT:    ret
1327   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1328   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1329   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ole", <8 x i1> %m, i32 %evl)
1330   ret <8 x i1> %v
1333 define <8 x i1> @fcmp_ole_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1334 ; CHECK-LABEL: fcmp_ole_vf_swap_v8f64:
1335 ; CHECK:       # %bb.0:
1336 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1337 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
1338 ; CHECK-NEXT:    vmv1r.v v0, v12
1339 ; CHECK-NEXT:    ret
1340   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1341   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1342   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"ole", <8 x i1> %m, i32 %evl)
1343   ret <8 x i1> %v
1346 define <8 x i1> @fcmp_one_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1347 ; CHECK-LABEL: fcmp_one_vv_v8f64:
1348 ; CHECK:       # %bb.0:
1349 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1350 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
1351 ; CHECK-NEXT:    vmflt.vv v17, v12, v8, v0.t
1352 ; CHECK-NEXT:    vmor.mm v0, v17, v16
1353 ; CHECK-NEXT:    ret
1354   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"one", <8 x i1> %m, i32 %evl)
1355   ret <8 x i1> %v
1358 define <8 x i1> @fcmp_one_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1359 ; CHECK-LABEL: fcmp_one_vf_v8f64:
1360 ; CHECK:       # %bb.0:
1361 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1362 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
1363 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
1364 ; CHECK-NEXT:    vmor.mm v0, v13, v12
1365 ; CHECK-NEXT:    ret
1366   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1367   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1368   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"one", <8 x i1> %m, i32 %evl)
1369   ret <8 x i1> %v
1372 define <8 x i1> @fcmp_one_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1373 ; CHECK-LABEL: fcmp_one_vf_swap_v8f64:
1374 ; CHECK:       # %bb.0:
1375 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1376 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
1377 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
1378 ; CHECK-NEXT:    vmor.mm v0, v13, v12
1379 ; CHECK-NEXT:    ret
1380   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1381   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1382   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"one", <8 x i1> %m, i32 %evl)
1383   ret <8 x i1> %v
1386 define <8 x i1> @fcmp_ord_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1387 ; CHECK-LABEL: fcmp_ord_vv_v8f64:
1388 ; CHECK:       # %bb.0:
1389 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1390 ; CHECK-NEXT:    vmfeq.vv v16, v12, v12, v0.t
1391 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8, v0.t
1392 ; CHECK-NEXT:    vmand.mm v0, v12, v16
1393 ; CHECK-NEXT:    ret
1394   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ord", <8 x i1> %m, i32 %evl)
1395   ret <8 x i1> %v
1398 define <8 x i1> @fcmp_ord_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1399 ; CHECK-LABEL: fcmp_ord_vf_v8f64:
1400 ; CHECK:       # %bb.0:
1401 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1402 ; CHECK-NEXT:    vfmv.v.f v12, fa0
1403 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1404 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0, v0.t
1405 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8, v0.t
1406 ; CHECK-NEXT:    vmand.mm v0, v12, v16
1407 ; CHECK-NEXT:    ret
1408   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1409   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1410   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ord", <8 x i1> %m, i32 %evl)
1411   ret <8 x i1> %v
1414 define <8 x i1> @fcmp_ord_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1415 ; CHECK-LABEL: fcmp_ord_vf_swap_v8f64:
1416 ; CHECK:       # %bb.0:
1417 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1418 ; CHECK-NEXT:    vfmv.v.f v12, fa0
1419 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1420 ; CHECK-NEXT:    vmfeq.vf v16, v12, fa0, v0.t
1421 ; CHECK-NEXT:    vmfeq.vv v12, v8, v8, v0.t
1422 ; CHECK-NEXT:    vmand.mm v0, v16, v12
1423 ; CHECK-NEXT:    ret
1424   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1425   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1426   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"ord", <8 x i1> %m, i32 %evl)
1427   ret <8 x i1> %v
1430 define <8 x i1> @fcmp_ueq_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1431 ; CHECK-LABEL: fcmp_ueq_vv_v8f64:
1432 ; CHECK:       # %bb.0:
1433 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1434 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
1435 ; CHECK-NEXT:    vmflt.vv v17, v12, v8, v0.t
1436 ; CHECK-NEXT:    vmnor.mm v0, v17, v16
1437 ; CHECK-NEXT:    ret
1438   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ueq", <8 x i1> %m, i32 %evl)
1439   ret <8 x i1> %v
1442 define <8 x i1> @fcmp_ueq_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1443 ; CHECK-LABEL: fcmp_ueq_vf_v8f64:
1444 ; CHECK:       # %bb.0:
1445 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1446 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
1447 ; CHECK-NEXT:    vmfgt.vf v13, v8, fa0, v0.t
1448 ; CHECK-NEXT:    vmnor.mm v0, v13, v12
1449 ; CHECK-NEXT:    ret
1450   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1451   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1452   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ueq", <8 x i1> %m, i32 %evl)
1453   ret <8 x i1> %v
1456 define <8 x i1> @fcmp_ueq_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1457 ; CHECK-LABEL: fcmp_ueq_vf_swap_v8f64:
1458 ; CHECK:       # %bb.0:
1459 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1460 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
1461 ; CHECK-NEXT:    vmflt.vf v13, v8, fa0, v0.t
1462 ; CHECK-NEXT:    vmnor.mm v0, v13, v12
1463 ; CHECK-NEXT:    ret
1464   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1465   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1466   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"ueq", <8 x i1> %m, i32 %evl)
1467   ret <8 x i1> %v
1470 define <8 x i1> @fcmp_ugt_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1471 ; CHECK-LABEL: fcmp_ugt_vv_v8f64:
1472 ; CHECK:       # %bb.0:
1473 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1474 ; CHECK-NEXT:    vmfle.vv v16, v8, v12, v0.t
1475 ; CHECK-NEXT:    vmnot.m v0, v16
1476 ; CHECK-NEXT:    ret
1477   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)
1478   ret <8 x i1> %v
1481 define <8 x i1> @fcmp_ugt_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1482 ; CHECK-LABEL: fcmp_ugt_vf_v8f64:
1483 ; CHECK:       # %bb.0:
1484 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1485 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
1486 ; CHECK-NEXT:    vmnot.m v0, v12
1487 ; CHECK-NEXT:    ret
1488   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1489   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1490   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ugt", <8 x i1> %m, i32 %evl)
1491   ret <8 x i1> %v
1494 define <8 x i1> @fcmp_ugt_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1495 ; CHECK-LABEL: fcmp_ugt_vf_swap_v8f64:
1496 ; CHECK:       # %bb.0:
1497 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1498 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
1499 ; CHECK-NEXT:    vmnot.m v0, v12
1500 ; CHECK-NEXT:    ret
1501   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1502   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1503   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"ugt", <8 x i1> %m, i32 %evl)
1504   ret <8 x i1> %v
1507 define <8 x i1> @fcmp_uge_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1508 ; CHECK-LABEL: fcmp_uge_vv_v8f64:
1509 ; CHECK:       # %bb.0:
1510 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1511 ; CHECK-NEXT:    vmflt.vv v16, v8, v12, v0.t
1512 ; CHECK-NEXT:    vmnot.m v0, v16
1513 ; CHECK-NEXT:    ret
1514   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)
1515   ret <8 x i1> %v
1518 define <8 x i1> @fcmp_uge_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1519 ; CHECK-LABEL: fcmp_uge_vf_v8f64:
1520 ; CHECK:       # %bb.0:
1521 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1522 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
1523 ; CHECK-NEXT:    vmnot.m v0, v12
1524 ; CHECK-NEXT:    ret
1525   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1526   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1527   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uge", <8 x i1> %m, i32 %evl)
1528   ret <8 x i1> %v
1531 define <8 x i1> @fcmp_uge_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1532 ; CHECK-LABEL: fcmp_uge_vf_swap_v8f64:
1533 ; CHECK:       # %bb.0:
1534 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1535 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
1536 ; CHECK-NEXT:    vmnot.m v0, v12
1537 ; CHECK-NEXT:    ret
1538   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1539   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1540   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"uge", <8 x i1> %m, i32 %evl)
1541   ret <8 x i1> %v
1544 define <8 x i1> @fcmp_ult_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1545 ; CHECK-LABEL: fcmp_ult_vv_v8f64:
1546 ; CHECK:       # %bb.0:
1547 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1548 ; CHECK-NEXT:    vmfle.vv v16, v12, v8, v0.t
1549 ; CHECK-NEXT:    vmnot.m v0, v16
1550 ; CHECK-NEXT:    ret
1551   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)
1552   ret <8 x i1> %v
1555 define <8 x i1> @fcmp_ult_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1556 ; CHECK-LABEL: fcmp_ult_vf_v8f64:
1557 ; CHECK:       # %bb.0:
1558 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1559 ; CHECK-NEXT:    vmfge.vf v12, v8, fa0, v0.t
1560 ; CHECK-NEXT:    vmnot.m v0, v12
1561 ; CHECK-NEXT:    ret
1562   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1563   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1564   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ult", <8 x i1> %m, i32 %evl)
1565   ret <8 x i1> %v
1568 define <8 x i1> @fcmp_ult_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1569 ; CHECK-LABEL: fcmp_ult_vf_swap_v8f64:
1570 ; CHECK:       # %bb.0:
1571 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1572 ; CHECK-NEXT:    vmfle.vf v12, v8, fa0, v0.t
1573 ; CHECK-NEXT:    vmnot.m v0, v12
1574 ; CHECK-NEXT:    ret
1575   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1576   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1577   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"ult", <8 x i1> %m, i32 %evl)
1578   ret <8 x i1> %v
1581 define <8 x i1> @fcmp_ule_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1582 ; CHECK-LABEL: fcmp_ule_vv_v8f64:
1583 ; CHECK:       # %bb.0:
1584 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1585 ; CHECK-NEXT:    vmflt.vv v16, v12, v8, v0.t
1586 ; CHECK-NEXT:    vmnot.m v0, v16
1587 ; CHECK-NEXT:    ret
1588   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ule", <8 x i1> %m, i32 %evl)
1589   ret <8 x i1> %v
1592 define <8 x i1> @fcmp_ule_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1593 ; CHECK-LABEL: fcmp_ule_vf_v8f64:
1594 ; CHECK:       # %bb.0:
1595 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1596 ; CHECK-NEXT:    vmfgt.vf v12, v8, fa0, v0.t
1597 ; CHECK-NEXT:    vmnot.m v0, v12
1598 ; CHECK-NEXT:    ret
1599   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1600   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1601   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"ule", <8 x i1> %m, i32 %evl)
1602   ret <8 x i1> %v
1605 define <8 x i1> @fcmp_ule_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1606 ; CHECK-LABEL: fcmp_ule_vf_swap_v8f64:
1607 ; CHECK:       # %bb.0:
1608 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1609 ; CHECK-NEXT:    vmflt.vf v12, v8, fa0, v0.t
1610 ; CHECK-NEXT:    vmnot.m v0, v12
1611 ; CHECK-NEXT:    ret
1612   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1613   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1614   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"ule", <8 x i1> %m, i32 %evl)
1615   ret <8 x i1> %v
1618 define <8 x i1> @fcmp_une_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1619 ; CHECK-LABEL: fcmp_une_vv_v8f64:
1620 ; CHECK:       # %bb.0:
1621 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1622 ; CHECK-NEXT:    vmfne.vv v16, v8, v12, v0.t
1623 ; CHECK-NEXT:    vmv1r.v v0, v16
1624 ; CHECK-NEXT:    ret
1625   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"une", <8 x i1> %m, i32 %evl)
1626   ret <8 x i1> %v
1629 define <8 x i1> @fcmp_une_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1630 ; CHECK-LABEL: fcmp_une_vf_v8f64:
1631 ; CHECK:       # %bb.0:
1632 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1633 ; CHECK-NEXT:    vmfne.vf v12, v8, fa0, v0.t
1634 ; CHECK-NEXT:    vmv1r.v v0, v12
1635 ; CHECK-NEXT:    ret
1636   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1637   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1638   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"une", <8 x i1> %m, i32 %evl)
1639   ret <8 x i1> %v
1642 define <8 x i1> @fcmp_une_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1643 ; CHECK-LABEL: fcmp_une_vf_swap_v8f64:
1644 ; CHECK:       # %bb.0:
1645 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1646 ; CHECK-NEXT:    vmfne.vf v12, v8, fa0, v0.t
1647 ; CHECK-NEXT:    vmv1r.v v0, v12
1648 ; CHECK-NEXT:    ret
1649   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1650   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1651   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"une", <8 x i1> %m, i32 %evl)
1652   ret <8 x i1> %v
1655 define <8 x i1> @fcmp_uno_vv_v8f64(<8 x double> %va, <8 x double> %vb, <8 x i1> %m, i32 zeroext %evl) {
1656 ; CHECK-LABEL: fcmp_uno_vv_v8f64:
1657 ; CHECK:       # %bb.0:
1658 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1659 ; CHECK-NEXT:    vmfne.vv v16, v12, v12, v0.t
1660 ; CHECK-NEXT:    vmfne.vv v12, v8, v8, v0.t
1661 ; CHECK-NEXT:    vmor.mm v0, v12, v16
1662 ; CHECK-NEXT:    ret
1663   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uno", <8 x i1> %m, i32 %evl)
1664   ret <8 x i1> %v
1667 define <8 x i1> @fcmp_uno_vf_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1668 ; CHECK-LABEL: fcmp_uno_vf_v8f64:
1669 ; CHECK:       # %bb.0:
1670 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1671 ; CHECK-NEXT:    vfmv.v.f v12, fa0
1672 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1673 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0, v0.t
1674 ; CHECK-NEXT:    vmfne.vv v12, v8, v8, v0.t
1675 ; CHECK-NEXT:    vmor.mm v0, v12, v16
1676 ; CHECK-NEXT:    ret
1677   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1678   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1679   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"uno", <8 x i1> %m, i32 %evl)
1680   ret <8 x i1> %v
1683 define <8 x i1> @fcmp_uno_vf_swap_v8f64(<8 x double> %va, double %b, <8 x i1> %m, i32 zeroext %evl) {
1684 ; CHECK-LABEL: fcmp_uno_vf_swap_v8f64:
1685 ; CHECK:       # %bb.0:
1686 ; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1687 ; CHECK-NEXT:    vfmv.v.f v12, fa0
1688 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1689 ; CHECK-NEXT:    vmfne.vf v16, v12, fa0, v0.t
1690 ; CHECK-NEXT:    vmfne.vv v12, v8, v8, v0.t
1691 ; CHECK-NEXT:    vmor.mm v0, v16, v12
1692 ; CHECK-NEXT:    ret
1693   %elt.head = insertelement <8 x double> poison, double %b, i32 0
1694   %vb = shufflevector <8 x double> %elt.head, <8 x double> poison, <8 x i32> zeroinitializer
1695   %v = call <8 x i1> @llvm.vp.fcmp.v8f64(<8 x double> %vb, <8 x double> %va, metadata !"uno", <8 x i1> %m, i32 %evl)
1696   ret <8 x i1> %v
1699 declare <32 x i1> @llvm.vp.fcmp.v32f64(<32 x double>, <32 x double>, metadata, <32 x i1>, i32)
1701 define <32 x i1> @fcmp_oeq_vv_v32f64(<32 x double> %va, <32 x double> %vb, <32 x i1> %m, i32 zeroext %evl) {
1702 ; CHECK-LABEL: fcmp_oeq_vv_v32f64:
1703 ; CHECK:       # %bb.0:
1704 ; CHECK-NEXT:    addi sp, sp, -16
1705 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1706 ; CHECK-NEXT:    csrr a1, vlenb
1707 ; CHECK-NEXT:    slli a1, a1, 4
1708 ; CHECK-NEXT:    sub sp, sp, a1
1709 ; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
1710 ; CHECK-NEXT:    addi a1, a0, 128
1711 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1712 ; CHECK-NEXT:    vle64.v v24, (a1)
1713 ; CHECK-NEXT:    csrr a1, vlenb
1714 ; CHECK-NEXT:    slli a1, a1, 3
1715 ; CHECK-NEXT:    add a1, sp, a1
1716 ; CHECK-NEXT:    addi a1, a1, 16
1717 ; CHECK-NEXT:    vs8r.v v24, (a1) # Unknown-size Folded Spill
1718 ; CHECK-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1719 ; CHECK-NEXT:    vslidedown.vi v1, v0, 2
1720 ; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1721 ; CHECK-NEXT:    vle64.v v24, (a0)
1722 ; CHECK-NEXT:    addi a0, sp, 16
1723 ; CHECK-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1724 ; CHECK-NEXT:    li a1, 16
1725 ; CHECK-NEXT:    mv a0, a2
1726 ; CHECK-NEXT:    bltu a2, a1, .LBB87_2
1727 ; CHECK-NEXT:  # %bb.1:
1728 ; CHECK-NEXT:    li a0, 16
1729 ; CHECK-NEXT:  .LBB87_2:
1730 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1731 ; CHECK-NEXT:    addi a0, sp, 16
1732 ; CHECK-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1733 ; CHECK-NEXT:    vmfeq.vv v2, v8, v24, v0.t
1734 ; CHECK-NEXT:    addi a0, a2, -16
1735 ; CHECK-NEXT:    sltu a1, a2, a0
1736 ; CHECK-NEXT:    addi a1, a1, -1
1737 ; CHECK-NEXT:    and a0, a1, a0
1738 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1739 ; CHECK-NEXT:    vmv1r.v v0, v1
1740 ; CHECK-NEXT:    csrr a0, vlenb
1741 ; CHECK-NEXT:    slli a0, a0, 3
1742 ; CHECK-NEXT:    add a0, sp, a0
1743 ; CHECK-NEXT:    addi a0, a0, 16
1744 ; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1745 ; CHECK-NEXT:    vmfeq.vv v24, v16, v8, v0.t
1746 ; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
1747 ; CHECK-NEXT:    vslideup.vi v2, v24, 2
1748 ; CHECK-NEXT:    vmv1r.v v0, v2
1749 ; CHECK-NEXT:    csrr a0, vlenb
1750 ; CHECK-NEXT:    slli a0, a0, 4
1751 ; CHECK-NEXT:    add sp, sp, a0
1752 ; CHECK-NEXT:    addi sp, sp, 16
1753 ; CHECK-NEXT:    ret
1754   %v = call <32 x i1> @llvm.vp.fcmp.v32f64(<32 x double> %va, <32 x double> %vb, metadata !"oeq", <32 x i1> %m, i32 %evl)
1755   ret <32 x i1> %v