1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH,RV64
6 ; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \
7 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN32
8 ; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfhmin,+v -target-abi=lp64d \
9 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN64
11 ; FIXME: The scalar/vector operations ('fv' tests) should swap operands and
12 ; condition codes accordingly in order to generate a 'vf' instruction.
14 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
15 ; ZVFH-LABEL: fcmp_oeq_vv_nxv8f16:
17 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
18 ; ZVFH-NEXT: vmfeq.vv v0, v8, v10
21 ; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv8f16:
23 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
24 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
25 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
26 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
27 ; ZVFHMIN-NEXT: vmfeq.vv v0, v16, v12
29 %vc = fcmp oeq <vscale x 8 x half> %va, %vb
30 ret <vscale x 8 x i1> %vc
33 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
34 ; ZVFH-LABEL: fcmp_oeq_vf_nxv8f16:
36 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
37 ; ZVFH-NEXT: vmfeq.vf v0, v8, fa0
40 ; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv8f16:
42 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
43 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
44 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
45 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
46 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
47 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
48 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
49 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
50 ; ZVFHMIN-NEXT: vmfeq.vv v0, v12, v16
52 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
53 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
54 %vc = fcmp oeq <vscale x 8 x half> %va, %splat
55 ret <vscale x 8 x i1> %vc
58 define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
59 ; ZVFH-LABEL: fcmp_oeq_fv_nxv8f16:
61 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
62 ; ZVFH-NEXT: vmfeq.vf v0, v8, fa0
65 ; ZVFHMIN-LABEL: fcmp_oeq_fv_nxv8f16:
67 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
68 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
69 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
70 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
71 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
72 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
73 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
74 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
75 ; ZVFHMIN-NEXT: vmfeq.vv v0, v16, v12
77 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
78 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
79 %vc = fcmp oeq <vscale x 8 x half> %splat, %va
80 ret <vscale x 8 x i1> %vc
83 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
84 ; ZVFH-LABEL: fcmp_oeq_vv_nxv8f16_nonans:
86 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
87 ; ZVFH-NEXT: vmfeq.vv v0, v8, v10
90 ; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv8f16_nonans:
92 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
93 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
94 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
95 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
96 ; ZVFHMIN-NEXT: vmfeq.vv v0, v16, v12
98 %vc = fcmp oeq <vscale x 8 x half> %va, %vb
99 ret <vscale x 8 x i1> %vc
102 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
103 ; ZVFH-LABEL: fcmp_oeq_vf_nxv8f16_nonans:
105 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
106 ; ZVFH-NEXT: vmfeq.vf v0, v8, fa0
109 ; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv8f16_nonans:
111 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
112 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
113 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
114 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
115 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
116 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
117 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
118 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
119 ; ZVFHMIN-NEXT: vmfeq.vv v0, v12, v16
121 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
122 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
123 %vc = fcmp oeq <vscale x 8 x half> %va, %splat
124 ret <vscale x 8 x i1> %vc
127 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
128 ; ZVFH-LABEL: fcmp_ogt_vv_nxv8f16:
130 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
131 ; ZVFH-NEXT: vmflt.vv v0, v10, v8
134 ; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv8f16:
136 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
137 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
138 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
139 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
140 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
142 %vc = fcmp ogt <vscale x 8 x half> %va, %vb
143 ret <vscale x 8 x i1> %vc
146 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
147 ; ZVFH-LABEL: fcmp_ogt_vf_nxv8f16:
149 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
150 ; ZVFH-NEXT: vmfgt.vf v0, v8, fa0
153 ; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv8f16:
155 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
156 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
157 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
158 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
159 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
160 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
161 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
162 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
163 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
165 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
166 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
167 %vc = fcmp ogt <vscale x 8 x half> %va, %splat
168 ret <vscale x 8 x i1> %vc
171 define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
172 ; ZVFH-LABEL: fcmp_ogt_fv_nxv8f16:
174 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
175 ; ZVFH-NEXT: vmflt.vf v0, v8, fa0
178 ; ZVFHMIN-LABEL: fcmp_ogt_fv_nxv8f16:
180 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
181 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
182 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
183 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
184 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
185 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
186 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
187 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
188 ; ZVFHMIN-NEXT: vmflt.vv v0, v12, v16
190 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
191 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
192 %vc = fcmp ogt <vscale x 8 x half> %splat, %va
193 ret <vscale x 8 x i1> %vc
196 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
197 ; ZVFH-LABEL: fcmp_ogt_vv_nxv8f16_nonans:
199 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
200 ; ZVFH-NEXT: vmflt.vv v0, v10, v8
203 ; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv8f16_nonans:
205 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
206 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
207 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
208 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
209 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
211 %vc = fcmp ogt <vscale x 8 x half> %va, %vb
212 ret <vscale x 8 x i1> %vc
215 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
216 ; ZVFH-LABEL: fcmp_ogt_vf_nxv8f16_nonans:
218 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
219 ; ZVFH-NEXT: vmfgt.vf v0, v8, fa0
222 ; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv8f16_nonans:
224 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
225 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
226 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
227 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
228 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
229 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
230 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
231 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
232 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
234 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
235 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
236 %vc = fcmp ogt <vscale x 8 x half> %va, %splat
237 ret <vscale x 8 x i1> %vc
240 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
241 ; ZVFH-LABEL: fcmp_oge_vv_nxv8f16:
243 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
244 ; ZVFH-NEXT: vmfle.vv v0, v10, v8
247 ; ZVFHMIN-LABEL: fcmp_oge_vv_nxv8f16:
249 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
250 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
251 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
252 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
253 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
255 %vc = fcmp oge <vscale x 8 x half> %va, %vb
256 ret <vscale x 8 x i1> %vc
259 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
260 ; ZVFH-LABEL: fcmp_oge_vf_nxv8f16:
262 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
263 ; ZVFH-NEXT: vmfge.vf v0, v8, fa0
266 ; ZVFHMIN-LABEL: fcmp_oge_vf_nxv8f16:
268 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
269 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
270 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
271 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
272 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
273 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
274 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
275 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
276 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
278 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
279 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
280 %vc = fcmp oge <vscale x 8 x half> %va, %splat
281 ret <vscale x 8 x i1> %vc
284 define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
285 ; ZVFH-LABEL: fcmp_oge_fv_nxv8f16:
287 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
288 ; ZVFH-NEXT: vmfle.vf v0, v8, fa0
291 ; ZVFHMIN-LABEL: fcmp_oge_fv_nxv8f16:
293 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
294 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
295 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
296 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
297 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
298 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
299 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
300 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
301 ; ZVFHMIN-NEXT: vmfle.vv v0, v12, v16
303 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
304 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
305 %vc = fcmp oge <vscale x 8 x half> %splat, %va
306 ret <vscale x 8 x i1> %vc
309 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
310 ; ZVFH-LABEL: fcmp_oge_vv_nxv8f16_nonans:
312 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
313 ; ZVFH-NEXT: vmfle.vv v0, v10, v8
316 ; ZVFHMIN-LABEL: fcmp_oge_vv_nxv8f16_nonans:
318 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
319 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
320 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
321 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
322 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
324 %vc = fcmp oge <vscale x 8 x half> %va, %vb
325 ret <vscale x 8 x i1> %vc
328 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
329 ; ZVFH-LABEL: fcmp_oge_vf_nxv8f16_nonans:
331 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
332 ; ZVFH-NEXT: vmfge.vf v0, v8, fa0
335 ; ZVFHMIN-LABEL: fcmp_oge_vf_nxv8f16_nonans:
337 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
338 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
339 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
340 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
341 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
342 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
343 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
344 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
345 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
347 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
348 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
349 %vc = fcmp oge <vscale x 8 x half> %va, %splat
350 ret <vscale x 8 x i1> %vc
353 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
354 ; ZVFH-LABEL: fcmp_olt_vv_nxv8f16:
356 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
357 ; ZVFH-NEXT: vmflt.vv v0, v8, v10
360 ; ZVFHMIN-LABEL: fcmp_olt_vv_nxv8f16:
362 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
363 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
364 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
365 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
366 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
368 %vc = fcmp olt <vscale x 8 x half> %va, %vb
369 ret <vscale x 8 x i1> %vc
372 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
373 ; ZVFH-LABEL: fcmp_olt_vf_nxv8f16:
375 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
376 ; ZVFH-NEXT: vmflt.vf v0, v8, fa0
379 ; ZVFHMIN-LABEL: fcmp_olt_vf_nxv8f16:
381 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
382 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
383 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
384 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
385 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
386 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
387 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
388 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
389 ; ZVFHMIN-NEXT: vmflt.vv v0, v12, v16
391 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
392 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
393 %vc = fcmp olt <vscale x 8 x half> %va, %splat
394 ret <vscale x 8 x i1> %vc
397 define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
398 ; ZVFH-LABEL: fcmp_olt_fv_nxv8f16:
400 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
401 ; ZVFH-NEXT: vmfgt.vf v0, v8, fa0
404 ; ZVFHMIN-LABEL: fcmp_olt_fv_nxv8f16:
406 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
407 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
408 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
409 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
410 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
411 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
412 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
413 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
414 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
416 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
417 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
418 %vc = fcmp olt <vscale x 8 x half> %splat, %va
419 ret <vscale x 8 x i1> %vc
422 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
423 ; ZVFH-LABEL: fcmp_olt_vv_nxv8f16_nonans:
425 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
426 ; ZVFH-NEXT: vmflt.vv v0, v8, v10
429 ; ZVFHMIN-LABEL: fcmp_olt_vv_nxv8f16_nonans:
431 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
432 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
433 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
434 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
435 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
437 %vc = fcmp olt <vscale x 8 x half> %va, %vb
438 ret <vscale x 8 x i1> %vc
441 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
442 ; ZVFH-LABEL: fcmp_olt_vf_nxv8f16_nonans:
444 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
445 ; ZVFH-NEXT: vmflt.vf v0, v8, fa0
448 ; ZVFHMIN-LABEL: fcmp_olt_vf_nxv8f16_nonans:
450 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
451 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
452 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
453 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
454 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
455 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
456 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
457 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
458 ; ZVFHMIN-NEXT: vmflt.vv v0, v12, v16
460 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
461 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
462 %vc = fcmp olt <vscale x 8 x half> %va, %splat
463 ret <vscale x 8 x i1> %vc
466 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
467 ; ZVFH-LABEL: fcmp_ole_vv_nxv8f16:
469 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
470 ; ZVFH-NEXT: vmfle.vv v0, v8, v10
473 ; ZVFHMIN-LABEL: fcmp_ole_vv_nxv8f16:
475 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
476 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
477 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
478 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
479 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
481 %vc = fcmp ole <vscale x 8 x half> %va, %vb
482 ret <vscale x 8 x i1> %vc
485 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
486 ; ZVFH-LABEL: fcmp_ole_vf_nxv8f16:
488 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
489 ; ZVFH-NEXT: vmfle.vf v0, v8, fa0
492 ; ZVFHMIN-LABEL: fcmp_ole_vf_nxv8f16:
494 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
495 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
496 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
497 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
498 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
499 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
500 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
501 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
502 ; ZVFHMIN-NEXT: vmfle.vv v0, v12, v16
504 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
505 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
506 %vc = fcmp ole <vscale x 8 x half> %va, %splat
507 ret <vscale x 8 x i1> %vc
510 define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
511 ; ZVFH-LABEL: fcmp_ole_fv_nxv8f16:
513 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
514 ; ZVFH-NEXT: vmfge.vf v0, v8, fa0
517 ; ZVFHMIN-LABEL: fcmp_ole_fv_nxv8f16:
519 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
520 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
521 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
522 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
523 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
524 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
525 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
526 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
527 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
529 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
530 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
531 %vc = fcmp ole <vscale x 8 x half> %splat, %va
532 ret <vscale x 8 x i1> %vc
535 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
536 ; ZVFH-LABEL: fcmp_ole_vv_nxv8f16_nonans:
538 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
539 ; ZVFH-NEXT: vmfle.vv v0, v8, v10
542 ; ZVFHMIN-LABEL: fcmp_ole_vv_nxv8f16_nonans:
544 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
545 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
546 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
547 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
548 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
550 %vc = fcmp ole <vscale x 8 x half> %va, %vb
551 ret <vscale x 8 x i1> %vc
554 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
555 ; ZVFH-LABEL: fcmp_ole_vf_nxv8f16_nonans:
557 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
558 ; ZVFH-NEXT: vmfle.vf v0, v8, fa0
561 ; ZVFHMIN-LABEL: fcmp_ole_vf_nxv8f16_nonans:
563 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
564 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
565 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
566 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
567 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
568 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
569 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
570 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
571 ; ZVFHMIN-NEXT: vmfle.vv v0, v12, v16
573 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
574 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
575 %vc = fcmp ole <vscale x 8 x half> %va, %splat
576 ret <vscale x 8 x i1> %vc
579 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
580 ; ZVFH-LABEL: fcmp_one_vv_nxv8f16:
582 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
583 ; ZVFH-NEXT: vmflt.vv v12, v8, v10
584 ; ZVFH-NEXT: vmflt.vv v13, v10, v8
585 ; ZVFH-NEXT: vmor.mm v0, v13, v12
588 ; ZVFHMIN-LABEL: fcmp_one_vv_nxv8f16:
590 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
591 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
592 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
593 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
594 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
595 ; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16
596 ; ZVFHMIN-NEXT: vmor.mm v0, v9, v8
598 %vc = fcmp one <vscale x 8 x half> %va, %vb
599 ret <vscale x 8 x i1> %vc
602 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
603 ; ZVFH-LABEL: fcmp_one_vf_nxv8f16:
605 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
606 ; ZVFH-NEXT: vmflt.vf v10, v8, fa0
607 ; ZVFH-NEXT: vmfgt.vf v11, v8, fa0
608 ; ZVFH-NEXT: vmor.mm v0, v11, v10
611 ; ZVFHMIN-LABEL: fcmp_one_vf_nxv8f16:
613 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
614 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
615 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
616 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
617 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
618 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
619 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
620 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
621 ; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16
622 ; ZVFHMIN-NEXT: vmflt.vv v9, v16, v12
623 ; ZVFHMIN-NEXT: vmor.mm v0, v9, v8
625 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
626 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
627 %vc = fcmp one <vscale x 8 x half> %va, %splat
628 ret <vscale x 8 x i1> %vc
631 define <vscale x 8 x i1> @fcmp_one_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
632 ; ZVFH-LABEL: fcmp_one_fv_nxv8f16:
634 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
635 ; ZVFH-NEXT: vmfgt.vf v10, v8, fa0
636 ; ZVFH-NEXT: vmflt.vf v11, v8, fa0
637 ; ZVFH-NEXT: vmor.mm v0, v11, v10
640 ; ZVFHMIN-LABEL: fcmp_one_fv_nxv8f16:
642 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
643 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
644 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
645 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
646 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
647 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
648 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
649 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
650 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
651 ; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16
652 ; ZVFHMIN-NEXT: vmor.mm v0, v9, v8
654 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
655 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
656 %vc = fcmp one <vscale x 8 x half> %splat, %va
657 ret <vscale x 8 x i1> %vc
660 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
661 ; ZVFH-LABEL: fcmp_one_vv_nxv8f16_nonans:
663 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
664 ; ZVFH-NEXT: vmfne.vv v0, v8, v10
667 ; ZVFHMIN-LABEL: fcmp_one_vv_nxv8f16_nonans:
669 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
670 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
671 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
672 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
673 ; ZVFHMIN-NEXT: vmfne.vv v0, v16, v12
675 %vc = fcmp one <vscale x 8 x half> %va, %vb
676 ret <vscale x 8 x i1> %vc
679 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
680 ; ZVFH-LABEL: fcmp_one_vf_nxv8f16_nonans:
682 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
683 ; ZVFH-NEXT: vmfne.vf v0, v8, fa0
686 ; ZVFHMIN-LABEL: fcmp_one_vf_nxv8f16_nonans:
688 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
689 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
690 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
691 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
692 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
693 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
694 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
695 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
696 ; ZVFHMIN-NEXT: vmfne.vv v0, v12, v16
698 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
699 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
700 %vc = fcmp one <vscale x 8 x half> %va, %splat
701 ret <vscale x 8 x i1> %vc
704 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
705 ; ZVFH-LABEL: fcmp_ord_vv_nxv8f16:
707 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
708 ; ZVFH-NEXT: vmfeq.vv v12, v10, v10
709 ; ZVFH-NEXT: vmfeq.vv v10, v8, v8
710 ; ZVFH-NEXT: vmand.mm v0, v10, v12
713 ; ZVFHMIN-LABEL: fcmp_ord_vv_nxv8f16:
715 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
716 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
717 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
718 ; ZVFHMIN-NEXT: vmfeq.vv v10, v12, v12
719 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
720 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
721 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
722 ; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12
723 ; ZVFHMIN-NEXT: vmand.mm v0, v8, v10
725 %vc = fcmp ord <vscale x 8 x half> %va, %vb
726 ret <vscale x 8 x i1> %vc
729 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
730 ; ZVFH-LABEL: fcmp_ord_vf_nxv8f16:
732 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
733 ; ZVFH-NEXT: vfmv.v.f v10, fa0
734 ; ZVFH-NEXT: vmfeq.vf v12, v10, fa0
735 ; ZVFH-NEXT: vmfeq.vv v10, v8, v8
736 ; ZVFH-NEXT: vmand.mm v0, v10, v12
739 ; ZVFHMIN-LABEL: fcmp_ord_vf_nxv8f16:
741 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
742 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
743 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
744 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
745 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
746 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
747 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
748 ; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12
749 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
750 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
751 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
752 ; ZVFHMIN-NEXT: vmfeq.vv v9, v12, v12
753 ; ZVFHMIN-NEXT: vmand.mm v0, v8, v9
755 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
756 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
757 %vc = fcmp ord <vscale x 8 x half> %va, %splat
758 ret <vscale x 8 x i1> %vc
761 define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
762 ; ZVFH-LABEL: fcmp_ord_fv_nxv8f16:
764 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
765 ; ZVFH-NEXT: vfmv.v.f v10, fa0
766 ; ZVFH-NEXT: vmfeq.vf v12, v10, fa0
767 ; ZVFH-NEXT: vmfeq.vv v10, v8, v8
768 ; ZVFH-NEXT: vmand.mm v0, v12, v10
771 ; ZVFHMIN-LABEL: fcmp_ord_fv_nxv8f16:
773 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
774 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
775 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
776 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
777 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
778 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
779 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
780 ; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12
781 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
782 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
783 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
784 ; ZVFHMIN-NEXT: vmfeq.vv v9, v12, v12
785 ; ZVFHMIN-NEXT: vmand.mm v0, v9, v8
787 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
788 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
789 %vc = fcmp ord <vscale x 8 x half> %splat, %va
790 ret <vscale x 8 x i1> %vc
793 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
794 ; ZVFH-LABEL: fcmp_ord_vv_nxv8f16_nonans:
796 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
797 ; ZVFH-NEXT: vmfeq.vv v12, v10, v10
798 ; ZVFH-NEXT: vmfeq.vv v10, v8, v8
799 ; ZVFH-NEXT: vmand.mm v0, v10, v12
802 ; ZVFHMIN-LABEL: fcmp_ord_vv_nxv8f16_nonans:
804 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
805 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
806 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
807 ; ZVFHMIN-NEXT: vmfeq.vv v10, v12, v12
808 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
809 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
810 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
811 ; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12
812 ; ZVFHMIN-NEXT: vmand.mm v0, v8, v10
814 %vc = fcmp ord <vscale x 8 x half> %va, %vb
815 ret <vscale x 8 x i1> %vc
818 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
819 ; ZVFH-LABEL: fcmp_ord_vf_nxv8f16_nonans:
821 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
822 ; ZVFH-NEXT: vfmv.v.f v10, fa0
823 ; ZVFH-NEXT: vmfeq.vf v12, v10, fa0
824 ; ZVFH-NEXT: vmfeq.vv v10, v8, v8
825 ; ZVFH-NEXT: vmand.mm v0, v10, v12
828 ; ZVFHMIN-LABEL: fcmp_ord_vf_nxv8f16_nonans:
830 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
831 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
832 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
833 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
834 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
835 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
836 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
837 ; ZVFHMIN-NEXT: vmfeq.vv v8, v12, v12
838 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
839 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
840 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
841 ; ZVFHMIN-NEXT: vmfeq.vv v9, v12, v12
842 ; ZVFHMIN-NEXT: vmand.mm v0, v8, v9
844 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
845 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
846 %vc = fcmp ord <vscale x 8 x half> %va, %splat
847 ret <vscale x 8 x i1> %vc
850 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
851 ; ZVFH-LABEL: fcmp_ueq_vv_nxv8f16:
853 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
854 ; ZVFH-NEXT: vmflt.vv v12, v8, v10
855 ; ZVFH-NEXT: vmflt.vv v13, v10, v8
856 ; ZVFH-NEXT: vmnor.mm v0, v13, v12
859 ; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv8f16:
861 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
862 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
863 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
864 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
865 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
866 ; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16
867 ; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8
869 %vc = fcmp ueq <vscale x 8 x half> %va, %vb
870 ret <vscale x 8 x i1> %vc
873 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
874 ; ZVFH-LABEL: fcmp_ueq_vf_nxv8f16:
876 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
877 ; ZVFH-NEXT: vmflt.vf v10, v8, fa0
878 ; ZVFH-NEXT: vmfgt.vf v11, v8, fa0
879 ; ZVFH-NEXT: vmnor.mm v0, v11, v10
882 ; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv8f16:
884 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
885 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
886 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
887 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
888 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
889 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
890 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
891 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
892 ; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16
893 ; ZVFHMIN-NEXT: vmflt.vv v9, v16, v12
894 ; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8
896 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
897 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
898 %vc = fcmp ueq <vscale x 8 x half> %va, %splat
899 ret <vscale x 8 x i1> %vc
902 define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
903 ; ZVFH-LABEL: fcmp_ueq_fv_nxv8f16:
905 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
906 ; ZVFH-NEXT: vmfgt.vf v10, v8, fa0
907 ; ZVFH-NEXT: vmflt.vf v11, v8, fa0
908 ; ZVFH-NEXT: vmnor.mm v0, v11, v10
911 ; ZVFHMIN-LABEL: fcmp_ueq_fv_nxv8f16:
913 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
914 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
915 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
916 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
917 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
918 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
919 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
920 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
921 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
922 ; ZVFHMIN-NEXT: vmflt.vv v9, v12, v16
923 ; ZVFHMIN-NEXT: vmnor.mm v0, v9, v8
925 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
926 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
927 %vc = fcmp ueq <vscale x 8 x half> %splat, %va
928 ret <vscale x 8 x i1> %vc
931 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
932 ; ZVFH-LABEL: fcmp_ueq_vv_nxv8f16_nonans:
934 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
935 ; ZVFH-NEXT: vmfeq.vv v0, v8, v10
938 ; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv8f16_nonans:
940 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
941 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
942 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
943 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
944 ; ZVFHMIN-NEXT: vmfeq.vv v0, v16, v12
946 %vc = fcmp ueq <vscale x 8 x half> %va, %vb
947 ret <vscale x 8 x i1> %vc
950 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
951 ; ZVFH-LABEL: fcmp_ueq_vf_nxv8f16_nonans:
953 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
954 ; ZVFH-NEXT: vmfeq.vf v0, v8, fa0
957 ; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv8f16_nonans:
959 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
960 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
961 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
962 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
963 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
964 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
965 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
966 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
967 ; ZVFHMIN-NEXT: vmfeq.vv v0, v12, v16
969 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
970 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
971 %vc = fcmp ueq <vscale x 8 x half> %va, %splat
972 ret <vscale x 8 x i1> %vc
975 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
976 ; ZVFH-LABEL: fcmp_ugt_vv_nxv8f16:
978 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
979 ; ZVFH-NEXT: vmfle.vv v12, v8, v10
980 ; ZVFH-NEXT: vmnot.m v0, v12
983 ; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv8f16:
985 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
986 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
987 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
988 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
989 ; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12
990 ; ZVFHMIN-NEXT: vmnot.m v0, v8
992 %vc = fcmp ugt <vscale x 8 x half> %va, %vb
993 ret <vscale x 8 x i1> %vc
996 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
997 ; ZVFH-LABEL: fcmp_ugt_vf_nxv8f16:
999 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1000 ; ZVFH-NEXT: vmfle.vf v10, v8, fa0
1001 ; ZVFH-NEXT: vmnot.m v0, v10
1004 ; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv8f16:
1006 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1007 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1008 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1009 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1010 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1011 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1012 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1013 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1014 ; ZVFHMIN-NEXT: vmfle.vv v8, v12, v16
1015 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1017 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1018 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1019 %vc = fcmp ugt <vscale x 8 x half> %va, %splat
1020 ret <vscale x 8 x i1> %vc
1023 define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1024 ; ZVFH-LABEL: fcmp_ugt_fv_nxv8f16:
1026 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1027 ; ZVFH-NEXT: vmfge.vf v10, v8, fa0
1028 ; ZVFH-NEXT: vmnot.m v0, v10
1031 ; ZVFHMIN-LABEL: fcmp_ugt_fv_nxv8f16:
1033 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1034 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1035 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1036 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1037 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1038 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1039 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1040 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1041 ; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12
1042 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1044 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1045 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1046 %vc = fcmp ugt <vscale x 8 x half> %splat, %va
1047 ret <vscale x 8 x i1> %vc
1050 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1051 ; ZVFH-LABEL: fcmp_ugt_vv_nxv8f16_nonans:
1053 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1054 ; ZVFH-NEXT: vmflt.vv v0, v10, v8
1057 ; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv8f16_nonans:
1059 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1060 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1061 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1062 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1063 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
1065 %vc = fcmp ugt <vscale x 8 x half> %va, %vb
1066 ret <vscale x 8 x i1> %vc
1069 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1070 ; ZVFH-LABEL: fcmp_ugt_vf_nxv8f16_nonans:
1072 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1073 ; ZVFH-NEXT: vmfgt.vf v0, v8, fa0
1076 ; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv8f16_nonans:
1078 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1079 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1080 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1081 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1082 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1083 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1084 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1085 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1086 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
1088 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1089 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1090 %vc = fcmp ugt <vscale x 8 x half> %va, %splat
1091 ret <vscale x 8 x i1> %vc
1094 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1095 ; ZVFH-LABEL: fcmp_uge_vv_nxv8f16:
1097 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1098 ; ZVFH-NEXT: vmflt.vv v12, v8, v10
1099 ; ZVFH-NEXT: vmnot.m v0, v12
1102 ; ZVFHMIN-LABEL: fcmp_uge_vv_nxv8f16:
1104 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1105 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1106 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1107 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1108 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
1109 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1111 %vc = fcmp uge <vscale x 8 x half> %va, %vb
1112 ret <vscale x 8 x i1> %vc
1115 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1116 ; ZVFH-LABEL: fcmp_uge_vf_nxv8f16:
1118 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1119 ; ZVFH-NEXT: vmflt.vf v10, v8, fa0
1120 ; ZVFH-NEXT: vmnot.m v0, v10
1123 ; ZVFHMIN-LABEL: fcmp_uge_vf_nxv8f16:
1125 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1126 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1127 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1128 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1129 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1130 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1131 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1132 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1133 ; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16
1134 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1136 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1137 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1138 %vc = fcmp uge <vscale x 8 x half> %va, %splat
1139 ret <vscale x 8 x i1> %vc
1142 define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1143 ; ZVFH-LABEL: fcmp_uge_fv_nxv8f16:
1145 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1146 ; ZVFH-NEXT: vmfgt.vf v10, v8, fa0
1147 ; ZVFH-NEXT: vmnot.m v0, v10
1150 ; ZVFHMIN-LABEL: fcmp_uge_fv_nxv8f16:
1152 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1153 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1154 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1155 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1156 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1157 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1158 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1159 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1160 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
1161 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1163 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1164 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1165 %vc = fcmp uge <vscale x 8 x half> %splat, %va
1166 ret <vscale x 8 x i1> %vc
1169 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1170 ; ZVFH-LABEL: fcmp_uge_vv_nxv8f16_nonans:
1172 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1173 ; ZVFH-NEXT: vmfle.vv v0, v10, v8
1176 ; ZVFHMIN-LABEL: fcmp_uge_vv_nxv8f16_nonans:
1178 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1179 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1180 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1181 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1182 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
1184 %vc = fcmp uge <vscale x 8 x half> %va, %vb
1185 ret <vscale x 8 x i1> %vc
1188 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1189 ; ZVFH-LABEL: fcmp_uge_vf_nxv8f16_nonans:
1191 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1192 ; ZVFH-NEXT: vmfge.vf v0, v8, fa0
1195 ; ZVFHMIN-LABEL: fcmp_uge_vf_nxv8f16_nonans:
1197 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1198 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1199 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1200 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1201 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1202 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1203 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1204 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1205 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
1207 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1208 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1209 %vc = fcmp uge <vscale x 8 x half> %va, %splat
1210 ret <vscale x 8 x i1> %vc
1213 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1214 ; ZVFH-LABEL: fcmp_ult_vv_nxv8f16:
1216 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1217 ; ZVFH-NEXT: vmfle.vv v12, v10, v8
1218 ; ZVFH-NEXT: vmnot.m v0, v12
1221 ; ZVFHMIN-LABEL: fcmp_ult_vv_nxv8f16:
1223 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1224 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1225 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1226 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1227 ; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12
1228 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1230 %vc = fcmp ult <vscale x 8 x half> %va, %vb
1231 ret <vscale x 8 x i1> %vc
1234 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1235 ; ZVFH-LABEL: fcmp_ult_vf_nxv8f16:
1237 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1238 ; ZVFH-NEXT: vmfge.vf v10, v8, fa0
1239 ; ZVFH-NEXT: vmnot.m v0, v10
1242 ; ZVFHMIN-LABEL: fcmp_ult_vf_nxv8f16:
1244 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1245 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1246 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1247 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1248 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1249 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1250 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1251 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1252 ; ZVFHMIN-NEXT: vmfle.vv v8, v16, v12
1253 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1255 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1256 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1257 %vc = fcmp ult <vscale x 8 x half> %va, %splat
1258 ret <vscale x 8 x i1> %vc
1261 define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1262 ; ZVFH-LABEL: fcmp_ult_fv_nxv8f16:
1264 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1265 ; ZVFH-NEXT: vmfle.vf v10, v8, fa0
1266 ; ZVFH-NEXT: vmnot.m v0, v10
1269 ; ZVFHMIN-LABEL: fcmp_ult_fv_nxv8f16:
1271 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1272 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1273 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1274 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1275 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1276 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1277 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1278 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1279 ; ZVFHMIN-NEXT: vmfle.vv v8, v12, v16
1280 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1282 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1283 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1284 %vc = fcmp ult <vscale x 8 x half> %splat, %va
1285 ret <vscale x 8 x i1> %vc
1288 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1289 ; ZVFH-LABEL: fcmp_ult_vv_nxv8f16_nonans:
1291 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1292 ; ZVFH-NEXT: vmflt.vv v0, v8, v10
1295 ; ZVFHMIN-LABEL: fcmp_ult_vv_nxv8f16_nonans:
1297 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1298 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1299 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1300 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1301 ; ZVFHMIN-NEXT: vmflt.vv v0, v16, v12
1303 %vc = fcmp ult <vscale x 8 x half> %va, %vb
1304 ret <vscale x 8 x i1> %vc
1307 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1308 ; ZVFH-LABEL: fcmp_ult_vf_nxv8f16_nonans:
1310 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1311 ; ZVFH-NEXT: vmflt.vf v0, v8, fa0
1314 ; ZVFHMIN-LABEL: fcmp_ult_vf_nxv8f16_nonans:
1316 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1317 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1318 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1319 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1320 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1321 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1322 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1323 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1324 ; ZVFHMIN-NEXT: vmflt.vv v0, v12, v16
1326 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1327 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1328 %vc = fcmp ult <vscale x 8 x half> %va, %splat
1329 ret <vscale x 8 x i1> %vc
1332 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1333 ; ZVFH-LABEL: fcmp_ule_vv_nxv8f16:
1335 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1336 ; ZVFH-NEXT: vmflt.vv v12, v10, v8
1337 ; ZVFH-NEXT: vmnot.m v0, v12
1340 ; ZVFHMIN-LABEL: fcmp_ule_vv_nxv8f16:
1342 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1343 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1344 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1345 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1346 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
1347 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1349 %vc = fcmp ule <vscale x 8 x half> %va, %vb
1350 ret <vscale x 8 x i1> %vc
1353 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1354 ; ZVFH-LABEL: fcmp_ule_vf_nxv8f16:
1356 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1357 ; ZVFH-NEXT: vmfgt.vf v10, v8, fa0
1358 ; ZVFH-NEXT: vmnot.m v0, v10
1361 ; ZVFHMIN-LABEL: fcmp_ule_vf_nxv8f16:
1363 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1364 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1365 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1366 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1367 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1368 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1369 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1370 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1371 ; ZVFHMIN-NEXT: vmflt.vv v8, v16, v12
1372 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1374 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1375 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1376 %vc = fcmp ule <vscale x 8 x half> %va, %splat
1377 ret <vscale x 8 x i1> %vc
1380 define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1381 ; ZVFH-LABEL: fcmp_ule_fv_nxv8f16:
1383 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1384 ; ZVFH-NEXT: vmflt.vf v10, v8, fa0
1385 ; ZVFH-NEXT: vmnot.m v0, v10
1388 ; ZVFHMIN-LABEL: fcmp_ule_fv_nxv8f16:
1390 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1391 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1392 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1393 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1394 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1395 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1396 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1397 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1398 ; ZVFHMIN-NEXT: vmflt.vv v8, v12, v16
1399 ; ZVFHMIN-NEXT: vmnot.m v0, v8
1401 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1402 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1403 %vc = fcmp ule <vscale x 8 x half> %splat, %va
1404 ret <vscale x 8 x i1> %vc
1407 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1408 ; ZVFH-LABEL: fcmp_ule_vv_nxv8f16_nonans:
1410 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1411 ; ZVFH-NEXT: vmfle.vv v0, v8, v10
1414 ; ZVFHMIN-LABEL: fcmp_ule_vv_nxv8f16_nonans:
1416 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1417 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1418 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1419 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1420 ; ZVFHMIN-NEXT: vmfle.vv v0, v16, v12
1422 %vc = fcmp ule <vscale x 8 x half> %va, %vb
1423 ret <vscale x 8 x i1> %vc
1426 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1427 ; ZVFH-LABEL: fcmp_ule_vf_nxv8f16_nonans:
1429 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1430 ; ZVFH-NEXT: vmfle.vf v0, v8, fa0
1433 ; ZVFHMIN-LABEL: fcmp_ule_vf_nxv8f16_nonans:
1435 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1436 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1437 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1438 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1439 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1440 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1441 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1442 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1443 ; ZVFHMIN-NEXT: vmfle.vv v0, v12, v16
1445 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1446 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1447 %vc = fcmp ule <vscale x 8 x half> %va, %splat
1448 ret <vscale x 8 x i1> %vc
1451 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1452 ; ZVFH-LABEL: fcmp_une_vv_nxv8f16:
1454 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1455 ; ZVFH-NEXT: vmfne.vv v0, v8, v10
1458 ; ZVFHMIN-LABEL: fcmp_une_vv_nxv8f16:
1460 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1461 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1462 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1463 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1464 ; ZVFHMIN-NEXT: vmfne.vv v0, v16, v12
1466 %vc = fcmp une <vscale x 8 x half> %va, %vb
1467 ret <vscale x 8 x i1> %vc
1470 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1471 ; ZVFH-LABEL: fcmp_une_vf_nxv8f16:
1473 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1474 ; ZVFH-NEXT: vmfne.vf v0, v8, fa0
1477 ; ZVFHMIN-LABEL: fcmp_une_vf_nxv8f16:
1479 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1480 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1481 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1482 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1483 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1484 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1485 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1486 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1487 ; ZVFHMIN-NEXT: vmfne.vv v0, v12, v16
1489 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1490 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1491 %vc = fcmp une <vscale x 8 x half> %va, %splat
1492 ret <vscale x 8 x i1> %vc
1495 define <vscale x 8 x i1> @fcmp_une_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1496 ; ZVFH-LABEL: fcmp_une_fv_nxv8f16:
1498 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1499 ; ZVFH-NEXT: vmfne.vf v0, v8, fa0
1502 ; ZVFHMIN-LABEL: fcmp_une_fv_nxv8f16:
1504 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1505 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1506 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1507 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1508 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1509 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1510 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1511 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1512 ; ZVFHMIN-NEXT: vmfne.vv v0, v16, v12
1514 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1515 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1516 %vc = fcmp une <vscale x 8 x half> %splat, %va
1517 ret <vscale x 8 x i1> %vc
1520 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1521 ; ZVFH-LABEL: fcmp_une_vv_nxv8f16_nonans:
1523 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1524 ; ZVFH-NEXT: vmfne.vv v0, v8, v10
1527 ; ZVFHMIN-LABEL: fcmp_une_vv_nxv8f16_nonans:
1529 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1530 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1531 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8
1532 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1533 ; ZVFHMIN-NEXT: vmfne.vv v0, v16, v12
1535 %vc = fcmp une <vscale x 8 x half> %va, %vb
1536 ret <vscale x 8 x i1> %vc
1539 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1540 ; ZVFH-LABEL: fcmp_une_vf_nxv8f16_nonans:
1542 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1543 ; ZVFH-NEXT: vmfne.vf v0, v8, fa0
1546 ; ZVFHMIN-LABEL: fcmp_une_vf_nxv8f16_nonans:
1548 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1549 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1550 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1551 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1552 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1553 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1554 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v10
1555 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1556 ; ZVFHMIN-NEXT: vmfne.vv v0, v12, v16
1558 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1559 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1560 %vc = fcmp une <vscale x 8 x half> %va, %splat
1561 ret <vscale x 8 x i1> %vc
1564 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1565 ; ZVFH-LABEL: fcmp_uno_vv_nxv8f16:
1567 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1568 ; ZVFH-NEXT: vmfne.vv v12, v10, v10
1569 ; ZVFH-NEXT: vmfne.vv v10, v8, v8
1570 ; ZVFH-NEXT: vmor.mm v0, v10, v12
1573 ; ZVFHMIN-LABEL: fcmp_uno_vv_nxv8f16:
1575 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1576 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1577 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1578 ; ZVFHMIN-NEXT: vmfne.vv v10, v12, v12
1579 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1580 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1581 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1582 ; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12
1583 ; ZVFHMIN-NEXT: vmor.mm v0, v8, v10
1585 %vc = fcmp uno <vscale x 8 x half> %va, %vb
1586 ret <vscale x 8 x i1> %vc
1589 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1590 ; ZVFH-LABEL: fcmp_uno_vf_nxv8f16:
1592 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1593 ; ZVFH-NEXT: vfmv.v.f v10, fa0
1594 ; ZVFH-NEXT: vmfne.vf v12, v10, fa0
1595 ; ZVFH-NEXT: vmfne.vv v10, v8, v8
1596 ; ZVFH-NEXT: vmor.mm v0, v10, v12
1599 ; ZVFHMIN-LABEL: fcmp_uno_vf_nxv8f16:
1601 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1602 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1603 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1604 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1605 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1606 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1607 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1608 ; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12
1609 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1610 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1611 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1612 ; ZVFHMIN-NEXT: vmfne.vv v9, v12, v12
1613 ; ZVFHMIN-NEXT: vmor.mm v0, v8, v9
1615 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1616 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1617 %vc = fcmp uno <vscale x 8 x half> %va, %splat
1618 ret <vscale x 8 x i1> %vc
1621 define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1622 ; ZVFH-LABEL: fcmp_uno_fv_nxv8f16:
1624 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1625 ; ZVFH-NEXT: vfmv.v.f v10, fa0
1626 ; ZVFH-NEXT: vmfne.vf v12, v10, fa0
1627 ; ZVFH-NEXT: vmfne.vv v10, v8, v8
1628 ; ZVFH-NEXT: vmor.mm v0, v12, v10
1631 ; ZVFHMIN-LABEL: fcmp_uno_fv_nxv8f16:
1633 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1634 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1635 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1636 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1637 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1638 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1639 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1640 ; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12
1641 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1642 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1643 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1644 ; ZVFHMIN-NEXT: vmfne.vv v9, v12, v12
1645 ; ZVFHMIN-NEXT: vmor.mm v0, v9, v8
1647 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1648 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1649 %vc = fcmp uno <vscale x 8 x half> %splat, %va
1650 ret <vscale x 8 x i1> %vc
1653 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1654 ; ZVFH-LABEL: fcmp_uno_vv_nxv8f16_nonans:
1656 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1657 ; ZVFH-NEXT: vmfne.vv v12, v10, v10
1658 ; ZVFH-NEXT: vmfne.vv v10, v8, v8
1659 ; ZVFH-NEXT: vmor.mm v0, v10, v12
1662 ; ZVFHMIN-LABEL: fcmp_uno_vv_nxv8f16_nonans:
1664 ; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1665 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1666 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1667 ; ZVFHMIN-NEXT: vmfne.vv v10, v12, v12
1668 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1669 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1670 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1671 ; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12
1672 ; ZVFHMIN-NEXT: vmor.mm v0, v8, v10
1674 %vc = fcmp uno <vscale x 8 x half> %va, %vb
1675 ret <vscale x 8 x i1> %vc
1678 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1679 ; ZVFH-LABEL: fcmp_uno_vf_nxv8f16_nonans:
1681 ; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma
1682 ; ZVFH-NEXT: vfmv.v.f v10, fa0
1683 ; ZVFH-NEXT: vmfne.vf v12, v10, fa0
1684 ; ZVFH-NEXT: vmfne.vv v10, v8, v8
1685 ; ZVFH-NEXT: vmor.mm v0, v10, v12
1688 ; ZVFHMIN-LABEL: fcmp_uno_vf_nxv8f16_nonans:
1690 ; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0
1691 ; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1692 ; ZVFHMIN-NEXT: vfmv.v.f v12, fa5
1693 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1694 ; ZVFHMIN-NEXT: vfncvt.f.f.w v10, v12
1695 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8
1696 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1697 ; ZVFHMIN-NEXT: vmfne.vv v8, v12, v12
1698 ; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma
1699 ; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10
1700 ; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma
1701 ; ZVFHMIN-NEXT: vmfne.vv v9, v12, v12
1702 ; ZVFHMIN-NEXT: vmor.mm v0, v8, v9
1704 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1705 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1706 %vc = fcmp uno <vscale x 8 x half> %va, %splat
1707 ret <vscale x 8 x i1> %vc
1710 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1711 ; CHECK-LABEL: fcmp_oeq_vv_nxv8f32:
1713 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1714 ; CHECK-NEXT: vmfeq.vv v0, v8, v12
1716 %vc = fcmp oeq <vscale x 8 x float> %va, %vb
1717 ret <vscale x 8 x i1> %vc
1720 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1721 ; CHECK-LABEL: fcmp_oeq_vf_nxv8f32:
1723 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1724 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
1726 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1727 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1728 %vc = fcmp oeq <vscale x 8 x float> %va, %splat
1729 ret <vscale x 8 x i1> %vc
1732 define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1733 ; CHECK-LABEL: fcmp_oeq_fv_nxv8f32:
1735 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1736 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
1738 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1739 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1740 %vc = fcmp oeq <vscale x 8 x float> %splat, %va
1741 ret <vscale x 8 x i1> %vc
1744 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1745 ; CHECK-LABEL: fcmp_oeq_vv_nxv8f32_nonans:
1747 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1748 ; CHECK-NEXT: vmfeq.vv v0, v8, v12
1750 %vc = fcmp oeq <vscale x 8 x float> %va, %vb
1751 ret <vscale x 8 x i1> %vc
1754 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1755 ; CHECK-LABEL: fcmp_oeq_vf_nxv8f32_nonans:
1757 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1758 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
1760 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1761 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1762 %vc = fcmp oeq <vscale x 8 x float> %va, %splat
1763 ret <vscale x 8 x i1> %vc
1766 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1767 ; CHECK-LABEL: fcmp_ogt_vv_nxv8f32:
1769 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1770 ; CHECK-NEXT: vmflt.vv v0, v12, v8
1772 %vc = fcmp ogt <vscale x 8 x float> %va, %vb
1773 ret <vscale x 8 x i1> %vc
1776 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1777 ; CHECK-LABEL: fcmp_ogt_vf_nxv8f32:
1779 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1780 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
1782 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1783 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1784 %vc = fcmp ogt <vscale x 8 x float> %va, %splat
1785 ret <vscale x 8 x i1> %vc
1788 define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1789 ; CHECK-LABEL: fcmp_ogt_fv_nxv8f32:
1791 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1792 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
1794 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1795 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1796 %vc = fcmp ogt <vscale x 8 x float> %splat, %va
1797 ret <vscale x 8 x i1> %vc
1800 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1801 ; CHECK-LABEL: fcmp_ogt_vv_nxv8f32_nonans:
1803 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1804 ; CHECK-NEXT: vmflt.vv v0, v12, v8
1806 %vc = fcmp ogt <vscale x 8 x float> %va, %vb
1807 ret <vscale x 8 x i1> %vc
1810 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1811 ; CHECK-LABEL: fcmp_ogt_vf_nxv8f32_nonans:
1813 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1814 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
1816 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1817 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1818 %vc = fcmp ogt <vscale x 8 x float> %va, %splat
1819 ret <vscale x 8 x i1> %vc
1822 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1823 ; CHECK-LABEL: fcmp_oge_vv_nxv8f32:
1825 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1826 ; CHECK-NEXT: vmfle.vv v0, v12, v8
1828 %vc = fcmp oge <vscale x 8 x float> %va, %vb
1829 ret <vscale x 8 x i1> %vc
1832 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1833 ; CHECK-LABEL: fcmp_oge_vf_nxv8f32:
1835 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1836 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
1838 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1839 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1840 %vc = fcmp oge <vscale x 8 x float> %va, %splat
1841 ret <vscale x 8 x i1> %vc
1844 define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1845 ; CHECK-LABEL: fcmp_oge_fv_nxv8f32:
1847 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1848 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
1850 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1851 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1852 %vc = fcmp oge <vscale x 8 x float> %splat, %va
1853 ret <vscale x 8 x i1> %vc
1856 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1857 ; CHECK-LABEL: fcmp_oge_vv_nxv8f32_nonans:
1859 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1860 ; CHECK-NEXT: vmfle.vv v0, v12, v8
1862 %vc = fcmp oge <vscale x 8 x float> %va, %vb
1863 ret <vscale x 8 x i1> %vc
1866 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1867 ; CHECK-LABEL: fcmp_oge_vf_nxv8f32_nonans:
1869 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1870 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
1872 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1873 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1874 %vc = fcmp oge <vscale x 8 x float> %va, %splat
1875 ret <vscale x 8 x i1> %vc
1878 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1879 ; CHECK-LABEL: fcmp_olt_vv_nxv8f32:
1881 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1882 ; CHECK-NEXT: vmflt.vv v0, v8, v12
1884 %vc = fcmp olt <vscale x 8 x float> %va, %vb
1885 ret <vscale x 8 x i1> %vc
1888 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1889 ; CHECK-LABEL: fcmp_olt_vf_nxv8f32:
1891 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1892 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
1894 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1895 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1896 %vc = fcmp olt <vscale x 8 x float> %va, %splat
1897 ret <vscale x 8 x i1> %vc
1900 define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1901 ; CHECK-LABEL: fcmp_olt_fv_nxv8f32:
1903 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1904 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
1906 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1907 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1908 %vc = fcmp olt <vscale x 8 x float> %splat, %va
1909 ret <vscale x 8 x i1> %vc
1912 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1913 ; CHECK-LABEL: fcmp_olt_vv_nxv8f32_nonans:
1915 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1916 ; CHECK-NEXT: vmflt.vv v0, v8, v12
1918 %vc = fcmp olt <vscale x 8 x float> %va, %vb
1919 ret <vscale x 8 x i1> %vc
1922 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1923 ; CHECK-LABEL: fcmp_olt_vf_nxv8f32_nonans:
1925 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1926 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
1928 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1929 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1930 %vc = fcmp olt <vscale x 8 x float> %va, %splat
1931 ret <vscale x 8 x i1> %vc
1934 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1935 ; CHECK-LABEL: fcmp_ole_vv_nxv8f32:
1937 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1938 ; CHECK-NEXT: vmfle.vv v0, v8, v12
1940 %vc = fcmp ole <vscale x 8 x float> %va, %vb
1941 ret <vscale x 8 x i1> %vc
1944 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1945 ; CHECK-LABEL: fcmp_ole_vf_nxv8f32:
1947 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1948 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
1950 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1951 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1952 %vc = fcmp ole <vscale x 8 x float> %va, %splat
1953 ret <vscale x 8 x i1> %vc
1956 define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1957 ; CHECK-LABEL: fcmp_ole_fv_nxv8f32:
1959 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1960 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
1962 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1963 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1964 %vc = fcmp ole <vscale x 8 x float> %splat, %va
1965 ret <vscale x 8 x i1> %vc
1968 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1969 ; CHECK-LABEL: fcmp_ole_vv_nxv8f32_nonans:
1971 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1972 ; CHECK-NEXT: vmfle.vv v0, v8, v12
1974 %vc = fcmp ole <vscale x 8 x float> %va, %vb
1975 ret <vscale x 8 x i1> %vc
1978 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1979 ; CHECK-LABEL: fcmp_ole_vf_nxv8f32_nonans:
1981 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1982 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
1984 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
1985 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
1986 %vc = fcmp ole <vscale x 8 x float> %va, %splat
1987 ret <vscale x 8 x i1> %vc
1990 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1991 ; CHECK-LABEL: fcmp_one_vv_nxv8f32:
1993 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
1994 ; CHECK-NEXT: vmflt.vv v16, v8, v12
1995 ; CHECK-NEXT: vmflt.vv v17, v12, v8
1996 ; CHECK-NEXT: vmor.mm v0, v17, v16
1998 %vc = fcmp one <vscale x 8 x float> %va, %vb
1999 ret <vscale x 8 x i1> %vc
2002 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2003 ; CHECK-LABEL: fcmp_one_vf_nxv8f32:
2005 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2006 ; CHECK-NEXT: vmflt.vf v12, v8, fa0
2007 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0
2008 ; CHECK-NEXT: vmor.mm v0, v13, v12
2010 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2011 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2012 %vc = fcmp one <vscale x 8 x float> %va, %splat
2013 ret <vscale x 8 x i1> %vc
2016 define <vscale x 8 x i1> @fcmp_one_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2017 ; CHECK-LABEL: fcmp_one_fv_nxv8f32:
2019 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2020 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0
2021 ; CHECK-NEXT: vmflt.vf v13, v8, fa0
2022 ; CHECK-NEXT: vmor.mm v0, v13, v12
2024 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2025 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2026 %vc = fcmp one <vscale x 8 x float> %splat, %va
2027 ret <vscale x 8 x i1> %vc
2030 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2031 ; CHECK-LABEL: fcmp_one_vv_nxv8f32_nonans:
2033 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2034 ; CHECK-NEXT: vmfne.vv v0, v8, v12
2036 %vc = fcmp one <vscale x 8 x float> %va, %vb
2037 ret <vscale x 8 x i1> %vc
2040 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2041 ; CHECK-LABEL: fcmp_one_vf_nxv8f32_nonans:
2043 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2044 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
2046 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2047 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2048 %vc = fcmp one <vscale x 8 x float> %va, %splat
2049 ret <vscale x 8 x i1> %vc
2052 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2053 ; CHECK-LABEL: fcmp_ord_vv_nxv8f32:
2055 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2056 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
2057 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2058 ; CHECK-NEXT: vmand.mm v0, v12, v16
2060 %vc = fcmp ord <vscale x 8 x float> %va, %vb
2061 ret <vscale x 8 x i1> %vc
2064 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2065 ; CHECK-LABEL: fcmp_ord_vf_nxv8f32:
2067 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2068 ; CHECK-NEXT: vfmv.v.f v12, fa0
2069 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
2070 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2071 ; CHECK-NEXT: vmand.mm v0, v12, v16
2073 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2074 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2075 %vc = fcmp ord <vscale x 8 x float> %va, %splat
2076 ret <vscale x 8 x i1> %vc
2079 define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2080 ; CHECK-LABEL: fcmp_ord_fv_nxv8f32:
2082 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2083 ; CHECK-NEXT: vfmv.v.f v12, fa0
2084 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
2085 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2086 ; CHECK-NEXT: vmand.mm v0, v16, v12
2088 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2089 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2090 %vc = fcmp ord <vscale x 8 x float> %splat, %va
2091 ret <vscale x 8 x i1> %vc
2094 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2095 ; CHECK-LABEL: fcmp_ord_vv_nxv8f32_nonans:
2097 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2098 ; CHECK-NEXT: vmfeq.vv v16, v12, v12
2099 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2100 ; CHECK-NEXT: vmand.mm v0, v12, v16
2102 %vc = fcmp ord <vscale x 8 x float> %va, %vb
2103 ret <vscale x 8 x i1> %vc
2106 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2107 ; CHECK-LABEL: fcmp_ord_vf_nxv8f32_nonans:
2109 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2110 ; CHECK-NEXT: vfmv.v.f v12, fa0
2111 ; CHECK-NEXT: vmfeq.vf v16, v12, fa0
2112 ; CHECK-NEXT: vmfeq.vv v12, v8, v8
2113 ; CHECK-NEXT: vmand.mm v0, v12, v16
2115 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2116 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2117 %vc = fcmp ord <vscale x 8 x float> %va, %splat
2118 ret <vscale x 8 x i1> %vc
2121 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2122 ; CHECK-LABEL: fcmp_ueq_vv_nxv8f32:
2124 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2125 ; CHECK-NEXT: vmflt.vv v16, v8, v12
2126 ; CHECK-NEXT: vmflt.vv v17, v12, v8
2127 ; CHECK-NEXT: vmnor.mm v0, v17, v16
2129 %vc = fcmp ueq <vscale x 8 x float> %va, %vb
2130 ret <vscale x 8 x i1> %vc
2133 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2134 ; CHECK-LABEL: fcmp_ueq_vf_nxv8f32:
2136 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2137 ; CHECK-NEXT: vmflt.vf v12, v8, fa0
2138 ; CHECK-NEXT: vmfgt.vf v13, v8, fa0
2139 ; CHECK-NEXT: vmnor.mm v0, v13, v12
2141 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2142 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2143 %vc = fcmp ueq <vscale x 8 x float> %va, %splat
2144 ret <vscale x 8 x i1> %vc
2147 define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2148 ; CHECK-LABEL: fcmp_ueq_fv_nxv8f32:
2150 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2151 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0
2152 ; CHECK-NEXT: vmflt.vf v13, v8, fa0
2153 ; CHECK-NEXT: vmnor.mm v0, v13, v12
2155 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2156 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2157 %vc = fcmp ueq <vscale x 8 x float> %splat, %va
2158 ret <vscale x 8 x i1> %vc
2161 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2162 ; CHECK-LABEL: fcmp_ueq_vv_nxv8f32_nonans:
2164 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2165 ; CHECK-NEXT: vmfeq.vv v0, v8, v12
2167 %vc = fcmp ueq <vscale x 8 x float> %va, %vb
2168 ret <vscale x 8 x i1> %vc
2171 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2172 ; CHECK-LABEL: fcmp_ueq_vf_nxv8f32_nonans:
2174 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2175 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
2177 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2178 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2179 %vc = fcmp ueq <vscale x 8 x float> %va, %splat
2180 ret <vscale x 8 x i1> %vc
2183 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2184 ; CHECK-LABEL: fcmp_ugt_vv_nxv8f32:
2186 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2187 ; CHECK-NEXT: vmfle.vv v16, v8, v12
2188 ; CHECK-NEXT: vmnot.m v0, v16
2190 %vc = fcmp ugt <vscale x 8 x float> %va, %vb
2191 ret <vscale x 8 x i1> %vc
2194 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2195 ; CHECK-LABEL: fcmp_ugt_vf_nxv8f32:
2197 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2198 ; CHECK-NEXT: vmfle.vf v12, v8, fa0
2199 ; CHECK-NEXT: vmnot.m v0, v12
2201 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2202 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2203 %vc = fcmp ugt <vscale x 8 x float> %va, %splat
2204 ret <vscale x 8 x i1> %vc
2207 define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2208 ; CHECK-LABEL: fcmp_ugt_fv_nxv8f32:
2210 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2211 ; CHECK-NEXT: vmfge.vf v12, v8, fa0
2212 ; CHECK-NEXT: vmnot.m v0, v12
2214 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2215 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2216 %vc = fcmp ugt <vscale x 8 x float> %splat, %va
2217 ret <vscale x 8 x i1> %vc
2220 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2221 ; CHECK-LABEL: fcmp_ugt_vv_nxv8f32_nonans:
2223 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2224 ; CHECK-NEXT: vmflt.vv v0, v12, v8
2226 %vc = fcmp ugt <vscale x 8 x float> %va, %vb
2227 ret <vscale x 8 x i1> %vc
2230 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2231 ; CHECK-LABEL: fcmp_ugt_vf_nxv8f32_nonans:
2233 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2234 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
2236 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2237 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2238 %vc = fcmp ugt <vscale x 8 x float> %va, %splat
2239 ret <vscale x 8 x i1> %vc
2242 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2243 ; CHECK-LABEL: fcmp_uge_vv_nxv8f32:
2245 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2246 ; CHECK-NEXT: vmflt.vv v16, v8, v12
2247 ; CHECK-NEXT: vmnot.m v0, v16
2249 %vc = fcmp uge <vscale x 8 x float> %va, %vb
2250 ret <vscale x 8 x i1> %vc
2253 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2254 ; CHECK-LABEL: fcmp_uge_vf_nxv8f32:
2256 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2257 ; CHECK-NEXT: vmflt.vf v12, v8, fa0
2258 ; CHECK-NEXT: vmnot.m v0, v12
2260 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2261 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2262 %vc = fcmp uge <vscale x 8 x float> %va, %splat
2263 ret <vscale x 8 x i1> %vc
2266 define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2267 ; CHECK-LABEL: fcmp_uge_fv_nxv8f32:
2269 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2270 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0
2271 ; CHECK-NEXT: vmnot.m v0, v12
2273 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2274 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2275 %vc = fcmp uge <vscale x 8 x float> %splat, %va
2276 ret <vscale x 8 x i1> %vc
2279 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2280 ; CHECK-LABEL: fcmp_uge_vv_nxv8f32_nonans:
2282 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2283 ; CHECK-NEXT: vmfle.vv v0, v12, v8
2285 %vc = fcmp uge <vscale x 8 x float> %va, %vb
2286 ret <vscale x 8 x i1> %vc
2289 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2290 ; CHECK-LABEL: fcmp_uge_vf_nxv8f32_nonans:
2292 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2293 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
2295 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2296 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2297 %vc = fcmp uge <vscale x 8 x float> %va, %splat
2298 ret <vscale x 8 x i1> %vc
2301 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2302 ; CHECK-LABEL: fcmp_ult_vv_nxv8f32:
2304 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2305 ; CHECK-NEXT: vmfle.vv v16, v12, v8
2306 ; CHECK-NEXT: vmnot.m v0, v16
2308 %vc = fcmp ult <vscale x 8 x float> %va, %vb
2309 ret <vscale x 8 x i1> %vc
2312 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2313 ; CHECK-LABEL: fcmp_ult_vf_nxv8f32:
2315 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2316 ; CHECK-NEXT: vmfge.vf v12, v8, fa0
2317 ; CHECK-NEXT: vmnot.m v0, v12
2319 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2320 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2321 %vc = fcmp ult <vscale x 8 x float> %va, %splat
2322 ret <vscale x 8 x i1> %vc
2325 define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2326 ; CHECK-LABEL: fcmp_ult_fv_nxv8f32:
2328 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2329 ; CHECK-NEXT: vmfle.vf v12, v8, fa0
2330 ; CHECK-NEXT: vmnot.m v0, v12
2332 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2333 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2334 %vc = fcmp ult <vscale x 8 x float> %splat, %va
2335 ret <vscale x 8 x i1> %vc
2338 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2339 ; CHECK-LABEL: fcmp_ult_vv_nxv8f32_nonans:
2341 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2342 ; CHECK-NEXT: vmflt.vv v0, v8, v12
2344 %vc = fcmp ult <vscale x 8 x float> %va, %vb
2345 ret <vscale x 8 x i1> %vc
2348 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2349 ; CHECK-LABEL: fcmp_ult_vf_nxv8f32_nonans:
2351 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2352 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
2354 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2355 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2356 %vc = fcmp ult <vscale x 8 x float> %va, %splat
2357 ret <vscale x 8 x i1> %vc
2360 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2361 ; CHECK-LABEL: fcmp_ule_vv_nxv8f32:
2363 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2364 ; CHECK-NEXT: vmflt.vv v16, v12, v8
2365 ; CHECK-NEXT: vmnot.m v0, v16
2367 %vc = fcmp ule <vscale x 8 x float> %va, %vb
2368 ret <vscale x 8 x i1> %vc
2371 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2372 ; CHECK-LABEL: fcmp_ule_vf_nxv8f32:
2374 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2375 ; CHECK-NEXT: vmfgt.vf v12, v8, fa0
2376 ; CHECK-NEXT: vmnot.m v0, v12
2378 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2379 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2380 %vc = fcmp ule <vscale x 8 x float> %va, %splat
2381 ret <vscale x 8 x i1> %vc
2384 define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2385 ; CHECK-LABEL: fcmp_ule_fv_nxv8f32:
2387 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2388 ; CHECK-NEXT: vmflt.vf v12, v8, fa0
2389 ; CHECK-NEXT: vmnot.m v0, v12
2391 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2392 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2393 %vc = fcmp ule <vscale x 8 x float> %splat, %va
2394 ret <vscale x 8 x i1> %vc
2397 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2398 ; CHECK-LABEL: fcmp_ule_vv_nxv8f32_nonans:
2400 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2401 ; CHECK-NEXT: vmfle.vv v0, v8, v12
2403 %vc = fcmp ule <vscale x 8 x float> %va, %vb
2404 ret <vscale x 8 x i1> %vc
2407 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2408 ; CHECK-LABEL: fcmp_ule_vf_nxv8f32_nonans:
2410 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2411 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
2413 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2414 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2415 %vc = fcmp ule <vscale x 8 x float> %va, %splat
2416 ret <vscale x 8 x i1> %vc
2419 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2420 ; CHECK-LABEL: fcmp_une_vv_nxv8f32:
2422 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2423 ; CHECK-NEXT: vmfne.vv v0, v8, v12
2425 %vc = fcmp une <vscale x 8 x float> %va, %vb
2426 ret <vscale x 8 x i1> %vc
2429 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2430 ; CHECK-LABEL: fcmp_une_vf_nxv8f32:
2432 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2433 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
2435 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2436 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2437 %vc = fcmp une <vscale x 8 x float> %va, %splat
2438 ret <vscale x 8 x i1> %vc
2441 define <vscale x 8 x i1> @fcmp_une_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2442 ; CHECK-LABEL: fcmp_une_fv_nxv8f32:
2444 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2445 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
2447 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2448 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2449 %vc = fcmp une <vscale x 8 x float> %splat, %va
2450 ret <vscale x 8 x i1> %vc
2453 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2454 ; CHECK-LABEL: fcmp_une_vv_nxv8f32_nonans:
2456 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2457 ; CHECK-NEXT: vmfne.vv v0, v8, v12
2459 %vc = fcmp une <vscale x 8 x float> %va, %vb
2460 ret <vscale x 8 x i1> %vc
2463 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2464 ; CHECK-LABEL: fcmp_une_vf_nxv8f32_nonans:
2466 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2467 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
2469 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2470 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2471 %vc = fcmp une <vscale x 8 x float> %va, %splat
2472 ret <vscale x 8 x i1> %vc
2475 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2476 ; CHECK-LABEL: fcmp_uno_vv_nxv8f32:
2478 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2479 ; CHECK-NEXT: vmfne.vv v16, v12, v12
2480 ; CHECK-NEXT: vmfne.vv v12, v8, v8
2481 ; CHECK-NEXT: vmor.mm v0, v12, v16
2483 %vc = fcmp uno <vscale x 8 x float> %va, %vb
2484 ret <vscale x 8 x i1> %vc
2487 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2488 ; CHECK-LABEL: fcmp_uno_vf_nxv8f32:
2490 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2491 ; CHECK-NEXT: vfmv.v.f v12, fa0
2492 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
2493 ; CHECK-NEXT: vmfne.vv v12, v8, v8
2494 ; CHECK-NEXT: vmor.mm v0, v12, v16
2496 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2497 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2498 %vc = fcmp uno <vscale x 8 x float> %va, %splat
2499 ret <vscale x 8 x i1> %vc
2502 define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2503 ; CHECK-LABEL: fcmp_uno_fv_nxv8f32:
2505 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2506 ; CHECK-NEXT: vfmv.v.f v12, fa0
2507 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
2508 ; CHECK-NEXT: vmfne.vv v12, v8, v8
2509 ; CHECK-NEXT: vmor.mm v0, v16, v12
2511 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2512 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2513 %vc = fcmp uno <vscale x 8 x float> %splat, %va
2514 ret <vscale x 8 x i1> %vc
2517 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2518 ; CHECK-LABEL: fcmp_uno_vv_nxv8f32_nonans:
2520 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2521 ; CHECK-NEXT: vmfne.vv v16, v12, v12
2522 ; CHECK-NEXT: vmfne.vv v12, v8, v8
2523 ; CHECK-NEXT: vmor.mm v0, v12, v16
2525 %vc = fcmp uno <vscale x 8 x float> %va, %vb
2526 ret <vscale x 8 x i1> %vc
2529 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2530 ; CHECK-LABEL: fcmp_uno_vf_nxv8f32_nonans:
2532 ; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma
2533 ; CHECK-NEXT: vfmv.v.f v12, fa0
2534 ; CHECK-NEXT: vmfne.vf v16, v12, fa0
2535 ; CHECK-NEXT: vmfne.vv v12, v8, v8
2536 ; CHECK-NEXT: vmor.mm v0, v12, v16
2538 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2539 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2540 %vc = fcmp uno <vscale x 8 x float> %va, %splat
2541 ret <vscale x 8 x i1> %vc
2544 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2545 ; CHECK-LABEL: fcmp_oeq_vv_nxv8f64:
2547 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2548 ; CHECK-NEXT: vmfeq.vv v0, v8, v16
2550 %vc = fcmp oeq <vscale x 8 x double> %va, %vb
2551 ret <vscale x 8 x i1> %vc
2554 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2555 ; CHECK-LABEL: fcmp_oeq_vf_nxv8f64:
2557 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2558 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
2560 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2561 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2562 %vc = fcmp oeq <vscale x 8 x double> %va, %splat
2563 ret <vscale x 8 x i1> %vc
2566 define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2567 ; CHECK-LABEL: fcmp_oeq_fv_nxv8f64:
2569 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2570 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
2572 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2573 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2574 %vc = fcmp oeq <vscale x 8 x double> %splat, %va
2575 ret <vscale x 8 x i1> %vc
2578 define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2579 ; CHECK-LABEL: fcmp_oeq_vv_nxv8f64_nonans:
2581 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2582 ; CHECK-NEXT: vmfeq.vv v0, v8, v16
2584 %vc = fcmp oeq <vscale x 8 x double> %va, %vb
2585 ret <vscale x 8 x i1> %vc
2588 define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2589 ; CHECK-LABEL: fcmp_oeq_vf_nxv8f64_nonans:
2591 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2592 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
2594 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2595 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2596 %vc = fcmp oeq <vscale x 8 x double> %va, %splat
2597 ret <vscale x 8 x i1> %vc
2600 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2601 ; CHECK-LABEL: fcmp_ogt_vv_nxv8f64:
2603 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2604 ; CHECK-NEXT: vmflt.vv v0, v16, v8
2606 %vc = fcmp ogt <vscale x 8 x double> %va, %vb
2607 ret <vscale x 8 x i1> %vc
2610 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2611 ; CHECK-LABEL: fcmp_ogt_vf_nxv8f64:
2613 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2614 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
2616 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2617 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2618 %vc = fcmp ogt <vscale x 8 x double> %va, %splat
2619 ret <vscale x 8 x i1> %vc
2622 define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2623 ; CHECK-LABEL: fcmp_ogt_fv_nxv8f64:
2625 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2626 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
2628 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2629 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2630 %vc = fcmp ogt <vscale x 8 x double> %splat, %va
2631 ret <vscale x 8 x i1> %vc
2634 define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2635 ; CHECK-LABEL: fcmp_ogt_vv_nxv8f64_nonans:
2637 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2638 ; CHECK-NEXT: vmflt.vv v0, v16, v8
2640 %vc = fcmp ogt <vscale x 8 x double> %va, %vb
2641 ret <vscale x 8 x i1> %vc
2644 define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2645 ; CHECK-LABEL: fcmp_ogt_vf_nxv8f64_nonans:
2647 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2648 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
2650 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2651 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2652 %vc = fcmp ogt <vscale x 8 x double> %va, %splat
2653 ret <vscale x 8 x i1> %vc
2656 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2657 ; CHECK-LABEL: fcmp_oge_vv_nxv8f64:
2659 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2660 ; CHECK-NEXT: vmfle.vv v0, v16, v8
2662 %vc = fcmp oge <vscale x 8 x double> %va, %vb
2663 ret <vscale x 8 x i1> %vc
2666 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2667 ; CHECK-LABEL: fcmp_oge_vf_nxv8f64:
2669 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2670 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
2672 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2673 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2674 %vc = fcmp oge <vscale x 8 x double> %va, %splat
2675 ret <vscale x 8 x i1> %vc
2678 define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2679 ; CHECK-LABEL: fcmp_oge_fv_nxv8f64:
2681 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2682 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
2684 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2685 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2686 %vc = fcmp oge <vscale x 8 x double> %splat, %va
2687 ret <vscale x 8 x i1> %vc
2690 define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2691 ; CHECK-LABEL: fcmp_oge_vv_nxv8f64_nonans:
2693 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2694 ; CHECK-NEXT: vmfle.vv v0, v16, v8
2696 %vc = fcmp oge <vscale x 8 x double> %va, %vb
2697 ret <vscale x 8 x i1> %vc
2700 define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2701 ; CHECK-LABEL: fcmp_oge_vf_nxv8f64_nonans:
2703 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2704 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
2706 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2707 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2708 %vc = fcmp oge <vscale x 8 x double> %va, %splat
2709 ret <vscale x 8 x i1> %vc
2712 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2713 ; CHECK-LABEL: fcmp_olt_vv_nxv8f64:
2715 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2716 ; CHECK-NEXT: vmflt.vv v0, v8, v16
2718 %vc = fcmp olt <vscale x 8 x double> %va, %vb
2719 ret <vscale x 8 x i1> %vc
2722 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2723 ; CHECK-LABEL: fcmp_olt_vf_nxv8f64:
2725 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2726 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
2728 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2729 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2730 %vc = fcmp olt <vscale x 8 x double> %va, %splat
2731 ret <vscale x 8 x i1> %vc
2734 define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2735 ; CHECK-LABEL: fcmp_olt_fv_nxv8f64:
2737 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2738 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
2740 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2741 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2742 %vc = fcmp olt <vscale x 8 x double> %splat, %va
2743 ret <vscale x 8 x i1> %vc
2746 define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2747 ; CHECK-LABEL: fcmp_olt_vv_nxv8f64_nonans:
2749 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2750 ; CHECK-NEXT: vmflt.vv v0, v8, v16
2752 %vc = fcmp olt <vscale x 8 x double> %va, %vb
2753 ret <vscale x 8 x i1> %vc
2756 define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2757 ; CHECK-LABEL: fcmp_olt_vf_nxv8f64_nonans:
2759 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2760 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
2762 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2763 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2764 %vc = fcmp olt <vscale x 8 x double> %va, %splat
2765 ret <vscale x 8 x i1> %vc
2768 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2769 ; CHECK-LABEL: fcmp_ole_vv_nxv8f64:
2771 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2772 ; CHECK-NEXT: vmfle.vv v0, v8, v16
2774 %vc = fcmp ole <vscale x 8 x double> %va, %vb
2775 ret <vscale x 8 x i1> %vc
2778 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2779 ; CHECK-LABEL: fcmp_ole_vf_nxv8f64:
2781 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2782 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
2784 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2785 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2786 %vc = fcmp ole <vscale x 8 x double> %va, %splat
2787 ret <vscale x 8 x i1> %vc
2790 define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2791 ; CHECK-LABEL: fcmp_ole_fv_nxv8f64:
2793 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2794 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
2796 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2797 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2798 %vc = fcmp ole <vscale x 8 x double> %splat, %va
2799 ret <vscale x 8 x i1> %vc
2802 define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2803 ; CHECK-LABEL: fcmp_ole_vv_nxv8f64_nonans:
2805 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2806 ; CHECK-NEXT: vmfle.vv v0, v8, v16
2808 %vc = fcmp ole <vscale x 8 x double> %va, %vb
2809 ret <vscale x 8 x i1> %vc
2812 define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2813 ; CHECK-LABEL: fcmp_ole_vf_nxv8f64_nonans:
2815 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2816 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
2818 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2819 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2820 %vc = fcmp ole <vscale x 8 x double> %va, %splat
2821 ret <vscale x 8 x i1> %vc
2824 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2825 ; CHECK-LABEL: fcmp_one_vv_nxv8f64:
2827 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2828 ; CHECK-NEXT: vmflt.vv v24, v8, v16
2829 ; CHECK-NEXT: vmflt.vv v25, v16, v8
2830 ; CHECK-NEXT: vmor.mm v0, v25, v24
2832 %vc = fcmp one <vscale x 8 x double> %va, %vb
2833 ret <vscale x 8 x i1> %vc
2836 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2837 ; CHECK-LABEL: fcmp_one_vf_nxv8f64:
2839 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2840 ; CHECK-NEXT: vmflt.vf v16, v8, fa0
2841 ; CHECK-NEXT: vmfgt.vf v17, v8, fa0
2842 ; CHECK-NEXT: vmor.mm v0, v17, v16
2844 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2845 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2846 %vc = fcmp one <vscale x 8 x double> %va, %splat
2847 ret <vscale x 8 x i1> %vc
2850 define <vscale x 8 x i1> @fcmp_one_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2851 ; CHECK-LABEL: fcmp_one_fv_nxv8f64:
2853 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2854 ; CHECK-NEXT: vmfgt.vf v16, v8, fa0
2855 ; CHECK-NEXT: vmflt.vf v17, v8, fa0
2856 ; CHECK-NEXT: vmor.mm v0, v17, v16
2858 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2859 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2860 %vc = fcmp one <vscale x 8 x double> %splat, %va
2861 ret <vscale x 8 x i1> %vc
2864 define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2865 ; CHECK-LABEL: fcmp_one_vv_nxv8f64_nonans:
2867 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2868 ; CHECK-NEXT: vmfne.vv v0, v8, v16
2870 %vc = fcmp one <vscale x 8 x double> %va, %vb
2871 ret <vscale x 8 x i1> %vc
2874 define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2875 ; CHECK-LABEL: fcmp_one_vf_nxv8f64_nonans:
2877 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2878 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
2880 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2881 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2882 %vc = fcmp one <vscale x 8 x double> %va, %splat
2883 ret <vscale x 8 x i1> %vc
2886 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2887 ; CHECK-LABEL: fcmp_ord_vv_nxv8f64:
2889 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2890 ; CHECK-NEXT: vmfeq.vv v24, v16, v16
2891 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
2892 ; CHECK-NEXT: vmand.mm v0, v16, v24
2894 %vc = fcmp ord <vscale x 8 x double> %va, %vb
2895 ret <vscale x 8 x i1> %vc
2898 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2899 ; CHECK-LABEL: fcmp_ord_vf_nxv8f64:
2901 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2902 ; CHECK-NEXT: vfmv.v.f v16, fa0
2903 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0
2904 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
2905 ; CHECK-NEXT: vmand.mm v0, v16, v24
2907 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2908 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2909 %vc = fcmp ord <vscale x 8 x double> %va, %splat
2910 ret <vscale x 8 x i1> %vc
2913 define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2914 ; CHECK-LABEL: fcmp_ord_fv_nxv8f64:
2916 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2917 ; CHECK-NEXT: vfmv.v.f v16, fa0
2918 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0
2919 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
2920 ; CHECK-NEXT: vmand.mm v0, v24, v16
2922 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2923 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2924 %vc = fcmp ord <vscale x 8 x double> %splat, %va
2925 ret <vscale x 8 x i1> %vc
2928 define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2929 ; CHECK-LABEL: fcmp_ord_vv_nxv8f64_nonans:
2931 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2932 ; CHECK-NEXT: vmfeq.vv v24, v16, v16
2933 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
2934 ; CHECK-NEXT: vmand.mm v0, v16, v24
2936 %vc = fcmp ord <vscale x 8 x double> %va, %vb
2937 ret <vscale x 8 x i1> %vc
2940 define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2941 ; CHECK-LABEL: fcmp_ord_vf_nxv8f64_nonans:
2943 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2944 ; CHECK-NEXT: vfmv.v.f v16, fa0
2945 ; CHECK-NEXT: vmfeq.vf v24, v16, fa0
2946 ; CHECK-NEXT: vmfeq.vv v16, v8, v8
2947 ; CHECK-NEXT: vmand.mm v0, v16, v24
2949 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2950 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2951 %vc = fcmp ord <vscale x 8 x double> %va, %splat
2952 ret <vscale x 8 x i1> %vc
2955 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2956 ; CHECK-LABEL: fcmp_ueq_vv_nxv8f64:
2958 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2959 ; CHECK-NEXT: vmflt.vv v24, v8, v16
2960 ; CHECK-NEXT: vmflt.vv v25, v16, v8
2961 ; CHECK-NEXT: vmnor.mm v0, v25, v24
2963 %vc = fcmp ueq <vscale x 8 x double> %va, %vb
2964 ret <vscale x 8 x i1> %vc
2967 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2968 ; CHECK-LABEL: fcmp_ueq_vf_nxv8f64:
2970 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2971 ; CHECK-NEXT: vmflt.vf v16, v8, fa0
2972 ; CHECK-NEXT: vmfgt.vf v17, v8, fa0
2973 ; CHECK-NEXT: vmnor.mm v0, v17, v16
2975 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2976 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2977 %vc = fcmp ueq <vscale x 8 x double> %va, %splat
2978 ret <vscale x 8 x i1> %vc
2981 define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2982 ; CHECK-LABEL: fcmp_ueq_fv_nxv8f64:
2984 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2985 ; CHECK-NEXT: vmfgt.vf v16, v8, fa0
2986 ; CHECK-NEXT: vmflt.vf v17, v8, fa0
2987 ; CHECK-NEXT: vmnor.mm v0, v17, v16
2989 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
2990 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
2991 %vc = fcmp ueq <vscale x 8 x double> %splat, %va
2992 ret <vscale x 8 x i1> %vc
2995 define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2996 ; CHECK-LABEL: fcmp_ueq_vv_nxv8f64_nonans:
2998 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
2999 ; CHECK-NEXT: vmfeq.vv v0, v8, v16
3001 %vc = fcmp ueq <vscale x 8 x double> %va, %vb
3002 ret <vscale x 8 x i1> %vc
3005 define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3006 ; CHECK-LABEL: fcmp_ueq_vf_nxv8f64_nonans:
3008 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3009 ; CHECK-NEXT: vmfeq.vf v0, v8, fa0
3011 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3012 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3013 %vc = fcmp ueq <vscale x 8 x double> %va, %splat
3014 ret <vscale x 8 x i1> %vc
3017 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3018 ; CHECK-LABEL: fcmp_ugt_vv_nxv8f64:
3020 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3021 ; CHECK-NEXT: vmfle.vv v24, v8, v16
3022 ; CHECK-NEXT: vmnot.m v0, v24
3024 %vc = fcmp ugt <vscale x 8 x double> %va, %vb
3025 ret <vscale x 8 x i1> %vc
3028 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3029 ; CHECK-LABEL: fcmp_ugt_vf_nxv8f64:
3031 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3032 ; CHECK-NEXT: vmfle.vf v16, v8, fa0
3033 ; CHECK-NEXT: vmnot.m v0, v16
3035 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3036 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3037 %vc = fcmp ugt <vscale x 8 x double> %va, %splat
3038 ret <vscale x 8 x i1> %vc
3041 define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3042 ; CHECK-LABEL: fcmp_ugt_fv_nxv8f64:
3044 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3045 ; CHECK-NEXT: vmfge.vf v16, v8, fa0
3046 ; CHECK-NEXT: vmnot.m v0, v16
3048 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3049 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3050 %vc = fcmp ugt <vscale x 8 x double> %splat, %va
3051 ret <vscale x 8 x i1> %vc
3054 define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3055 ; CHECK-LABEL: fcmp_ugt_vv_nxv8f64_nonans:
3057 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3058 ; CHECK-NEXT: vmflt.vv v0, v16, v8
3060 %vc = fcmp ugt <vscale x 8 x double> %va, %vb
3061 ret <vscale x 8 x i1> %vc
3064 define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3065 ; CHECK-LABEL: fcmp_ugt_vf_nxv8f64_nonans:
3067 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3068 ; CHECK-NEXT: vmfgt.vf v0, v8, fa0
3070 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3071 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3072 %vc = fcmp ugt <vscale x 8 x double> %va, %splat
3073 ret <vscale x 8 x i1> %vc
3076 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3077 ; CHECK-LABEL: fcmp_uge_vv_nxv8f64:
3079 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3080 ; CHECK-NEXT: vmflt.vv v24, v8, v16
3081 ; CHECK-NEXT: vmnot.m v0, v24
3083 %vc = fcmp uge <vscale x 8 x double> %va, %vb
3084 ret <vscale x 8 x i1> %vc
3087 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3088 ; CHECK-LABEL: fcmp_uge_vf_nxv8f64:
3090 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3091 ; CHECK-NEXT: vmflt.vf v16, v8, fa0
3092 ; CHECK-NEXT: vmnot.m v0, v16
3094 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3095 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3096 %vc = fcmp uge <vscale x 8 x double> %va, %splat
3097 ret <vscale x 8 x i1> %vc
3100 define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3101 ; CHECK-LABEL: fcmp_uge_fv_nxv8f64:
3103 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3104 ; CHECK-NEXT: vmfgt.vf v16, v8, fa0
3105 ; CHECK-NEXT: vmnot.m v0, v16
3107 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3108 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3109 %vc = fcmp uge <vscale x 8 x double> %splat, %va
3110 ret <vscale x 8 x i1> %vc
3113 define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3114 ; CHECK-LABEL: fcmp_uge_vv_nxv8f64_nonans:
3116 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3117 ; CHECK-NEXT: vmfle.vv v0, v16, v8
3119 %vc = fcmp uge <vscale x 8 x double> %va, %vb
3120 ret <vscale x 8 x i1> %vc
3123 define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3124 ; CHECK-LABEL: fcmp_uge_vf_nxv8f64_nonans:
3126 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3127 ; CHECK-NEXT: vmfge.vf v0, v8, fa0
3129 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3130 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3131 %vc = fcmp uge <vscale x 8 x double> %va, %splat
3132 ret <vscale x 8 x i1> %vc
3135 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3136 ; CHECK-LABEL: fcmp_ult_vv_nxv8f64:
3138 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3139 ; CHECK-NEXT: vmfle.vv v24, v16, v8
3140 ; CHECK-NEXT: vmnot.m v0, v24
3142 %vc = fcmp ult <vscale x 8 x double> %va, %vb
3143 ret <vscale x 8 x i1> %vc
3146 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3147 ; CHECK-LABEL: fcmp_ult_vf_nxv8f64:
3149 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3150 ; CHECK-NEXT: vmfge.vf v16, v8, fa0
3151 ; CHECK-NEXT: vmnot.m v0, v16
3153 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3154 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3155 %vc = fcmp ult <vscale x 8 x double> %va, %splat
3156 ret <vscale x 8 x i1> %vc
3159 define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3160 ; CHECK-LABEL: fcmp_ult_fv_nxv8f64:
3162 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3163 ; CHECK-NEXT: vmfle.vf v16, v8, fa0
3164 ; CHECK-NEXT: vmnot.m v0, v16
3166 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3167 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3168 %vc = fcmp ult <vscale x 8 x double> %splat, %va
3169 ret <vscale x 8 x i1> %vc
3172 define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3173 ; CHECK-LABEL: fcmp_ult_vv_nxv8f64_nonans:
3175 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3176 ; CHECK-NEXT: vmflt.vv v0, v8, v16
3178 %vc = fcmp ult <vscale x 8 x double> %va, %vb
3179 ret <vscale x 8 x i1> %vc
3182 define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3183 ; CHECK-LABEL: fcmp_ult_vf_nxv8f64_nonans:
3185 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3186 ; CHECK-NEXT: vmflt.vf v0, v8, fa0
3188 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3189 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3190 %vc = fcmp ult <vscale x 8 x double> %va, %splat
3191 ret <vscale x 8 x i1> %vc
3194 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3195 ; CHECK-LABEL: fcmp_ule_vv_nxv8f64:
3197 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3198 ; CHECK-NEXT: vmflt.vv v24, v16, v8
3199 ; CHECK-NEXT: vmnot.m v0, v24
3201 %vc = fcmp ule <vscale x 8 x double> %va, %vb
3202 ret <vscale x 8 x i1> %vc
3205 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3206 ; CHECK-LABEL: fcmp_ule_vf_nxv8f64:
3208 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3209 ; CHECK-NEXT: vmfgt.vf v16, v8, fa0
3210 ; CHECK-NEXT: vmnot.m v0, v16
3212 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3213 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3214 %vc = fcmp ule <vscale x 8 x double> %va, %splat
3215 ret <vscale x 8 x i1> %vc
3218 define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3219 ; CHECK-LABEL: fcmp_ule_fv_nxv8f64:
3221 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3222 ; CHECK-NEXT: vmflt.vf v16, v8, fa0
3223 ; CHECK-NEXT: vmnot.m v0, v16
3225 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3226 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3227 %vc = fcmp ule <vscale x 8 x double> %splat, %va
3228 ret <vscale x 8 x i1> %vc
3231 define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3232 ; CHECK-LABEL: fcmp_ule_vv_nxv8f64_nonans:
3234 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3235 ; CHECK-NEXT: vmfle.vv v0, v8, v16
3237 %vc = fcmp ule <vscale x 8 x double> %va, %vb
3238 ret <vscale x 8 x i1> %vc
3241 define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3242 ; CHECK-LABEL: fcmp_ule_vf_nxv8f64_nonans:
3244 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3245 ; CHECK-NEXT: vmfle.vf v0, v8, fa0
3247 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3248 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3249 %vc = fcmp ule <vscale x 8 x double> %va, %splat
3250 ret <vscale x 8 x i1> %vc
3253 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3254 ; CHECK-LABEL: fcmp_une_vv_nxv8f64:
3256 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3257 ; CHECK-NEXT: vmfne.vv v0, v8, v16
3259 %vc = fcmp une <vscale x 8 x double> %va, %vb
3260 ret <vscale x 8 x i1> %vc
3263 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3264 ; CHECK-LABEL: fcmp_une_vf_nxv8f64:
3266 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3267 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
3269 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3270 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3271 %vc = fcmp une <vscale x 8 x double> %va, %splat
3272 ret <vscale x 8 x i1> %vc
3275 define <vscale x 8 x i1> @fcmp_une_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3276 ; CHECK-LABEL: fcmp_une_fv_nxv8f64:
3278 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3279 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
3281 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3282 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3283 %vc = fcmp une <vscale x 8 x double> %splat, %va
3284 ret <vscale x 8 x i1> %vc
3287 define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3288 ; CHECK-LABEL: fcmp_une_vv_nxv8f64_nonans:
3290 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3291 ; CHECK-NEXT: vmfne.vv v0, v8, v16
3293 %vc = fcmp une <vscale x 8 x double> %va, %vb
3294 ret <vscale x 8 x i1> %vc
3297 define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3298 ; CHECK-LABEL: fcmp_une_vf_nxv8f64_nonans:
3300 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3301 ; CHECK-NEXT: vmfne.vf v0, v8, fa0
3303 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3304 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3305 %vc = fcmp une <vscale x 8 x double> %va, %splat
3306 ret <vscale x 8 x i1> %vc
3309 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3310 ; CHECK-LABEL: fcmp_uno_vv_nxv8f64:
3312 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3313 ; CHECK-NEXT: vmfne.vv v24, v16, v16
3314 ; CHECK-NEXT: vmfne.vv v16, v8, v8
3315 ; CHECK-NEXT: vmor.mm v0, v16, v24
3317 %vc = fcmp uno <vscale x 8 x double> %va, %vb
3318 ret <vscale x 8 x i1> %vc
3321 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3322 ; CHECK-LABEL: fcmp_uno_vf_nxv8f64:
3324 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3325 ; CHECK-NEXT: vfmv.v.f v16, fa0
3326 ; CHECK-NEXT: vmfne.vf v24, v16, fa0
3327 ; CHECK-NEXT: vmfne.vv v16, v8, v8
3328 ; CHECK-NEXT: vmor.mm v0, v16, v24
3330 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3331 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3332 %vc = fcmp uno <vscale x 8 x double> %va, %splat
3333 ret <vscale x 8 x i1> %vc
3336 define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3337 ; CHECK-LABEL: fcmp_uno_fv_nxv8f64:
3339 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3340 ; CHECK-NEXT: vfmv.v.f v16, fa0
3341 ; CHECK-NEXT: vmfne.vf v24, v16, fa0
3342 ; CHECK-NEXT: vmfne.vv v16, v8, v8
3343 ; CHECK-NEXT: vmor.mm v0, v24, v16
3345 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3346 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3347 %vc = fcmp uno <vscale x 8 x double> %splat, %va
3348 ret <vscale x 8 x i1> %vc
3351 define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3352 ; CHECK-LABEL: fcmp_uno_vv_nxv8f64_nonans:
3354 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3355 ; CHECK-NEXT: vmfne.vv v24, v16, v16
3356 ; CHECK-NEXT: vmfne.vv v16, v8, v8
3357 ; CHECK-NEXT: vmor.mm v0, v16, v24
3359 %vc = fcmp uno <vscale x 8 x double> %va, %vb
3360 ret <vscale x 8 x i1> %vc
3363 define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3364 ; CHECK-LABEL: fcmp_uno_vf_nxv8f64_nonans:
3366 ; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3367 ; CHECK-NEXT: vfmv.v.f v16, fa0
3368 ; CHECK-NEXT: vmfne.vf v24, v16, fa0
3369 ; CHECK-NEXT: vmfne.vv v16, v8, v8
3370 ; CHECK-NEXT: vmor.mm v0, v16, v24
3372 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3373 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3374 %vc = fcmp uno <vscale x 8 x double> %va, %splat
3375 ret <vscale x 8 x i1> %vc
3378 ; This fcmp/setcc is split and so we find a scalable-vector mask CONCAT_VECTOR
3379 ; node. Ensure we correctly (custom) lower this.
3380 define <vscale x 16 x i1> @fcmp_oeq_vf_nx16f64(<vscale x 16 x double> %va) {
3381 ; RV32-LABEL: fcmp_oeq_vf_nx16f64:
3383 ; RV32-NEXT: fcvt.d.w fa5, zero
3384 ; RV32-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3385 ; RV32-NEXT: vmfeq.vf v24, v16, fa5
3386 ; RV32-NEXT: vmfeq.vf v0, v8, fa5
3387 ; RV32-NEXT: csrr a0, vlenb
3388 ; RV32-NEXT: srli a0, a0, 3
3389 ; RV32-NEXT: add a1, a0, a0
3390 ; RV32-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
3391 ; RV32-NEXT: vslideup.vx v0, v24, a0
3394 ; RV64-LABEL: fcmp_oeq_vf_nx16f64:
3396 ; RV64-NEXT: fmv.d.x fa5, zero
3397 ; RV64-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3398 ; RV64-NEXT: vmfeq.vf v24, v16, fa5
3399 ; RV64-NEXT: vmfeq.vf v0, v8, fa5
3400 ; RV64-NEXT: csrr a0, vlenb
3401 ; RV64-NEXT: srli a0, a0, 3
3402 ; RV64-NEXT: add a1, a0, a0
3403 ; RV64-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
3404 ; RV64-NEXT: vslideup.vx v0, v24, a0
3407 ; ZVFHMIN32-LABEL: fcmp_oeq_vf_nx16f64:
3408 ; ZVFHMIN32: # %bb.0:
3409 ; ZVFHMIN32-NEXT: fcvt.d.w fa5, zero
3410 ; ZVFHMIN32-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3411 ; ZVFHMIN32-NEXT: vmfeq.vf v24, v16, fa5
3412 ; ZVFHMIN32-NEXT: vmfeq.vf v0, v8, fa5
3413 ; ZVFHMIN32-NEXT: csrr a0, vlenb
3414 ; ZVFHMIN32-NEXT: srli a0, a0, 3
3415 ; ZVFHMIN32-NEXT: add a1, a0, a0
3416 ; ZVFHMIN32-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
3417 ; ZVFHMIN32-NEXT: vslideup.vx v0, v24, a0
3418 ; ZVFHMIN32-NEXT: ret
3420 ; ZVFHMIN64-LABEL: fcmp_oeq_vf_nx16f64:
3421 ; ZVFHMIN64: # %bb.0:
3422 ; ZVFHMIN64-NEXT: fmv.d.x fa5, zero
3423 ; ZVFHMIN64-NEXT: vsetvli a0, zero, e64, m8, ta, ma
3424 ; ZVFHMIN64-NEXT: vmfeq.vf v24, v16, fa5
3425 ; ZVFHMIN64-NEXT: vmfeq.vf v0, v8, fa5
3426 ; ZVFHMIN64-NEXT: csrr a0, vlenb
3427 ; ZVFHMIN64-NEXT: srli a0, a0, 3
3428 ; ZVFHMIN64-NEXT: add a1, a0, a0
3429 ; ZVFHMIN64-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
3430 ; ZVFHMIN64-NEXT: vslideup.vx v0, v24, a0
3431 ; ZVFHMIN64-NEXT: ret
3432 %vc = fcmp oeq <vscale x 16 x double> %va, zeroinitializer
3433 ret <vscale x 16 x i1> %vc
3436 attributes #0 = { "no-nans-fp-math"="true" }