Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / setcc-fp.ll
blobaee255196ce2e8314ac699a1352ffa07218c14e5
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:
16 ; ZVFH:       # %bb.0:
17 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
18 ; ZVFH-NEXT:    vmfeq.vv v0, v8, v10
19 ; ZVFH-NEXT:    ret
21 ; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv8f16:
22 ; ZVFHMIN:       # %bb.0:
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
28 ; ZVFHMIN-NEXT:    ret
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:
35 ; ZVFH:       # %bb.0:
36 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
37 ; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
38 ; ZVFH-NEXT:    ret
40 ; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv8f16:
41 ; ZVFHMIN:       # %bb.0:
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
51 ; ZVFHMIN-NEXT:    ret
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:
60 ; ZVFH:       # %bb.0:
61 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
62 ; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
63 ; ZVFH-NEXT:    ret
65 ; ZVFHMIN-LABEL: fcmp_oeq_fv_nxv8f16:
66 ; ZVFHMIN:       # %bb.0:
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
76 ; ZVFHMIN-NEXT:    ret
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:
85 ; ZVFH:       # %bb.0:
86 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
87 ; ZVFH-NEXT:    vmfeq.vv v0, v8, v10
88 ; ZVFH-NEXT:    ret
90 ; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv8f16_nonans:
91 ; ZVFHMIN:       # %bb.0:
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
97 ; ZVFHMIN-NEXT:    ret
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:
104 ; ZVFH:       # %bb.0:
105 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
106 ; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
107 ; ZVFH-NEXT:    ret
109 ; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv8f16_nonans:
110 ; ZVFHMIN:       # %bb.0:
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
120 ; ZVFHMIN-NEXT:    ret
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:
129 ; ZVFH:       # %bb.0:
130 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
131 ; ZVFH-NEXT:    vmflt.vv v0, v10, v8
132 ; ZVFH-NEXT:    ret
134 ; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv8f16:
135 ; ZVFHMIN:       # %bb.0:
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
141 ; ZVFHMIN-NEXT:    ret
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:
148 ; ZVFH:       # %bb.0:
149 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
150 ; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
151 ; ZVFH-NEXT:    ret
153 ; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv8f16:
154 ; ZVFHMIN:       # %bb.0:
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
164 ; ZVFHMIN-NEXT:    ret
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:
173 ; ZVFH:       # %bb.0:
174 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
175 ; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
176 ; ZVFH-NEXT:    ret
178 ; ZVFHMIN-LABEL: fcmp_ogt_fv_nxv8f16:
179 ; ZVFHMIN:       # %bb.0:
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
189 ; ZVFHMIN-NEXT:    ret
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:
198 ; ZVFH:       # %bb.0:
199 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
200 ; ZVFH-NEXT:    vmflt.vv v0, v10, v8
201 ; ZVFH-NEXT:    ret
203 ; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv8f16_nonans:
204 ; ZVFHMIN:       # %bb.0:
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
210 ; ZVFHMIN-NEXT:    ret
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:
217 ; ZVFH:       # %bb.0:
218 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
219 ; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
220 ; ZVFH-NEXT:    ret
222 ; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv8f16_nonans:
223 ; ZVFHMIN:       # %bb.0:
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
233 ; ZVFHMIN-NEXT:    ret
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:
242 ; ZVFH:       # %bb.0:
243 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
244 ; ZVFH-NEXT:    vmfle.vv v0, v10, v8
245 ; ZVFH-NEXT:    ret
247 ; ZVFHMIN-LABEL: fcmp_oge_vv_nxv8f16:
248 ; ZVFHMIN:       # %bb.0:
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
254 ; ZVFHMIN-NEXT:    ret
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:
261 ; ZVFH:       # %bb.0:
262 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
263 ; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
264 ; ZVFH-NEXT:    ret
266 ; ZVFHMIN-LABEL: fcmp_oge_vf_nxv8f16:
267 ; ZVFHMIN:       # %bb.0:
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
277 ; ZVFHMIN-NEXT:    ret
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:
286 ; ZVFH:       # %bb.0:
287 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
288 ; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
289 ; ZVFH-NEXT:    ret
291 ; ZVFHMIN-LABEL: fcmp_oge_fv_nxv8f16:
292 ; ZVFHMIN:       # %bb.0:
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
302 ; ZVFHMIN-NEXT:    ret
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:
311 ; ZVFH:       # %bb.0:
312 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
313 ; ZVFH-NEXT:    vmfle.vv v0, v10, v8
314 ; ZVFH-NEXT:    ret
316 ; ZVFHMIN-LABEL: fcmp_oge_vv_nxv8f16_nonans:
317 ; ZVFHMIN:       # %bb.0:
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
323 ; ZVFHMIN-NEXT:    ret
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:
330 ; ZVFH:       # %bb.0:
331 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
332 ; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
333 ; ZVFH-NEXT:    ret
335 ; ZVFHMIN-LABEL: fcmp_oge_vf_nxv8f16_nonans:
336 ; ZVFHMIN:       # %bb.0:
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
346 ; ZVFHMIN-NEXT:    ret
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:
355 ; ZVFH:       # %bb.0:
356 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
357 ; ZVFH-NEXT:    vmflt.vv v0, v8, v10
358 ; ZVFH-NEXT:    ret
360 ; ZVFHMIN-LABEL: fcmp_olt_vv_nxv8f16:
361 ; ZVFHMIN:       # %bb.0:
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
367 ; ZVFHMIN-NEXT:    ret
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:
374 ; ZVFH:       # %bb.0:
375 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
376 ; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
377 ; ZVFH-NEXT:    ret
379 ; ZVFHMIN-LABEL: fcmp_olt_vf_nxv8f16:
380 ; ZVFHMIN:       # %bb.0:
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
390 ; ZVFHMIN-NEXT:    ret
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:
399 ; ZVFH:       # %bb.0:
400 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
401 ; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
402 ; ZVFH-NEXT:    ret
404 ; ZVFHMIN-LABEL: fcmp_olt_fv_nxv8f16:
405 ; ZVFHMIN:       # %bb.0:
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
415 ; ZVFHMIN-NEXT:    ret
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:
424 ; ZVFH:       # %bb.0:
425 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
426 ; ZVFH-NEXT:    vmflt.vv v0, v8, v10
427 ; ZVFH-NEXT:    ret
429 ; ZVFHMIN-LABEL: fcmp_olt_vv_nxv8f16_nonans:
430 ; ZVFHMIN:       # %bb.0:
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
436 ; ZVFHMIN-NEXT:    ret
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:
443 ; ZVFH:       # %bb.0:
444 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
445 ; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
446 ; ZVFH-NEXT:    ret
448 ; ZVFHMIN-LABEL: fcmp_olt_vf_nxv8f16_nonans:
449 ; ZVFHMIN:       # %bb.0:
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
459 ; ZVFHMIN-NEXT:    ret
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:
468 ; ZVFH:       # %bb.0:
469 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
470 ; ZVFH-NEXT:    vmfle.vv v0, v8, v10
471 ; ZVFH-NEXT:    ret
473 ; ZVFHMIN-LABEL: fcmp_ole_vv_nxv8f16:
474 ; ZVFHMIN:       # %bb.0:
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
480 ; ZVFHMIN-NEXT:    ret
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:
487 ; ZVFH:       # %bb.0:
488 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
489 ; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
490 ; ZVFH-NEXT:    ret
492 ; ZVFHMIN-LABEL: fcmp_ole_vf_nxv8f16:
493 ; ZVFHMIN:       # %bb.0:
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
503 ; ZVFHMIN-NEXT:    ret
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:
512 ; ZVFH:       # %bb.0:
513 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
514 ; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
515 ; ZVFH-NEXT:    ret
517 ; ZVFHMIN-LABEL: fcmp_ole_fv_nxv8f16:
518 ; ZVFHMIN:       # %bb.0:
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
528 ; ZVFHMIN-NEXT:    ret
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:
537 ; ZVFH:       # %bb.0:
538 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
539 ; ZVFH-NEXT:    vmfle.vv v0, v8, v10
540 ; ZVFH-NEXT:    ret
542 ; ZVFHMIN-LABEL: fcmp_ole_vv_nxv8f16_nonans:
543 ; ZVFHMIN:       # %bb.0:
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
549 ; ZVFHMIN-NEXT:    ret
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:
556 ; ZVFH:       # %bb.0:
557 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
558 ; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
559 ; ZVFH-NEXT:    ret
561 ; ZVFHMIN-LABEL: fcmp_ole_vf_nxv8f16_nonans:
562 ; ZVFHMIN:       # %bb.0:
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
572 ; ZVFHMIN-NEXT:    ret
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:
581 ; ZVFH:       # %bb.0:
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
586 ; ZVFH-NEXT:    ret
588 ; ZVFHMIN-LABEL: fcmp_one_vv_nxv8f16:
589 ; ZVFHMIN:       # %bb.0:
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
597 ; ZVFHMIN-NEXT:    ret
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:
604 ; ZVFH:       # %bb.0:
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
609 ; ZVFH-NEXT:    ret
611 ; ZVFHMIN-LABEL: fcmp_one_vf_nxv8f16:
612 ; ZVFHMIN:       # %bb.0:
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
624 ; ZVFHMIN-NEXT:    ret
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:
633 ; ZVFH:       # %bb.0:
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
638 ; ZVFH-NEXT:    ret
640 ; ZVFHMIN-LABEL: fcmp_one_fv_nxv8f16:
641 ; ZVFHMIN:       # %bb.0:
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
653 ; ZVFHMIN-NEXT:    ret
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:
662 ; ZVFH:       # %bb.0:
663 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
664 ; ZVFH-NEXT:    vmfne.vv v0, v8, v10
665 ; ZVFH-NEXT:    ret
667 ; ZVFHMIN-LABEL: fcmp_one_vv_nxv8f16_nonans:
668 ; ZVFHMIN:       # %bb.0:
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
674 ; ZVFHMIN-NEXT:    ret
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:
681 ; ZVFH:       # %bb.0:
682 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
683 ; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
684 ; ZVFH-NEXT:    ret
686 ; ZVFHMIN-LABEL: fcmp_one_vf_nxv8f16_nonans:
687 ; ZVFHMIN:       # %bb.0:
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
697 ; ZVFHMIN-NEXT:    ret
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:
706 ; ZVFH:       # %bb.0:
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
711 ; ZVFH-NEXT:    ret
713 ; ZVFHMIN-LABEL: fcmp_ord_vv_nxv8f16:
714 ; ZVFHMIN:       # %bb.0:
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
724 ; ZVFHMIN-NEXT:    ret
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:
731 ; ZVFH:       # %bb.0:
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
737 ; ZVFH-NEXT:    ret
739 ; ZVFHMIN-LABEL: fcmp_ord_vf_nxv8f16:
740 ; ZVFHMIN:       # %bb.0:
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
754 ; ZVFHMIN-NEXT:    ret
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:
763 ; ZVFH:       # %bb.0:
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
769 ; ZVFH-NEXT:    ret
771 ; ZVFHMIN-LABEL: fcmp_ord_fv_nxv8f16:
772 ; ZVFHMIN:       # %bb.0:
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
786 ; ZVFHMIN-NEXT:    ret
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:
795 ; ZVFH:       # %bb.0:
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
800 ; ZVFH-NEXT:    ret
802 ; ZVFHMIN-LABEL: fcmp_ord_vv_nxv8f16_nonans:
803 ; ZVFHMIN:       # %bb.0:
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
813 ; ZVFHMIN-NEXT:    ret
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:
820 ; ZVFH:       # %bb.0:
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
826 ; ZVFH-NEXT:    ret
828 ; ZVFHMIN-LABEL: fcmp_ord_vf_nxv8f16_nonans:
829 ; ZVFHMIN:       # %bb.0:
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
843 ; ZVFHMIN-NEXT:    ret
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:
852 ; ZVFH:       # %bb.0:
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
857 ; ZVFH-NEXT:    ret
859 ; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv8f16:
860 ; ZVFHMIN:       # %bb.0:
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
868 ; ZVFHMIN-NEXT:    ret
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:
875 ; ZVFH:       # %bb.0:
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
880 ; ZVFH-NEXT:    ret
882 ; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv8f16:
883 ; ZVFHMIN:       # %bb.0:
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
895 ; ZVFHMIN-NEXT:    ret
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:
904 ; ZVFH:       # %bb.0:
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
909 ; ZVFH-NEXT:    ret
911 ; ZVFHMIN-LABEL: fcmp_ueq_fv_nxv8f16:
912 ; ZVFHMIN:       # %bb.0:
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
924 ; ZVFHMIN-NEXT:    ret
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:
933 ; ZVFH:       # %bb.0:
934 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
935 ; ZVFH-NEXT:    vmfeq.vv v0, v8, v10
936 ; ZVFH-NEXT:    ret
938 ; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv8f16_nonans:
939 ; ZVFHMIN:       # %bb.0:
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
945 ; ZVFHMIN-NEXT:    ret
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:
952 ; ZVFH:       # %bb.0:
953 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
954 ; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
955 ; ZVFH-NEXT:    ret
957 ; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv8f16_nonans:
958 ; ZVFHMIN:       # %bb.0:
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
968 ; ZVFHMIN-NEXT:    ret
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:
977 ; ZVFH:       # %bb.0:
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
981 ; ZVFH-NEXT:    ret
983 ; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv8f16:
984 ; ZVFHMIN:       # %bb.0:
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
991 ; ZVFHMIN-NEXT:    ret
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:
998 ; ZVFH:       # %bb.0:
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
1002 ; ZVFH-NEXT:    ret
1004 ; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv8f16:
1005 ; ZVFHMIN:       # %bb.0:
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
1016 ; ZVFHMIN-NEXT:    ret
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:
1025 ; ZVFH:       # %bb.0:
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
1029 ; ZVFH-NEXT:    ret
1031 ; ZVFHMIN-LABEL: fcmp_ugt_fv_nxv8f16:
1032 ; ZVFHMIN:       # %bb.0:
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
1043 ; ZVFHMIN-NEXT:    ret
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:
1052 ; ZVFH:       # %bb.0:
1053 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1054 ; ZVFH-NEXT:    vmflt.vv v0, v10, v8
1055 ; ZVFH-NEXT:    ret
1057 ; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv8f16_nonans:
1058 ; ZVFHMIN:       # %bb.0:
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
1064 ; ZVFHMIN-NEXT:    ret
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:
1071 ; ZVFH:       # %bb.0:
1072 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1073 ; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
1074 ; ZVFH-NEXT:    ret
1076 ; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv8f16_nonans:
1077 ; ZVFHMIN:       # %bb.0:
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
1087 ; ZVFHMIN-NEXT:    ret
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:
1096 ; ZVFH:       # %bb.0:
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
1100 ; ZVFH-NEXT:    ret
1102 ; ZVFHMIN-LABEL: fcmp_uge_vv_nxv8f16:
1103 ; ZVFHMIN:       # %bb.0:
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
1110 ; ZVFHMIN-NEXT:    ret
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:
1117 ; ZVFH:       # %bb.0:
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
1121 ; ZVFH-NEXT:    ret
1123 ; ZVFHMIN-LABEL: fcmp_uge_vf_nxv8f16:
1124 ; ZVFHMIN:       # %bb.0:
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
1135 ; ZVFHMIN-NEXT:    ret
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:
1144 ; ZVFH:       # %bb.0:
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
1148 ; ZVFH-NEXT:    ret
1150 ; ZVFHMIN-LABEL: fcmp_uge_fv_nxv8f16:
1151 ; ZVFHMIN:       # %bb.0:
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
1162 ; ZVFHMIN-NEXT:    ret
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:
1171 ; ZVFH:       # %bb.0:
1172 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1173 ; ZVFH-NEXT:    vmfle.vv v0, v10, v8
1174 ; ZVFH-NEXT:    ret
1176 ; ZVFHMIN-LABEL: fcmp_uge_vv_nxv8f16_nonans:
1177 ; ZVFHMIN:       # %bb.0:
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
1183 ; ZVFHMIN-NEXT:    ret
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:
1190 ; ZVFH:       # %bb.0:
1191 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1192 ; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
1193 ; ZVFH-NEXT:    ret
1195 ; ZVFHMIN-LABEL: fcmp_uge_vf_nxv8f16_nonans:
1196 ; ZVFHMIN:       # %bb.0:
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
1206 ; ZVFHMIN-NEXT:    ret
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:
1215 ; ZVFH:       # %bb.0:
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
1219 ; ZVFH-NEXT:    ret
1221 ; ZVFHMIN-LABEL: fcmp_ult_vv_nxv8f16:
1222 ; ZVFHMIN:       # %bb.0:
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
1229 ; ZVFHMIN-NEXT:    ret
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:
1236 ; ZVFH:       # %bb.0:
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
1240 ; ZVFH-NEXT:    ret
1242 ; ZVFHMIN-LABEL: fcmp_ult_vf_nxv8f16:
1243 ; ZVFHMIN:       # %bb.0:
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
1254 ; ZVFHMIN-NEXT:    ret
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:
1263 ; ZVFH:       # %bb.0:
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
1267 ; ZVFH-NEXT:    ret
1269 ; ZVFHMIN-LABEL: fcmp_ult_fv_nxv8f16:
1270 ; ZVFHMIN:       # %bb.0:
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
1281 ; ZVFHMIN-NEXT:    ret
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:
1290 ; ZVFH:       # %bb.0:
1291 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1292 ; ZVFH-NEXT:    vmflt.vv v0, v8, v10
1293 ; ZVFH-NEXT:    ret
1295 ; ZVFHMIN-LABEL: fcmp_ult_vv_nxv8f16_nonans:
1296 ; ZVFHMIN:       # %bb.0:
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
1302 ; ZVFHMIN-NEXT:    ret
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:
1309 ; ZVFH:       # %bb.0:
1310 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1311 ; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
1312 ; ZVFH-NEXT:    ret
1314 ; ZVFHMIN-LABEL: fcmp_ult_vf_nxv8f16_nonans:
1315 ; ZVFHMIN:       # %bb.0:
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
1325 ; ZVFHMIN-NEXT:    ret
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:
1334 ; ZVFH:       # %bb.0:
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
1338 ; ZVFH-NEXT:    ret
1340 ; ZVFHMIN-LABEL: fcmp_ule_vv_nxv8f16:
1341 ; ZVFHMIN:       # %bb.0:
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
1348 ; ZVFHMIN-NEXT:    ret
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:
1355 ; ZVFH:       # %bb.0:
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
1359 ; ZVFH-NEXT:    ret
1361 ; ZVFHMIN-LABEL: fcmp_ule_vf_nxv8f16:
1362 ; ZVFHMIN:       # %bb.0:
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
1373 ; ZVFHMIN-NEXT:    ret
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:
1382 ; ZVFH:       # %bb.0:
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
1386 ; ZVFH-NEXT:    ret
1388 ; ZVFHMIN-LABEL: fcmp_ule_fv_nxv8f16:
1389 ; ZVFHMIN:       # %bb.0:
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
1400 ; ZVFHMIN-NEXT:    ret
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:
1409 ; ZVFH:       # %bb.0:
1410 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1411 ; ZVFH-NEXT:    vmfle.vv v0, v8, v10
1412 ; ZVFH-NEXT:    ret
1414 ; ZVFHMIN-LABEL: fcmp_ule_vv_nxv8f16_nonans:
1415 ; ZVFHMIN:       # %bb.0:
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
1421 ; ZVFHMIN-NEXT:    ret
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:
1428 ; ZVFH:       # %bb.0:
1429 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1430 ; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
1431 ; ZVFH-NEXT:    ret
1433 ; ZVFHMIN-LABEL: fcmp_ule_vf_nxv8f16_nonans:
1434 ; ZVFHMIN:       # %bb.0:
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
1444 ; ZVFHMIN-NEXT:    ret
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:
1453 ; ZVFH:       # %bb.0:
1454 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1455 ; ZVFH-NEXT:    vmfne.vv v0, v8, v10
1456 ; ZVFH-NEXT:    ret
1458 ; ZVFHMIN-LABEL: fcmp_une_vv_nxv8f16:
1459 ; ZVFHMIN:       # %bb.0:
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
1465 ; ZVFHMIN-NEXT:    ret
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:
1472 ; ZVFH:       # %bb.0:
1473 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1474 ; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
1475 ; ZVFH-NEXT:    ret
1477 ; ZVFHMIN-LABEL: fcmp_une_vf_nxv8f16:
1478 ; ZVFHMIN:       # %bb.0:
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
1488 ; ZVFHMIN-NEXT:    ret
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:
1497 ; ZVFH:       # %bb.0:
1498 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1499 ; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
1500 ; ZVFH-NEXT:    ret
1502 ; ZVFHMIN-LABEL: fcmp_une_fv_nxv8f16:
1503 ; ZVFHMIN:       # %bb.0:
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
1513 ; ZVFHMIN-NEXT:    ret
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:
1522 ; ZVFH:       # %bb.0:
1523 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1524 ; ZVFH-NEXT:    vmfne.vv v0, v8, v10
1525 ; ZVFH-NEXT:    ret
1527 ; ZVFHMIN-LABEL: fcmp_une_vv_nxv8f16_nonans:
1528 ; ZVFHMIN:       # %bb.0:
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
1534 ; ZVFHMIN-NEXT:    ret
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:
1541 ; ZVFH:       # %bb.0:
1542 ; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1543 ; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
1544 ; ZVFH-NEXT:    ret
1546 ; ZVFHMIN-LABEL: fcmp_une_vf_nxv8f16_nonans:
1547 ; ZVFHMIN:       # %bb.0:
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
1557 ; ZVFHMIN-NEXT:    ret
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:
1566 ; ZVFH:       # %bb.0:
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
1571 ; ZVFH-NEXT:    ret
1573 ; ZVFHMIN-LABEL: fcmp_uno_vv_nxv8f16:
1574 ; ZVFHMIN:       # %bb.0:
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
1584 ; ZVFHMIN-NEXT:    ret
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:
1591 ; ZVFH:       # %bb.0:
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
1597 ; ZVFH-NEXT:    ret
1599 ; ZVFHMIN-LABEL: fcmp_uno_vf_nxv8f16:
1600 ; ZVFHMIN:       # %bb.0:
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
1614 ; ZVFHMIN-NEXT:    ret
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:
1623 ; ZVFH:       # %bb.0:
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
1629 ; ZVFH-NEXT:    ret
1631 ; ZVFHMIN-LABEL: fcmp_uno_fv_nxv8f16:
1632 ; ZVFHMIN:       # %bb.0:
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
1646 ; ZVFHMIN-NEXT:    ret
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:
1655 ; ZVFH:       # %bb.0:
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
1660 ; ZVFH-NEXT:    ret
1662 ; ZVFHMIN-LABEL: fcmp_uno_vv_nxv8f16_nonans:
1663 ; ZVFHMIN:       # %bb.0:
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
1673 ; ZVFHMIN-NEXT:    ret
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:
1680 ; ZVFH:       # %bb.0:
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
1686 ; ZVFH-NEXT:    ret
1688 ; ZVFHMIN-LABEL: fcmp_uno_vf_nxv8f16_nonans:
1689 ; ZVFHMIN:       # %bb.0:
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
1703 ; ZVFHMIN-NEXT:    ret
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:
1712 ; CHECK:       # %bb.0:
1713 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1714 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
1715 ; CHECK-NEXT:    ret
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:
1722 ; CHECK:       # %bb.0:
1723 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1724 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1725 ; CHECK-NEXT:    ret
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:
1734 ; CHECK:       # %bb.0:
1735 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1736 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1737 ; CHECK-NEXT:    ret
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:
1746 ; CHECK:       # %bb.0:
1747 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1748 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
1749 ; CHECK-NEXT:    ret
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:
1756 ; CHECK:       # %bb.0:
1757 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1758 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1759 ; CHECK-NEXT:    ret
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:
1768 ; CHECK:       # %bb.0:
1769 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1770 ; CHECK-NEXT:    vmflt.vv v0, v12, v8
1771 ; CHECK-NEXT:    ret
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:
1778 ; CHECK:       # %bb.0:
1779 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1780 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1781 ; CHECK-NEXT:    ret
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:
1790 ; CHECK:       # %bb.0:
1791 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1792 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1793 ; CHECK-NEXT:    ret
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:
1802 ; CHECK:       # %bb.0:
1803 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1804 ; CHECK-NEXT:    vmflt.vv v0, v12, v8
1805 ; CHECK-NEXT:    ret
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:
1812 ; CHECK:       # %bb.0:
1813 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1814 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1815 ; CHECK-NEXT:    ret
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:
1824 ; CHECK:       # %bb.0:
1825 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1826 ; CHECK-NEXT:    vmfle.vv v0, v12, v8
1827 ; CHECK-NEXT:    ret
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:
1834 ; CHECK:       # %bb.0:
1835 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1836 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1837 ; CHECK-NEXT:    ret
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:
1846 ; CHECK:       # %bb.0:
1847 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1848 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1849 ; CHECK-NEXT:    ret
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:
1858 ; CHECK:       # %bb.0:
1859 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1860 ; CHECK-NEXT:    vmfle.vv v0, v12, v8
1861 ; CHECK-NEXT:    ret
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:
1868 ; CHECK:       # %bb.0:
1869 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1870 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1871 ; CHECK-NEXT:    ret
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:
1880 ; CHECK:       # %bb.0:
1881 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1882 ; CHECK-NEXT:    vmflt.vv v0, v8, v12
1883 ; CHECK-NEXT:    ret
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:
1890 ; CHECK:       # %bb.0:
1891 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1892 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1893 ; CHECK-NEXT:    ret
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:
1902 ; CHECK:       # %bb.0:
1903 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1904 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1905 ; CHECK-NEXT:    ret
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:
1914 ; CHECK:       # %bb.0:
1915 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1916 ; CHECK-NEXT:    vmflt.vv v0, v8, v12
1917 ; CHECK-NEXT:    ret
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:
1924 ; CHECK:       # %bb.0:
1925 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1926 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1927 ; CHECK-NEXT:    ret
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:
1936 ; CHECK:       # %bb.0:
1937 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1938 ; CHECK-NEXT:    vmfle.vv v0, v8, v12
1939 ; CHECK-NEXT:    ret
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:
1946 ; CHECK:       # %bb.0:
1947 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1948 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1949 ; CHECK-NEXT:    ret
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:
1958 ; CHECK:       # %bb.0:
1959 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1960 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1961 ; CHECK-NEXT:    ret
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:
1970 ; CHECK:       # %bb.0:
1971 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1972 ; CHECK-NEXT:    vmfle.vv v0, v8, v12
1973 ; CHECK-NEXT:    ret
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:
1980 ; CHECK:       # %bb.0:
1981 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
1982 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1983 ; CHECK-NEXT:    ret
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:
1992 ; CHECK:       # %bb.0:
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
1997 ; CHECK-NEXT:    ret
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:
2004 ; CHECK:       # %bb.0:
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
2009 ; CHECK-NEXT:    ret
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:
2018 ; CHECK:       # %bb.0:
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
2023 ; CHECK-NEXT:    ret
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:
2032 ; CHECK:       # %bb.0:
2033 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2034 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
2035 ; CHECK-NEXT:    ret
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:
2042 ; CHECK:       # %bb.0:
2043 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2044 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2045 ; CHECK-NEXT:    ret
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:
2054 ; CHECK:       # %bb.0:
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
2059 ; CHECK-NEXT:    ret
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:
2066 ; CHECK:       # %bb.0:
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
2072 ; CHECK-NEXT:    ret
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:
2081 ; CHECK:       # %bb.0:
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
2087 ; CHECK-NEXT:    ret
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:
2096 ; CHECK:       # %bb.0:
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
2101 ; CHECK-NEXT:    ret
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:
2108 ; CHECK:       # %bb.0:
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
2114 ; CHECK-NEXT:    ret
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:
2123 ; CHECK:       # %bb.0:
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
2128 ; CHECK-NEXT:    ret
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:
2135 ; CHECK:       # %bb.0:
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
2140 ; CHECK-NEXT:    ret
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:
2149 ; CHECK:       # %bb.0:
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
2154 ; CHECK-NEXT:    ret
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:
2163 ; CHECK:       # %bb.0:
2164 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2165 ; CHECK-NEXT:    vmfeq.vv v0, v8, v12
2166 ; CHECK-NEXT:    ret
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:
2173 ; CHECK:       # %bb.0:
2174 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2175 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2176 ; CHECK-NEXT:    ret
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:
2185 ; CHECK:       # %bb.0:
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
2189 ; CHECK-NEXT:    ret
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:
2196 ; CHECK:       # %bb.0:
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
2200 ; CHECK-NEXT:    ret
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:
2209 ; CHECK:       # %bb.0:
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
2213 ; CHECK-NEXT:    ret
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:
2222 ; CHECK:       # %bb.0:
2223 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2224 ; CHECK-NEXT:    vmflt.vv v0, v12, v8
2225 ; CHECK-NEXT:    ret
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:
2232 ; CHECK:       # %bb.0:
2233 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2234 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2235 ; CHECK-NEXT:    ret
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:
2244 ; CHECK:       # %bb.0:
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
2248 ; CHECK-NEXT:    ret
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:
2255 ; CHECK:       # %bb.0:
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
2259 ; CHECK-NEXT:    ret
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:
2268 ; CHECK:       # %bb.0:
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
2272 ; CHECK-NEXT:    ret
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:
2281 ; CHECK:       # %bb.0:
2282 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2283 ; CHECK-NEXT:    vmfle.vv v0, v12, v8
2284 ; CHECK-NEXT:    ret
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:
2291 ; CHECK:       # %bb.0:
2292 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2293 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
2294 ; CHECK-NEXT:    ret
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:
2303 ; CHECK:       # %bb.0:
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
2307 ; CHECK-NEXT:    ret
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:
2314 ; CHECK:       # %bb.0:
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
2318 ; CHECK-NEXT:    ret
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:
2327 ; CHECK:       # %bb.0:
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
2331 ; CHECK-NEXT:    ret
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:
2340 ; CHECK:       # %bb.0:
2341 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2342 ; CHECK-NEXT:    vmflt.vv v0, v8, v12
2343 ; CHECK-NEXT:    ret
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:
2350 ; CHECK:       # %bb.0:
2351 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2352 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2353 ; CHECK-NEXT:    ret
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:
2362 ; CHECK:       # %bb.0:
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
2366 ; CHECK-NEXT:    ret
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:
2373 ; CHECK:       # %bb.0:
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
2377 ; CHECK-NEXT:    ret
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:
2386 ; CHECK:       # %bb.0:
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
2390 ; CHECK-NEXT:    ret
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:
2399 ; CHECK:       # %bb.0:
2400 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2401 ; CHECK-NEXT:    vmfle.vv v0, v8, v12
2402 ; CHECK-NEXT:    ret
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:
2409 ; CHECK:       # %bb.0:
2410 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2411 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
2412 ; CHECK-NEXT:    ret
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:
2421 ; CHECK:       # %bb.0:
2422 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2423 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
2424 ; CHECK-NEXT:    ret
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:
2431 ; CHECK:       # %bb.0:
2432 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2433 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2434 ; CHECK-NEXT:    ret
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:
2443 ; CHECK:       # %bb.0:
2444 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2445 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2446 ; CHECK-NEXT:    ret
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:
2455 ; CHECK:       # %bb.0:
2456 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2457 ; CHECK-NEXT:    vmfne.vv v0, v8, v12
2458 ; CHECK-NEXT:    ret
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:
2465 ; CHECK:       # %bb.0:
2466 ; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2467 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2468 ; CHECK-NEXT:    ret
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:
2477 ; CHECK:       # %bb.0:
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
2482 ; CHECK-NEXT:    ret
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:
2489 ; CHECK:       # %bb.0:
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
2495 ; CHECK-NEXT:    ret
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:
2504 ; CHECK:       # %bb.0:
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
2510 ; CHECK-NEXT:    ret
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:
2519 ; CHECK:       # %bb.0:
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
2524 ; CHECK-NEXT:    ret
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:
2531 ; CHECK:       # %bb.0:
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
2537 ; CHECK-NEXT:    ret
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:
2546 ; CHECK:       # %bb.0:
2547 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2548 ; CHECK-NEXT:    vmfeq.vv v0, v8, v16
2549 ; CHECK-NEXT:    ret
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:
2556 ; CHECK:       # %bb.0:
2557 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2558 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2559 ; CHECK-NEXT:    ret
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:
2568 ; CHECK:       # %bb.0:
2569 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2570 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2571 ; CHECK-NEXT:    ret
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:
2580 ; CHECK:       # %bb.0:
2581 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2582 ; CHECK-NEXT:    vmfeq.vv v0, v8, v16
2583 ; CHECK-NEXT:    ret
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:
2590 ; CHECK:       # %bb.0:
2591 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2592 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2593 ; CHECK-NEXT:    ret
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:
2602 ; CHECK:       # %bb.0:
2603 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2604 ; CHECK-NEXT:    vmflt.vv v0, v16, v8
2605 ; CHECK-NEXT:    ret
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:
2612 ; CHECK:       # %bb.0:
2613 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2614 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2615 ; CHECK-NEXT:    ret
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:
2624 ; CHECK:       # %bb.0:
2625 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2626 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2627 ; CHECK-NEXT:    ret
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:
2636 ; CHECK:       # %bb.0:
2637 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2638 ; CHECK-NEXT:    vmflt.vv v0, v16, v8
2639 ; CHECK-NEXT:    ret
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:
2646 ; CHECK:       # %bb.0:
2647 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2648 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2649 ; CHECK-NEXT:    ret
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:
2658 ; CHECK:       # %bb.0:
2659 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2660 ; CHECK-NEXT:    vmfle.vv v0, v16, v8
2661 ; CHECK-NEXT:    ret
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:
2668 ; CHECK:       # %bb.0:
2669 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2670 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
2671 ; CHECK-NEXT:    ret
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:
2680 ; CHECK:       # %bb.0:
2681 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2682 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
2683 ; CHECK-NEXT:    ret
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:
2692 ; CHECK:       # %bb.0:
2693 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2694 ; CHECK-NEXT:    vmfle.vv v0, v16, v8
2695 ; CHECK-NEXT:    ret
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:
2702 ; CHECK:       # %bb.0:
2703 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2704 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
2705 ; CHECK-NEXT:    ret
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:
2714 ; CHECK:       # %bb.0:
2715 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2716 ; CHECK-NEXT:    vmflt.vv v0, v8, v16
2717 ; CHECK-NEXT:    ret
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:
2724 ; CHECK:       # %bb.0:
2725 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2726 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2727 ; CHECK-NEXT:    ret
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:
2736 ; CHECK:       # %bb.0:
2737 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2738 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2739 ; CHECK-NEXT:    ret
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:
2748 ; CHECK:       # %bb.0:
2749 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2750 ; CHECK-NEXT:    vmflt.vv v0, v8, v16
2751 ; CHECK-NEXT:    ret
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:
2758 ; CHECK:       # %bb.0:
2759 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2760 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2761 ; CHECK-NEXT:    ret
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:
2770 ; CHECK:       # %bb.0:
2771 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2772 ; CHECK-NEXT:    vmfle.vv v0, v8, v16
2773 ; CHECK-NEXT:    ret
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:
2780 ; CHECK:       # %bb.0:
2781 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2782 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
2783 ; CHECK-NEXT:    ret
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:
2792 ; CHECK:       # %bb.0:
2793 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2794 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
2795 ; CHECK-NEXT:    ret
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:
2804 ; CHECK:       # %bb.0:
2805 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2806 ; CHECK-NEXT:    vmfle.vv v0, v8, v16
2807 ; CHECK-NEXT:    ret
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:
2814 ; CHECK:       # %bb.0:
2815 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2816 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
2817 ; CHECK-NEXT:    ret
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:
2826 ; CHECK:       # %bb.0:
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
2831 ; CHECK-NEXT:    ret
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:
2838 ; CHECK:       # %bb.0:
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
2843 ; CHECK-NEXT:    ret
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:
2852 ; CHECK:       # %bb.0:
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
2857 ; CHECK-NEXT:    ret
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:
2866 ; CHECK:       # %bb.0:
2867 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2868 ; CHECK-NEXT:    vmfne.vv v0, v8, v16
2869 ; CHECK-NEXT:    ret
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:
2876 ; CHECK:       # %bb.0:
2877 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2878 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2879 ; CHECK-NEXT:    ret
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:
2888 ; CHECK:       # %bb.0:
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
2893 ; CHECK-NEXT:    ret
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:
2900 ; CHECK:       # %bb.0:
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
2906 ; CHECK-NEXT:    ret
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:
2915 ; CHECK:       # %bb.0:
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
2921 ; CHECK-NEXT:    ret
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:
2930 ; CHECK:       # %bb.0:
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
2935 ; CHECK-NEXT:    ret
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:
2942 ; CHECK:       # %bb.0:
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
2948 ; CHECK-NEXT:    ret
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:
2957 ; CHECK:       # %bb.0:
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
2962 ; CHECK-NEXT:    ret
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:
2969 ; CHECK:       # %bb.0:
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
2974 ; CHECK-NEXT:    ret
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:
2983 ; CHECK:       # %bb.0:
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
2988 ; CHECK-NEXT:    ret
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:
2997 ; CHECK:       # %bb.0:
2998 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
2999 ; CHECK-NEXT:    vmfeq.vv v0, v8, v16
3000 ; CHECK-NEXT:    ret
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:
3007 ; CHECK:       # %bb.0:
3008 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3009 ; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3010 ; CHECK-NEXT:    ret
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:
3019 ; CHECK:       # %bb.0:
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
3023 ; CHECK-NEXT:    ret
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:
3030 ; CHECK:       # %bb.0:
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
3034 ; CHECK-NEXT:    ret
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:
3043 ; CHECK:       # %bb.0:
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
3047 ; CHECK-NEXT:    ret
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:
3056 ; CHECK:       # %bb.0:
3057 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3058 ; CHECK-NEXT:    vmflt.vv v0, v16, v8
3059 ; CHECK-NEXT:    ret
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:
3066 ; CHECK:       # %bb.0:
3067 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3068 ; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
3069 ; CHECK-NEXT:    ret
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:
3078 ; CHECK:       # %bb.0:
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
3082 ; CHECK-NEXT:    ret
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:
3089 ; CHECK:       # %bb.0:
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
3093 ; CHECK-NEXT:    ret
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:
3102 ; CHECK:       # %bb.0:
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
3106 ; CHECK-NEXT:    ret
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:
3115 ; CHECK:       # %bb.0:
3116 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3117 ; CHECK-NEXT:    vmfle.vv v0, v16, v8
3118 ; CHECK-NEXT:    ret
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:
3125 ; CHECK:       # %bb.0:
3126 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3127 ; CHECK-NEXT:    vmfge.vf v0, v8, fa0
3128 ; CHECK-NEXT:    ret
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:
3137 ; CHECK:       # %bb.0:
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
3141 ; CHECK-NEXT:    ret
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:
3148 ; CHECK:       # %bb.0:
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
3152 ; CHECK-NEXT:    ret
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:
3161 ; CHECK:       # %bb.0:
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
3165 ; CHECK-NEXT:    ret
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:
3174 ; CHECK:       # %bb.0:
3175 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3176 ; CHECK-NEXT:    vmflt.vv v0, v8, v16
3177 ; CHECK-NEXT:    ret
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:
3184 ; CHECK:       # %bb.0:
3185 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3186 ; CHECK-NEXT:    vmflt.vf v0, v8, fa0
3187 ; CHECK-NEXT:    ret
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:
3196 ; CHECK:       # %bb.0:
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
3200 ; CHECK-NEXT:    ret
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:
3207 ; CHECK:       # %bb.0:
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
3211 ; CHECK-NEXT:    ret
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:
3220 ; CHECK:       # %bb.0:
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
3224 ; CHECK-NEXT:    ret
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:
3233 ; CHECK:       # %bb.0:
3234 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3235 ; CHECK-NEXT:    vmfle.vv v0, v8, v16
3236 ; CHECK-NEXT:    ret
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:
3243 ; CHECK:       # %bb.0:
3244 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3245 ; CHECK-NEXT:    vmfle.vf v0, v8, fa0
3246 ; CHECK-NEXT:    ret
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:
3255 ; CHECK:       # %bb.0:
3256 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3257 ; CHECK-NEXT:    vmfne.vv v0, v8, v16
3258 ; CHECK-NEXT:    ret
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:
3265 ; CHECK:       # %bb.0:
3266 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3267 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3268 ; CHECK-NEXT:    ret
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:
3277 ; CHECK:       # %bb.0:
3278 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3279 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3280 ; CHECK-NEXT:    ret
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:
3289 ; CHECK:       # %bb.0:
3290 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3291 ; CHECK-NEXT:    vmfne.vv v0, v8, v16
3292 ; CHECK-NEXT:    ret
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:
3299 ; CHECK:       # %bb.0:
3300 ; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3301 ; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3302 ; CHECK-NEXT:    ret
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:
3311 ; CHECK:       # %bb.0:
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
3316 ; CHECK-NEXT:    ret
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:
3323 ; CHECK:       # %bb.0:
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
3329 ; CHECK-NEXT:    ret
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:
3338 ; CHECK:       # %bb.0:
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
3344 ; CHECK-NEXT:    ret
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:
3353 ; CHECK:       # %bb.0:
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
3358 ; CHECK-NEXT:    ret
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:
3365 ; CHECK:       # %bb.0:
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
3371 ; CHECK-NEXT:    ret
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:
3382 ; RV32:       # %bb.0:
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
3392 ; RV32-NEXT:    ret
3394 ; RV64-LABEL: fcmp_oeq_vf_nx16f64:
3395 ; RV64:       # %bb.0:
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
3405 ; RV64-NEXT:    ret
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" }