xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/setcc-fp.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfh,+zfbfmin,+zvfbfmin,+v \
3; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
4; RUN:     --check-prefixes=CHECK,ZVFH,RV32
5; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfh,+zfbfmin,+zvfbfmin,+v \
6; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
7; RUN:     --check-prefixes=CHECK,ZVFH,RV64
8; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfhmin,+zfbfmin,+zvfbfmin,+v \
9; RUN:     -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \
10; RUN:     --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN32
11; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfhmin,+zfbfmin,+zvfbfmin,+v \
12; RUN:     -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \
13; RUN:     --check-prefixes=CHECK,ZVFHMIN,ZVFHMIN64
14
15; FIXME: The scalar/vector operations ('fv' tests) should swap operands and
16; condition codes accordingly in order to generate a 'vf' instruction.
17
18define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
19; CHECK-LABEL: fcmp_oeq_vv_nxv8bf16:
20; CHECK:       # %bb.0:
21; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
22; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
23; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
24; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
25; CHECK-NEXT:    vmfeq.vv v0, v16, v12
26; CHECK-NEXT:    ret
27  %vc = fcmp oeq <vscale x 8 x bfloat> %va, %vb
28  ret <vscale x 8 x i1> %vc
29}
30
31define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
32; CHECK-LABEL: fcmp_oeq_vf_nxv8bf16:
33; CHECK:       # %bb.0:
34; CHECK-NEXT:    fmv.x.h a0, fa0
35; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
36; CHECK-NEXT:    vmv.v.x v10, a0
37; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
38; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
39; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
40; CHECK-NEXT:    vmfeq.vv v0, v12, v16
41; CHECK-NEXT:    ret
42  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
43  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
44  %vc = fcmp oeq <vscale x 8 x bfloat> %va, %splat
45  ret <vscale x 8 x i1> %vc
46}
47
48define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
49; CHECK-LABEL: fcmp_oeq_fv_nxv8bf16:
50; CHECK:       # %bb.0:
51; CHECK-NEXT:    fmv.x.h a0, fa0
52; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
53; CHECK-NEXT:    vmv.v.x v10, a0
54; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
55; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
56; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
57; CHECK-NEXT:    vmfeq.vv v0, v16, v12
58; CHECK-NEXT:    ret
59  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
60  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
61  %vc = fcmp oeq <vscale x 8 x bfloat> %splat, %va
62  ret <vscale x 8 x i1> %vc
63}
64
65define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
66; CHECK-LABEL: fcmp_oeq_vv_nxv8bf16_nonans:
67; CHECK:       # %bb.0:
68; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
69; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
70; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
71; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
72; CHECK-NEXT:    vmfeq.vv v0, v16, v12
73; CHECK-NEXT:    ret
74  %vc = fcmp oeq <vscale x 8 x bfloat> %va, %vb
75  ret <vscale x 8 x i1> %vc
76}
77
78define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
79; CHECK-LABEL: fcmp_oeq_vf_nxv8bf16_nonans:
80; CHECK:       # %bb.0:
81; CHECK-NEXT:    fmv.x.h a0, fa0
82; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
83; CHECK-NEXT:    vmv.v.x v10, a0
84; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
85; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
86; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
87; CHECK-NEXT:    vmfeq.vv v0, v12, v16
88; CHECK-NEXT:    ret
89  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
90  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
91  %vc = fcmp oeq <vscale x 8 x bfloat> %va, %splat
92  ret <vscale x 8 x i1> %vc
93}
94
95define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
96; CHECK-LABEL: fcmp_ogt_vv_nxv8bf16:
97; CHECK:       # %bb.0:
98; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
99; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
100; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
101; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
102; CHECK-NEXT:    vmflt.vv v0, v16, v12
103; CHECK-NEXT:    ret
104  %vc = fcmp ogt <vscale x 8 x bfloat> %va, %vb
105  ret <vscale x 8 x i1> %vc
106}
107
108define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
109; CHECK-LABEL: fcmp_ogt_vf_nxv8bf16:
110; CHECK:       # %bb.0:
111; CHECK-NEXT:    fmv.x.h a0, fa0
112; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
113; CHECK-NEXT:    vmv.v.x v10, a0
114; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
115; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
116; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
117; CHECK-NEXT:    vmflt.vv v0, v16, v12
118; CHECK-NEXT:    ret
119  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
120  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
121  %vc = fcmp ogt <vscale x 8 x bfloat> %va, %splat
122  ret <vscale x 8 x i1> %vc
123}
124
125define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
126; CHECK-LABEL: fcmp_ogt_fv_nxv8bf16:
127; CHECK:       # %bb.0:
128; CHECK-NEXT:    fmv.x.h a0, fa0
129; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
130; CHECK-NEXT:    vmv.v.x v10, a0
131; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
132; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
133; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
134; CHECK-NEXT:    vmflt.vv v0, v12, v16
135; CHECK-NEXT:    ret
136  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
137  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
138  %vc = fcmp ogt <vscale x 8 x bfloat> %splat, %va
139  ret <vscale x 8 x i1> %vc
140}
141
142define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
143; CHECK-LABEL: fcmp_ogt_vv_nxv8bf16_nonans:
144; CHECK:       # %bb.0:
145; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
146; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
147; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
148; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
149; CHECK-NEXT:    vmflt.vv v0, v16, v12
150; CHECK-NEXT:    ret
151  %vc = fcmp ogt <vscale x 8 x bfloat> %va, %vb
152  ret <vscale x 8 x i1> %vc
153}
154
155define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
156; CHECK-LABEL: fcmp_ogt_vf_nxv8bf16_nonans:
157; CHECK:       # %bb.0:
158; CHECK-NEXT:    fmv.x.h a0, fa0
159; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
160; CHECK-NEXT:    vmv.v.x v10, a0
161; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
162; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
163; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
164; CHECK-NEXT:    vmflt.vv v0, v16, v12
165; CHECK-NEXT:    ret
166  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
167  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
168  %vc = fcmp ogt <vscale x 8 x bfloat> %va, %splat
169  ret <vscale x 8 x i1> %vc
170}
171
172define <vscale x 8 x i1> @fcmp_oge_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
173; CHECK-LABEL: fcmp_oge_vv_nxv8bf16:
174; CHECK:       # %bb.0:
175; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
176; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
177; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
178; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
179; CHECK-NEXT:    vmfle.vv v0, v16, v12
180; CHECK-NEXT:    ret
181  %vc = fcmp oge <vscale x 8 x bfloat> %va, %vb
182  ret <vscale x 8 x i1> %vc
183}
184
185define <vscale x 8 x i1> @fcmp_oge_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
186; CHECK-LABEL: fcmp_oge_vf_nxv8bf16:
187; CHECK:       # %bb.0:
188; CHECK-NEXT:    fmv.x.h a0, fa0
189; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
190; CHECK-NEXT:    vmv.v.x v10, a0
191; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
192; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
193; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
194; CHECK-NEXT:    vmfle.vv v0, v16, v12
195; CHECK-NEXT:    ret
196  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
197  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
198  %vc = fcmp oge <vscale x 8 x bfloat> %va, %splat
199  ret <vscale x 8 x i1> %vc
200}
201
202define <vscale x 8 x i1> @fcmp_oge_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
203; CHECK-LABEL: fcmp_oge_fv_nxv8bf16:
204; CHECK:       # %bb.0:
205; CHECK-NEXT:    fmv.x.h a0, fa0
206; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
207; CHECK-NEXT:    vmv.v.x v10, a0
208; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
209; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
210; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
211; CHECK-NEXT:    vmfle.vv v0, v12, v16
212; CHECK-NEXT:    ret
213  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
214  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
215  %vc = fcmp oge <vscale x 8 x bfloat> %splat, %va
216  ret <vscale x 8 x i1> %vc
217}
218
219define <vscale x 8 x i1> @fcmp_oge_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
220; CHECK-LABEL: fcmp_oge_vv_nxv8bf16_nonans:
221; CHECK:       # %bb.0:
222; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
223; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
224; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
225; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
226; CHECK-NEXT:    vmfle.vv v0, v16, v12
227; CHECK-NEXT:    ret
228  %vc = fcmp oge <vscale x 8 x bfloat> %va, %vb
229  ret <vscale x 8 x i1> %vc
230}
231
232define <vscale x 8 x i1> @fcmp_oge_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
233; CHECK-LABEL: fcmp_oge_vf_nxv8bf16_nonans:
234; CHECK:       # %bb.0:
235; CHECK-NEXT:    fmv.x.h a0, fa0
236; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
237; CHECK-NEXT:    vmv.v.x v10, a0
238; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
239; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
240; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
241; CHECK-NEXT:    vmfle.vv v0, v16, v12
242; CHECK-NEXT:    ret
243  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
244  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
245  %vc = fcmp oge <vscale x 8 x bfloat> %va, %splat
246  ret <vscale x 8 x i1> %vc
247}
248
249define <vscale x 8 x i1> @fcmp_olt_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
250; CHECK-LABEL: fcmp_olt_vv_nxv8bf16:
251; CHECK:       # %bb.0:
252; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
253; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
254; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
255; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
256; CHECK-NEXT:    vmflt.vv v0, v16, v12
257; CHECK-NEXT:    ret
258  %vc = fcmp olt <vscale x 8 x bfloat> %va, %vb
259  ret <vscale x 8 x i1> %vc
260}
261
262define <vscale x 8 x i1> @fcmp_olt_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
263; CHECK-LABEL: fcmp_olt_vf_nxv8bf16:
264; CHECK:       # %bb.0:
265; CHECK-NEXT:    fmv.x.h a0, fa0
266; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
267; CHECK-NEXT:    vmv.v.x v10, a0
268; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
269; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
270; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
271; CHECK-NEXT:    vmflt.vv v0, v12, v16
272; CHECK-NEXT:    ret
273  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
274  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
275  %vc = fcmp olt <vscale x 8 x bfloat> %va, %splat
276  ret <vscale x 8 x i1> %vc
277}
278
279define <vscale x 8 x i1> @fcmp_olt_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
280; CHECK-LABEL: fcmp_olt_fv_nxv8bf16:
281; CHECK:       # %bb.0:
282; CHECK-NEXT:    fmv.x.h a0, fa0
283; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
284; CHECK-NEXT:    vmv.v.x v10, a0
285; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
286; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
287; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
288; CHECK-NEXT:    vmflt.vv v0, v16, v12
289; CHECK-NEXT:    ret
290  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
291  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
292  %vc = fcmp olt <vscale x 8 x bfloat> %splat, %va
293  ret <vscale x 8 x i1> %vc
294}
295
296define <vscale x 8 x i1> @fcmp_olt_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
297; CHECK-LABEL: fcmp_olt_vv_nxv8bf16_nonans:
298; CHECK:       # %bb.0:
299; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
300; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
301; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
302; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
303; CHECK-NEXT:    vmflt.vv v0, v16, v12
304; CHECK-NEXT:    ret
305  %vc = fcmp olt <vscale x 8 x bfloat> %va, %vb
306  ret <vscale x 8 x i1> %vc
307}
308
309define <vscale x 8 x i1> @fcmp_olt_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
310; CHECK-LABEL: fcmp_olt_vf_nxv8bf16_nonans:
311; CHECK:       # %bb.0:
312; CHECK-NEXT:    fmv.x.h a0, fa0
313; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
314; CHECK-NEXT:    vmv.v.x v10, a0
315; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
316; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
317; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
318; CHECK-NEXT:    vmflt.vv v0, v12, v16
319; CHECK-NEXT:    ret
320  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
321  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
322  %vc = fcmp olt <vscale x 8 x bfloat> %va, %splat
323  ret <vscale x 8 x i1> %vc
324}
325
326define <vscale x 8 x i1> @fcmp_ole_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
327; CHECK-LABEL: fcmp_ole_vv_nxv8bf16:
328; CHECK:       # %bb.0:
329; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
330; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
331; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
332; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
333; CHECK-NEXT:    vmfle.vv v0, v16, v12
334; CHECK-NEXT:    ret
335  %vc = fcmp ole <vscale x 8 x bfloat> %va, %vb
336  ret <vscale x 8 x i1> %vc
337}
338
339define <vscale x 8 x i1> @fcmp_ole_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
340; CHECK-LABEL: fcmp_ole_vf_nxv8bf16:
341; CHECK:       # %bb.0:
342; CHECK-NEXT:    fmv.x.h a0, fa0
343; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
344; CHECK-NEXT:    vmv.v.x v10, a0
345; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
346; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
347; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
348; CHECK-NEXT:    vmfle.vv v0, v12, v16
349; CHECK-NEXT:    ret
350  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
351  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
352  %vc = fcmp ole <vscale x 8 x bfloat> %va, %splat
353  ret <vscale x 8 x i1> %vc
354}
355
356define <vscale x 8 x i1> @fcmp_ole_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
357; CHECK-LABEL: fcmp_ole_fv_nxv8bf16:
358; CHECK:       # %bb.0:
359; CHECK-NEXT:    fmv.x.h a0, fa0
360; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
361; CHECK-NEXT:    vmv.v.x v10, a0
362; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
363; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
364; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
365; CHECK-NEXT:    vmfle.vv v0, v16, v12
366; CHECK-NEXT:    ret
367  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
368  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
369  %vc = fcmp ole <vscale x 8 x bfloat> %splat, %va
370  ret <vscale x 8 x i1> %vc
371}
372
373define <vscale x 8 x i1> @fcmp_ole_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
374; CHECK-LABEL: fcmp_ole_vv_nxv8bf16_nonans:
375; CHECK:       # %bb.0:
376; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
377; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
378; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
379; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
380; CHECK-NEXT:    vmfle.vv v0, v16, v12
381; CHECK-NEXT:    ret
382  %vc = fcmp ole <vscale x 8 x bfloat> %va, %vb
383  ret <vscale x 8 x i1> %vc
384}
385
386define <vscale x 8 x i1> @fcmp_ole_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
387; CHECK-LABEL: fcmp_ole_vf_nxv8bf16_nonans:
388; CHECK:       # %bb.0:
389; CHECK-NEXT:    fmv.x.h a0, fa0
390; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
391; CHECK-NEXT:    vmv.v.x v10, a0
392; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
393; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
394; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
395; CHECK-NEXT:    vmfle.vv v0, v12, v16
396; CHECK-NEXT:    ret
397  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
398  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
399  %vc = fcmp ole <vscale x 8 x bfloat> %va, %splat
400  ret <vscale x 8 x i1> %vc
401}
402
403define <vscale x 8 x i1> @fcmp_one_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
404; CHECK-LABEL: fcmp_one_vv_nxv8bf16:
405; CHECK:       # %bb.0:
406; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
407; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
408; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
409; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
410; CHECK-NEXT:    vmflt.vv v8, v16, v12
411; CHECK-NEXT:    vmflt.vv v9, v12, v16
412; CHECK-NEXT:    vmor.mm v0, v9, v8
413; CHECK-NEXT:    ret
414  %vc = fcmp one <vscale x 8 x bfloat> %va, %vb
415  ret <vscale x 8 x i1> %vc
416}
417
418define <vscale x 8 x i1> @fcmp_one_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
419; CHECK-LABEL: fcmp_one_vf_nxv8bf16:
420; CHECK:       # %bb.0:
421; CHECK-NEXT:    fmv.x.h a0, fa0
422; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
423; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
424; CHECK-NEXT:    vmv.v.x v8, a0
425; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
426; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
427; CHECK-NEXT:    vmflt.vv v8, v12, v16
428; CHECK-NEXT:    vmflt.vv v9, v16, v12
429; CHECK-NEXT:    vmor.mm v0, v9, v8
430; CHECK-NEXT:    ret
431  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
432  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
433  %vc = fcmp one <vscale x 8 x bfloat> %va, %splat
434  ret <vscale x 8 x i1> %vc
435}
436
437define <vscale x 8 x i1> @fcmp_one_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
438; CHECK-LABEL: fcmp_one_fv_nxv8bf16:
439; CHECK:       # %bb.0:
440; CHECK-NEXT:    fmv.x.h a0, fa0
441; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
442; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
443; CHECK-NEXT:    vmv.v.x v8, a0
444; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
445; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
446; CHECK-NEXT:    vmflt.vv v8, v16, v12
447; CHECK-NEXT:    vmflt.vv v9, v12, v16
448; CHECK-NEXT:    vmor.mm v0, v9, v8
449; CHECK-NEXT:    ret
450  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
451  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
452  %vc = fcmp one <vscale x 8 x bfloat> %splat, %va
453  ret <vscale x 8 x i1> %vc
454}
455
456define <vscale x 8 x i1> @fcmp_one_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
457; CHECK-LABEL: fcmp_one_vv_nxv8bf16_nonans:
458; CHECK:       # %bb.0:
459; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
460; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
461; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
462; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
463; CHECK-NEXT:    vmfne.vv v0, v16, v12
464; CHECK-NEXT:    ret
465  %vc = fcmp one <vscale x 8 x bfloat> %va, %vb
466  ret <vscale x 8 x i1> %vc
467}
468
469define <vscale x 8 x i1> @fcmp_one_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
470; CHECK-LABEL: fcmp_one_vf_nxv8bf16_nonans:
471; CHECK:       # %bb.0:
472; CHECK-NEXT:    fmv.x.h a0, fa0
473; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
474; CHECK-NEXT:    vmv.v.x v10, a0
475; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
476; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
477; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
478; CHECK-NEXT:    vmfne.vv v0, v12, v16
479; CHECK-NEXT:    ret
480  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
481  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
482  %vc = fcmp one <vscale x 8 x bfloat> %va, %splat
483  ret <vscale x 8 x i1> %vc
484}
485
486define <vscale x 8 x i1> @fcmp_ord_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
487; CHECK-LABEL: fcmp_ord_vv_nxv8bf16:
488; CHECK:       # %bb.0:
489; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
490; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
491; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
492; CHECK-NEXT:    vmfeq.vv v10, v12, v12
493; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
494; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
495; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
496; CHECK-NEXT:    vmfeq.vv v8, v12, v12
497; CHECK-NEXT:    vmand.mm v0, v8, v10
498; CHECK-NEXT:    ret
499  %vc = fcmp ord <vscale x 8 x bfloat> %va, %vb
500  ret <vscale x 8 x i1> %vc
501}
502
503define <vscale x 8 x i1> @fcmp_ord_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
504; CHECK-LABEL: fcmp_ord_vf_nxv8bf16:
505; CHECK:       # %bb.0:
506; CHECK-NEXT:    fmv.x.h a0, fa0
507; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
508; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
509; CHECK-NEXT:    vmv.v.x v8, a0
510; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
511; CHECK-NEXT:    vmfeq.vv v10, v12, v12
512; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
513; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
514; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
515; CHECK-NEXT:    vmfeq.vv v8, v12, v12
516; CHECK-NEXT:    vmand.mm v0, v10, v8
517; CHECK-NEXT:    ret
518  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
519  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
520  %vc = fcmp ord <vscale x 8 x bfloat> %va, %splat
521  ret <vscale x 8 x i1> %vc
522}
523
524define <vscale x 8 x i1> @fcmp_ord_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
525; CHECK-LABEL: fcmp_ord_fv_nxv8bf16:
526; CHECK:       # %bb.0:
527; CHECK-NEXT:    fmv.x.h a0, fa0
528; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
529; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
530; CHECK-NEXT:    vmv.v.x v8, a0
531; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
532; CHECK-NEXT:    vmfeq.vv v10, v12, v12
533; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
534; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
535; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
536; CHECK-NEXT:    vmfeq.vv v8, v12, v12
537; CHECK-NEXT:    vmand.mm v0, v8, v10
538; CHECK-NEXT:    ret
539  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
540  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
541  %vc = fcmp ord <vscale x 8 x bfloat> %splat, %va
542  ret <vscale x 8 x i1> %vc
543}
544
545define <vscale x 8 x i1> @fcmp_ord_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
546; CHECK-LABEL: fcmp_ord_vv_nxv8bf16_nonans:
547; CHECK:       # %bb.0:
548; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
549; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
550; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
551; CHECK-NEXT:    vmfeq.vv v10, v12, v12
552; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
553; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
554; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
555; CHECK-NEXT:    vmfeq.vv v8, v12, v12
556; CHECK-NEXT:    vmand.mm v0, v8, v10
557; CHECK-NEXT:    ret
558  %vc = fcmp ord <vscale x 8 x bfloat> %va, %vb
559  ret <vscale x 8 x i1> %vc
560}
561
562define <vscale x 8 x i1> @fcmp_ord_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
563; CHECK-LABEL: fcmp_ord_vf_nxv8bf16_nonans:
564; CHECK:       # %bb.0:
565; CHECK-NEXT:    fmv.x.h a0, fa0
566; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
567; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
568; CHECK-NEXT:    vmv.v.x v8, a0
569; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
570; CHECK-NEXT:    vmfeq.vv v10, v12, v12
571; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
572; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
573; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
574; CHECK-NEXT:    vmfeq.vv v8, v12, v12
575; CHECK-NEXT:    vmand.mm v0, v10, v8
576; CHECK-NEXT:    ret
577  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
578  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
579  %vc = fcmp ord <vscale x 8 x bfloat> %va, %splat
580  ret <vscale x 8 x i1> %vc
581}
582
583define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
584; CHECK-LABEL: fcmp_ueq_vv_nxv8bf16:
585; CHECK:       # %bb.0:
586; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
587; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
588; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
589; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
590; CHECK-NEXT:    vmflt.vv v8, v16, v12
591; CHECK-NEXT:    vmflt.vv v9, v12, v16
592; CHECK-NEXT:    vmnor.mm v0, v9, v8
593; CHECK-NEXT:    ret
594  %vc = fcmp ueq <vscale x 8 x bfloat> %va, %vb
595  ret <vscale x 8 x i1> %vc
596}
597
598define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
599; CHECK-LABEL: fcmp_ueq_vf_nxv8bf16:
600; CHECK:       # %bb.0:
601; CHECK-NEXT:    fmv.x.h a0, fa0
602; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
603; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
604; CHECK-NEXT:    vmv.v.x v8, a0
605; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
606; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
607; CHECK-NEXT:    vmflt.vv v8, v12, v16
608; CHECK-NEXT:    vmflt.vv v9, v16, v12
609; CHECK-NEXT:    vmnor.mm v0, v9, v8
610; CHECK-NEXT:    ret
611  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
612  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
613  %vc = fcmp ueq <vscale x 8 x bfloat> %va, %splat
614  ret <vscale x 8 x i1> %vc
615}
616
617define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
618; CHECK-LABEL: fcmp_ueq_fv_nxv8bf16:
619; CHECK:       # %bb.0:
620; CHECK-NEXT:    fmv.x.h a0, fa0
621; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
622; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
623; CHECK-NEXT:    vmv.v.x v8, a0
624; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
625; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
626; CHECK-NEXT:    vmflt.vv v8, v16, v12
627; CHECK-NEXT:    vmflt.vv v9, v12, v16
628; CHECK-NEXT:    vmnor.mm v0, v9, v8
629; CHECK-NEXT:    ret
630  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
631  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
632  %vc = fcmp ueq <vscale x 8 x bfloat> %splat, %va
633  ret <vscale x 8 x i1> %vc
634}
635
636define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
637; CHECK-LABEL: fcmp_ueq_vv_nxv8bf16_nonans:
638; CHECK:       # %bb.0:
639; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
640; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
641; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
642; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
643; CHECK-NEXT:    vmfeq.vv v0, v16, v12
644; CHECK-NEXT:    ret
645  %vc = fcmp ueq <vscale x 8 x bfloat> %va, %vb
646  ret <vscale x 8 x i1> %vc
647}
648
649define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
650; CHECK-LABEL: fcmp_ueq_vf_nxv8bf16_nonans:
651; CHECK:       # %bb.0:
652; CHECK-NEXT:    fmv.x.h a0, fa0
653; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
654; CHECK-NEXT:    vmv.v.x v10, a0
655; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
656; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
657; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
658; CHECK-NEXT:    vmfeq.vv v0, v12, v16
659; CHECK-NEXT:    ret
660  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
661  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
662  %vc = fcmp ueq <vscale x 8 x bfloat> %va, %splat
663  ret <vscale x 8 x i1> %vc
664}
665
666define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
667; CHECK-LABEL: fcmp_ugt_vv_nxv8bf16:
668; CHECK:       # %bb.0:
669; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
670; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
671; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
672; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
673; CHECK-NEXT:    vmfle.vv v8, v16, v12
674; CHECK-NEXT:    vmnot.m v0, v8
675; CHECK-NEXT:    ret
676  %vc = fcmp ugt <vscale x 8 x bfloat> %va, %vb
677  ret <vscale x 8 x i1> %vc
678}
679
680define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
681; CHECK-LABEL: fcmp_ugt_vf_nxv8bf16:
682; CHECK:       # %bb.0:
683; CHECK-NEXT:    fmv.x.h a0, fa0
684; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
685; CHECK-NEXT:    vmv.v.x v10, a0
686; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
687; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
688; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
689; CHECK-NEXT:    vmfle.vv v8, v12, v16
690; CHECK-NEXT:    vmnot.m v0, v8
691; CHECK-NEXT:    ret
692  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
693  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
694  %vc = fcmp ugt <vscale x 8 x bfloat> %va, %splat
695  ret <vscale x 8 x i1> %vc
696}
697
698define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
699; CHECK-LABEL: fcmp_ugt_fv_nxv8bf16:
700; CHECK:       # %bb.0:
701; CHECK-NEXT:    fmv.x.h a0, fa0
702; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
703; CHECK-NEXT:    vmv.v.x v10, a0
704; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
705; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
706; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
707; CHECK-NEXT:    vmfle.vv v8, v16, v12
708; CHECK-NEXT:    vmnot.m v0, v8
709; CHECK-NEXT:    ret
710  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
711  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
712  %vc = fcmp ugt <vscale x 8 x bfloat> %splat, %va
713  ret <vscale x 8 x i1> %vc
714}
715
716define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
717; CHECK-LABEL: fcmp_ugt_vv_nxv8bf16_nonans:
718; CHECK:       # %bb.0:
719; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
720; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
721; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
722; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
723; CHECK-NEXT:    vmflt.vv v0, v16, v12
724; CHECK-NEXT:    ret
725  %vc = fcmp ugt <vscale x 8 x bfloat> %va, %vb
726  ret <vscale x 8 x i1> %vc
727}
728
729define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
730; CHECK-LABEL: fcmp_ugt_vf_nxv8bf16_nonans:
731; CHECK:       # %bb.0:
732; CHECK-NEXT:    fmv.x.h a0, fa0
733; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
734; CHECK-NEXT:    vmv.v.x v10, a0
735; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
736; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
737; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
738; CHECK-NEXT:    vmflt.vv v0, v16, v12
739; CHECK-NEXT:    ret
740  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
741  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
742  %vc = fcmp ugt <vscale x 8 x bfloat> %va, %splat
743  ret <vscale x 8 x i1> %vc
744}
745
746define <vscale x 8 x i1> @fcmp_uge_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
747; CHECK-LABEL: fcmp_uge_vv_nxv8bf16:
748; CHECK:       # %bb.0:
749; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
750; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
751; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
752; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
753; CHECK-NEXT:    vmflt.vv v8, v16, v12
754; CHECK-NEXT:    vmnot.m v0, v8
755; CHECK-NEXT:    ret
756  %vc = fcmp uge <vscale x 8 x bfloat> %va, %vb
757  ret <vscale x 8 x i1> %vc
758}
759
760define <vscale x 8 x i1> @fcmp_uge_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
761; CHECK-LABEL: fcmp_uge_vf_nxv8bf16:
762; CHECK:       # %bb.0:
763; CHECK-NEXT:    fmv.x.h a0, fa0
764; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
765; CHECK-NEXT:    vmv.v.x v10, a0
766; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
767; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
768; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
769; CHECK-NEXT:    vmflt.vv v8, v12, v16
770; CHECK-NEXT:    vmnot.m v0, v8
771; CHECK-NEXT:    ret
772  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
773  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
774  %vc = fcmp uge <vscale x 8 x bfloat> %va, %splat
775  ret <vscale x 8 x i1> %vc
776}
777
778define <vscale x 8 x i1> @fcmp_uge_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
779; CHECK-LABEL: fcmp_uge_fv_nxv8bf16:
780; CHECK:       # %bb.0:
781; CHECK-NEXT:    fmv.x.h a0, fa0
782; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
783; CHECK-NEXT:    vmv.v.x v10, a0
784; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
785; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
786; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
787; CHECK-NEXT:    vmflt.vv v8, v16, v12
788; CHECK-NEXT:    vmnot.m v0, v8
789; CHECK-NEXT:    ret
790  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
791  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
792  %vc = fcmp uge <vscale x 8 x bfloat> %splat, %va
793  ret <vscale x 8 x i1> %vc
794}
795
796define <vscale x 8 x i1> @fcmp_uge_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
797; CHECK-LABEL: fcmp_uge_vv_nxv8bf16_nonans:
798; CHECK:       # %bb.0:
799; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
800; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
801; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
802; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
803; CHECK-NEXT:    vmfle.vv v0, v16, v12
804; CHECK-NEXT:    ret
805  %vc = fcmp uge <vscale x 8 x bfloat> %va, %vb
806  ret <vscale x 8 x i1> %vc
807}
808
809define <vscale x 8 x i1> @fcmp_uge_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
810; CHECK-LABEL: fcmp_uge_vf_nxv8bf16_nonans:
811; CHECK:       # %bb.0:
812; CHECK-NEXT:    fmv.x.h a0, fa0
813; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
814; CHECK-NEXT:    vmv.v.x v10, a0
815; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
816; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
817; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
818; CHECK-NEXT:    vmfle.vv v0, v16, v12
819; CHECK-NEXT:    ret
820  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
821  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
822  %vc = fcmp uge <vscale x 8 x bfloat> %va, %splat
823  ret <vscale x 8 x i1> %vc
824}
825
826define <vscale x 8 x i1> @fcmp_ult_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
827; CHECK-LABEL: fcmp_ult_vv_nxv8bf16:
828; CHECK:       # %bb.0:
829; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
830; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
831; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
832; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
833; CHECK-NEXT:    vmfle.vv v8, v16, v12
834; CHECK-NEXT:    vmnot.m v0, v8
835; CHECK-NEXT:    ret
836  %vc = fcmp ult <vscale x 8 x bfloat> %va, %vb
837  ret <vscale x 8 x i1> %vc
838}
839
840define <vscale x 8 x i1> @fcmp_ult_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
841; CHECK-LABEL: fcmp_ult_vf_nxv8bf16:
842; CHECK:       # %bb.0:
843; CHECK-NEXT:    fmv.x.h a0, fa0
844; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
845; CHECK-NEXT:    vmv.v.x v10, a0
846; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
847; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
848; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
849; CHECK-NEXT:    vmfle.vv v8, v16, v12
850; CHECK-NEXT:    vmnot.m v0, v8
851; CHECK-NEXT:    ret
852  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
853  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
854  %vc = fcmp ult <vscale x 8 x bfloat> %va, %splat
855  ret <vscale x 8 x i1> %vc
856}
857
858define <vscale x 8 x i1> @fcmp_ult_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
859; CHECK-LABEL: fcmp_ult_fv_nxv8bf16:
860; CHECK:       # %bb.0:
861; CHECK-NEXT:    fmv.x.h a0, fa0
862; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
863; CHECK-NEXT:    vmv.v.x v10, a0
864; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
865; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
866; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
867; CHECK-NEXT:    vmfle.vv v8, v12, v16
868; CHECK-NEXT:    vmnot.m v0, v8
869; CHECK-NEXT:    ret
870  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
871  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
872  %vc = fcmp ult <vscale x 8 x bfloat> %splat, %va
873  ret <vscale x 8 x i1> %vc
874}
875
876define <vscale x 8 x i1> @fcmp_ult_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
877; CHECK-LABEL: fcmp_ult_vv_nxv8bf16_nonans:
878; CHECK:       # %bb.0:
879; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
880; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
881; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
882; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
883; CHECK-NEXT:    vmflt.vv v0, v16, v12
884; CHECK-NEXT:    ret
885  %vc = fcmp ult <vscale x 8 x bfloat> %va, %vb
886  ret <vscale x 8 x i1> %vc
887}
888
889define <vscale x 8 x i1> @fcmp_ult_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
890; CHECK-LABEL: fcmp_ult_vf_nxv8bf16_nonans:
891; CHECK:       # %bb.0:
892; CHECK-NEXT:    fmv.x.h a0, fa0
893; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
894; CHECK-NEXT:    vmv.v.x v10, a0
895; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
896; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
897; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
898; CHECK-NEXT:    vmflt.vv v0, v12, v16
899; CHECK-NEXT:    ret
900  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
901  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
902  %vc = fcmp ult <vscale x 8 x bfloat> %va, %splat
903  ret <vscale x 8 x i1> %vc
904}
905
906define <vscale x 8 x i1> @fcmp_ule_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
907; CHECK-LABEL: fcmp_ule_vv_nxv8bf16:
908; CHECK:       # %bb.0:
909; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
910; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
911; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
912; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
913; CHECK-NEXT:    vmflt.vv v8, v16, v12
914; CHECK-NEXT:    vmnot.m v0, v8
915; CHECK-NEXT:    ret
916  %vc = fcmp ule <vscale x 8 x bfloat> %va, %vb
917  ret <vscale x 8 x i1> %vc
918}
919
920define <vscale x 8 x i1> @fcmp_ule_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
921; CHECK-LABEL: fcmp_ule_vf_nxv8bf16:
922; CHECK:       # %bb.0:
923; CHECK-NEXT:    fmv.x.h a0, fa0
924; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
925; CHECK-NEXT:    vmv.v.x v10, a0
926; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
927; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
928; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
929; CHECK-NEXT:    vmflt.vv v8, v16, v12
930; CHECK-NEXT:    vmnot.m v0, v8
931; CHECK-NEXT:    ret
932  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
933  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
934  %vc = fcmp ule <vscale x 8 x bfloat> %va, %splat
935  ret <vscale x 8 x i1> %vc
936}
937
938define <vscale x 8 x i1> @fcmp_ule_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
939; CHECK-LABEL: fcmp_ule_fv_nxv8bf16:
940; CHECK:       # %bb.0:
941; CHECK-NEXT:    fmv.x.h a0, fa0
942; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
943; CHECK-NEXT:    vmv.v.x v10, a0
944; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
945; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
946; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
947; CHECK-NEXT:    vmflt.vv v8, v12, v16
948; CHECK-NEXT:    vmnot.m v0, v8
949; CHECK-NEXT:    ret
950  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
951  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
952  %vc = fcmp ule <vscale x 8 x bfloat> %splat, %va
953  ret <vscale x 8 x i1> %vc
954}
955
956define <vscale x 8 x i1> @fcmp_ule_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
957; CHECK-LABEL: fcmp_ule_vv_nxv8bf16_nonans:
958; CHECK:       # %bb.0:
959; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
960; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
961; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
962; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
963; CHECK-NEXT:    vmfle.vv v0, v16, v12
964; CHECK-NEXT:    ret
965  %vc = fcmp ule <vscale x 8 x bfloat> %va, %vb
966  ret <vscale x 8 x i1> %vc
967}
968
969define <vscale x 8 x i1> @fcmp_ule_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
970; CHECK-LABEL: fcmp_ule_vf_nxv8bf16_nonans:
971; CHECK:       # %bb.0:
972; CHECK-NEXT:    fmv.x.h a0, fa0
973; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
974; CHECK-NEXT:    vmv.v.x v10, a0
975; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
976; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
977; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
978; CHECK-NEXT:    vmfle.vv v0, v12, v16
979; CHECK-NEXT:    ret
980  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
981  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
982  %vc = fcmp ule <vscale x 8 x bfloat> %va, %splat
983  ret <vscale x 8 x i1> %vc
984}
985
986define <vscale x 8 x i1> @fcmp_une_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
987; CHECK-LABEL: fcmp_une_vv_nxv8bf16:
988; CHECK:       # %bb.0:
989; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
990; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
991; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
992; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
993; CHECK-NEXT:    vmfne.vv v0, v16, v12
994; CHECK-NEXT:    ret
995  %vc = fcmp une <vscale x 8 x bfloat> %va, %vb
996  ret <vscale x 8 x i1> %vc
997}
998
999define <vscale x 8 x i1> @fcmp_une_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
1000; CHECK-LABEL: fcmp_une_vf_nxv8bf16:
1001; CHECK:       # %bb.0:
1002; CHECK-NEXT:    fmv.x.h a0, fa0
1003; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1004; CHECK-NEXT:    vmv.v.x v10, a0
1005; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1006; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
1007; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1008; CHECK-NEXT:    vmfne.vv v0, v12, v16
1009; CHECK-NEXT:    ret
1010  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
1011  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
1012  %vc = fcmp une <vscale x 8 x bfloat> %va, %splat
1013  ret <vscale x 8 x i1> %vc
1014}
1015
1016define <vscale x 8 x i1> @fcmp_une_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
1017; CHECK-LABEL: fcmp_une_fv_nxv8bf16:
1018; CHECK:       # %bb.0:
1019; CHECK-NEXT:    fmv.x.h a0, fa0
1020; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1021; CHECK-NEXT:    vmv.v.x v10, a0
1022; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1023; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
1024; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1025; CHECK-NEXT:    vmfne.vv v0, v16, v12
1026; CHECK-NEXT:    ret
1027  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
1028  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
1029  %vc = fcmp une <vscale x 8 x bfloat> %splat, %va
1030  ret <vscale x 8 x i1> %vc
1031}
1032
1033define <vscale x 8 x i1> @fcmp_une_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
1034; CHECK-LABEL: fcmp_une_vv_nxv8bf16_nonans:
1035; CHECK:       # %bb.0:
1036; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1037; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
1038; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v8
1039; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1040; CHECK-NEXT:    vmfne.vv v0, v16, v12
1041; CHECK-NEXT:    ret
1042  %vc = fcmp une <vscale x 8 x bfloat> %va, %vb
1043  ret <vscale x 8 x i1> %vc
1044}
1045
1046define <vscale x 8 x i1> @fcmp_une_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
1047; CHECK-LABEL: fcmp_une_vf_nxv8bf16_nonans:
1048; CHECK:       # %bb.0:
1049; CHECK-NEXT:    fmv.x.h a0, fa0
1050; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1051; CHECK-NEXT:    vmv.v.x v10, a0
1052; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1053; CHECK-NEXT:    vfwcvtbf16.f.f.v v16, v10
1054; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1055; CHECK-NEXT:    vmfne.vv v0, v12, v16
1056; CHECK-NEXT:    ret
1057  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
1058  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
1059  %vc = fcmp une <vscale x 8 x bfloat> %va, %splat
1060  ret <vscale x 8 x i1> %vc
1061}
1062
1063define <vscale x 8 x i1> @fcmp_uno_vv_nxv8bf16(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) {
1064; CHECK-LABEL: fcmp_uno_vv_nxv8bf16:
1065; CHECK:       # %bb.0:
1066; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1067; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
1068; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1069; CHECK-NEXT:    vmfne.vv v10, v12, v12
1070; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1071; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1072; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1073; CHECK-NEXT:    vmfne.vv v8, v12, v12
1074; CHECK-NEXT:    vmor.mm v0, v8, v10
1075; CHECK-NEXT:    ret
1076  %vc = fcmp uno <vscale x 8 x bfloat> %va, %vb
1077  ret <vscale x 8 x i1> %vc
1078}
1079
1080define <vscale x 8 x i1> @fcmp_uno_vf_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
1081; CHECK-LABEL: fcmp_uno_vf_nxv8bf16:
1082; CHECK:       # %bb.0:
1083; CHECK-NEXT:    fmv.x.h a0, fa0
1084; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1085; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1086; CHECK-NEXT:    vmv.v.x v8, a0
1087; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1088; CHECK-NEXT:    vmfne.vv v10, v12, v12
1089; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1090; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1091; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1092; CHECK-NEXT:    vmfne.vv v8, v12, v12
1093; CHECK-NEXT:    vmor.mm v0, v10, v8
1094; CHECK-NEXT:    ret
1095  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
1096  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
1097  %vc = fcmp uno <vscale x 8 x bfloat> %va, %splat
1098  ret <vscale x 8 x i1> %vc
1099}
1100
1101define <vscale x 8 x i1> @fcmp_uno_fv_nxv8bf16(<vscale x 8 x bfloat> %va, bfloat %b) {
1102; CHECK-LABEL: fcmp_uno_fv_nxv8bf16:
1103; CHECK:       # %bb.0:
1104; CHECK-NEXT:    fmv.x.h a0, fa0
1105; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1106; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1107; CHECK-NEXT:    vmv.v.x v8, a0
1108; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1109; CHECK-NEXT:    vmfne.vv v10, v12, v12
1110; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1111; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1112; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1113; CHECK-NEXT:    vmfne.vv v8, v12, v12
1114; CHECK-NEXT:    vmor.mm v0, v8, v10
1115; CHECK-NEXT:    ret
1116  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
1117  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
1118  %vc = fcmp uno <vscale x 8 x bfloat> %splat, %va
1119  ret <vscale x 8 x i1> %vc
1120}
1121
1122define <vscale x 8 x i1> @fcmp_uno_vv_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, <vscale x 8 x bfloat> %vb) #0 {
1123; CHECK-LABEL: fcmp_uno_vv_nxv8bf16_nonans:
1124; CHECK:       # %bb.0:
1125; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1126; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v10
1127; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1128; CHECK-NEXT:    vmfne.vv v10, v12, v12
1129; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1130; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1131; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1132; CHECK-NEXT:    vmfne.vv v8, v12, v12
1133; CHECK-NEXT:    vmor.mm v0, v8, v10
1134; CHECK-NEXT:    ret
1135  %vc = fcmp uno <vscale x 8 x bfloat> %va, %vb
1136  ret <vscale x 8 x i1> %vc
1137}
1138
1139define <vscale x 8 x i1> @fcmp_uno_vf_nxv8bf16_nonans(<vscale x 8 x bfloat> %va, bfloat %b) #0 {
1140; CHECK-LABEL: fcmp_uno_vf_nxv8bf16_nonans:
1141; CHECK:       # %bb.0:
1142; CHECK-NEXT:    fmv.x.h a0, fa0
1143; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1144; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1145; CHECK-NEXT:    vmv.v.x v8, a0
1146; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1147; CHECK-NEXT:    vmfne.vv v10, v12, v12
1148; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1149; CHECK-NEXT:    vfwcvtbf16.f.f.v v12, v8
1150; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1151; CHECK-NEXT:    vmfne.vv v8, v12, v12
1152; CHECK-NEXT:    vmor.mm v0, v10, v8
1153; CHECK-NEXT:    ret
1154  %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0
1155  %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer
1156  %vc = fcmp uno <vscale x 8 x bfloat> %va, %splat
1157  ret <vscale x 8 x i1> %vc
1158}
1159
1160define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1161; ZVFH-LABEL: fcmp_oeq_vv_nxv8f16:
1162; ZVFH:       # %bb.0:
1163; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1164; ZVFH-NEXT:    vmfeq.vv v0, v8, v10
1165; ZVFH-NEXT:    ret
1166;
1167; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv8f16:
1168; ZVFHMIN:       # %bb.0:
1169; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1170; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1171; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1172; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1173; ZVFHMIN-NEXT:    vmfeq.vv v0, v16, v12
1174; ZVFHMIN-NEXT:    ret
1175  %vc = fcmp oeq <vscale x 8 x half> %va, %vb
1176  ret <vscale x 8 x i1> %vc
1177}
1178
1179define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1180; ZVFH-LABEL: fcmp_oeq_vf_nxv8f16:
1181; ZVFH:       # %bb.0:
1182; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1183; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
1184; ZVFH-NEXT:    ret
1185;
1186; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv8f16:
1187; ZVFHMIN:       # %bb.0:
1188; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1189; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1190; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1191; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1192; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1193; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1194; ZVFHMIN-NEXT:    vmfeq.vv v0, v12, v16
1195; ZVFHMIN-NEXT:    ret
1196  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1197  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1198  %vc = fcmp oeq <vscale x 8 x half> %va, %splat
1199  ret <vscale x 8 x i1> %vc
1200}
1201
1202define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1203; ZVFH-LABEL: fcmp_oeq_fv_nxv8f16:
1204; ZVFH:       # %bb.0:
1205; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1206; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
1207; ZVFH-NEXT:    ret
1208;
1209; ZVFHMIN-LABEL: fcmp_oeq_fv_nxv8f16:
1210; ZVFHMIN:       # %bb.0:
1211; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1212; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1213; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1214; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1215; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1216; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1217; ZVFHMIN-NEXT:    vmfeq.vv v0, v16, v12
1218; ZVFHMIN-NEXT:    ret
1219  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1220  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1221  %vc = fcmp oeq <vscale x 8 x half> %splat, %va
1222  ret <vscale x 8 x i1> %vc
1223}
1224
1225define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1226; ZVFH-LABEL: fcmp_oeq_vv_nxv8f16_nonans:
1227; ZVFH:       # %bb.0:
1228; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1229; ZVFH-NEXT:    vmfeq.vv v0, v8, v10
1230; ZVFH-NEXT:    ret
1231;
1232; ZVFHMIN-LABEL: fcmp_oeq_vv_nxv8f16_nonans:
1233; ZVFHMIN:       # %bb.0:
1234; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1235; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1236; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1237; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1238; ZVFHMIN-NEXT:    vmfeq.vv v0, v16, v12
1239; ZVFHMIN-NEXT:    ret
1240  %vc = fcmp oeq <vscale x 8 x half> %va, %vb
1241  ret <vscale x 8 x i1> %vc
1242}
1243
1244define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1245; ZVFH-LABEL: fcmp_oeq_vf_nxv8f16_nonans:
1246; ZVFH:       # %bb.0:
1247; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1248; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
1249; ZVFH-NEXT:    ret
1250;
1251; ZVFHMIN-LABEL: fcmp_oeq_vf_nxv8f16_nonans:
1252; ZVFHMIN:       # %bb.0:
1253; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1254; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1255; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1256; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1257; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1258; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1259; ZVFHMIN-NEXT:    vmfeq.vv v0, v12, v16
1260; ZVFHMIN-NEXT:    ret
1261  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1262  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1263  %vc = fcmp oeq <vscale x 8 x half> %va, %splat
1264  ret <vscale x 8 x i1> %vc
1265}
1266
1267define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1268; ZVFH-LABEL: fcmp_ogt_vv_nxv8f16:
1269; ZVFH:       # %bb.0:
1270; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1271; ZVFH-NEXT:    vmflt.vv v0, v10, v8
1272; ZVFH-NEXT:    ret
1273;
1274; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv8f16:
1275; ZVFHMIN:       # %bb.0:
1276; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1277; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1278; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1279; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1280; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
1281; ZVFHMIN-NEXT:    ret
1282  %vc = fcmp ogt <vscale x 8 x half> %va, %vb
1283  ret <vscale x 8 x i1> %vc
1284}
1285
1286define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1287; ZVFH-LABEL: fcmp_ogt_vf_nxv8f16:
1288; ZVFH:       # %bb.0:
1289; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1290; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
1291; ZVFH-NEXT:    ret
1292;
1293; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv8f16:
1294; ZVFHMIN:       # %bb.0:
1295; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1296; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1297; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1298; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1299; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1300; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1301; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
1302; ZVFHMIN-NEXT:    ret
1303  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1304  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1305  %vc = fcmp ogt <vscale x 8 x half> %va, %splat
1306  ret <vscale x 8 x i1> %vc
1307}
1308
1309define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1310; ZVFH-LABEL: fcmp_ogt_fv_nxv8f16:
1311; ZVFH:       # %bb.0:
1312; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1313; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
1314; ZVFH-NEXT:    ret
1315;
1316; ZVFHMIN-LABEL: fcmp_ogt_fv_nxv8f16:
1317; ZVFHMIN:       # %bb.0:
1318; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1319; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1320; ZVFHMIN-NEXT:    vmv.v.x v10, a0
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 ogt <vscale x 8 x half> %splat, %va
1329  ret <vscale x 8 x i1> %vc
1330}
1331
1332define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1333; ZVFH-LABEL: fcmp_ogt_vv_nxv8f16_nonans:
1334; ZVFH:       # %bb.0:
1335; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1336; ZVFH-NEXT:    vmflt.vv v0, v10, v8
1337; ZVFH-NEXT:    ret
1338;
1339; ZVFHMIN-LABEL: fcmp_ogt_vv_nxv8f16_nonans:
1340; ZVFHMIN:       # %bb.0:
1341; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1342; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1343; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1344; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1345; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
1346; ZVFHMIN-NEXT:    ret
1347  %vc = fcmp ogt <vscale x 8 x half> %va, %vb
1348  ret <vscale x 8 x i1> %vc
1349}
1350
1351define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1352; ZVFH-LABEL: fcmp_ogt_vf_nxv8f16_nonans:
1353; ZVFH:       # %bb.0:
1354; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1355; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
1356; ZVFH-NEXT:    ret
1357;
1358; ZVFHMIN-LABEL: fcmp_ogt_vf_nxv8f16_nonans:
1359; ZVFHMIN:       # %bb.0:
1360; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1361; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1362; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1363; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1364; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1365; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1366; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
1367; ZVFHMIN-NEXT:    ret
1368  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1369  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1370  %vc = fcmp ogt <vscale x 8 x half> %va, %splat
1371  ret <vscale x 8 x i1> %vc
1372}
1373
1374define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1375; ZVFH-LABEL: fcmp_oge_vv_nxv8f16:
1376; ZVFH:       # %bb.0:
1377; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1378; ZVFH-NEXT:    vmfle.vv v0, v10, v8
1379; ZVFH-NEXT:    ret
1380;
1381; ZVFHMIN-LABEL: fcmp_oge_vv_nxv8f16:
1382; ZVFHMIN:       # %bb.0:
1383; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1384; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1385; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1386; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1387; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
1388; ZVFHMIN-NEXT:    ret
1389  %vc = fcmp oge <vscale x 8 x half> %va, %vb
1390  ret <vscale x 8 x i1> %vc
1391}
1392
1393define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1394; ZVFH-LABEL: fcmp_oge_vf_nxv8f16:
1395; ZVFH:       # %bb.0:
1396; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1397; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
1398; ZVFH-NEXT:    ret
1399;
1400; ZVFHMIN-LABEL: fcmp_oge_vf_nxv8f16:
1401; ZVFHMIN:       # %bb.0:
1402; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1403; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1404; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1405; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1406; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1407; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1408; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
1409; ZVFHMIN-NEXT:    ret
1410  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1411  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1412  %vc = fcmp oge <vscale x 8 x half> %va, %splat
1413  ret <vscale x 8 x i1> %vc
1414}
1415
1416define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1417; ZVFH-LABEL: fcmp_oge_fv_nxv8f16:
1418; ZVFH:       # %bb.0:
1419; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1420; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
1421; ZVFH-NEXT:    ret
1422;
1423; ZVFHMIN-LABEL: fcmp_oge_fv_nxv8f16:
1424; ZVFHMIN:       # %bb.0:
1425; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1426; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1427; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1428; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1429; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1430; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1431; ZVFHMIN-NEXT:    vmfle.vv v0, v12, v16
1432; ZVFHMIN-NEXT:    ret
1433  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1434  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1435  %vc = fcmp oge <vscale x 8 x half> %splat, %va
1436  ret <vscale x 8 x i1> %vc
1437}
1438
1439define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1440; ZVFH-LABEL: fcmp_oge_vv_nxv8f16_nonans:
1441; ZVFH:       # %bb.0:
1442; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1443; ZVFH-NEXT:    vmfle.vv v0, v10, v8
1444; ZVFH-NEXT:    ret
1445;
1446; ZVFHMIN-LABEL: fcmp_oge_vv_nxv8f16_nonans:
1447; ZVFHMIN:       # %bb.0:
1448; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1449; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1450; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1451; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1452; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
1453; ZVFHMIN-NEXT:    ret
1454  %vc = fcmp oge <vscale x 8 x half> %va, %vb
1455  ret <vscale x 8 x i1> %vc
1456}
1457
1458define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1459; ZVFH-LABEL: fcmp_oge_vf_nxv8f16_nonans:
1460; ZVFH:       # %bb.0:
1461; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1462; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
1463; ZVFH-NEXT:    ret
1464;
1465; ZVFHMIN-LABEL: fcmp_oge_vf_nxv8f16_nonans:
1466; ZVFHMIN:       # %bb.0:
1467; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1468; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1469; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1470; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1471; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1472; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1473; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
1474; ZVFHMIN-NEXT:    ret
1475  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1476  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1477  %vc = fcmp oge <vscale x 8 x half> %va, %splat
1478  ret <vscale x 8 x i1> %vc
1479}
1480
1481define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1482; ZVFH-LABEL: fcmp_olt_vv_nxv8f16:
1483; ZVFH:       # %bb.0:
1484; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1485; ZVFH-NEXT:    vmflt.vv v0, v8, v10
1486; ZVFH-NEXT:    ret
1487;
1488; ZVFHMIN-LABEL: fcmp_olt_vv_nxv8f16:
1489; ZVFHMIN:       # %bb.0:
1490; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1491; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1492; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1493; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1494; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
1495; ZVFHMIN-NEXT:    ret
1496  %vc = fcmp olt <vscale x 8 x half> %va, %vb
1497  ret <vscale x 8 x i1> %vc
1498}
1499
1500define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1501; ZVFH-LABEL: fcmp_olt_vf_nxv8f16:
1502; ZVFH:       # %bb.0:
1503; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1504; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
1505; ZVFH-NEXT:    ret
1506;
1507; ZVFHMIN-LABEL: fcmp_olt_vf_nxv8f16:
1508; ZVFHMIN:       # %bb.0:
1509; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1510; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1511; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1512; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1513; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1514; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1515; ZVFHMIN-NEXT:    vmflt.vv v0, v12, v16
1516; ZVFHMIN-NEXT:    ret
1517  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1518  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1519  %vc = fcmp olt <vscale x 8 x half> %va, %splat
1520  ret <vscale x 8 x i1> %vc
1521}
1522
1523define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1524; ZVFH-LABEL: fcmp_olt_fv_nxv8f16:
1525; ZVFH:       # %bb.0:
1526; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1527; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
1528; ZVFH-NEXT:    ret
1529;
1530; ZVFHMIN-LABEL: fcmp_olt_fv_nxv8f16:
1531; ZVFHMIN:       # %bb.0:
1532; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1533; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1534; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1535; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1536; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1537; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1538; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
1539; ZVFHMIN-NEXT:    ret
1540  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1541  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1542  %vc = fcmp olt <vscale x 8 x half> %splat, %va
1543  ret <vscale x 8 x i1> %vc
1544}
1545
1546define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1547; ZVFH-LABEL: fcmp_olt_vv_nxv8f16_nonans:
1548; ZVFH:       # %bb.0:
1549; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1550; ZVFH-NEXT:    vmflt.vv v0, v8, v10
1551; ZVFH-NEXT:    ret
1552;
1553; ZVFHMIN-LABEL: fcmp_olt_vv_nxv8f16_nonans:
1554; ZVFHMIN:       # %bb.0:
1555; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1556; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1557; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1558; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1559; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
1560; ZVFHMIN-NEXT:    ret
1561  %vc = fcmp olt <vscale x 8 x half> %va, %vb
1562  ret <vscale x 8 x i1> %vc
1563}
1564
1565define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1566; ZVFH-LABEL: fcmp_olt_vf_nxv8f16_nonans:
1567; ZVFH:       # %bb.0:
1568; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1569; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
1570; ZVFH-NEXT:    ret
1571;
1572; ZVFHMIN-LABEL: fcmp_olt_vf_nxv8f16_nonans:
1573; ZVFHMIN:       # %bb.0:
1574; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1575; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1576; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1577; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1578; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1579; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1580; ZVFHMIN-NEXT:    vmflt.vv v0, v12, v16
1581; ZVFHMIN-NEXT:    ret
1582  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1583  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1584  %vc = fcmp olt <vscale x 8 x half> %va, %splat
1585  ret <vscale x 8 x i1> %vc
1586}
1587
1588define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1589; ZVFH-LABEL: fcmp_ole_vv_nxv8f16:
1590; ZVFH:       # %bb.0:
1591; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1592; ZVFH-NEXT:    vmfle.vv v0, v8, v10
1593; ZVFH-NEXT:    ret
1594;
1595; ZVFHMIN-LABEL: fcmp_ole_vv_nxv8f16:
1596; ZVFHMIN:       # %bb.0:
1597; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1598; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1599; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1600; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1601; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
1602; ZVFHMIN-NEXT:    ret
1603  %vc = fcmp ole <vscale x 8 x half> %va, %vb
1604  ret <vscale x 8 x i1> %vc
1605}
1606
1607define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1608; ZVFH-LABEL: fcmp_ole_vf_nxv8f16:
1609; ZVFH:       # %bb.0:
1610; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1611; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
1612; ZVFH-NEXT:    ret
1613;
1614; ZVFHMIN-LABEL: fcmp_ole_vf_nxv8f16:
1615; ZVFHMIN:       # %bb.0:
1616; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1617; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1618; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1619; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1620; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1621; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1622; ZVFHMIN-NEXT:    vmfle.vv v0, v12, v16
1623; ZVFHMIN-NEXT:    ret
1624  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1625  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1626  %vc = fcmp ole <vscale x 8 x half> %va, %splat
1627  ret <vscale x 8 x i1> %vc
1628}
1629
1630define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1631; ZVFH-LABEL: fcmp_ole_fv_nxv8f16:
1632; ZVFH:       # %bb.0:
1633; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1634; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
1635; ZVFH-NEXT:    ret
1636;
1637; ZVFHMIN-LABEL: fcmp_ole_fv_nxv8f16:
1638; ZVFHMIN:       # %bb.0:
1639; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1640; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1641; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1642; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1643; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1644; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1645; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
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 ole <vscale x 8 x half> %splat, %va
1650  ret <vscale x 8 x i1> %vc
1651}
1652
1653define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1654; ZVFH-LABEL: fcmp_ole_vv_nxv8f16_nonans:
1655; ZVFH:       # %bb.0:
1656; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1657; ZVFH-NEXT:    vmfle.vv v0, v8, v10
1658; ZVFH-NEXT:    ret
1659;
1660; ZVFHMIN-LABEL: fcmp_ole_vv_nxv8f16_nonans:
1661; ZVFHMIN:       # %bb.0:
1662; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1663; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1664; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1665; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1666; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
1667; ZVFHMIN-NEXT:    ret
1668  %vc = fcmp ole <vscale x 8 x half> %va, %vb
1669  ret <vscale x 8 x i1> %vc
1670}
1671
1672define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1673; ZVFH-LABEL: fcmp_ole_vf_nxv8f16_nonans:
1674; ZVFH:       # %bb.0:
1675; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1676; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
1677; ZVFH-NEXT:    ret
1678;
1679; ZVFHMIN-LABEL: fcmp_ole_vf_nxv8f16_nonans:
1680; ZVFHMIN:       # %bb.0:
1681; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1682; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1683; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1684; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1685; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1686; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1687; ZVFHMIN-NEXT:    vmfle.vv v0, v12, v16
1688; ZVFHMIN-NEXT:    ret
1689  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1690  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1691  %vc = fcmp ole <vscale x 8 x half> %va, %splat
1692  ret <vscale x 8 x i1> %vc
1693}
1694
1695define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1696; ZVFH-LABEL: fcmp_one_vv_nxv8f16:
1697; ZVFH:       # %bb.0:
1698; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1699; ZVFH-NEXT:    vmflt.vv v12, v8, v10
1700; ZVFH-NEXT:    vmflt.vv v13, v10, v8
1701; ZVFH-NEXT:    vmor.mm v0, v13, v12
1702; ZVFH-NEXT:    ret
1703;
1704; ZVFHMIN-LABEL: fcmp_one_vv_nxv8f16:
1705; ZVFHMIN:       # %bb.0:
1706; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1707; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1708; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1709; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1710; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
1711; ZVFHMIN-NEXT:    vmflt.vv v9, v12, v16
1712; ZVFHMIN-NEXT:    vmor.mm v0, v9, v8
1713; ZVFHMIN-NEXT:    ret
1714  %vc = fcmp one <vscale x 8 x half> %va, %vb
1715  ret <vscale x 8 x i1> %vc
1716}
1717
1718define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1719; ZVFH-LABEL: fcmp_one_vf_nxv8f16:
1720; ZVFH:       # %bb.0:
1721; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1722; ZVFH-NEXT:    vmflt.vf v10, v8, fa0
1723; ZVFH-NEXT:    vmfgt.vf v11, v8, fa0
1724; ZVFH-NEXT:    vmor.mm v0, v11, v10
1725; ZVFH-NEXT:    ret
1726;
1727; ZVFHMIN-LABEL: fcmp_one_vf_nxv8f16:
1728; ZVFHMIN:       # %bb.0:
1729; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1730; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1731; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1732; ZVFHMIN-NEXT:    vmv.v.x v8, a0
1733; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1734; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1735; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v16
1736; ZVFHMIN-NEXT:    vmflt.vv v9, v16, v12
1737; ZVFHMIN-NEXT:    vmor.mm v0, v9, v8
1738; ZVFHMIN-NEXT:    ret
1739  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1740  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1741  %vc = fcmp one <vscale x 8 x half> %va, %splat
1742  ret <vscale x 8 x i1> %vc
1743}
1744
1745define <vscale x 8 x i1> @fcmp_one_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1746; ZVFH-LABEL: fcmp_one_fv_nxv8f16:
1747; ZVFH:       # %bb.0:
1748; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1749; ZVFH-NEXT:    vmfgt.vf v10, v8, fa0
1750; ZVFH-NEXT:    vmflt.vf v11, v8, fa0
1751; ZVFH-NEXT:    vmor.mm v0, v11, v10
1752; ZVFH-NEXT:    ret
1753;
1754; ZVFHMIN-LABEL: fcmp_one_fv_nxv8f16:
1755; ZVFHMIN:       # %bb.0:
1756; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1757; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1758; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1759; ZVFHMIN-NEXT:    vmv.v.x v8, a0
1760; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1761; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1762; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
1763; ZVFHMIN-NEXT:    vmflt.vv v9, v12, v16
1764; ZVFHMIN-NEXT:    vmor.mm v0, v9, v8
1765; ZVFHMIN-NEXT:    ret
1766  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1767  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1768  %vc = fcmp one <vscale x 8 x half> %splat, %va
1769  ret <vscale x 8 x i1> %vc
1770}
1771
1772define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1773; ZVFH-LABEL: fcmp_one_vv_nxv8f16_nonans:
1774; ZVFH:       # %bb.0:
1775; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1776; ZVFH-NEXT:    vmfne.vv v0, v8, v10
1777; ZVFH-NEXT:    ret
1778;
1779; ZVFHMIN-LABEL: fcmp_one_vv_nxv8f16_nonans:
1780; ZVFHMIN:       # %bb.0:
1781; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1782; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1783; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1784; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1785; ZVFHMIN-NEXT:    vmfne.vv v0, v16, v12
1786; ZVFHMIN-NEXT:    ret
1787  %vc = fcmp one <vscale x 8 x half> %va, %vb
1788  ret <vscale x 8 x i1> %vc
1789}
1790
1791define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1792; ZVFH-LABEL: fcmp_one_vf_nxv8f16_nonans:
1793; ZVFH:       # %bb.0:
1794; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1795; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
1796; ZVFH-NEXT:    ret
1797;
1798; ZVFHMIN-LABEL: fcmp_one_vf_nxv8f16_nonans:
1799; ZVFHMIN:       # %bb.0:
1800; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1801; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1802; ZVFHMIN-NEXT:    vmv.v.x v10, a0
1803; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1804; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
1805; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1806; ZVFHMIN-NEXT:    vmfne.vv v0, v12, v16
1807; ZVFHMIN-NEXT:    ret
1808  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1809  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1810  %vc = fcmp one <vscale x 8 x half> %va, %splat
1811  ret <vscale x 8 x i1> %vc
1812}
1813
1814define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1815; ZVFH-LABEL: fcmp_ord_vv_nxv8f16:
1816; ZVFH:       # %bb.0:
1817; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1818; ZVFH-NEXT:    vmfeq.vv v12, v10, v10
1819; ZVFH-NEXT:    vmfeq.vv v10, v8, v8
1820; ZVFH-NEXT:    vmand.mm v0, v10, v12
1821; ZVFH-NEXT:    ret
1822;
1823; ZVFHMIN-LABEL: fcmp_ord_vv_nxv8f16:
1824; ZVFHMIN:       # %bb.0:
1825; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1826; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1827; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1828; ZVFHMIN-NEXT:    vmfeq.vv v10, v12, v12
1829; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1830; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1831; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1832; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v12
1833; ZVFHMIN-NEXT:    vmand.mm v0, v8, v10
1834; ZVFHMIN-NEXT:    ret
1835  %vc = fcmp ord <vscale x 8 x half> %va, %vb
1836  ret <vscale x 8 x i1> %vc
1837}
1838
1839define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1840; ZVFH-LABEL: fcmp_ord_vf_nxv8f16:
1841; ZVFH:       # %bb.0:
1842; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1843; ZVFH-NEXT:    vfmv.v.f v10, fa0
1844; ZVFH-NEXT:    vmfeq.vf v12, v10, fa0
1845; ZVFH-NEXT:    vmfeq.vv v10, v8, v8
1846; ZVFH-NEXT:    vmand.mm v0, v10, v12
1847; ZVFH-NEXT:    ret
1848;
1849; ZVFHMIN-LABEL: fcmp_ord_vf_nxv8f16:
1850; ZVFHMIN:       # %bb.0:
1851; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1852; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1853; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1854; ZVFHMIN-NEXT:    vmv.v.x v8, a0
1855; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1856; ZVFHMIN-NEXT:    vmfeq.vv v10, v12, v12
1857; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1858; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1859; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1860; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v12
1861; ZVFHMIN-NEXT:    vmand.mm v0, v10, v8
1862; ZVFHMIN-NEXT:    ret
1863  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1864  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1865  %vc = fcmp ord <vscale x 8 x half> %va, %splat
1866  ret <vscale x 8 x i1> %vc
1867}
1868
1869define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
1870; ZVFH-LABEL: fcmp_ord_fv_nxv8f16:
1871; ZVFH:       # %bb.0:
1872; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1873; ZVFH-NEXT:    vfmv.v.f v10, fa0
1874; ZVFH-NEXT:    vmfeq.vf v12, v10, fa0
1875; ZVFH-NEXT:    vmfeq.vv v10, v8, v8
1876; ZVFH-NEXT:    vmand.mm v0, v12, v10
1877; ZVFH-NEXT:    ret
1878;
1879; ZVFHMIN-LABEL: fcmp_ord_fv_nxv8f16:
1880; ZVFHMIN:       # %bb.0:
1881; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1882; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1883; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1884; ZVFHMIN-NEXT:    vmv.v.x v8, a0
1885; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1886; ZVFHMIN-NEXT:    vmfeq.vv v10, v12, v12
1887; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1888; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1889; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1890; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v12
1891; ZVFHMIN-NEXT:    vmand.mm v0, v8, v10
1892; ZVFHMIN-NEXT:    ret
1893  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1894  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1895  %vc = fcmp ord <vscale x 8 x half> %splat, %va
1896  ret <vscale x 8 x i1> %vc
1897}
1898
1899define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
1900; ZVFH-LABEL: fcmp_ord_vv_nxv8f16_nonans:
1901; ZVFH:       # %bb.0:
1902; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1903; ZVFH-NEXT:    vmfeq.vv v12, v10, v10
1904; ZVFH-NEXT:    vmfeq.vv v10, v8, v8
1905; ZVFH-NEXT:    vmand.mm v0, v10, v12
1906; ZVFH-NEXT:    ret
1907;
1908; ZVFHMIN-LABEL: fcmp_ord_vv_nxv8f16_nonans:
1909; ZVFHMIN:       # %bb.0:
1910; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1911; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1912; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1913; ZVFHMIN-NEXT:    vmfeq.vv v10, v12, v12
1914; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1915; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1916; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1917; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v12
1918; ZVFHMIN-NEXT:    vmand.mm v0, v8, v10
1919; ZVFHMIN-NEXT:    ret
1920  %vc = fcmp ord <vscale x 8 x half> %va, %vb
1921  ret <vscale x 8 x i1> %vc
1922}
1923
1924define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
1925; ZVFH-LABEL: fcmp_ord_vf_nxv8f16_nonans:
1926; ZVFH:       # %bb.0:
1927; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1928; ZVFH-NEXT:    vfmv.v.f v10, fa0
1929; ZVFH-NEXT:    vmfeq.vf v12, v10, fa0
1930; ZVFH-NEXT:    vmfeq.vv v10, v8, v8
1931; ZVFH-NEXT:    vmand.mm v0, v10, v12
1932; ZVFH-NEXT:    ret
1933;
1934; ZVFHMIN-LABEL: fcmp_ord_vf_nxv8f16_nonans:
1935; ZVFHMIN:       # %bb.0:
1936; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1937; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1938; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1939; ZVFHMIN-NEXT:    vmv.v.x v8, a0
1940; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1941; ZVFHMIN-NEXT:    vmfeq.vv v10, v12, v12
1942; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1943; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1944; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1945; ZVFHMIN-NEXT:    vmfeq.vv v8, v12, v12
1946; ZVFHMIN-NEXT:    vmand.mm v0, v10, v8
1947; ZVFHMIN-NEXT:    ret
1948  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1949  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
1950  %vc = fcmp ord <vscale x 8 x half> %va, %splat
1951  ret <vscale x 8 x i1> %vc
1952}
1953
1954define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
1955; ZVFH-LABEL: fcmp_ueq_vv_nxv8f16:
1956; ZVFH:       # %bb.0:
1957; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1958; ZVFH-NEXT:    vmflt.vv v12, v8, v10
1959; ZVFH-NEXT:    vmflt.vv v13, v10, v8
1960; ZVFH-NEXT:    vmnor.mm v0, v13, v12
1961; ZVFH-NEXT:    ret
1962;
1963; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv8f16:
1964; ZVFHMIN:       # %bb.0:
1965; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1966; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
1967; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1968; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1969; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
1970; ZVFHMIN-NEXT:    vmflt.vv v9, v12, v16
1971; ZVFHMIN-NEXT:    vmnor.mm v0, v9, v8
1972; ZVFHMIN-NEXT:    ret
1973  %vc = fcmp ueq <vscale x 8 x half> %va, %vb
1974  ret <vscale x 8 x i1> %vc
1975}
1976
1977define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
1978; ZVFH-LABEL: fcmp_ueq_vf_nxv8f16:
1979; ZVFH:       # %bb.0:
1980; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
1981; ZVFH-NEXT:    vmflt.vf v10, v8, fa0
1982; ZVFH-NEXT:    vmfgt.vf v11, v8, fa0
1983; ZVFH-NEXT:    vmnor.mm v0, v11, v10
1984; ZVFH-NEXT:    ret
1985;
1986; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv8f16:
1987; ZVFHMIN:       # %bb.0:
1988; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
1989; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
1990; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
1991; ZVFHMIN-NEXT:    vmv.v.x v8, a0
1992; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
1993; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
1994; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v16
1995; ZVFHMIN-NEXT:    vmflt.vv v9, v16, v12
1996; ZVFHMIN-NEXT:    vmnor.mm v0, v9, v8
1997; ZVFHMIN-NEXT:    ret
1998  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
1999  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2000  %vc = fcmp ueq <vscale x 8 x half> %va, %splat
2001  ret <vscale x 8 x i1> %vc
2002}
2003
2004define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
2005; ZVFH-LABEL: fcmp_ueq_fv_nxv8f16:
2006; ZVFH:       # %bb.0:
2007; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2008; ZVFH-NEXT:    vmfgt.vf v10, v8, fa0
2009; ZVFH-NEXT:    vmflt.vf v11, v8, fa0
2010; ZVFH-NEXT:    vmnor.mm v0, v11, v10
2011; ZVFH-NEXT:    ret
2012;
2013; ZVFHMIN-LABEL: fcmp_ueq_fv_nxv8f16:
2014; ZVFHMIN:       # %bb.0:
2015; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2016; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2017; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2018; ZVFHMIN-NEXT:    vmv.v.x v8, a0
2019; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2020; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2021; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
2022; ZVFHMIN-NEXT:    vmflt.vv v9, v12, v16
2023; ZVFHMIN-NEXT:    vmnor.mm v0, v9, v8
2024; ZVFHMIN-NEXT:    ret
2025  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2026  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2027  %vc = fcmp ueq <vscale x 8 x half> %splat, %va
2028  ret <vscale x 8 x i1> %vc
2029}
2030
2031define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
2032; ZVFH-LABEL: fcmp_ueq_vv_nxv8f16_nonans:
2033; ZVFH:       # %bb.0:
2034; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2035; ZVFH-NEXT:    vmfeq.vv v0, v8, v10
2036; ZVFH-NEXT:    ret
2037;
2038; ZVFHMIN-LABEL: fcmp_ueq_vv_nxv8f16_nonans:
2039; ZVFHMIN:       # %bb.0:
2040; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2041; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2042; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2043; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2044; ZVFHMIN-NEXT:    vmfeq.vv v0, v16, v12
2045; ZVFHMIN-NEXT:    ret
2046  %vc = fcmp ueq <vscale x 8 x half> %va, %vb
2047  ret <vscale x 8 x i1> %vc
2048}
2049
2050define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
2051; ZVFH-LABEL: fcmp_ueq_vf_nxv8f16_nonans:
2052; ZVFH:       # %bb.0:
2053; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2054; ZVFH-NEXT:    vmfeq.vf v0, v8, fa0
2055; ZVFH-NEXT:    ret
2056;
2057; ZVFHMIN-LABEL: fcmp_ueq_vf_nxv8f16_nonans:
2058; ZVFHMIN:       # %bb.0:
2059; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2060; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2061; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2062; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2063; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2064; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2065; ZVFHMIN-NEXT:    vmfeq.vv v0, v12, v16
2066; ZVFHMIN-NEXT:    ret
2067  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2068  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2069  %vc = fcmp ueq <vscale x 8 x half> %va, %splat
2070  ret <vscale x 8 x i1> %vc
2071}
2072
2073define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
2074; ZVFH-LABEL: fcmp_ugt_vv_nxv8f16:
2075; ZVFH:       # %bb.0:
2076; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2077; ZVFH-NEXT:    vmfle.vv v12, v8, v10
2078; ZVFH-NEXT:    vmnot.m v0, v12
2079; ZVFH-NEXT:    ret
2080;
2081; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv8f16:
2082; ZVFHMIN:       # %bb.0:
2083; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2084; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2085; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2086; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2087; ZVFHMIN-NEXT:    vmfle.vv v8, v16, v12
2088; ZVFHMIN-NEXT:    vmnot.m v0, v8
2089; ZVFHMIN-NEXT:    ret
2090  %vc = fcmp ugt <vscale x 8 x half> %va, %vb
2091  ret <vscale x 8 x i1> %vc
2092}
2093
2094define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
2095; ZVFH-LABEL: fcmp_ugt_vf_nxv8f16:
2096; ZVFH:       # %bb.0:
2097; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2098; ZVFH-NEXT:    vmfle.vf v10, v8, fa0
2099; ZVFH-NEXT:    vmnot.m v0, v10
2100; ZVFH-NEXT:    ret
2101;
2102; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv8f16:
2103; ZVFHMIN:       # %bb.0:
2104; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2105; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2106; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2107; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2108; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2109; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2110; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v16
2111; ZVFHMIN-NEXT:    vmnot.m v0, v8
2112; ZVFHMIN-NEXT:    ret
2113  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2114  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2115  %vc = fcmp ugt <vscale x 8 x half> %va, %splat
2116  ret <vscale x 8 x i1> %vc
2117}
2118
2119define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
2120; ZVFH-LABEL: fcmp_ugt_fv_nxv8f16:
2121; ZVFH:       # %bb.0:
2122; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2123; ZVFH-NEXT:    vmfge.vf v10, v8, fa0
2124; ZVFH-NEXT:    vmnot.m v0, v10
2125; ZVFH-NEXT:    ret
2126;
2127; ZVFHMIN-LABEL: fcmp_ugt_fv_nxv8f16:
2128; ZVFHMIN:       # %bb.0:
2129; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2130; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2131; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2132; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2133; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2134; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2135; ZVFHMIN-NEXT:    vmfle.vv v8, v16, v12
2136; ZVFHMIN-NEXT:    vmnot.m v0, v8
2137; ZVFHMIN-NEXT:    ret
2138  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2139  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2140  %vc = fcmp ugt <vscale x 8 x half> %splat, %va
2141  ret <vscale x 8 x i1> %vc
2142}
2143
2144define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
2145; ZVFH-LABEL: fcmp_ugt_vv_nxv8f16_nonans:
2146; ZVFH:       # %bb.0:
2147; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2148; ZVFH-NEXT:    vmflt.vv v0, v10, v8
2149; ZVFH-NEXT:    ret
2150;
2151; ZVFHMIN-LABEL: fcmp_ugt_vv_nxv8f16_nonans:
2152; ZVFHMIN:       # %bb.0:
2153; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2154; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2155; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2156; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2157; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
2158; ZVFHMIN-NEXT:    ret
2159  %vc = fcmp ugt <vscale x 8 x half> %va, %vb
2160  ret <vscale x 8 x i1> %vc
2161}
2162
2163define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
2164; ZVFH-LABEL: fcmp_ugt_vf_nxv8f16_nonans:
2165; ZVFH:       # %bb.0:
2166; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2167; ZVFH-NEXT:    vmfgt.vf v0, v8, fa0
2168; ZVFH-NEXT:    ret
2169;
2170; ZVFHMIN-LABEL: fcmp_ugt_vf_nxv8f16_nonans:
2171; ZVFHMIN:       # %bb.0:
2172; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2173; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2174; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2175; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2176; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2177; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2178; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
2179; ZVFHMIN-NEXT:    ret
2180  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2181  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2182  %vc = fcmp ugt <vscale x 8 x half> %va, %splat
2183  ret <vscale x 8 x i1> %vc
2184}
2185
2186define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
2187; ZVFH-LABEL: fcmp_uge_vv_nxv8f16:
2188; ZVFH:       # %bb.0:
2189; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2190; ZVFH-NEXT:    vmflt.vv v12, v8, v10
2191; ZVFH-NEXT:    vmnot.m v0, v12
2192; ZVFH-NEXT:    ret
2193;
2194; ZVFHMIN-LABEL: fcmp_uge_vv_nxv8f16:
2195; ZVFHMIN:       # %bb.0:
2196; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2197; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2198; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2199; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2200; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
2201; ZVFHMIN-NEXT:    vmnot.m v0, v8
2202; ZVFHMIN-NEXT:    ret
2203  %vc = fcmp uge <vscale x 8 x half> %va, %vb
2204  ret <vscale x 8 x i1> %vc
2205}
2206
2207define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
2208; ZVFH-LABEL: fcmp_uge_vf_nxv8f16:
2209; ZVFH:       # %bb.0:
2210; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2211; ZVFH-NEXT:    vmflt.vf v10, v8, fa0
2212; ZVFH-NEXT:    vmnot.m v0, v10
2213; ZVFH-NEXT:    ret
2214;
2215; ZVFHMIN-LABEL: fcmp_uge_vf_nxv8f16:
2216; ZVFHMIN:       # %bb.0:
2217; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2218; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2219; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2220; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2221; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2222; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2223; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v16
2224; ZVFHMIN-NEXT:    vmnot.m v0, v8
2225; ZVFHMIN-NEXT:    ret
2226  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2227  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2228  %vc = fcmp uge <vscale x 8 x half> %va, %splat
2229  ret <vscale x 8 x i1> %vc
2230}
2231
2232define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
2233; ZVFH-LABEL: fcmp_uge_fv_nxv8f16:
2234; ZVFH:       # %bb.0:
2235; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2236; ZVFH-NEXT:    vmfgt.vf v10, v8, fa0
2237; ZVFH-NEXT:    vmnot.m v0, v10
2238; ZVFH-NEXT:    ret
2239;
2240; ZVFHMIN-LABEL: fcmp_uge_fv_nxv8f16:
2241; ZVFHMIN:       # %bb.0:
2242; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2243; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2244; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2245; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2246; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2247; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2248; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
2249; ZVFHMIN-NEXT:    vmnot.m v0, v8
2250; ZVFHMIN-NEXT:    ret
2251  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2252  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2253  %vc = fcmp uge <vscale x 8 x half> %splat, %va
2254  ret <vscale x 8 x i1> %vc
2255}
2256
2257define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
2258; ZVFH-LABEL: fcmp_uge_vv_nxv8f16_nonans:
2259; ZVFH:       # %bb.0:
2260; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2261; ZVFH-NEXT:    vmfle.vv v0, v10, v8
2262; ZVFH-NEXT:    ret
2263;
2264; ZVFHMIN-LABEL: fcmp_uge_vv_nxv8f16_nonans:
2265; ZVFHMIN:       # %bb.0:
2266; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2267; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2268; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2269; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2270; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
2271; ZVFHMIN-NEXT:    ret
2272  %vc = fcmp uge <vscale x 8 x half> %va, %vb
2273  ret <vscale x 8 x i1> %vc
2274}
2275
2276define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
2277; ZVFH-LABEL: fcmp_uge_vf_nxv8f16_nonans:
2278; ZVFH:       # %bb.0:
2279; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2280; ZVFH-NEXT:    vmfge.vf v0, v8, fa0
2281; ZVFH-NEXT:    ret
2282;
2283; ZVFHMIN-LABEL: fcmp_uge_vf_nxv8f16_nonans:
2284; ZVFHMIN:       # %bb.0:
2285; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2286; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2287; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2288; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2289; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2290; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2291; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
2292; ZVFHMIN-NEXT:    ret
2293  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2294  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2295  %vc = fcmp uge <vscale x 8 x half> %va, %splat
2296  ret <vscale x 8 x i1> %vc
2297}
2298
2299define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
2300; ZVFH-LABEL: fcmp_ult_vv_nxv8f16:
2301; ZVFH:       # %bb.0:
2302; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2303; ZVFH-NEXT:    vmfle.vv v12, v10, v8
2304; ZVFH-NEXT:    vmnot.m v0, v12
2305; ZVFH-NEXT:    ret
2306;
2307; ZVFHMIN-LABEL: fcmp_ult_vv_nxv8f16:
2308; ZVFHMIN:       # %bb.0:
2309; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2310; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2311; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2312; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2313; ZVFHMIN-NEXT:    vmfle.vv v8, v16, v12
2314; ZVFHMIN-NEXT:    vmnot.m v0, v8
2315; ZVFHMIN-NEXT:    ret
2316  %vc = fcmp ult <vscale x 8 x half> %va, %vb
2317  ret <vscale x 8 x i1> %vc
2318}
2319
2320define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
2321; ZVFH-LABEL: fcmp_ult_vf_nxv8f16:
2322; ZVFH:       # %bb.0:
2323; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2324; ZVFH-NEXT:    vmfge.vf v10, v8, fa0
2325; ZVFH-NEXT:    vmnot.m v0, v10
2326; ZVFH-NEXT:    ret
2327;
2328; ZVFHMIN-LABEL: fcmp_ult_vf_nxv8f16:
2329; ZVFHMIN:       # %bb.0:
2330; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2331; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2332; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2333; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2334; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2335; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2336; ZVFHMIN-NEXT:    vmfle.vv v8, v16, v12
2337; ZVFHMIN-NEXT:    vmnot.m v0, v8
2338; ZVFHMIN-NEXT:    ret
2339  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2340  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2341  %vc = fcmp ult <vscale x 8 x half> %va, %splat
2342  ret <vscale x 8 x i1> %vc
2343}
2344
2345define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
2346; ZVFH-LABEL: fcmp_ult_fv_nxv8f16:
2347; ZVFH:       # %bb.0:
2348; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2349; ZVFH-NEXT:    vmfle.vf v10, v8, fa0
2350; ZVFH-NEXT:    vmnot.m v0, v10
2351; ZVFH-NEXT:    ret
2352;
2353; ZVFHMIN-LABEL: fcmp_ult_fv_nxv8f16:
2354; ZVFHMIN:       # %bb.0:
2355; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2356; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2357; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2358; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2359; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2360; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2361; ZVFHMIN-NEXT:    vmfle.vv v8, v12, v16
2362; ZVFHMIN-NEXT:    vmnot.m v0, v8
2363; ZVFHMIN-NEXT:    ret
2364  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2365  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2366  %vc = fcmp ult <vscale x 8 x half> %splat, %va
2367  ret <vscale x 8 x i1> %vc
2368}
2369
2370define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
2371; ZVFH-LABEL: fcmp_ult_vv_nxv8f16_nonans:
2372; ZVFH:       # %bb.0:
2373; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2374; ZVFH-NEXT:    vmflt.vv v0, v8, v10
2375; ZVFH-NEXT:    ret
2376;
2377; ZVFHMIN-LABEL: fcmp_ult_vv_nxv8f16_nonans:
2378; ZVFHMIN:       # %bb.0:
2379; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2380; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2381; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2382; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2383; ZVFHMIN-NEXT:    vmflt.vv v0, v16, v12
2384; ZVFHMIN-NEXT:    ret
2385  %vc = fcmp ult <vscale x 8 x half> %va, %vb
2386  ret <vscale x 8 x i1> %vc
2387}
2388
2389define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
2390; ZVFH-LABEL: fcmp_ult_vf_nxv8f16_nonans:
2391; ZVFH:       # %bb.0:
2392; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2393; ZVFH-NEXT:    vmflt.vf v0, v8, fa0
2394; ZVFH-NEXT:    ret
2395;
2396; ZVFHMIN-LABEL: fcmp_ult_vf_nxv8f16_nonans:
2397; ZVFHMIN:       # %bb.0:
2398; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2399; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2400; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2401; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2402; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2403; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2404; ZVFHMIN-NEXT:    vmflt.vv v0, v12, v16
2405; ZVFHMIN-NEXT:    ret
2406  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2407  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2408  %vc = fcmp ult <vscale x 8 x half> %va, %splat
2409  ret <vscale x 8 x i1> %vc
2410}
2411
2412define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
2413; ZVFH-LABEL: fcmp_ule_vv_nxv8f16:
2414; ZVFH:       # %bb.0:
2415; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2416; ZVFH-NEXT:    vmflt.vv v12, v10, v8
2417; ZVFH-NEXT:    vmnot.m v0, v12
2418; ZVFH-NEXT:    ret
2419;
2420; ZVFHMIN-LABEL: fcmp_ule_vv_nxv8f16:
2421; ZVFHMIN:       # %bb.0:
2422; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2423; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2424; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2425; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2426; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
2427; ZVFHMIN-NEXT:    vmnot.m v0, v8
2428; ZVFHMIN-NEXT:    ret
2429  %vc = fcmp ule <vscale x 8 x half> %va, %vb
2430  ret <vscale x 8 x i1> %vc
2431}
2432
2433define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
2434; ZVFH-LABEL: fcmp_ule_vf_nxv8f16:
2435; ZVFH:       # %bb.0:
2436; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2437; ZVFH-NEXT:    vmfgt.vf v10, v8, fa0
2438; ZVFH-NEXT:    vmnot.m v0, v10
2439; ZVFH-NEXT:    ret
2440;
2441; ZVFHMIN-LABEL: fcmp_ule_vf_nxv8f16:
2442; ZVFHMIN:       # %bb.0:
2443; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2444; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2445; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2446; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2447; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2448; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2449; ZVFHMIN-NEXT:    vmflt.vv v8, v16, v12
2450; ZVFHMIN-NEXT:    vmnot.m v0, v8
2451; ZVFHMIN-NEXT:    ret
2452  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2453  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2454  %vc = fcmp ule <vscale x 8 x half> %va, %splat
2455  ret <vscale x 8 x i1> %vc
2456}
2457
2458define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
2459; ZVFH-LABEL: fcmp_ule_fv_nxv8f16:
2460; ZVFH:       # %bb.0:
2461; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2462; ZVFH-NEXT:    vmflt.vf v10, v8, fa0
2463; ZVFH-NEXT:    vmnot.m v0, v10
2464; ZVFH-NEXT:    ret
2465;
2466; ZVFHMIN-LABEL: fcmp_ule_fv_nxv8f16:
2467; ZVFHMIN:       # %bb.0:
2468; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2469; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2470; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2471; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2472; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2473; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2474; ZVFHMIN-NEXT:    vmflt.vv v8, v12, v16
2475; ZVFHMIN-NEXT:    vmnot.m v0, v8
2476; ZVFHMIN-NEXT:    ret
2477  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2478  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2479  %vc = fcmp ule <vscale x 8 x half> %splat, %va
2480  ret <vscale x 8 x i1> %vc
2481}
2482
2483define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
2484; ZVFH-LABEL: fcmp_ule_vv_nxv8f16_nonans:
2485; ZVFH:       # %bb.0:
2486; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2487; ZVFH-NEXT:    vmfle.vv v0, v8, v10
2488; ZVFH-NEXT:    ret
2489;
2490; ZVFHMIN-LABEL: fcmp_ule_vv_nxv8f16_nonans:
2491; ZVFHMIN:       # %bb.0:
2492; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2493; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2494; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2495; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2496; ZVFHMIN-NEXT:    vmfle.vv v0, v16, v12
2497; ZVFHMIN-NEXT:    ret
2498  %vc = fcmp ule <vscale x 8 x half> %va, %vb
2499  ret <vscale x 8 x i1> %vc
2500}
2501
2502define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
2503; ZVFH-LABEL: fcmp_ule_vf_nxv8f16_nonans:
2504; ZVFH:       # %bb.0:
2505; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2506; ZVFH-NEXT:    vmfle.vf v0, v8, fa0
2507; ZVFH-NEXT:    ret
2508;
2509; ZVFHMIN-LABEL: fcmp_ule_vf_nxv8f16_nonans:
2510; ZVFHMIN:       # %bb.0:
2511; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2512; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2513; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2514; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2515; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2516; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2517; ZVFHMIN-NEXT:    vmfle.vv v0, v12, v16
2518; ZVFHMIN-NEXT:    ret
2519  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2520  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2521  %vc = fcmp ule <vscale x 8 x half> %va, %splat
2522  ret <vscale x 8 x i1> %vc
2523}
2524
2525define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
2526; ZVFH-LABEL: fcmp_une_vv_nxv8f16:
2527; ZVFH:       # %bb.0:
2528; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2529; ZVFH-NEXT:    vmfne.vv v0, v8, v10
2530; ZVFH-NEXT:    ret
2531;
2532; ZVFHMIN-LABEL: fcmp_une_vv_nxv8f16:
2533; ZVFHMIN:       # %bb.0:
2534; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2535; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2536; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2537; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2538; ZVFHMIN-NEXT:    vmfne.vv v0, v16, v12
2539; ZVFHMIN-NEXT:    ret
2540  %vc = fcmp une <vscale x 8 x half> %va, %vb
2541  ret <vscale x 8 x i1> %vc
2542}
2543
2544define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
2545; ZVFH-LABEL: fcmp_une_vf_nxv8f16:
2546; ZVFH:       # %bb.0:
2547; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2548; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
2549; ZVFH-NEXT:    ret
2550;
2551; ZVFHMIN-LABEL: fcmp_une_vf_nxv8f16:
2552; ZVFHMIN:       # %bb.0:
2553; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2554; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2555; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2556; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2557; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2558; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2559; ZVFHMIN-NEXT:    vmfne.vv v0, v12, v16
2560; ZVFHMIN-NEXT:    ret
2561  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2562  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2563  %vc = fcmp une <vscale x 8 x half> %va, %splat
2564  ret <vscale x 8 x i1> %vc
2565}
2566
2567define <vscale x 8 x i1> @fcmp_une_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
2568; ZVFH-LABEL: fcmp_une_fv_nxv8f16:
2569; ZVFH:       # %bb.0:
2570; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2571; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
2572; ZVFH-NEXT:    ret
2573;
2574; ZVFHMIN-LABEL: fcmp_une_fv_nxv8f16:
2575; ZVFHMIN:       # %bb.0:
2576; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2577; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2578; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2579; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2580; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2581; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2582; ZVFHMIN-NEXT:    vmfne.vv v0, v16, v12
2583; ZVFHMIN-NEXT:    ret
2584  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2585  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2586  %vc = fcmp une <vscale x 8 x half> %splat, %va
2587  ret <vscale x 8 x i1> %vc
2588}
2589
2590define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
2591; ZVFH-LABEL: fcmp_une_vv_nxv8f16_nonans:
2592; ZVFH:       # %bb.0:
2593; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2594; ZVFH-NEXT:    vmfne.vv v0, v8, v10
2595; ZVFH-NEXT:    ret
2596;
2597; ZVFHMIN-LABEL: fcmp_une_vv_nxv8f16_nonans:
2598; ZVFHMIN:       # %bb.0:
2599; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2600; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2601; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8
2602; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2603; ZVFHMIN-NEXT:    vmfne.vv v0, v16, v12
2604; ZVFHMIN-NEXT:    ret
2605  %vc = fcmp une <vscale x 8 x half> %va, %vb
2606  ret <vscale x 8 x i1> %vc
2607}
2608
2609define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
2610; ZVFH-LABEL: fcmp_une_vf_nxv8f16_nonans:
2611; ZVFH:       # %bb.0:
2612; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2613; ZVFH-NEXT:    vmfne.vf v0, v8, fa0
2614; ZVFH-NEXT:    ret
2615;
2616; ZVFHMIN-LABEL: fcmp_une_vf_nxv8f16_nonans:
2617; ZVFHMIN:       # %bb.0:
2618; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2619; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2620; ZVFHMIN-NEXT:    vmv.v.x v10, a0
2621; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2622; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v10
2623; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2624; ZVFHMIN-NEXT:    vmfne.vv v0, v12, v16
2625; ZVFHMIN-NEXT:    ret
2626  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2627  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2628  %vc = fcmp une <vscale x 8 x half> %va, %splat
2629  ret <vscale x 8 x i1> %vc
2630}
2631
2632define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
2633; ZVFH-LABEL: fcmp_uno_vv_nxv8f16:
2634; ZVFH:       # %bb.0:
2635; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2636; ZVFH-NEXT:    vmfne.vv v12, v10, v10
2637; ZVFH-NEXT:    vmfne.vv v10, v8, v8
2638; ZVFH-NEXT:    vmor.mm v0, v10, v12
2639; ZVFH-NEXT:    ret
2640;
2641; ZVFHMIN-LABEL: fcmp_uno_vv_nxv8f16:
2642; ZVFHMIN:       # %bb.0:
2643; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2644; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2645; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2646; ZVFHMIN-NEXT:    vmfne.vv v10, v12, v12
2647; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2648; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2649; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2650; ZVFHMIN-NEXT:    vmfne.vv v8, v12, v12
2651; ZVFHMIN-NEXT:    vmor.mm v0, v8, v10
2652; ZVFHMIN-NEXT:    ret
2653  %vc = fcmp uno <vscale x 8 x half> %va, %vb
2654  ret <vscale x 8 x i1> %vc
2655}
2656
2657define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
2658; ZVFH-LABEL: fcmp_uno_vf_nxv8f16:
2659; ZVFH:       # %bb.0:
2660; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2661; ZVFH-NEXT:    vfmv.v.f v10, fa0
2662; ZVFH-NEXT:    vmfne.vf v12, v10, fa0
2663; ZVFH-NEXT:    vmfne.vv v10, v8, v8
2664; ZVFH-NEXT:    vmor.mm v0, v10, v12
2665; ZVFH-NEXT:    ret
2666;
2667; ZVFHMIN-LABEL: fcmp_uno_vf_nxv8f16:
2668; ZVFHMIN:       # %bb.0:
2669; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2670; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2671; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2672; ZVFHMIN-NEXT:    vmv.v.x v8, a0
2673; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2674; ZVFHMIN-NEXT:    vmfne.vv v10, v12, v12
2675; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2676; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2677; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2678; ZVFHMIN-NEXT:    vmfne.vv v8, v12, v12
2679; ZVFHMIN-NEXT:    vmor.mm v0, v10, v8
2680; ZVFHMIN-NEXT:    ret
2681  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2682  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2683  %vc = fcmp uno <vscale x 8 x half> %va, %splat
2684  ret <vscale x 8 x i1> %vc
2685}
2686
2687define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
2688; ZVFH-LABEL: fcmp_uno_fv_nxv8f16:
2689; ZVFH:       # %bb.0:
2690; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2691; ZVFH-NEXT:    vfmv.v.f v10, fa0
2692; ZVFH-NEXT:    vmfne.vf v12, v10, fa0
2693; ZVFH-NEXT:    vmfne.vv v10, v8, v8
2694; ZVFH-NEXT:    vmor.mm v0, v12, v10
2695; ZVFH-NEXT:    ret
2696;
2697; ZVFHMIN-LABEL: fcmp_uno_fv_nxv8f16:
2698; ZVFHMIN:       # %bb.0:
2699; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2700; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2701; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2702; ZVFHMIN-NEXT:    vmv.v.x v8, a0
2703; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2704; ZVFHMIN-NEXT:    vmfne.vv v10, v12, v12
2705; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2706; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2707; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2708; ZVFHMIN-NEXT:    vmfne.vv v8, v12, v12
2709; ZVFHMIN-NEXT:    vmor.mm v0, v8, v10
2710; ZVFHMIN-NEXT:    ret
2711  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2712  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2713  %vc = fcmp uno <vscale x 8 x half> %splat, %va
2714  ret <vscale x 8 x i1> %vc
2715}
2716
2717define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
2718; ZVFH-LABEL: fcmp_uno_vv_nxv8f16_nonans:
2719; ZVFH:       # %bb.0:
2720; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2721; ZVFH-NEXT:    vmfne.vv v12, v10, v10
2722; ZVFH-NEXT:    vmfne.vv v10, v8, v8
2723; ZVFH-NEXT:    vmor.mm v0, v10, v12
2724; ZVFH-NEXT:    ret
2725;
2726; ZVFHMIN-LABEL: fcmp_uno_vv_nxv8f16_nonans:
2727; ZVFHMIN:       # %bb.0:
2728; ZVFHMIN-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2729; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10
2730; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2731; ZVFHMIN-NEXT:    vmfne.vv v10, v12, v12
2732; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2733; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2734; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2735; ZVFHMIN-NEXT:    vmfne.vv v8, v12, v12
2736; ZVFHMIN-NEXT:    vmor.mm v0, v8, v10
2737; ZVFHMIN-NEXT:    ret
2738  %vc = fcmp uno <vscale x 8 x half> %va, %vb
2739  ret <vscale x 8 x i1> %vc
2740}
2741
2742define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
2743; ZVFH-LABEL: fcmp_uno_vf_nxv8f16_nonans:
2744; ZVFH:       # %bb.0:
2745; ZVFH-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
2746; ZVFH-NEXT:    vfmv.v.f v10, fa0
2747; ZVFH-NEXT:    vmfne.vf v12, v10, fa0
2748; ZVFH-NEXT:    vmfne.vv v10, v8, v8
2749; ZVFH-NEXT:    vmor.mm v0, v10, v12
2750; ZVFH-NEXT:    ret
2751;
2752; ZVFHMIN-LABEL: fcmp_uno_vf_nxv8f16_nonans:
2753; ZVFHMIN:       # %bb.0:
2754; ZVFHMIN-NEXT:    fmv.x.h a0, fa0
2755; ZVFHMIN-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
2756; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2757; ZVFHMIN-NEXT:    vmv.v.x v8, a0
2758; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2759; ZVFHMIN-NEXT:    vmfne.vv v10, v12, v12
2760; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2761; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8
2762; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2763; ZVFHMIN-NEXT:    vmfne.vv v8, v12, v12
2764; ZVFHMIN-NEXT:    vmor.mm v0, v10, v8
2765; ZVFHMIN-NEXT:    ret
2766  %head = insertelement <vscale x 8 x half> poison, half %b, i32 0
2767  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
2768  %vc = fcmp uno <vscale x 8 x half> %va, %splat
2769  ret <vscale x 8 x i1> %vc
2770}
2771
2772define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2773; CHECK-LABEL: fcmp_oeq_vv_nxv8f32:
2774; CHECK:       # %bb.0:
2775; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2776; CHECK-NEXT:    vmfeq.vv v0, v8, v12
2777; CHECK-NEXT:    ret
2778  %vc = fcmp oeq <vscale x 8 x float> %va, %vb
2779  ret <vscale x 8 x i1> %vc
2780}
2781
2782define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2783; CHECK-LABEL: fcmp_oeq_vf_nxv8f32:
2784; CHECK:       # %bb.0:
2785; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2786; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2787; CHECK-NEXT:    ret
2788  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2789  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2790  %vc = fcmp oeq <vscale x 8 x float> %va, %splat
2791  ret <vscale x 8 x i1> %vc
2792}
2793
2794define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2795; CHECK-LABEL: fcmp_oeq_fv_nxv8f32:
2796; CHECK:       # %bb.0:
2797; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2798; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2799; CHECK-NEXT:    ret
2800  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2801  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2802  %vc = fcmp oeq <vscale x 8 x float> %splat, %va
2803  ret <vscale x 8 x i1> %vc
2804}
2805
2806define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2807; CHECK-LABEL: fcmp_oeq_vv_nxv8f32_nonans:
2808; CHECK:       # %bb.0:
2809; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2810; CHECK-NEXT:    vmfeq.vv v0, v8, v12
2811; CHECK-NEXT:    ret
2812  %vc = fcmp oeq <vscale x 8 x float> %va, %vb
2813  ret <vscale x 8 x i1> %vc
2814}
2815
2816define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2817; CHECK-LABEL: fcmp_oeq_vf_nxv8f32_nonans:
2818; CHECK:       # %bb.0:
2819; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2820; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2821; CHECK-NEXT:    ret
2822  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2823  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2824  %vc = fcmp oeq <vscale x 8 x float> %va, %splat
2825  ret <vscale x 8 x i1> %vc
2826}
2827
2828define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2829; CHECK-LABEL: fcmp_ogt_vv_nxv8f32:
2830; CHECK:       # %bb.0:
2831; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2832; CHECK-NEXT:    vmflt.vv v0, v12, v8
2833; CHECK-NEXT:    ret
2834  %vc = fcmp ogt <vscale x 8 x float> %va, %vb
2835  ret <vscale x 8 x i1> %vc
2836}
2837
2838define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2839; CHECK-LABEL: fcmp_ogt_vf_nxv8f32:
2840; CHECK:       # %bb.0:
2841; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2842; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2843; CHECK-NEXT:    ret
2844  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2845  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2846  %vc = fcmp ogt <vscale x 8 x float> %va, %splat
2847  ret <vscale x 8 x i1> %vc
2848}
2849
2850define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2851; CHECK-LABEL: fcmp_ogt_fv_nxv8f32:
2852; CHECK:       # %bb.0:
2853; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2854; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2855; CHECK-NEXT:    ret
2856  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2857  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2858  %vc = fcmp ogt <vscale x 8 x float> %splat, %va
2859  ret <vscale x 8 x i1> %vc
2860}
2861
2862define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2863; CHECK-LABEL: fcmp_ogt_vv_nxv8f32_nonans:
2864; CHECK:       # %bb.0:
2865; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2866; CHECK-NEXT:    vmflt.vv v0, v12, v8
2867; CHECK-NEXT:    ret
2868  %vc = fcmp ogt <vscale x 8 x float> %va, %vb
2869  ret <vscale x 8 x i1> %vc
2870}
2871
2872define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2873; CHECK-LABEL: fcmp_ogt_vf_nxv8f32_nonans:
2874; CHECK:       # %bb.0:
2875; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2876; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2877; CHECK-NEXT:    ret
2878  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2879  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2880  %vc = fcmp ogt <vscale x 8 x float> %va, %splat
2881  ret <vscale x 8 x i1> %vc
2882}
2883
2884define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2885; CHECK-LABEL: fcmp_oge_vv_nxv8f32:
2886; CHECK:       # %bb.0:
2887; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2888; CHECK-NEXT:    vmfle.vv v0, v12, v8
2889; CHECK-NEXT:    ret
2890  %vc = fcmp oge <vscale x 8 x float> %va, %vb
2891  ret <vscale x 8 x i1> %vc
2892}
2893
2894define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2895; CHECK-LABEL: fcmp_oge_vf_nxv8f32:
2896; CHECK:       # %bb.0:
2897; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2898; CHECK-NEXT:    vmfge.vf v0, v8, fa0
2899; CHECK-NEXT:    ret
2900  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2901  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2902  %vc = fcmp oge <vscale x 8 x float> %va, %splat
2903  ret <vscale x 8 x i1> %vc
2904}
2905
2906define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2907; CHECK-LABEL: fcmp_oge_fv_nxv8f32:
2908; CHECK:       # %bb.0:
2909; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2910; CHECK-NEXT:    vmfle.vf v0, v8, fa0
2911; CHECK-NEXT:    ret
2912  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2913  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2914  %vc = fcmp oge <vscale x 8 x float> %splat, %va
2915  ret <vscale x 8 x i1> %vc
2916}
2917
2918define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2919; CHECK-LABEL: fcmp_oge_vv_nxv8f32_nonans:
2920; CHECK:       # %bb.0:
2921; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2922; CHECK-NEXT:    vmfle.vv v0, v12, v8
2923; CHECK-NEXT:    ret
2924  %vc = fcmp oge <vscale x 8 x float> %va, %vb
2925  ret <vscale x 8 x i1> %vc
2926}
2927
2928define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2929; CHECK-LABEL: fcmp_oge_vf_nxv8f32_nonans:
2930; CHECK:       # %bb.0:
2931; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2932; CHECK-NEXT:    vmfge.vf v0, v8, fa0
2933; CHECK-NEXT:    ret
2934  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2935  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2936  %vc = fcmp oge <vscale x 8 x float> %va, %splat
2937  ret <vscale x 8 x i1> %vc
2938}
2939
2940define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2941; CHECK-LABEL: fcmp_olt_vv_nxv8f32:
2942; CHECK:       # %bb.0:
2943; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2944; CHECK-NEXT:    vmflt.vv v0, v8, v12
2945; CHECK-NEXT:    ret
2946  %vc = fcmp olt <vscale x 8 x float> %va, %vb
2947  ret <vscale x 8 x i1> %vc
2948}
2949
2950define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
2951; CHECK-LABEL: fcmp_olt_vf_nxv8f32:
2952; CHECK:       # %bb.0:
2953; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2954; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2955; CHECK-NEXT:    ret
2956  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2957  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2958  %vc = fcmp olt <vscale x 8 x float> %va, %splat
2959  ret <vscale x 8 x i1> %vc
2960}
2961
2962define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
2963; CHECK-LABEL: fcmp_olt_fv_nxv8f32:
2964; CHECK:       # %bb.0:
2965; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2966; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2967; CHECK-NEXT:    ret
2968  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2969  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2970  %vc = fcmp olt <vscale x 8 x float> %splat, %va
2971  ret <vscale x 8 x i1> %vc
2972}
2973
2974define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
2975; CHECK-LABEL: fcmp_olt_vv_nxv8f32_nonans:
2976; CHECK:       # %bb.0:
2977; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2978; CHECK-NEXT:    vmflt.vv v0, v8, v12
2979; CHECK-NEXT:    ret
2980  %vc = fcmp olt <vscale x 8 x float> %va, %vb
2981  ret <vscale x 8 x i1> %vc
2982}
2983
2984define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
2985; CHECK-LABEL: fcmp_olt_vf_nxv8f32_nonans:
2986; CHECK:       # %bb.0:
2987; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
2988; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2989; CHECK-NEXT:    ret
2990  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
2991  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
2992  %vc = fcmp olt <vscale x 8 x float> %va, %splat
2993  ret <vscale x 8 x i1> %vc
2994}
2995
2996define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
2997; CHECK-LABEL: fcmp_ole_vv_nxv8f32:
2998; CHECK:       # %bb.0:
2999; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3000; CHECK-NEXT:    vmfle.vv v0, v8, v12
3001; CHECK-NEXT:    ret
3002  %vc = fcmp ole <vscale x 8 x float> %va, %vb
3003  ret <vscale x 8 x i1> %vc
3004}
3005
3006define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3007; CHECK-LABEL: fcmp_ole_vf_nxv8f32:
3008; CHECK:       # %bb.0:
3009; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3010; CHECK-NEXT:    vmfle.vf v0, v8, fa0
3011; CHECK-NEXT:    ret
3012  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3013  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3014  %vc = fcmp ole <vscale x 8 x float> %va, %splat
3015  ret <vscale x 8 x i1> %vc
3016}
3017
3018define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3019; CHECK-LABEL: fcmp_ole_fv_nxv8f32:
3020; CHECK:       # %bb.0:
3021; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3022; CHECK-NEXT:    vmfge.vf v0, v8, fa0
3023; CHECK-NEXT:    ret
3024  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3025  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3026  %vc = fcmp ole <vscale x 8 x float> %splat, %va
3027  ret <vscale x 8 x i1> %vc
3028}
3029
3030define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3031; CHECK-LABEL: fcmp_ole_vv_nxv8f32_nonans:
3032; CHECK:       # %bb.0:
3033; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3034; CHECK-NEXT:    vmfle.vv v0, v8, v12
3035; CHECK-NEXT:    ret
3036  %vc = fcmp ole <vscale x 8 x float> %va, %vb
3037  ret <vscale x 8 x i1> %vc
3038}
3039
3040define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3041; CHECK-LABEL: fcmp_ole_vf_nxv8f32_nonans:
3042; CHECK:       # %bb.0:
3043; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3044; CHECK-NEXT:    vmfle.vf v0, v8, fa0
3045; CHECK-NEXT:    ret
3046  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3047  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3048  %vc = fcmp ole <vscale x 8 x float> %va, %splat
3049  ret <vscale x 8 x i1> %vc
3050}
3051
3052define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3053; CHECK-LABEL: fcmp_one_vv_nxv8f32:
3054; CHECK:       # %bb.0:
3055; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3056; CHECK-NEXT:    vmflt.vv v16, v8, v12
3057; CHECK-NEXT:    vmflt.vv v17, v12, v8
3058; CHECK-NEXT:    vmor.mm v0, v17, v16
3059; CHECK-NEXT:    ret
3060  %vc = fcmp one <vscale x 8 x float> %va, %vb
3061  ret <vscale x 8 x i1> %vc
3062}
3063
3064define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3065; CHECK-LABEL: fcmp_one_vf_nxv8f32:
3066; CHECK:       # %bb.0:
3067; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3068; CHECK-NEXT:    vmflt.vf v12, v8, fa0
3069; CHECK-NEXT:    vmfgt.vf v13, v8, fa0
3070; CHECK-NEXT:    vmor.mm v0, v13, v12
3071; CHECK-NEXT:    ret
3072  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3073  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3074  %vc = fcmp one <vscale x 8 x float> %va, %splat
3075  ret <vscale x 8 x i1> %vc
3076}
3077
3078define <vscale x 8 x i1> @fcmp_one_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3079; CHECK-LABEL: fcmp_one_fv_nxv8f32:
3080; CHECK:       # %bb.0:
3081; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3082; CHECK-NEXT:    vmfgt.vf v12, v8, fa0
3083; CHECK-NEXT:    vmflt.vf v13, v8, fa0
3084; CHECK-NEXT:    vmor.mm v0, v13, v12
3085; CHECK-NEXT:    ret
3086  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3087  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3088  %vc = fcmp one <vscale x 8 x float> %splat, %va
3089  ret <vscale x 8 x i1> %vc
3090}
3091
3092define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3093; CHECK-LABEL: fcmp_one_vv_nxv8f32_nonans:
3094; CHECK:       # %bb.0:
3095; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3096; CHECK-NEXT:    vmfne.vv v0, v8, v12
3097; CHECK-NEXT:    ret
3098  %vc = fcmp one <vscale x 8 x float> %va, %vb
3099  ret <vscale x 8 x i1> %vc
3100}
3101
3102define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3103; CHECK-LABEL: fcmp_one_vf_nxv8f32_nonans:
3104; CHECK:       # %bb.0:
3105; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3106; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3107; CHECK-NEXT:    ret
3108  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3109  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3110  %vc = fcmp one <vscale x 8 x float> %va, %splat
3111  ret <vscale x 8 x i1> %vc
3112}
3113
3114define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3115; CHECK-LABEL: fcmp_ord_vv_nxv8f32:
3116; CHECK:       # %bb.0:
3117; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3118; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3119; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3120; CHECK-NEXT:    vmand.mm v0, v12, v16
3121; CHECK-NEXT:    ret
3122  %vc = fcmp ord <vscale x 8 x float> %va, %vb
3123  ret <vscale x 8 x i1> %vc
3124}
3125
3126define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3127; CHECK-LABEL: fcmp_ord_vf_nxv8f32:
3128; CHECK:       # %bb.0:
3129; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3130; CHECK-NEXT:    vfmv.v.f v12, fa0
3131; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3132; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3133; CHECK-NEXT:    vmand.mm v0, v12, v16
3134; CHECK-NEXT:    ret
3135  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3136  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3137  %vc = fcmp ord <vscale x 8 x float> %va, %splat
3138  ret <vscale x 8 x i1> %vc
3139}
3140
3141define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3142; CHECK-LABEL: fcmp_ord_fv_nxv8f32:
3143; CHECK:       # %bb.0:
3144; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3145; CHECK-NEXT:    vfmv.v.f v12, fa0
3146; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3147; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3148; CHECK-NEXT:    vmand.mm v0, v16, v12
3149; CHECK-NEXT:    ret
3150  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3151  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3152  %vc = fcmp ord <vscale x 8 x float> %splat, %va
3153  ret <vscale x 8 x i1> %vc
3154}
3155
3156define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3157; CHECK-LABEL: fcmp_ord_vv_nxv8f32_nonans:
3158; CHECK:       # %bb.0:
3159; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3160; CHECK-NEXT:    vmfeq.vv v16, v12, v12
3161; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3162; CHECK-NEXT:    vmand.mm v0, v12, v16
3163; CHECK-NEXT:    ret
3164  %vc = fcmp ord <vscale x 8 x float> %va, %vb
3165  ret <vscale x 8 x i1> %vc
3166}
3167
3168define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3169; CHECK-LABEL: fcmp_ord_vf_nxv8f32_nonans:
3170; CHECK:       # %bb.0:
3171; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3172; CHECK-NEXT:    vfmv.v.f v12, fa0
3173; CHECK-NEXT:    vmfeq.vf v16, v12, fa0
3174; CHECK-NEXT:    vmfeq.vv v12, v8, v8
3175; CHECK-NEXT:    vmand.mm v0, v12, v16
3176; CHECK-NEXT:    ret
3177  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3178  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3179  %vc = fcmp ord <vscale x 8 x float> %va, %splat
3180  ret <vscale x 8 x i1> %vc
3181}
3182
3183define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3184; CHECK-LABEL: fcmp_ueq_vv_nxv8f32:
3185; CHECK:       # %bb.0:
3186; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3187; CHECK-NEXT:    vmflt.vv v16, v8, v12
3188; CHECK-NEXT:    vmflt.vv v17, v12, v8
3189; CHECK-NEXT:    vmnor.mm v0, v17, v16
3190; CHECK-NEXT:    ret
3191  %vc = fcmp ueq <vscale x 8 x float> %va, %vb
3192  ret <vscale x 8 x i1> %vc
3193}
3194
3195define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3196; CHECK-LABEL: fcmp_ueq_vf_nxv8f32:
3197; CHECK:       # %bb.0:
3198; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3199; CHECK-NEXT:    vmflt.vf v12, v8, fa0
3200; CHECK-NEXT:    vmfgt.vf v13, v8, fa0
3201; CHECK-NEXT:    vmnor.mm v0, v13, v12
3202; CHECK-NEXT:    ret
3203  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3204  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3205  %vc = fcmp ueq <vscale x 8 x float> %va, %splat
3206  ret <vscale x 8 x i1> %vc
3207}
3208
3209define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3210; CHECK-LABEL: fcmp_ueq_fv_nxv8f32:
3211; CHECK:       # %bb.0:
3212; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3213; CHECK-NEXT:    vmfgt.vf v12, v8, fa0
3214; CHECK-NEXT:    vmflt.vf v13, v8, fa0
3215; CHECK-NEXT:    vmnor.mm v0, v13, v12
3216; CHECK-NEXT:    ret
3217  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3218  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3219  %vc = fcmp ueq <vscale x 8 x float> %splat, %va
3220  ret <vscale x 8 x i1> %vc
3221}
3222
3223define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3224; CHECK-LABEL: fcmp_ueq_vv_nxv8f32_nonans:
3225; CHECK:       # %bb.0:
3226; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3227; CHECK-NEXT:    vmfeq.vv v0, v8, v12
3228; CHECK-NEXT:    ret
3229  %vc = fcmp ueq <vscale x 8 x float> %va, %vb
3230  ret <vscale x 8 x i1> %vc
3231}
3232
3233define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3234; CHECK-LABEL: fcmp_ueq_vf_nxv8f32_nonans:
3235; CHECK:       # %bb.0:
3236; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3237; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3238; CHECK-NEXT:    ret
3239  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3240  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3241  %vc = fcmp ueq <vscale x 8 x float> %va, %splat
3242  ret <vscale x 8 x i1> %vc
3243}
3244
3245define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3246; CHECK-LABEL: fcmp_ugt_vv_nxv8f32:
3247; CHECK:       # %bb.0:
3248; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3249; CHECK-NEXT:    vmfle.vv v16, v8, v12
3250; CHECK-NEXT:    vmnot.m v0, v16
3251; CHECK-NEXT:    ret
3252  %vc = fcmp ugt <vscale x 8 x float> %va, %vb
3253  ret <vscale x 8 x i1> %vc
3254}
3255
3256define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3257; CHECK-LABEL: fcmp_ugt_vf_nxv8f32:
3258; CHECK:       # %bb.0:
3259; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3260; CHECK-NEXT:    vmfle.vf v12, v8, fa0
3261; CHECK-NEXT:    vmnot.m v0, v12
3262; CHECK-NEXT:    ret
3263  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3264  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3265  %vc = fcmp ugt <vscale x 8 x float> %va, %splat
3266  ret <vscale x 8 x i1> %vc
3267}
3268
3269define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3270; CHECK-LABEL: fcmp_ugt_fv_nxv8f32:
3271; CHECK:       # %bb.0:
3272; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3273; CHECK-NEXT:    vmfge.vf v12, v8, fa0
3274; CHECK-NEXT:    vmnot.m v0, v12
3275; CHECK-NEXT:    ret
3276  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3277  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3278  %vc = fcmp ugt <vscale x 8 x float> %splat, %va
3279  ret <vscale x 8 x i1> %vc
3280}
3281
3282define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3283; CHECK-LABEL: fcmp_ugt_vv_nxv8f32_nonans:
3284; CHECK:       # %bb.0:
3285; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3286; CHECK-NEXT:    vmflt.vv v0, v12, v8
3287; CHECK-NEXT:    ret
3288  %vc = fcmp ugt <vscale x 8 x float> %va, %vb
3289  ret <vscale x 8 x i1> %vc
3290}
3291
3292define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3293; CHECK-LABEL: fcmp_ugt_vf_nxv8f32_nonans:
3294; CHECK:       # %bb.0:
3295; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3296; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
3297; CHECK-NEXT:    ret
3298  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3299  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3300  %vc = fcmp ugt <vscale x 8 x float> %va, %splat
3301  ret <vscale x 8 x i1> %vc
3302}
3303
3304define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3305; CHECK-LABEL: fcmp_uge_vv_nxv8f32:
3306; CHECK:       # %bb.0:
3307; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3308; CHECK-NEXT:    vmflt.vv v16, v8, v12
3309; CHECK-NEXT:    vmnot.m v0, v16
3310; CHECK-NEXT:    ret
3311  %vc = fcmp uge <vscale x 8 x float> %va, %vb
3312  ret <vscale x 8 x i1> %vc
3313}
3314
3315define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3316; CHECK-LABEL: fcmp_uge_vf_nxv8f32:
3317; CHECK:       # %bb.0:
3318; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3319; CHECK-NEXT:    vmflt.vf v12, v8, fa0
3320; CHECK-NEXT:    vmnot.m v0, v12
3321; CHECK-NEXT:    ret
3322  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3323  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3324  %vc = fcmp uge <vscale x 8 x float> %va, %splat
3325  ret <vscale x 8 x i1> %vc
3326}
3327
3328define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3329; CHECK-LABEL: fcmp_uge_fv_nxv8f32:
3330; CHECK:       # %bb.0:
3331; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3332; CHECK-NEXT:    vmfgt.vf v12, v8, fa0
3333; CHECK-NEXT:    vmnot.m v0, v12
3334; CHECK-NEXT:    ret
3335  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3336  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3337  %vc = fcmp uge <vscale x 8 x float> %splat, %va
3338  ret <vscale x 8 x i1> %vc
3339}
3340
3341define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3342; CHECK-LABEL: fcmp_uge_vv_nxv8f32_nonans:
3343; CHECK:       # %bb.0:
3344; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3345; CHECK-NEXT:    vmfle.vv v0, v12, v8
3346; CHECK-NEXT:    ret
3347  %vc = fcmp uge <vscale x 8 x float> %va, %vb
3348  ret <vscale x 8 x i1> %vc
3349}
3350
3351define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3352; CHECK-LABEL: fcmp_uge_vf_nxv8f32_nonans:
3353; CHECK:       # %bb.0:
3354; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3355; CHECK-NEXT:    vmfge.vf v0, v8, fa0
3356; CHECK-NEXT:    ret
3357  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3358  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3359  %vc = fcmp uge <vscale x 8 x float> %va, %splat
3360  ret <vscale x 8 x i1> %vc
3361}
3362
3363define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3364; CHECK-LABEL: fcmp_ult_vv_nxv8f32:
3365; CHECK:       # %bb.0:
3366; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3367; CHECK-NEXT:    vmfle.vv v16, v12, v8
3368; CHECK-NEXT:    vmnot.m v0, v16
3369; CHECK-NEXT:    ret
3370  %vc = fcmp ult <vscale x 8 x float> %va, %vb
3371  ret <vscale x 8 x i1> %vc
3372}
3373
3374define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3375; CHECK-LABEL: fcmp_ult_vf_nxv8f32:
3376; CHECK:       # %bb.0:
3377; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3378; CHECK-NEXT:    vmfge.vf v12, v8, fa0
3379; CHECK-NEXT:    vmnot.m v0, v12
3380; CHECK-NEXT:    ret
3381  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3382  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3383  %vc = fcmp ult <vscale x 8 x float> %va, %splat
3384  ret <vscale x 8 x i1> %vc
3385}
3386
3387define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3388; CHECK-LABEL: fcmp_ult_fv_nxv8f32:
3389; CHECK:       # %bb.0:
3390; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3391; CHECK-NEXT:    vmfle.vf v12, v8, fa0
3392; CHECK-NEXT:    vmnot.m v0, v12
3393; CHECK-NEXT:    ret
3394  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3395  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3396  %vc = fcmp ult <vscale x 8 x float> %splat, %va
3397  ret <vscale x 8 x i1> %vc
3398}
3399
3400define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3401; CHECK-LABEL: fcmp_ult_vv_nxv8f32_nonans:
3402; CHECK:       # %bb.0:
3403; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3404; CHECK-NEXT:    vmflt.vv v0, v8, v12
3405; CHECK-NEXT:    ret
3406  %vc = fcmp ult <vscale x 8 x float> %va, %vb
3407  ret <vscale x 8 x i1> %vc
3408}
3409
3410define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3411; CHECK-LABEL: fcmp_ult_vf_nxv8f32_nonans:
3412; CHECK:       # %bb.0:
3413; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3414; CHECK-NEXT:    vmflt.vf v0, v8, fa0
3415; CHECK-NEXT:    ret
3416  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3417  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3418  %vc = fcmp ult <vscale x 8 x float> %va, %splat
3419  ret <vscale x 8 x i1> %vc
3420}
3421
3422define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3423; CHECK-LABEL: fcmp_ule_vv_nxv8f32:
3424; CHECK:       # %bb.0:
3425; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3426; CHECK-NEXT:    vmflt.vv v16, v12, v8
3427; CHECK-NEXT:    vmnot.m v0, v16
3428; CHECK-NEXT:    ret
3429  %vc = fcmp ule <vscale x 8 x float> %va, %vb
3430  ret <vscale x 8 x i1> %vc
3431}
3432
3433define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3434; CHECK-LABEL: fcmp_ule_vf_nxv8f32:
3435; CHECK:       # %bb.0:
3436; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3437; CHECK-NEXT:    vmfgt.vf v12, v8, fa0
3438; CHECK-NEXT:    vmnot.m v0, v12
3439; CHECK-NEXT:    ret
3440  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3441  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3442  %vc = fcmp ule <vscale x 8 x float> %va, %splat
3443  ret <vscale x 8 x i1> %vc
3444}
3445
3446define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3447; CHECK-LABEL: fcmp_ule_fv_nxv8f32:
3448; CHECK:       # %bb.0:
3449; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3450; CHECK-NEXT:    vmflt.vf v12, v8, fa0
3451; CHECK-NEXT:    vmnot.m v0, v12
3452; CHECK-NEXT:    ret
3453  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3454  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3455  %vc = fcmp ule <vscale x 8 x float> %splat, %va
3456  ret <vscale x 8 x i1> %vc
3457}
3458
3459define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3460; CHECK-LABEL: fcmp_ule_vv_nxv8f32_nonans:
3461; CHECK:       # %bb.0:
3462; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3463; CHECK-NEXT:    vmfle.vv v0, v8, v12
3464; CHECK-NEXT:    ret
3465  %vc = fcmp ule <vscale x 8 x float> %va, %vb
3466  ret <vscale x 8 x i1> %vc
3467}
3468
3469define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3470; CHECK-LABEL: fcmp_ule_vf_nxv8f32_nonans:
3471; CHECK:       # %bb.0:
3472; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3473; CHECK-NEXT:    vmfle.vf v0, v8, fa0
3474; CHECK-NEXT:    ret
3475  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3476  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3477  %vc = fcmp ule <vscale x 8 x float> %va, %splat
3478  ret <vscale x 8 x i1> %vc
3479}
3480
3481define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3482; CHECK-LABEL: fcmp_une_vv_nxv8f32:
3483; CHECK:       # %bb.0:
3484; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3485; CHECK-NEXT:    vmfne.vv v0, v8, v12
3486; CHECK-NEXT:    ret
3487  %vc = fcmp une <vscale x 8 x float> %va, %vb
3488  ret <vscale x 8 x i1> %vc
3489}
3490
3491define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3492; CHECK-LABEL: fcmp_une_vf_nxv8f32:
3493; CHECK:       # %bb.0:
3494; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3495; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3496; CHECK-NEXT:    ret
3497  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3498  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3499  %vc = fcmp une <vscale x 8 x float> %va, %splat
3500  ret <vscale x 8 x i1> %vc
3501}
3502
3503define <vscale x 8 x i1> @fcmp_une_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3504; CHECK-LABEL: fcmp_une_fv_nxv8f32:
3505; CHECK:       # %bb.0:
3506; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3507; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3508; CHECK-NEXT:    ret
3509  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3510  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3511  %vc = fcmp une <vscale x 8 x float> %splat, %va
3512  ret <vscale x 8 x i1> %vc
3513}
3514
3515define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3516; CHECK-LABEL: fcmp_une_vv_nxv8f32_nonans:
3517; CHECK:       # %bb.0:
3518; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3519; CHECK-NEXT:    vmfne.vv v0, v8, v12
3520; CHECK-NEXT:    ret
3521  %vc = fcmp une <vscale x 8 x float> %va, %vb
3522  ret <vscale x 8 x i1> %vc
3523}
3524
3525define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3526; CHECK-LABEL: fcmp_une_vf_nxv8f32_nonans:
3527; CHECK:       # %bb.0:
3528; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3529; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3530; CHECK-NEXT:    ret
3531  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3532  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3533  %vc = fcmp une <vscale x 8 x float> %va, %splat
3534  ret <vscale x 8 x i1> %vc
3535}
3536
3537define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
3538; CHECK-LABEL: fcmp_uno_vv_nxv8f32:
3539; CHECK:       # %bb.0:
3540; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3541; CHECK-NEXT:    vmfne.vv v16, v12, v12
3542; CHECK-NEXT:    vmfne.vv v12, v8, v8
3543; CHECK-NEXT:    vmor.mm v0, v12, v16
3544; CHECK-NEXT:    ret
3545  %vc = fcmp uno <vscale x 8 x float> %va, %vb
3546  ret <vscale x 8 x i1> %vc
3547}
3548
3549define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
3550; CHECK-LABEL: fcmp_uno_vf_nxv8f32:
3551; CHECK:       # %bb.0:
3552; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3553; CHECK-NEXT:    vfmv.v.f v12, fa0
3554; CHECK-NEXT:    vmfne.vf v16, v12, fa0
3555; CHECK-NEXT:    vmfne.vv v12, v8, v8
3556; CHECK-NEXT:    vmor.mm v0, v12, v16
3557; CHECK-NEXT:    ret
3558  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3559  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3560  %vc = fcmp uno <vscale x 8 x float> %va, %splat
3561  ret <vscale x 8 x i1> %vc
3562}
3563
3564define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
3565; CHECK-LABEL: fcmp_uno_fv_nxv8f32:
3566; CHECK:       # %bb.0:
3567; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3568; CHECK-NEXT:    vfmv.v.f v12, fa0
3569; CHECK-NEXT:    vmfne.vf v16, v12, fa0
3570; CHECK-NEXT:    vmfne.vv v12, v8, v8
3571; CHECK-NEXT:    vmor.mm v0, v16, v12
3572; CHECK-NEXT:    ret
3573  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3574  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3575  %vc = fcmp uno <vscale x 8 x float> %splat, %va
3576  ret <vscale x 8 x i1> %vc
3577}
3578
3579define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
3580; CHECK-LABEL: fcmp_uno_vv_nxv8f32_nonans:
3581; CHECK:       # %bb.0:
3582; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3583; CHECK-NEXT:    vmfne.vv v16, v12, v12
3584; CHECK-NEXT:    vmfne.vv v12, v8, v8
3585; CHECK-NEXT:    vmor.mm v0, v12, v16
3586; CHECK-NEXT:    ret
3587  %vc = fcmp uno <vscale x 8 x float> %va, %vb
3588  ret <vscale x 8 x i1> %vc
3589}
3590
3591define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
3592; CHECK-LABEL: fcmp_uno_vf_nxv8f32_nonans:
3593; CHECK:       # %bb.0:
3594; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
3595; CHECK-NEXT:    vfmv.v.f v12, fa0
3596; CHECK-NEXT:    vmfne.vf v16, v12, fa0
3597; CHECK-NEXT:    vmfne.vv v12, v8, v8
3598; CHECK-NEXT:    vmor.mm v0, v12, v16
3599; CHECK-NEXT:    ret
3600  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0
3601  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
3602  %vc = fcmp uno <vscale x 8 x float> %va, %splat
3603  ret <vscale x 8 x i1> %vc
3604}
3605
3606define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3607; CHECK-LABEL: fcmp_oeq_vv_nxv8f64:
3608; CHECK:       # %bb.0:
3609; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3610; CHECK-NEXT:    vmfeq.vv v0, v8, v16
3611; CHECK-NEXT:    ret
3612  %vc = fcmp oeq <vscale x 8 x double> %va, %vb
3613  ret <vscale x 8 x i1> %vc
3614}
3615
3616define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3617; CHECK-LABEL: fcmp_oeq_vf_nxv8f64:
3618; CHECK:       # %bb.0:
3619; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3620; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3621; CHECK-NEXT:    ret
3622  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3623  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3624  %vc = fcmp oeq <vscale x 8 x double> %va, %splat
3625  ret <vscale x 8 x i1> %vc
3626}
3627
3628define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3629; CHECK-LABEL: fcmp_oeq_fv_nxv8f64:
3630; CHECK:       # %bb.0:
3631; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3632; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3633; CHECK-NEXT:    ret
3634  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3635  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3636  %vc = fcmp oeq <vscale x 8 x double> %splat, %va
3637  ret <vscale x 8 x i1> %vc
3638}
3639
3640define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3641; CHECK-LABEL: fcmp_oeq_vv_nxv8f64_nonans:
3642; CHECK:       # %bb.0:
3643; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3644; CHECK-NEXT:    vmfeq.vv v0, v8, v16
3645; CHECK-NEXT:    ret
3646  %vc = fcmp oeq <vscale x 8 x double> %va, %vb
3647  ret <vscale x 8 x i1> %vc
3648}
3649
3650define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3651; CHECK-LABEL: fcmp_oeq_vf_nxv8f64_nonans:
3652; CHECK:       # %bb.0:
3653; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3654; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
3655; CHECK-NEXT:    ret
3656  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3657  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3658  %vc = fcmp oeq <vscale x 8 x double> %va, %splat
3659  ret <vscale x 8 x i1> %vc
3660}
3661
3662define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3663; CHECK-LABEL: fcmp_ogt_vv_nxv8f64:
3664; CHECK:       # %bb.0:
3665; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3666; CHECK-NEXT:    vmflt.vv v0, v16, v8
3667; CHECK-NEXT:    ret
3668  %vc = fcmp ogt <vscale x 8 x double> %va, %vb
3669  ret <vscale x 8 x i1> %vc
3670}
3671
3672define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3673; CHECK-LABEL: fcmp_ogt_vf_nxv8f64:
3674; CHECK:       # %bb.0:
3675; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3676; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
3677; CHECK-NEXT:    ret
3678  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3679  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3680  %vc = fcmp ogt <vscale x 8 x double> %va, %splat
3681  ret <vscale x 8 x i1> %vc
3682}
3683
3684define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3685; CHECK-LABEL: fcmp_ogt_fv_nxv8f64:
3686; CHECK:       # %bb.0:
3687; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3688; CHECK-NEXT:    vmflt.vf v0, v8, fa0
3689; CHECK-NEXT:    ret
3690  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3691  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3692  %vc = fcmp ogt <vscale x 8 x double> %splat, %va
3693  ret <vscale x 8 x i1> %vc
3694}
3695
3696define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3697; CHECK-LABEL: fcmp_ogt_vv_nxv8f64_nonans:
3698; CHECK:       # %bb.0:
3699; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3700; CHECK-NEXT:    vmflt.vv v0, v16, v8
3701; CHECK-NEXT:    ret
3702  %vc = fcmp ogt <vscale x 8 x double> %va, %vb
3703  ret <vscale x 8 x i1> %vc
3704}
3705
3706define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3707; CHECK-LABEL: fcmp_ogt_vf_nxv8f64_nonans:
3708; CHECK:       # %bb.0:
3709; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3710; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
3711; CHECK-NEXT:    ret
3712  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3713  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3714  %vc = fcmp ogt <vscale x 8 x double> %va, %splat
3715  ret <vscale x 8 x i1> %vc
3716}
3717
3718define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3719; CHECK-LABEL: fcmp_oge_vv_nxv8f64:
3720; CHECK:       # %bb.0:
3721; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3722; CHECK-NEXT:    vmfle.vv v0, v16, v8
3723; CHECK-NEXT:    ret
3724  %vc = fcmp oge <vscale x 8 x double> %va, %vb
3725  ret <vscale x 8 x i1> %vc
3726}
3727
3728define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3729; CHECK-LABEL: fcmp_oge_vf_nxv8f64:
3730; CHECK:       # %bb.0:
3731; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3732; CHECK-NEXT:    vmfge.vf v0, v8, fa0
3733; CHECK-NEXT:    ret
3734  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3735  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3736  %vc = fcmp oge <vscale x 8 x double> %va, %splat
3737  ret <vscale x 8 x i1> %vc
3738}
3739
3740define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3741; CHECK-LABEL: fcmp_oge_fv_nxv8f64:
3742; CHECK:       # %bb.0:
3743; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3744; CHECK-NEXT:    vmfle.vf v0, v8, fa0
3745; CHECK-NEXT:    ret
3746  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3747  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3748  %vc = fcmp oge <vscale x 8 x double> %splat, %va
3749  ret <vscale x 8 x i1> %vc
3750}
3751
3752define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3753; CHECK-LABEL: fcmp_oge_vv_nxv8f64_nonans:
3754; CHECK:       # %bb.0:
3755; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3756; CHECK-NEXT:    vmfle.vv v0, v16, v8
3757; CHECK-NEXT:    ret
3758  %vc = fcmp oge <vscale x 8 x double> %va, %vb
3759  ret <vscale x 8 x i1> %vc
3760}
3761
3762define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3763; CHECK-LABEL: fcmp_oge_vf_nxv8f64_nonans:
3764; CHECK:       # %bb.0:
3765; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3766; CHECK-NEXT:    vmfge.vf v0, v8, fa0
3767; CHECK-NEXT:    ret
3768  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3769  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3770  %vc = fcmp oge <vscale x 8 x double> %va, %splat
3771  ret <vscale x 8 x i1> %vc
3772}
3773
3774define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3775; CHECK-LABEL: fcmp_olt_vv_nxv8f64:
3776; CHECK:       # %bb.0:
3777; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3778; CHECK-NEXT:    vmflt.vv v0, v8, v16
3779; CHECK-NEXT:    ret
3780  %vc = fcmp olt <vscale x 8 x double> %va, %vb
3781  ret <vscale x 8 x i1> %vc
3782}
3783
3784define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3785; CHECK-LABEL: fcmp_olt_vf_nxv8f64:
3786; CHECK:       # %bb.0:
3787; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3788; CHECK-NEXT:    vmflt.vf v0, v8, fa0
3789; CHECK-NEXT:    ret
3790  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3791  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3792  %vc = fcmp olt <vscale x 8 x double> %va, %splat
3793  ret <vscale x 8 x i1> %vc
3794}
3795
3796define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3797; CHECK-LABEL: fcmp_olt_fv_nxv8f64:
3798; CHECK:       # %bb.0:
3799; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3800; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
3801; CHECK-NEXT:    ret
3802  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3803  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3804  %vc = fcmp olt <vscale x 8 x double> %splat, %va
3805  ret <vscale x 8 x i1> %vc
3806}
3807
3808define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3809; CHECK-LABEL: fcmp_olt_vv_nxv8f64_nonans:
3810; CHECK:       # %bb.0:
3811; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3812; CHECK-NEXT:    vmflt.vv v0, v8, v16
3813; CHECK-NEXT:    ret
3814  %vc = fcmp olt <vscale x 8 x double> %va, %vb
3815  ret <vscale x 8 x i1> %vc
3816}
3817
3818define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3819; CHECK-LABEL: fcmp_olt_vf_nxv8f64_nonans:
3820; CHECK:       # %bb.0:
3821; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3822; CHECK-NEXT:    vmflt.vf v0, v8, fa0
3823; CHECK-NEXT:    ret
3824  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3825  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3826  %vc = fcmp olt <vscale x 8 x double> %va, %splat
3827  ret <vscale x 8 x i1> %vc
3828}
3829
3830define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3831; CHECK-LABEL: fcmp_ole_vv_nxv8f64:
3832; CHECK:       # %bb.0:
3833; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3834; CHECK-NEXT:    vmfle.vv v0, v8, v16
3835; CHECK-NEXT:    ret
3836  %vc = fcmp ole <vscale x 8 x double> %va, %vb
3837  ret <vscale x 8 x i1> %vc
3838}
3839
3840define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3841; CHECK-LABEL: fcmp_ole_vf_nxv8f64:
3842; CHECK:       # %bb.0:
3843; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3844; CHECK-NEXT:    vmfle.vf v0, v8, fa0
3845; CHECK-NEXT:    ret
3846  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3847  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3848  %vc = fcmp ole <vscale x 8 x double> %va, %splat
3849  ret <vscale x 8 x i1> %vc
3850}
3851
3852define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3853; CHECK-LABEL: fcmp_ole_fv_nxv8f64:
3854; CHECK:       # %bb.0:
3855; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3856; CHECK-NEXT:    vmfge.vf v0, v8, fa0
3857; CHECK-NEXT:    ret
3858  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3859  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3860  %vc = fcmp ole <vscale x 8 x double> %splat, %va
3861  ret <vscale x 8 x i1> %vc
3862}
3863
3864define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3865; CHECK-LABEL: fcmp_ole_vv_nxv8f64_nonans:
3866; CHECK:       # %bb.0:
3867; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3868; CHECK-NEXT:    vmfle.vv v0, v8, v16
3869; CHECK-NEXT:    ret
3870  %vc = fcmp ole <vscale x 8 x double> %va, %vb
3871  ret <vscale x 8 x i1> %vc
3872}
3873
3874define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3875; CHECK-LABEL: fcmp_ole_vf_nxv8f64_nonans:
3876; CHECK:       # %bb.0:
3877; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3878; CHECK-NEXT:    vmfle.vf v0, v8, fa0
3879; CHECK-NEXT:    ret
3880  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3881  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3882  %vc = fcmp ole <vscale x 8 x double> %va, %splat
3883  ret <vscale x 8 x i1> %vc
3884}
3885
3886define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3887; CHECK-LABEL: fcmp_one_vv_nxv8f64:
3888; CHECK:       # %bb.0:
3889; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3890; CHECK-NEXT:    vmflt.vv v24, v8, v16
3891; CHECK-NEXT:    vmflt.vv v25, v16, v8
3892; CHECK-NEXT:    vmor.mm v0, v25, v24
3893; CHECK-NEXT:    ret
3894  %vc = fcmp one <vscale x 8 x double> %va, %vb
3895  ret <vscale x 8 x i1> %vc
3896}
3897
3898define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3899; CHECK-LABEL: fcmp_one_vf_nxv8f64:
3900; CHECK:       # %bb.0:
3901; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3902; CHECK-NEXT:    vmflt.vf v16, v8, fa0
3903; CHECK-NEXT:    vmfgt.vf v17, v8, fa0
3904; CHECK-NEXT:    vmor.mm v0, v17, v16
3905; CHECK-NEXT:    ret
3906  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3907  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3908  %vc = fcmp one <vscale x 8 x double> %va, %splat
3909  ret <vscale x 8 x i1> %vc
3910}
3911
3912define <vscale x 8 x i1> @fcmp_one_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3913; CHECK-LABEL: fcmp_one_fv_nxv8f64:
3914; CHECK:       # %bb.0:
3915; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3916; CHECK-NEXT:    vmfgt.vf v16, v8, fa0
3917; CHECK-NEXT:    vmflt.vf v17, v8, fa0
3918; CHECK-NEXT:    vmor.mm v0, v17, v16
3919; CHECK-NEXT:    ret
3920  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3921  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3922  %vc = fcmp one <vscale x 8 x double> %splat, %va
3923  ret <vscale x 8 x i1> %vc
3924}
3925
3926define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3927; CHECK-LABEL: fcmp_one_vv_nxv8f64_nonans:
3928; CHECK:       # %bb.0:
3929; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3930; CHECK-NEXT:    vmfne.vv v0, v8, v16
3931; CHECK-NEXT:    ret
3932  %vc = fcmp one <vscale x 8 x double> %va, %vb
3933  ret <vscale x 8 x i1> %vc
3934}
3935
3936define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
3937; CHECK-LABEL: fcmp_one_vf_nxv8f64_nonans:
3938; CHECK:       # %bb.0:
3939; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3940; CHECK-NEXT:    vmfne.vf v0, v8, fa0
3941; CHECK-NEXT:    ret
3942  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3943  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3944  %vc = fcmp one <vscale x 8 x double> %va, %splat
3945  ret <vscale x 8 x i1> %vc
3946}
3947
3948define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
3949; CHECK-LABEL: fcmp_ord_vv_nxv8f64:
3950; CHECK:       # %bb.0:
3951; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3952; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3953; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3954; CHECK-NEXT:    vmand.mm v0, v16, v24
3955; CHECK-NEXT:    ret
3956  %vc = fcmp ord <vscale x 8 x double> %va, %vb
3957  ret <vscale x 8 x i1> %vc
3958}
3959
3960define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
3961; CHECK-LABEL: fcmp_ord_vf_nxv8f64:
3962; CHECK:       # %bb.0:
3963; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3964; CHECK-NEXT:    vfmv.v.f v16, fa0
3965; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3966; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3967; CHECK-NEXT:    vmand.mm v0, v16, v24
3968; CHECK-NEXT:    ret
3969  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3970  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3971  %vc = fcmp ord <vscale x 8 x double> %va, %splat
3972  ret <vscale x 8 x i1> %vc
3973}
3974
3975define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
3976; CHECK-LABEL: fcmp_ord_fv_nxv8f64:
3977; CHECK:       # %bb.0:
3978; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3979; CHECK-NEXT:    vfmv.v.f v16, fa0
3980; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
3981; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3982; CHECK-NEXT:    vmand.mm v0, v24, v16
3983; CHECK-NEXT:    ret
3984  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
3985  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
3986  %vc = fcmp ord <vscale x 8 x double> %splat, %va
3987  ret <vscale x 8 x i1> %vc
3988}
3989
3990define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
3991; CHECK-LABEL: fcmp_ord_vv_nxv8f64_nonans:
3992; CHECK:       # %bb.0:
3993; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
3994; CHECK-NEXT:    vmfeq.vv v24, v16, v16
3995; CHECK-NEXT:    vmfeq.vv v16, v8, v8
3996; CHECK-NEXT:    vmand.mm v0, v16, v24
3997; CHECK-NEXT:    ret
3998  %vc = fcmp ord <vscale x 8 x double> %va, %vb
3999  ret <vscale x 8 x i1> %vc
4000}
4001
4002define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4003; CHECK-LABEL: fcmp_ord_vf_nxv8f64_nonans:
4004; CHECK:       # %bb.0:
4005; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4006; CHECK-NEXT:    vfmv.v.f v16, fa0
4007; CHECK-NEXT:    vmfeq.vf v24, v16, fa0
4008; CHECK-NEXT:    vmfeq.vv v16, v8, v8
4009; CHECK-NEXT:    vmand.mm v0, v16, v24
4010; CHECK-NEXT:    ret
4011  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4012  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4013  %vc = fcmp ord <vscale x 8 x double> %va, %splat
4014  ret <vscale x 8 x i1> %vc
4015}
4016
4017define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
4018; CHECK-LABEL: fcmp_ueq_vv_nxv8f64:
4019; CHECK:       # %bb.0:
4020; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4021; CHECK-NEXT:    vmflt.vv v24, v8, v16
4022; CHECK-NEXT:    vmflt.vv v25, v16, v8
4023; CHECK-NEXT:    vmnor.mm v0, v25, v24
4024; CHECK-NEXT:    ret
4025  %vc = fcmp ueq <vscale x 8 x double> %va, %vb
4026  ret <vscale x 8 x i1> %vc
4027}
4028
4029define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
4030; CHECK-LABEL: fcmp_ueq_vf_nxv8f64:
4031; CHECK:       # %bb.0:
4032; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4033; CHECK-NEXT:    vmflt.vf v16, v8, fa0
4034; CHECK-NEXT:    vmfgt.vf v17, v8, fa0
4035; CHECK-NEXT:    vmnor.mm v0, v17, v16
4036; CHECK-NEXT:    ret
4037  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4038  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4039  %vc = fcmp ueq <vscale x 8 x double> %va, %splat
4040  ret <vscale x 8 x i1> %vc
4041}
4042
4043define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
4044; CHECK-LABEL: fcmp_ueq_fv_nxv8f64:
4045; CHECK:       # %bb.0:
4046; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4047; CHECK-NEXT:    vmfgt.vf v16, v8, fa0
4048; CHECK-NEXT:    vmflt.vf v17, v8, fa0
4049; CHECK-NEXT:    vmnor.mm v0, v17, v16
4050; CHECK-NEXT:    ret
4051  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4052  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4053  %vc = fcmp ueq <vscale x 8 x double> %splat, %va
4054  ret <vscale x 8 x i1> %vc
4055}
4056
4057define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
4058; CHECK-LABEL: fcmp_ueq_vv_nxv8f64_nonans:
4059; CHECK:       # %bb.0:
4060; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4061; CHECK-NEXT:    vmfeq.vv v0, v8, v16
4062; CHECK-NEXT:    ret
4063  %vc = fcmp ueq <vscale x 8 x double> %va, %vb
4064  ret <vscale x 8 x i1> %vc
4065}
4066
4067define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4068; CHECK-LABEL: fcmp_ueq_vf_nxv8f64_nonans:
4069; CHECK:       # %bb.0:
4070; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4071; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
4072; CHECK-NEXT:    ret
4073  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4074  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4075  %vc = fcmp ueq <vscale x 8 x double> %va, %splat
4076  ret <vscale x 8 x i1> %vc
4077}
4078
4079define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
4080; CHECK-LABEL: fcmp_ugt_vv_nxv8f64:
4081; CHECK:       # %bb.0:
4082; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4083; CHECK-NEXT:    vmfle.vv v24, v8, v16
4084; CHECK-NEXT:    vmnot.m v0, v24
4085; CHECK-NEXT:    ret
4086  %vc = fcmp ugt <vscale x 8 x double> %va, %vb
4087  ret <vscale x 8 x i1> %vc
4088}
4089
4090define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
4091; CHECK-LABEL: fcmp_ugt_vf_nxv8f64:
4092; CHECK:       # %bb.0:
4093; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4094; CHECK-NEXT:    vmfle.vf v16, v8, fa0
4095; CHECK-NEXT:    vmnot.m v0, v16
4096; CHECK-NEXT:    ret
4097  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4098  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4099  %vc = fcmp ugt <vscale x 8 x double> %va, %splat
4100  ret <vscale x 8 x i1> %vc
4101}
4102
4103define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
4104; CHECK-LABEL: fcmp_ugt_fv_nxv8f64:
4105; CHECK:       # %bb.0:
4106; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4107; CHECK-NEXT:    vmfge.vf v16, v8, fa0
4108; CHECK-NEXT:    vmnot.m v0, v16
4109; CHECK-NEXT:    ret
4110  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4111  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4112  %vc = fcmp ugt <vscale x 8 x double> %splat, %va
4113  ret <vscale x 8 x i1> %vc
4114}
4115
4116define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
4117; CHECK-LABEL: fcmp_ugt_vv_nxv8f64_nonans:
4118; CHECK:       # %bb.0:
4119; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4120; CHECK-NEXT:    vmflt.vv v0, v16, v8
4121; CHECK-NEXT:    ret
4122  %vc = fcmp ugt <vscale x 8 x double> %va, %vb
4123  ret <vscale x 8 x i1> %vc
4124}
4125
4126define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4127; CHECK-LABEL: fcmp_ugt_vf_nxv8f64_nonans:
4128; CHECK:       # %bb.0:
4129; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4130; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
4131; CHECK-NEXT:    ret
4132  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4133  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4134  %vc = fcmp ugt <vscale x 8 x double> %va, %splat
4135  ret <vscale x 8 x i1> %vc
4136}
4137
4138define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
4139; CHECK-LABEL: fcmp_uge_vv_nxv8f64:
4140; CHECK:       # %bb.0:
4141; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4142; CHECK-NEXT:    vmflt.vv v24, v8, v16
4143; CHECK-NEXT:    vmnot.m v0, v24
4144; CHECK-NEXT:    ret
4145  %vc = fcmp uge <vscale x 8 x double> %va, %vb
4146  ret <vscale x 8 x i1> %vc
4147}
4148
4149define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
4150; CHECK-LABEL: fcmp_uge_vf_nxv8f64:
4151; CHECK:       # %bb.0:
4152; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4153; CHECK-NEXT:    vmflt.vf v16, v8, fa0
4154; CHECK-NEXT:    vmnot.m v0, v16
4155; CHECK-NEXT:    ret
4156  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4157  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4158  %vc = fcmp uge <vscale x 8 x double> %va, %splat
4159  ret <vscale x 8 x i1> %vc
4160}
4161
4162define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
4163; CHECK-LABEL: fcmp_uge_fv_nxv8f64:
4164; CHECK:       # %bb.0:
4165; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4166; CHECK-NEXT:    vmfgt.vf v16, v8, fa0
4167; CHECK-NEXT:    vmnot.m v0, v16
4168; CHECK-NEXT:    ret
4169  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4170  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4171  %vc = fcmp uge <vscale x 8 x double> %splat, %va
4172  ret <vscale x 8 x i1> %vc
4173}
4174
4175define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
4176; CHECK-LABEL: fcmp_uge_vv_nxv8f64_nonans:
4177; CHECK:       # %bb.0:
4178; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4179; CHECK-NEXT:    vmfle.vv v0, v16, v8
4180; CHECK-NEXT:    ret
4181  %vc = fcmp uge <vscale x 8 x double> %va, %vb
4182  ret <vscale x 8 x i1> %vc
4183}
4184
4185define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4186; CHECK-LABEL: fcmp_uge_vf_nxv8f64_nonans:
4187; CHECK:       # %bb.0:
4188; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4189; CHECK-NEXT:    vmfge.vf v0, v8, fa0
4190; CHECK-NEXT:    ret
4191  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4192  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4193  %vc = fcmp uge <vscale x 8 x double> %va, %splat
4194  ret <vscale x 8 x i1> %vc
4195}
4196
4197define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
4198; CHECK-LABEL: fcmp_ult_vv_nxv8f64:
4199; CHECK:       # %bb.0:
4200; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4201; CHECK-NEXT:    vmfle.vv v24, v16, v8
4202; CHECK-NEXT:    vmnot.m v0, v24
4203; CHECK-NEXT:    ret
4204  %vc = fcmp ult <vscale x 8 x double> %va, %vb
4205  ret <vscale x 8 x i1> %vc
4206}
4207
4208define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
4209; CHECK-LABEL: fcmp_ult_vf_nxv8f64:
4210; CHECK:       # %bb.0:
4211; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4212; CHECK-NEXT:    vmfge.vf v16, v8, fa0
4213; CHECK-NEXT:    vmnot.m v0, v16
4214; CHECK-NEXT:    ret
4215  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4216  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4217  %vc = fcmp ult <vscale x 8 x double> %va, %splat
4218  ret <vscale x 8 x i1> %vc
4219}
4220
4221define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
4222; CHECK-LABEL: fcmp_ult_fv_nxv8f64:
4223; CHECK:       # %bb.0:
4224; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4225; CHECK-NEXT:    vmfle.vf v16, v8, fa0
4226; CHECK-NEXT:    vmnot.m v0, v16
4227; CHECK-NEXT:    ret
4228  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4229  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4230  %vc = fcmp ult <vscale x 8 x double> %splat, %va
4231  ret <vscale x 8 x i1> %vc
4232}
4233
4234define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
4235; CHECK-LABEL: fcmp_ult_vv_nxv8f64_nonans:
4236; CHECK:       # %bb.0:
4237; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4238; CHECK-NEXT:    vmflt.vv v0, v8, v16
4239; CHECK-NEXT:    ret
4240  %vc = fcmp ult <vscale x 8 x double> %va, %vb
4241  ret <vscale x 8 x i1> %vc
4242}
4243
4244define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4245; CHECK-LABEL: fcmp_ult_vf_nxv8f64_nonans:
4246; CHECK:       # %bb.0:
4247; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4248; CHECK-NEXT:    vmflt.vf v0, v8, fa0
4249; CHECK-NEXT:    ret
4250  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4251  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4252  %vc = fcmp ult <vscale x 8 x double> %va, %splat
4253  ret <vscale x 8 x i1> %vc
4254}
4255
4256define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
4257; CHECK-LABEL: fcmp_ule_vv_nxv8f64:
4258; CHECK:       # %bb.0:
4259; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4260; CHECK-NEXT:    vmflt.vv v24, v16, v8
4261; CHECK-NEXT:    vmnot.m v0, v24
4262; CHECK-NEXT:    ret
4263  %vc = fcmp ule <vscale x 8 x double> %va, %vb
4264  ret <vscale x 8 x i1> %vc
4265}
4266
4267define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
4268; CHECK-LABEL: fcmp_ule_vf_nxv8f64:
4269; CHECK:       # %bb.0:
4270; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4271; CHECK-NEXT:    vmfgt.vf v16, v8, fa0
4272; CHECK-NEXT:    vmnot.m v0, v16
4273; CHECK-NEXT:    ret
4274  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4275  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4276  %vc = fcmp ule <vscale x 8 x double> %va, %splat
4277  ret <vscale x 8 x i1> %vc
4278}
4279
4280define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
4281; CHECK-LABEL: fcmp_ule_fv_nxv8f64:
4282; CHECK:       # %bb.0:
4283; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4284; CHECK-NEXT:    vmflt.vf v16, v8, fa0
4285; CHECK-NEXT:    vmnot.m v0, v16
4286; CHECK-NEXT:    ret
4287  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4288  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4289  %vc = fcmp ule <vscale x 8 x double> %splat, %va
4290  ret <vscale x 8 x i1> %vc
4291}
4292
4293define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
4294; CHECK-LABEL: fcmp_ule_vv_nxv8f64_nonans:
4295; CHECK:       # %bb.0:
4296; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4297; CHECK-NEXT:    vmfle.vv v0, v8, v16
4298; CHECK-NEXT:    ret
4299  %vc = fcmp ule <vscale x 8 x double> %va, %vb
4300  ret <vscale x 8 x i1> %vc
4301}
4302
4303define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4304; CHECK-LABEL: fcmp_ule_vf_nxv8f64_nonans:
4305; CHECK:       # %bb.0:
4306; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4307; CHECK-NEXT:    vmfle.vf v0, v8, fa0
4308; CHECK-NEXT:    ret
4309  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4310  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4311  %vc = fcmp ule <vscale x 8 x double> %va, %splat
4312  ret <vscale x 8 x i1> %vc
4313}
4314
4315define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
4316; CHECK-LABEL: fcmp_une_vv_nxv8f64:
4317; CHECK:       # %bb.0:
4318; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4319; CHECK-NEXT:    vmfne.vv v0, v8, v16
4320; CHECK-NEXT:    ret
4321  %vc = fcmp une <vscale x 8 x double> %va, %vb
4322  ret <vscale x 8 x i1> %vc
4323}
4324
4325define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
4326; CHECK-LABEL: fcmp_une_vf_nxv8f64:
4327; CHECK:       # %bb.0:
4328; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4329; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4330; CHECK-NEXT:    ret
4331  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4332  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4333  %vc = fcmp une <vscale x 8 x double> %va, %splat
4334  ret <vscale x 8 x i1> %vc
4335}
4336
4337define <vscale x 8 x i1> @fcmp_une_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
4338; CHECK-LABEL: fcmp_une_fv_nxv8f64:
4339; CHECK:       # %bb.0:
4340; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4341; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4342; CHECK-NEXT:    ret
4343  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4344  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4345  %vc = fcmp une <vscale x 8 x double> %splat, %va
4346  ret <vscale x 8 x i1> %vc
4347}
4348
4349define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
4350; CHECK-LABEL: fcmp_une_vv_nxv8f64_nonans:
4351; CHECK:       # %bb.0:
4352; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4353; CHECK-NEXT:    vmfne.vv v0, v8, v16
4354; CHECK-NEXT:    ret
4355  %vc = fcmp une <vscale x 8 x double> %va, %vb
4356  ret <vscale x 8 x i1> %vc
4357}
4358
4359define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4360; CHECK-LABEL: fcmp_une_vf_nxv8f64_nonans:
4361; CHECK:       # %bb.0:
4362; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4363; CHECK-NEXT:    vmfne.vf v0, v8, fa0
4364; CHECK-NEXT:    ret
4365  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4366  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4367  %vc = fcmp une <vscale x 8 x double> %va, %splat
4368  ret <vscale x 8 x i1> %vc
4369}
4370
4371define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
4372; CHECK-LABEL: fcmp_uno_vv_nxv8f64:
4373; CHECK:       # %bb.0:
4374; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4375; CHECK-NEXT:    vmfne.vv v24, v16, v16
4376; CHECK-NEXT:    vmfne.vv v16, v8, v8
4377; CHECK-NEXT:    vmor.mm v0, v16, v24
4378; CHECK-NEXT:    ret
4379  %vc = fcmp uno <vscale x 8 x double> %va, %vb
4380  ret <vscale x 8 x i1> %vc
4381}
4382
4383define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
4384; CHECK-LABEL: fcmp_uno_vf_nxv8f64:
4385; CHECK:       # %bb.0:
4386; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4387; CHECK-NEXT:    vfmv.v.f v16, fa0
4388; CHECK-NEXT:    vmfne.vf v24, v16, fa0
4389; CHECK-NEXT:    vmfne.vv v16, v8, v8
4390; CHECK-NEXT:    vmor.mm v0, v16, v24
4391; CHECK-NEXT:    ret
4392  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4393  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4394  %vc = fcmp uno <vscale x 8 x double> %va, %splat
4395  ret <vscale x 8 x i1> %vc
4396}
4397
4398define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
4399; CHECK-LABEL: fcmp_uno_fv_nxv8f64:
4400; CHECK:       # %bb.0:
4401; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4402; CHECK-NEXT:    vfmv.v.f v16, fa0
4403; CHECK-NEXT:    vmfne.vf v24, v16, fa0
4404; CHECK-NEXT:    vmfne.vv v16, v8, v8
4405; CHECK-NEXT:    vmor.mm v0, v24, v16
4406; CHECK-NEXT:    ret
4407  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4408  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4409  %vc = fcmp uno <vscale x 8 x double> %splat, %va
4410  ret <vscale x 8 x i1> %vc
4411}
4412
4413define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
4414; CHECK-LABEL: fcmp_uno_vv_nxv8f64_nonans:
4415; CHECK:       # %bb.0:
4416; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4417; CHECK-NEXT:    vmfne.vv v24, v16, v16
4418; CHECK-NEXT:    vmfne.vv v16, v8, v8
4419; CHECK-NEXT:    vmor.mm v0, v16, v24
4420; CHECK-NEXT:    ret
4421  %vc = fcmp uno <vscale x 8 x double> %va, %vb
4422  ret <vscale x 8 x i1> %vc
4423}
4424
4425define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
4426; CHECK-LABEL: fcmp_uno_vf_nxv8f64_nonans:
4427; CHECK:       # %bb.0:
4428; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
4429; CHECK-NEXT:    vfmv.v.f v16, fa0
4430; CHECK-NEXT:    vmfne.vf v24, v16, fa0
4431; CHECK-NEXT:    vmfne.vv v16, v8, v8
4432; CHECK-NEXT:    vmor.mm v0, v16, v24
4433; CHECK-NEXT:    ret
4434  %head = insertelement <vscale x 8 x double> poison, double %b, i32 0
4435  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
4436  %vc = fcmp uno <vscale x 8 x double> %va, %splat
4437  ret <vscale x 8 x i1> %vc
4438}
4439
4440; This fcmp/setcc is split and so we find a scalable-vector mask CONCAT_VECTOR
4441; node. Ensure we correctly (custom) lower this.
4442define <vscale x 16 x i1> @fcmp_oeq_vf_nx16f64(<vscale x 16 x double> %va) {
4443; RV32-LABEL: fcmp_oeq_vf_nx16f64:
4444; RV32:       # %bb.0:
4445; RV32-NEXT:    fcvt.d.w fa5, zero
4446; RV32-NEXT:    csrr a0, vlenb
4447; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
4448; RV32-NEXT:    vmfeq.vf v24, v16, fa5
4449; RV32-NEXT:    vmfeq.vf v0, v8, fa5
4450; RV32-NEXT:    srli a0, a0, 3
4451; RV32-NEXT:    add a1, a0, a0
4452; RV32-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
4453; RV32-NEXT:    vslideup.vx v0, v24, a0
4454; RV32-NEXT:    ret
4455;
4456; RV64-LABEL: fcmp_oeq_vf_nx16f64:
4457; RV64:       # %bb.0:
4458; RV64-NEXT:    fmv.d.x fa5, zero
4459; RV64-NEXT:    csrr a0, vlenb
4460; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
4461; RV64-NEXT:    vmfeq.vf v24, v16, fa5
4462; RV64-NEXT:    vmfeq.vf v0, v8, fa5
4463; RV64-NEXT:    srli a0, a0, 3
4464; RV64-NEXT:    add a1, a0, a0
4465; RV64-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
4466; RV64-NEXT:    vslideup.vx v0, v24, a0
4467; RV64-NEXT:    ret
4468;
4469; ZVFHMIN32-LABEL: fcmp_oeq_vf_nx16f64:
4470; ZVFHMIN32:       # %bb.0:
4471; ZVFHMIN32-NEXT:    fcvt.d.w fa5, zero
4472; ZVFHMIN32-NEXT:    csrr a0, vlenb
4473; ZVFHMIN32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
4474; ZVFHMIN32-NEXT:    vmfeq.vf v24, v16, fa5
4475; ZVFHMIN32-NEXT:    vmfeq.vf v0, v8, fa5
4476; ZVFHMIN32-NEXT:    srli a0, a0, 3
4477; ZVFHMIN32-NEXT:    add a1, a0, a0
4478; ZVFHMIN32-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
4479; ZVFHMIN32-NEXT:    vslideup.vx v0, v24, a0
4480; ZVFHMIN32-NEXT:    ret
4481;
4482; ZVFHMIN64-LABEL: fcmp_oeq_vf_nx16f64:
4483; ZVFHMIN64:       # %bb.0:
4484; ZVFHMIN64-NEXT:    fmv.d.x fa5, zero
4485; ZVFHMIN64-NEXT:    csrr a0, vlenb
4486; ZVFHMIN64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
4487; ZVFHMIN64-NEXT:    vmfeq.vf v24, v16, fa5
4488; ZVFHMIN64-NEXT:    vmfeq.vf v0, v8, fa5
4489; ZVFHMIN64-NEXT:    srli a0, a0, 3
4490; ZVFHMIN64-NEXT:    add a1, a0, a0
4491; ZVFHMIN64-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
4492; ZVFHMIN64-NEXT:    vslideup.vx v0, v24, a0
4493; ZVFHMIN64-NEXT:    ret
4494  %vc = fcmp oeq <vscale x 16 x double> %va, zeroinitializer
4495  ret <vscale x 16 x i1> %vc
4496}
4497
4498attributes #0 = { "no-nans-fp-math"="true" }
4499