1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+experimental-zfh,+experimental-v -target-abi=ilp32d \
3; RUN:     -verify-machineinstrs < %s | FileCheck %s
4
5; FIXME: The scalar/vector operations ('fv' tests) should swap operands and
6; condition codes accordingly in order to generate a 'vf' instruction.
7
8define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
9; CHECK-LABEL: fcmp_oeq_vv_nxv8f16:
10; CHECK:       # %bb.0:
11; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
12; CHECK-NEXT:    vmfeq.vv v0, v8, v10
13; CHECK-NEXT:    ret
14  %vc = fcmp oeq <vscale x 8 x half> %va, %vb
15  ret <vscale x 8 x i1> %vc
16}
17
18define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
19; CHECK-LABEL: fcmp_oeq_vf_nxv8f16:
20; CHECK:       # %bb.0:
21; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
22; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
23; CHECK-NEXT:    ret
24  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
25  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
26  %vc = fcmp oeq <vscale x 8 x half> %va, %splat
27  ret <vscale x 8 x i1> %vc
28}
29
30define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
31; CHECK-LABEL: fcmp_oeq_fv_nxv8f16:
32; CHECK:       # %bb.0:
33; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
34; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
35; CHECK-NEXT:    ret
36  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
37  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
38  %vc = fcmp oeq <vscale x 8 x half> %splat, %va
39  ret <vscale x 8 x i1> %vc
40}
41
42define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
43; CHECK-LABEL: fcmp_oeq_vv_nxv8f16_nonans:
44; CHECK:       # %bb.0:
45; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
46; CHECK-NEXT:    vmfeq.vv v0, v8, v10
47; CHECK-NEXT:    ret
48  %vc = fcmp oeq <vscale x 8 x half> %va, %vb
49  ret <vscale x 8 x i1> %vc
50}
51
52define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
53; CHECK-LABEL: fcmp_oeq_vf_nxv8f16_nonans:
54; CHECK:       # %bb.0:
55; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
56; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
57; CHECK-NEXT:    ret
58  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
59  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
60  %vc = fcmp oeq <vscale x 8 x half> %va, %splat
61  ret <vscale x 8 x i1> %vc
62}
63
64define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
65; CHECK-LABEL: fcmp_ogt_vv_nxv8f16:
66; CHECK:       # %bb.0:
67; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
68; CHECK-NEXT:    vmflt.vv v0, v10, v8
69; CHECK-NEXT:    ret
70  %vc = fcmp ogt <vscale x 8 x half> %va, %vb
71  ret <vscale x 8 x i1> %vc
72}
73
74define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
75; CHECK-LABEL: fcmp_ogt_vf_nxv8f16:
76; CHECK:       # %bb.0:
77; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
78; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
79; CHECK-NEXT:    ret
80  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
81  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
82  %vc = fcmp ogt <vscale x 8 x half> %va, %splat
83  ret <vscale x 8 x i1> %vc
84}
85
86define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
87; CHECK-LABEL: fcmp_ogt_fv_nxv8f16:
88; CHECK:       # %bb.0:
89; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
90; CHECK-NEXT:    vmflt.vf v0, v8, fa0
91; CHECK-NEXT:    ret
92  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
93  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
94  %vc = fcmp ogt <vscale x 8 x half> %splat, %va
95  ret <vscale x 8 x i1> %vc
96}
97
98define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
99; CHECK-LABEL: fcmp_ogt_vv_nxv8f16_nonans:
100; CHECK:       # %bb.0:
101; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
102; CHECK-NEXT:    vmflt.vv v0, v10, v8
103; CHECK-NEXT:    ret
104  %vc = fcmp ogt <vscale x 8 x half> %va, %vb
105  ret <vscale x 8 x i1> %vc
106}
107
108define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
109; CHECK-LABEL: fcmp_ogt_vf_nxv8f16_nonans:
110; CHECK:       # %bb.0:
111; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
112; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
113; CHECK-NEXT:    ret
114  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
115  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
116  %vc = fcmp ogt <vscale x 8 x half> %va, %splat
117  ret <vscale x 8 x i1> %vc
118}
119
120define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
121; CHECK-LABEL: fcmp_oge_vv_nxv8f16:
122; CHECK:       # %bb.0:
123; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
124; CHECK-NEXT:    vmfle.vv v0, v10, v8
125; CHECK-NEXT:    ret
126  %vc = fcmp oge <vscale x 8 x half> %va, %vb
127  ret <vscale x 8 x i1> %vc
128}
129
130define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
131; CHECK-LABEL: fcmp_oge_vf_nxv8f16:
132; CHECK:       # %bb.0:
133; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
134; CHECK-NEXT:    vmfge.vf v0, v8, fa0
135; CHECK-NEXT:    ret
136  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
137  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
138  %vc = fcmp oge <vscale x 8 x half> %va, %splat
139  ret <vscale x 8 x i1> %vc
140}
141
142define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
143; CHECK-LABEL: fcmp_oge_fv_nxv8f16:
144; CHECK:       # %bb.0:
145; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
146; CHECK-NEXT:    vmfle.vf v0, v8, fa0
147; CHECK-NEXT:    ret
148  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
149  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
150  %vc = fcmp oge <vscale x 8 x half> %splat, %va
151  ret <vscale x 8 x i1> %vc
152}
153
154define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
155; CHECK-LABEL: fcmp_oge_vv_nxv8f16_nonans:
156; CHECK:       # %bb.0:
157; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
158; CHECK-NEXT:    vmfle.vv v0, v10, v8
159; CHECK-NEXT:    ret
160  %vc = fcmp oge <vscale x 8 x half> %va, %vb
161  ret <vscale x 8 x i1> %vc
162}
163
164define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
165; CHECK-LABEL: fcmp_oge_vf_nxv8f16_nonans:
166; CHECK:       # %bb.0:
167; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
168; CHECK-NEXT:    vmfge.vf v0, v8, fa0
169; CHECK-NEXT:    ret
170  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
171  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
172  %vc = fcmp oge <vscale x 8 x half> %va, %splat
173  ret <vscale x 8 x i1> %vc
174}
175
176define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
177; CHECK-LABEL: fcmp_olt_vv_nxv8f16:
178; CHECK:       # %bb.0:
179; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
180; CHECK-NEXT:    vmflt.vv v0, v8, v10
181; CHECK-NEXT:    ret
182  %vc = fcmp olt <vscale x 8 x half> %va, %vb
183  ret <vscale x 8 x i1> %vc
184}
185
186define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
187; CHECK-LABEL: fcmp_olt_vf_nxv8f16:
188; CHECK:       # %bb.0:
189; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
190; CHECK-NEXT:    vmflt.vf v0, v8, fa0
191; CHECK-NEXT:    ret
192  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
193  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
194  %vc = fcmp olt <vscale x 8 x half> %va, %splat
195  ret <vscale x 8 x i1> %vc
196}
197
198define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
199; CHECK-LABEL: fcmp_olt_fv_nxv8f16:
200; CHECK:       # %bb.0:
201; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
202; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
203; CHECK-NEXT:    ret
204  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
205  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
206  %vc = fcmp olt <vscale x 8 x half> %splat, %va
207  ret <vscale x 8 x i1> %vc
208}
209
210define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
211; CHECK-LABEL: fcmp_olt_vv_nxv8f16_nonans:
212; CHECK:       # %bb.0:
213; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
214; CHECK-NEXT:    vmflt.vv v0, v8, v10
215; CHECK-NEXT:    ret
216  %vc = fcmp olt <vscale x 8 x half> %va, %vb
217  ret <vscale x 8 x i1> %vc
218}
219
220define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
221; CHECK-LABEL: fcmp_olt_vf_nxv8f16_nonans:
222; CHECK:       # %bb.0:
223; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
224; CHECK-NEXT:    vmflt.vf v0, v8, fa0
225; CHECK-NEXT:    ret
226  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
227  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
228  %vc = fcmp olt <vscale x 8 x half> %va, %splat
229  ret <vscale x 8 x i1> %vc
230}
231
232define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
233; CHECK-LABEL: fcmp_ole_vv_nxv8f16:
234; CHECK:       # %bb.0:
235; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
236; CHECK-NEXT:    vmfle.vv v0, v8, v10
237; CHECK-NEXT:    ret
238  %vc = fcmp ole <vscale x 8 x half> %va, %vb
239  ret <vscale x 8 x i1> %vc
240}
241
242define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
243; CHECK-LABEL: fcmp_ole_vf_nxv8f16:
244; CHECK:       # %bb.0:
245; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
246; CHECK-NEXT:    vmfle.vf v0, v8, fa0
247; CHECK-NEXT:    ret
248  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
249  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
250  %vc = fcmp ole <vscale x 8 x half> %va, %splat
251  ret <vscale x 8 x i1> %vc
252}
253
254define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
255; CHECK-LABEL: fcmp_ole_fv_nxv8f16:
256; CHECK:       # %bb.0:
257; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
258; CHECK-NEXT:    vmfge.vf v0, v8, fa0
259; CHECK-NEXT:    ret
260  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
261  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
262  %vc = fcmp ole <vscale x 8 x half> %splat, %va
263  ret <vscale x 8 x i1> %vc
264}
265
266define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
267; CHECK-LABEL: fcmp_ole_vv_nxv8f16_nonans:
268; CHECK:       # %bb.0:
269; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
270; CHECK-NEXT:    vmfle.vv v0, v8, v10
271; CHECK-NEXT:    ret
272  %vc = fcmp ole <vscale x 8 x half> %va, %vb
273  ret <vscale x 8 x i1> %vc
274}
275
276define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
277; CHECK-LABEL: fcmp_ole_vf_nxv8f16_nonans:
278; CHECK:       # %bb.0:
279; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
280; CHECK-NEXT:    vmfle.vf v0, v8, fa0
281; CHECK-NEXT:    ret
282  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
283  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
284  %vc = fcmp ole <vscale x 8 x half> %va, %splat
285  ret <vscale x 8 x i1> %vc
286}
287
288define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
289; CHECK-LABEL: fcmp_one_vv_nxv8f16:
290; CHECK:       # %bb.0:
291; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
292; CHECK-NEXT:    vmflt.vv v25, v8, v10
293; CHECK-NEXT:    vmflt.vv v26, v10, v8
294; CHECK-NEXT:    vmor.mm v0, v26, v25
295; CHECK-NEXT:    ret
296  %vc = fcmp one <vscale x 8 x half> %va, %vb
297  ret <vscale x 8 x i1> %vc
298}
299
300define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
301; CHECK-LABEL: fcmp_one_vf_nxv8f16:
302; CHECK:       # %bb.0:
303; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
304; CHECK-NEXT:    vmflt.vf v25, v8, fa0
305; CHECK-NEXT:    vmfgt.vf v26, v8, fa0
306; CHECK-NEXT:    vmor.mm v0, v26, v25
307; CHECK-NEXT:    ret
308  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
309  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
310  %vc = fcmp one <vscale x 8 x half> %va, %splat
311  ret <vscale x 8 x i1> %vc
312}
313
314define <vscale x 8 x i1> @fcmp_one_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
315; CHECK-LABEL: fcmp_one_fv_nxv8f16:
316; CHECK:       # %bb.0:
317; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
318; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
319; CHECK-NEXT:    vmflt.vf v26, v8, fa0
320; CHECK-NEXT:    vmor.mm v0, v26, v25
321; CHECK-NEXT:    ret
322  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
323  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
324  %vc = fcmp one <vscale x 8 x half> %splat, %va
325  ret <vscale x 8 x i1> %vc
326}
327
328define <vscale x 8 x i1> @fcmp_one_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
329; CHECK-LABEL: fcmp_one_vv_nxv8f16_nonans:
330; CHECK:       # %bb.0:
331; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
332; CHECK-NEXT:    vmfne.vv v0, v8, v10
333; CHECK-NEXT:    ret
334  %vc = fcmp one <vscale x 8 x half> %va, %vb
335  ret <vscale x 8 x i1> %vc
336}
337
338define <vscale x 8 x i1> @fcmp_one_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
339; CHECK-LABEL: fcmp_one_vf_nxv8f16_nonans:
340; CHECK:       # %bb.0:
341; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
342; CHECK-NEXT:    vmfne.vf v0, v8, fa0
343; CHECK-NEXT:    ret
344  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
345  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
346  %vc = fcmp one <vscale x 8 x half> %va, %splat
347  ret <vscale x 8 x i1> %vc
348}
349
350define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
351; CHECK-LABEL: fcmp_ord_vv_nxv8f16:
352; CHECK:       # %bb.0:
353; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
354; CHECK-NEXT:    vmfeq.vv v25, v10, v10
355; CHECK-NEXT:    vmfeq.vv v26, v8, v8
356; CHECK-NEXT:    vmand.mm v0, v26, v25
357; CHECK-NEXT:    ret
358  %vc = fcmp ord <vscale x 8 x half> %va, %vb
359  ret <vscale x 8 x i1> %vc
360}
361
362define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
363; CHECK-LABEL: fcmp_ord_vf_nxv8f16:
364; CHECK:       # %bb.0:
365; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
366; CHECK-NEXT:    vfmv.v.f v26, fa0
367; CHECK-NEXT:    vmfeq.vf v25, v26, fa0
368; CHECK-NEXT:    vmfeq.vv v26, v8, v8
369; CHECK-NEXT:    vmand.mm v0, v26, v25
370; CHECK-NEXT:    ret
371  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
372  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
373  %vc = fcmp ord <vscale x 8 x half> %va, %splat
374  ret <vscale x 8 x i1> %vc
375}
376
377define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
378; CHECK-LABEL: fcmp_ord_fv_nxv8f16:
379; CHECK:       # %bb.0:
380; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
381; CHECK-NEXT:    vfmv.v.f v26, fa0
382; CHECK-NEXT:    vmfeq.vf v25, v26, fa0
383; CHECK-NEXT:    vmfeq.vv v26, v8, v8
384; CHECK-NEXT:    vmand.mm v0, v25, v26
385; CHECK-NEXT:    ret
386  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
387  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
388  %vc = fcmp ord <vscale x 8 x half> %splat, %va
389  ret <vscale x 8 x i1> %vc
390}
391
392define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
393; CHECK-LABEL: fcmp_ord_vv_nxv8f16_nonans:
394; CHECK:       # %bb.0:
395; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
396; CHECK-NEXT:    vmfeq.vv v25, v10, v10
397; CHECK-NEXT:    vmfeq.vv v26, v8, v8
398; CHECK-NEXT:    vmand.mm v0, v26, v25
399; CHECK-NEXT:    ret
400  %vc = fcmp ord <vscale x 8 x half> %va, %vb
401  ret <vscale x 8 x i1> %vc
402}
403
404define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
405; CHECK-LABEL: fcmp_ord_vf_nxv8f16_nonans:
406; CHECK:       # %bb.0:
407; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
408; CHECK-NEXT:    vfmv.v.f v26, fa0
409; CHECK-NEXT:    vmfeq.vf v25, v26, fa0
410; CHECK-NEXT:    vmfeq.vv v26, v8, v8
411; CHECK-NEXT:    vmand.mm v0, v26, v25
412; CHECK-NEXT:    ret
413  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
414  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
415  %vc = fcmp ord <vscale x 8 x half> %va, %splat
416  ret <vscale x 8 x i1> %vc
417}
418
419define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
420; CHECK-LABEL: fcmp_ueq_vv_nxv8f16:
421; CHECK:       # %bb.0:
422; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
423; CHECK-NEXT:    vmflt.vv v25, v8, v10
424; CHECK-NEXT:    vmflt.vv v26, v10, v8
425; CHECK-NEXT:    vmnor.mm v0, v26, v25
426; CHECK-NEXT:    ret
427  %vc = fcmp ueq <vscale x 8 x half> %va, %vb
428  ret <vscale x 8 x i1> %vc
429}
430
431define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
432; CHECK-LABEL: fcmp_ueq_vf_nxv8f16:
433; CHECK:       # %bb.0:
434; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
435; CHECK-NEXT:    vmflt.vf v25, v8, fa0
436; CHECK-NEXT:    vmfgt.vf v26, v8, fa0
437; CHECK-NEXT:    vmnor.mm v0, v26, v25
438; CHECK-NEXT:    ret
439  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
440  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
441  %vc = fcmp ueq <vscale x 8 x half> %va, %splat
442  ret <vscale x 8 x i1> %vc
443}
444
445define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
446; CHECK-LABEL: fcmp_ueq_fv_nxv8f16:
447; CHECK:       # %bb.0:
448; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
449; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
450; CHECK-NEXT:    vmflt.vf v26, v8, fa0
451; CHECK-NEXT:    vmnor.mm v0, v26, v25
452; CHECK-NEXT:    ret
453  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
454  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
455  %vc = fcmp ueq <vscale x 8 x half> %splat, %va
456  ret <vscale x 8 x i1> %vc
457}
458
459define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
460; CHECK-LABEL: fcmp_ueq_vv_nxv8f16_nonans:
461; CHECK:       # %bb.0:
462; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
463; CHECK-NEXT:    vmfeq.vv v0, v8, v10
464; CHECK-NEXT:    ret
465  %vc = fcmp ueq <vscale x 8 x half> %va, %vb
466  ret <vscale x 8 x i1> %vc
467}
468
469define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
470; CHECK-LABEL: fcmp_ueq_vf_nxv8f16_nonans:
471; CHECK:       # %bb.0:
472; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
473; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
474; CHECK-NEXT:    ret
475  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
476  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
477  %vc = fcmp ueq <vscale x 8 x half> %va, %splat
478  ret <vscale x 8 x i1> %vc
479}
480
481define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
482; CHECK-LABEL: fcmp_ugt_vv_nxv8f16:
483; CHECK:       # %bb.0:
484; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
485; CHECK-NEXT:    vmfle.vv v25, v8, v10
486; CHECK-NEXT:    vmnand.mm v0, v25, v25
487; CHECK-NEXT:    ret
488  %vc = fcmp ugt <vscale x 8 x half> %va, %vb
489  ret <vscale x 8 x i1> %vc
490}
491
492define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
493; CHECK-LABEL: fcmp_ugt_vf_nxv8f16:
494; CHECK:       # %bb.0:
495; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
496; CHECK-NEXT:    vmfle.vf v25, v8, fa0
497; CHECK-NEXT:    vmnand.mm v0, v25, v25
498; CHECK-NEXT:    ret
499  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
500  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
501  %vc = fcmp ugt <vscale x 8 x half> %va, %splat
502  ret <vscale x 8 x i1> %vc
503}
504
505define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
506; CHECK-LABEL: fcmp_ugt_fv_nxv8f16:
507; CHECK:       # %bb.0:
508; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
509; CHECK-NEXT:    vmfge.vf v25, v8, fa0
510; CHECK-NEXT:    vmnand.mm v0, v25, v25
511; CHECK-NEXT:    ret
512  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
513  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
514  %vc = fcmp ugt <vscale x 8 x half> %splat, %va
515  ret <vscale x 8 x i1> %vc
516}
517
518define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
519; CHECK-LABEL: fcmp_ugt_vv_nxv8f16_nonans:
520; CHECK:       # %bb.0:
521; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
522; CHECK-NEXT:    vmflt.vv v0, v10, v8
523; CHECK-NEXT:    ret
524  %vc = fcmp ugt <vscale x 8 x half> %va, %vb
525  ret <vscale x 8 x i1> %vc
526}
527
528define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
529; CHECK-LABEL: fcmp_ugt_vf_nxv8f16_nonans:
530; CHECK:       # %bb.0:
531; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
532; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
533; CHECK-NEXT:    ret
534  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
535  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
536  %vc = fcmp ugt <vscale x 8 x half> %va, %splat
537  ret <vscale x 8 x i1> %vc
538}
539
540define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
541; CHECK-LABEL: fcmp_uge_vv_nxv8f16:
542; CHECK:       # %bb.0:
543; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
544; CHECK-NEXT:    vmflt.vv v25, v8, v10
545; CHECK-NEXT:    vmnand.mm v0, v25, v25
546; CHECK-NEXT:    ret
547  %vc = fcmp uge <vscale x 8 x half> %va, %vb
548  ret <vscale x 8 x i1> %vc
549}
550
551define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
552; CHECK-LABEL: fcmp_uge_vf_nxv8f16:
553; CHECK:       # %bb.0:
554; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
555; CHECK-NEXT:    vmflt.vf v25, v8, fa0
556; CHECK-NEXT:    vmnand.mm v0, v25, v25
557; CHECK-NEXT:    ret
558  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
559  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
560  %vc = fcmp uge <vscale x 8 x half> %va, %splat
561  ret <vscale x 8 x i1> %vc
562}
563
564define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
565; CHECK-LABEL: fcmp_uge_fv_nxv8f16:
566; CHECK:       # %bb.0:
567; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
568; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
569; CHECK-NEXT:    vmnand.mm v0, v25, v25
570; CHECK-NEXT:    ret
571  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
572  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
573  %vc = fcmp uge <vscale x 8 x half> %splat, %va
574  ret <vscale x 8 x i1> %vc
575}
576
577define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
578; CHECK-LABEL: fcmp_uge_vv_nxv8f16_nonans:
579; CHECK:       # %bb.0:
580; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
581; CHECK-NEXT:    vmfle.vv v0, v10, v8
582; CHECK-NEXT:    ret
583  %vc = fcmp uge <vscale x 8 x half> %va, %vb
584  ret <vscale x 8 x i1> %vc
585}
586
587define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
588; CHECK-LABEL: fcmp_uge_vf_nxv8f16_nonans:
589; CHECK:       # %bb.0:
590; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
591; CHECK-NEXT:    vmfge.vf v0, v8, fa0
592; CHECK-NEXT:    ret
593  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
594  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
595  %vc = fcmp uge <vscale x 8 x half> %va, %splat
596  ret <vscale x 8 x i1> %vc
597}
598
599define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
600; CHECK-LABEL: fcmp_ult_vv_nxv8f16:
601; CHECK:       # %bb.0:
602; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
603; CHECK-NEXT:    vmfle.vv v25, v10, v8
604; CHECK-NEXT:    vmnand.mm v0, v25, v25
605; CHECK-NEXT:    ret
606  %vc = fcmp ult <vscale x 8 x half> %va, %vb
607  ret <vscale x 8 x i1> %vc
608}
609
610define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
611; CHECK-LABEL: fcmp_ult_vf_nxv8f16:
612; CHECK:       # %bb.0:
613; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
614; CHECK-NEXT:    vmfge.vf v25, v8, fa0
615; CHECK-NEXT:    vmnand.mm v0, v25, v25
616; CHECK-NEXT:    ret
617  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
618  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
619  %vc = fcmp ult <vscale x 8 x half> %va, %splat
620  ret <vscale x 8 x i1> %vc
621}
622
623define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
624; CHECK-LABEL: fcmp_ult_fv_nxv8f16:
625; CHECK:       # %bb.0:
626; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
627; CHECK-NEXT:    vmfle.vf v25, v8, fa0
628; CHECK-NEXT:    vmnand.mm v0, v25, v25
629; CHECK-NEXT:    ret
630  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
631  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
632  %vc = fcmp ult <vscale x 8 x half> %splat, %va
633  ret <vscale x 8 x i1> %vc
634}
635
636define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
637; CHECK-LABEL: fcmp_ult_vv_nxv8f16_nonans:
638; CHECK:       # %bb.0:
639; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
640; CHECK-NEXT:    vmflt.vv v0, v8, v10
641; CHECK-NEXT:    ret
642  %vc = fcmp ult <vscale x 8 x half> %va, %vb
643  ret <vscale x 8 x i1> %vc
644}
645
646define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
647; CHECK-LABEL: fcmp_ult_vf_nxv8f16_nonans:
648; CHECK:       # %bb.0:
649; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
650; CHECK-NEXT:    vmflt.vf v0, v8, fa0
651; CHECK-NEXT:    ret
652  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
653  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
654  %vc = fcmp ult <vscale x 8 x half> %va, %splat
655  ret <vscale x 8 x i1> %vc
656}
657
658define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
659; CHECK-LABEL: fcmp_ule_vv_nxv8f16:
660; CHECK:       # %bb.0:
661; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
662; CHECK-NEXT:    vmflt.vv v25, v10, v8
663; CHECK-NEXT:    vmnand.mm v0, v25, v25
664; CHECK-NEXT:    ret
665  %vc = fcmp ule <vscale x 8 x half> %va, %vb
666  ret <vscale x 8 x i1> %vc
667}
668
669define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
670; CHECK-LABEL: fcmp_ule_vf_nxv8f16:
671; CHECK:       # %bb.0:
672; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
673; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
674; CHECK-NEXT:    vmnand.mm v0, v25, v25
675; CHECK-NEXT:    ret
676  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
677  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
678  %vc = fcmp ule <vscale x 8 x half> %va, %splat
679  ret <vscale x 8 x i1> %vc
680}
681
682define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
683; CHECK-LABEL: fcmp_ule_fv_nxv8f16:
684; CHECK:       # %bb.0:
685; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
686; CHECK-NEXT:    vmflt.vf v25, v8, fa0
687; CHECK-NEXT:    vmnand.mm v0, v25, v25
688; CHECK-NEXT:    ret
689  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
690  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
691  %vc = fcmp ule <vscale x 8 x half> %splat, %va
692  ret <vscale x 8 x i1> %vc
693}
694
695define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
696; CHECK-LABEL: fcmp_ule_vv_nxv8f16_nonans:
697; CHECK:       # %bb.0:
698; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
699; CHECK-NEXT:    vmfle.vv v0, v8, v10
700; CHECK-NEXT:    ret
701  %vc = fcmp ule <vscale x 8 x half> %va, %vb
702  ret <vscale x 8 x i1> %vc
703}
704
705define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
706; CHECK-LABEL: fcmp_ule_vf_nxv8f16_nonans:
707; CHECK:       # %bb.0:
708; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
709; CHECK-NEXT:    vmfle.vf v0, v8, fa0
710; CHECK-NEXT:    ret
711  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
712  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
713  %vc = fcmp ule <vscale x 8 x half> %va, %splat
714  ret <vscale x 8 x i1> %vc
715}
716
717define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
718; CHECK-LABEL: fcmp_une_vv_nxv8f16:
719; CHECK:       # %bb.0:
720; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
721; CHECK-NEXT:    vmfne.vv v0, v8, v10
722; CHECK-NEXT:    ret
723  %vc = fcmp une <vscale x 8 x half> %va, %vb
724  ret <vscale x 8 x i1> %vc
725}
726
727define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
728; CHECK-LABEL: fcmp_une_vf_nxv8f16:
729; CHECK:       # %bb.0:
730; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
731; CHECK-NEXT:    vmfne.vf v0, v8, fa0
732; CHECK-NEXT:    ret
733  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
734  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
735  %vc = fcmp une <vscale x 8 x half> %va, %splat
736  ret <vscale x 8 x i1> %vc
737}
738
739define <vscale x 8 x i1> @fcmp_une_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
740; CHECK-LABEL: fcmp_une_fv_nxv8f16:
741; CHECK:       # %bb.0:
742; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
743; CHECK-NEXT:    vmfne.vf v0, v8, fa0
744; CHECK-NEXT:    ret
745  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
746  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
747  %vc = fcmp une <vscale x 8 x half> %splat, %va
748  ret <vscale x 8 x i1> %vc
749}
750
751define <vscale x 8 x i1> @fcmp_une_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
752; CHECK-LABEL: fcmp_une_vv_nxv8f16_nonans:
753; CHECK:       # %bb.0:
754; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
755; CHECK-NEXT:    vmfne.vv v0, v8, v10
756; CHECK-NEXT:    ret
757  %vc = fcmp une <vscale x 8 x half> %va, %vb
758  ret <vscale x 8 x i1> %vc
759}
760
761define <vscale x 8 x i1> @fcmp_une_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
762; CHECK-LABEL: fcmp_une_vf_nxv8f16_nonans:
763; CHECK:       # %bb.0:
764; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
765; CHECK-NEXT:    vmfne.vf v0, v8, fa0
766; CHECK-NEXT:    ret
767  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
768  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
769  %vc = fcmp une <vscale x 8 x half> %va, %splat
770  ret <vscale x 8 x i1> %vc
771}
772
773define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) {
774; CHECK-LABEL: fcmp_uno_vv_nxv8f16:
775; CHECK:       # %bb.0:
776; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
777; CHECK-NEXT:    vmfne.vv v25, v10, v10
778; CHECK-NEXT:    vmfne.vv v26, v8, v8
779; CHECK-NEXT:    vmor.mm v0, v26, v25
780; CHECK-NEXT:    ret
781  %vc = fcmp uno <vscale x 8 x half> %va, %vb
782  ret <vscale x 8 x i1> %vc
783}
784
785define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16(<vscale x 8 x half> %va, half %b) {
786; CHECK-LABEL: fcmp_uno_vf_nxv8f16:
787; CHECK:       # %bb.0:
788; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
789; CHECK-NEXT:    vfmv.v.f v26, fa0
790; CHECK-NEXT:    vmfne.vf v25, v26, fa0
791; CHECK-NEXT:    vmfne.vv v26, v8, v8
792; CHECK-NEXT:    vmor.mm v0, v26, v25
793; CHECK-NEXT:    ret
794  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
795  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
796  %vc = fcmp uno <vscale x 8 x half> %va, %splat
797  ret <vscale x 8 x i1> %vc
798}
799
800define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f16(<vscale x 8 x half> %va, half %b) {
801; CHECK-LABEL: fcmp_uno_fv_nxv8f16:
802; CHECK:       # %bb.0:
803; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
804; CHECK-NEXT:    vfmv.v.f v26, fa0
805; CHECK-NEXT:    vmfne.vf v25, v26, fa0
806; CHECK-NEXT:    vmfne.vv v26, v8, v8
807; CHECK-NEXT:    vmor.mm v0, v25, v26
808; CHECK-NEXT:    ret
809  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
810  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
811  %vc = fcmp uno <vscale x 8 x half> %splat, %va
812  ret <vscale x 8 x i1> %vc
813}
814
815define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f16_nonans(<vscale x 8 x half> %va, <vscale x 8 x half> %vb) #0 {
816; CHECK-LABEL: fcmp_uno_vv_nxv8f16_nonans:
817; CHECK:       # %bb.0:
818; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
819; CHECK-NEXT:    vmfne.vv v25, v10, v10
820; CHECK-NEXT:    vmfne.vv v26, v8, v8
821; CHECK-NEXT:    vmor.mm v0, v26, v25
822; CHECK-NEXT:    ret
823  %vc = fcmp uno <vscale x 8 x half> %va, %vb
824  ret <vscale x 8 x i1> %vc
825}
826
827define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f16_nonans(<vscale x 8 x half> %va, half %b) #0 {
828; CHECK-LABEL: fcmp_uno_vf_nxv8f16_nonans:
829; CHECK:       # %bb.0:
830; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, mu
831; CHECK-NEXT:    vfmv.v.f v26, fa0
832; CHECK-NEXT:    vmfne.vf v25, v26, fa0
833; CHECK-NEXT:    vmfne.vv v26, v8, v8
834; CHECK-NEXT:    vmor.mm v0, v26, v25
835; CHECK-NEXT:    ret
836  %head = insertelement <vscale x 8 x half> undef, half %b, i32 0
837  %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> undef, <vscale x 8 x i32> zeroinitializer
838  %vc = fcmp uno <vscale x 8 x half> %va, %splat
839  ret <vscale x 8 x i1> %vc
840}
841
842define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
843; CHECK-LABEL: fcmp_oeq_vv_nxv8f32:
844; CHECK:       # %bb.0:
845; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
846; CHECK-NEXT:    vmfeq.vv v0, v8, v12
847; CHECK-NEXT:    ret
848  %vc = fcmp oeq <vscale x 8 x float> %va, %vb
849  ret <vscale x 8 x i1> %vc
850}
851
852define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
853; CHECK-LABEL: fcmp_oeq_vf_nxv8f32:
854; CHECK:       # %bb.0:
855; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
856; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
857; CHECK-NEXT:    ret
858  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
859  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
860  %vc = fcmp oeq <vscale x 8 x float> %va, %splat
861  ret <vscale x 8 x i1> %vc
862}
863
864define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
865; CHECK-LABEL: fcmp_oeq_fv_nxv8f32:
866; CHECK:       # %bb.0:
867; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
868; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
869; CHECK-NEXT:    ret
870  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
871  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
872  %vc = fcmp oeq <vscale x 8 x float> %splat, %va
873  ret <vscale x 8 x i1> %vc
874}
875
876define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
877; CHECK-LABEL: fcmp_oeq_vv_nxv8f32_nonans:
878; CHECK:       # %bb.0:
879; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
880; CHECK-NEXT:    vmfeq.vv v0, v8, v12
881; CHECK-NEXT:    ret
882  %vc = fcmp oeq <vscale x 8 x float> %va, %vb
883  ret <vscale x 8 x i1> %vc
884}
885
886define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
887; CHECK-LABEL: fcmp_oeq_vf_nxv8f32_nonans:
888; CHECK:       # %bb.0:
889; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
890; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
891; CHECK-NEXT:    ret
892  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
893  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
894  %vc = fcmp oeq <vscale x 8 x float> %va, %splat
895  ret <vscale x 8 x i1> %vc
896}
897
898define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
899; CHECK-LABEL: fcmp_ogt_vv_nxv8f32:
900; CHECK:       # %bb.0:
901; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
902; CHECK-NEXT:    vmflt.vv v0, v12, v8
903; CHECK-NEXT:    ret
904  %vc = fcmp ogt <vscale x 8 x float> %va, %vb
905  ret <vscale x 8 x i1> %vc
906}
907
908define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
909; CHECK-LABEL: fcmp_ogt_vf_nxv8f32:
910; CHECK:       # %bb.0:
911; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
912; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
913; CHECK-NEXT:    ret
914  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
915  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
916  %vc = fcmp ogt <vscale x 8 x float> %va, %splat
917  ret <vscale x 8 x i1> %vc
918}
919
920define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
921; CHECK-LABEL: fcmp_ogt_fv_nxv8f32:
922; CHECK:       # %bb.0:
923; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
924; CHECK-NEXT:    vmflt.vf v0, v8, fa0
925; CHECK-NEXT:    ret
926  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
927  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
928  %vc = fcmp ogt <vscale x 8 x float> %splat, %va
929  ret <vscale x 8 x i1> %vc
930}
931
932define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
933; CHECK-LABEL: fcmp_ogt_vv_nxv8f32_nonans:
934; CHECK:       # %bb.0:
935; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
936; CHECK-NEXT:    vmflt.vv v0, v12, v8
937; CHECK-NEXT:    ret
938  %vc = fcmp ogt <vscale x 8 x float> %va, %vb
939  ret <vscale x 8 x i1> %vc
940}
941
942define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
943; CHECK-LABEL: fcmp_ogt_vf_nxv8f32_nonans:
944; CHECK:       # %bb.0:
945; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
946; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
947; CHECK-NEXT:    ret
948  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
949  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
950  %vc = fcmp ogt <vscale x 8 x float> %va, %splat
951  ret <vscale x 8 x i1> %vc
952}
953
954define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
955; CHECK-LABEL: fcmp_oge_vv_nxv8f32:
956; CHECK:       # %bb.0:
957; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
958; CHECK-NEXT:    vmfle.vv v0, v12, v8
959; CHECK-NEXT:    ret
960  %vc = fcmp oge <vscale x 8 x float> %va, %vb
961  ret <vscale x 8 x i1> %vc
962}
963
964define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
965; CHECK-LABEL: fcmp_oge_vf_nxv8f32:
966; CHECK:       # %bb.0:
967; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
968; CHECK-NEXT:    vmfge.vf v0, v8, fa0
969; CHECK-NEXT:    ret
970  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
971  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
972  %vc = fcmp oge <vscale x 8 x float> %va, %splat
973  ret <vscale x 8 x i1> %vc
974}
975
976define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
977; CHECK-LABEL: fcmp_oge_fv_nxv8f32:
978; CHECK:       # %bb.0:
979; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
980; CHECK-NEXT:    vmfle.vf v0, v8, fa0
981; CHECK-NEXT:    ret
982  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
983  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
984  %vc = fcmp oge <vscale x 8 x float> %splat, %va
985  ret <vscale x 8 x i1> %vc
986}
987
988define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
989; CHECK-LABEL: fcmp_oge_vv_nxv8f32_nonans:
990; CHECK:       # %bb.0:
991; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
992; CHECK-NEXT:    vmfle.vv v0, v12, v8
993; CHECK-NEXT:    ret
994  %vc = fcmp oge <vscale x 8 x float> %va, %vb
995  ret <vscale x 8 x i1> %vc
996}
997
998define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
999; CHECK-LABEL: fcmp_oge_vf_nxv8f32_nonans:
1000; CHECK:       # %bb.0:
1001; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1002; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1003; CHECK-NEXT:    ret
1004  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1005  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1006  %vc = fcmp oge <vscale x 8 x float> %va, %splat
1007  ret <vscale x 8 x i1> %vc
1008}
1009
1010define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1011; CHECK-LABEL: fcmp_olt_vv_nxv8f32:
1012; CHECK:       # %bb.0:
1013; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1014; CHECK-NEXT:    vmflt.vv v0, v8, v12
1015; CHECK-NEXT:    ret
1016  %vc = fcmp olt <vscale x 8 x float> %va, %vb
1017  ret <vscale x 8 x i1> %vc
1018}
1019
1020define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1021; CHECK-LABEL: fcmp_olt_vf_nxv8f32:
1022; CHECK:       # %bb.0:
1023; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1024; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1025; CHECK-NEXT:    ret
1026  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1027  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1028  %vc = fcmp olt <vscale x 8 x float> %va, %splat
1029  ret <vscale x 8 x i1> %vc
1030}
1031
1032define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1033; CHECK-LABEL: fcmp_olt_fv_nxv8f32:
1034; CHECK:       # %bb.0:
1035; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1036; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1037; CHECK-NEXT:    ret
1038  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1039  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1040  %vc = fcmp olt <vscale x 8 x float> %splat, %va
1041  ret <vscale x 8 x i1> %vc
1042}
1043
1044define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1045; CHECK-LABEL: fcmp_olt_vv_nxv8f32_nonans:
1046; CHECK:       # %bb.0:
1047; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1048; CHECK-NEXT:    vmflt.vv v0, v8, v12
1049; CHECK-NEXT:    ret
1050  %vc = fcmp olt <vscale x 8 x float> %va, %vb
1051  ret <vscale x 8 x i1> %vc
1052}
1053
1054define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1055; CHECK-LABEL: fcmp_olt_vf_nxv8f32_nonans:
1056; CHECK:       # %bb.0:
1057; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1058; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1059; CHECK-NEXT:    ret
1060  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1061  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1062  %vc = fcmp olt <vscale x 8 x float> %va, %splat
1063  ret <vscale x 8 x i1> %vc
1064}
1065
1066define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1067; CHECK-LABEL: fcmp_ole_vv_nxv8f32:
1068; CHECK:       # %bb.0:
1069; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1070; CHECK-NEXT:    vmfle.vv v0, v8, v12
1071; CHECK-NEXT:    ret
1072  %vc = fcmp ole <vscale x 8 x float> %va, %vb
1073  ret <vscale x 8 x i1> %vc
1074}
1075
1076define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1077; CHECK-LABEL: fcmp_ole_vf_nxv8f32:
1078; CHECK:       # %bb.0:
1079; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1080; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1081; CHECK-NEXT:    ret
1082  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1083  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1084  %vc = fcmp ole <vscale x 8 x float> %va, %splat
1085  ret <vscale x 8 x i1> %vc
1086}
1087
1088define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1089; CHECK-LABEL: fcmp_ole_fv_nxv8f32:
1090; CHECK:       # %bb.0:
1091; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1092; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1093; CHECK-NEXT:    ret
1094  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1095  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1096  %vc = fcmp ole <vscale x 8 x float> %splat, %va
1097  ret <vscale x 8 x i1> %vc
1098}
1099
1100define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1101; CHECK-LABEL: fcmp_ole_vv_nxv8f32_nonans:
1102; CHECK:       # %bb.0:
1103; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1104; CHECK-NEXT:    vmfle.vv v0, v8, v12
1105; CHECK-NEXT:    ret
1106  %vc = fcmp ole <vscale x 8 x float> %va, %vb
1107  ret <vscale x 8 x i1> %vc
1108}
1109
1110define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1111; CHECK-LABEL: fcmp_ole_vf_nxv8f32_nonans:
1112; CHECK:       # %bb.0:
1113; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1114; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1115; CHECK-NEXT:    ret
1116  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1117  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1118  %vc = fcmp ole <vscale x 8 x float> %va, %splat
1119  ret <vscale x 8 x i1> %vc
1120}
1121
1122define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1123; CHECK-LABEL: fcmp_one_vv_nxv8f32:
1124; CHECK:       # %bb.0:
1125; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1126; CHECK-NEXT:    vmflt.vv v25, v8, v12
1127; CHECK-NEXT:    vmflt.vv v26, v12, v8
1128; CHECK-NEXT:    vmor.mm v0, v26, v25
1129; CHECK-NEXT:    ret
1130  %vc = fcmp one <vscale x 8 x float> %va, %vb
1131  ret <vscale x 8 x i1> %vc
1132}
1133
1134define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1135; CHECK-LABEL: fcmp_one_vf_nxv8f32:
1136; CHECK:       # %bb.0:
1137; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1138; CHECK-NEXT:    vmflt.vf v25, v8, fa0
1139; CHECK-NEXT:    vmfgt.vf v26, v8, fa0
1140; CHECK-NEXT:    vmor.mm v0, v26, v25
1141; CHECK-NEXT:    ret
1142  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1143  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1144  %vc = fcmp one <vscale x 8 x float> %va, %splat
1145  ret <vscale x 8 x i1> %vc
1146}
1147
1148define <vscale x 8 x i1> @fcmp_one_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1149; CHECK-LABEL: fcmp_one_fv_nxv8f32:
1150; CHECK:       # %bb.0:
1151; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1152; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
1153; CHECK-NEXT:    vmflt.vf v26, v8, fa0
1154; CHECK-NEXT:    vmor.mm v0, v26, v25
1155; CHECK-NEXT:    ret
1156  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1157  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1158  %vc = fcmp one <vscale x 8 x float> %splat, %va
1159  ret <vscale x 8 x i1> %vc
1160}
1161
1162define <vscale x 8 x i1> @fcmp_one_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1163; CHECK-LABEL: fcmp_one_vv_nxv8f32_nonans:
1164; CHECK:       # %bb.0:
1165; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1166; CHECK-NEXT:    vmfne.vv v0, v8, v12
1167; CHECK-NEXT:    ret
1168  %vc = fcmp one <vscale x 8 x float> %va, %vb
1169  ret <vscale x 8 x i1> %vc
1170}
1171
1172define <vscale x 8 x i1> @fcmp_one_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1173; CHECK-LABEL: fcmp_one_vf_nxv8f32_nonans:
1174; CHECK:       # %bb.0:
1175; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1176; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1177; CHECK-NEXT:    ret
1178  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1179  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1180  %vc = fcmp one <vscale x 8 x float> %va, %splat
1181  ret <vscale x 8 x i1> %vc
1182}
1183
1184define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1185; CHECK-LABEL: fcmp_ord_vv_nxv8f32:
1186; CHECK:       # %bb.0:
1187; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1188; CHECK-NEXT:    vmfeq.vv v25, v12, v12
1189; CHECK-NEXT:    vmfeq.vv v26, v8, v8
1190; CHECK-NEXT:    vmand.mm v0, v26, v25
1191; CHECK-NEXT:    ret
1192  %vc = fcmp ord <vscale x 8 x float> %va, %vb
1193  ret <vscale x 8 x i1> %vc
1194}
1195
1196define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1197; CHECK-LABEL: fcmp_ord_vf_nxv8f32:
1198; CHECK:       # %bb.0:
1199; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1200; CHECK-NEXT:    vfmv.v.f v28, fa0
1201; CHECK-NEXT:    vmfeq.vf v25, v28, fa0
1202; CHECK-NEXT:    vmfeq.vv v26, v8, v8
1203; CHECK-NEXT:    vmand.mm v0, v26, v25
1204; CHECK-NEXT:    ret
1205  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1206  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1207  %vc = fcmp ord <vscale x 8 x float> %va, %splat
1208  ret <vscale x 8 x i1> %vc
1209}
1210
1211define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1212; CHECK-LABEL: fcmp_ord_fv_nxv8f32:
1213; CHECK:       # %bb.0:
1214; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1215; CHECK-NEXT:    vfmv.v.f v28, fa0
1216; CHECK-NEXT:    vmfeq.vf v25, v28, fa0
1217; CHECK-NEXT:    vmfeq.vv v26, v8, v8
1218; CHECK-NEXT:    vmand.mm v0, v25, v26
1219; CHECK-NEXT:    ret
1220  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1221  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1222  %vc = fcmp ord <vscale x 8 x float> %splat, %va
1223  ret <vscale x 8 x i1> %vc
1224}
1225
1226define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1227; CHECK-LABEL: fcmp_ord_vv_nxv8f32_nonans:
1228; CHECK:       # %bb.0:
1229; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1230; CHECK-NEXT:    vmfeq.vv v25, v12, v12
1231; CHECK-NEXT:    vmfeq.vv v26, v8, v8
1232; CHECK-NEXT:    vmand.mm v0, v26, v25
1233; CHECK-NEXT:    ret
1234  %vc = fcmp ord <vscale x 8 x float> %va, %vb
1235  ret <vscale x 8 x i1> %vc
1236}
1237
1238define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1239; CHECK-LABEL: fcmp_ord_vf_nxv8f32_nonans:
1240; CHECK:       # %bb.0:
1241; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1242; CHECK-NEXT:    vfmv.v.f v28, fa0
1243; CHECK-NEXT:    vmfeq.vf v25, v28, fa0
1244; CHECK-NEXT:    vmfeq.vv v26, v8, v8
1245; CHECK-NEXT:    vmand.mm v0, v26, v25
1246; CHECK-NEXT:    ret
1247  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1248  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1249  %vc = fcmp ord <vscale x 8 x float> %va, %splat
1250  ret <vscale x 8 x i1> %vc
1251}
1252
1253define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1254; CHECK-LABEL: fcmp_ueq_vv_nxv8f32:
1255; CHECK:       # %bb.0:
1256; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1257; CHECK-NEXT:    vmflt.vv v25, v8, v12
1258; CHECK-NEXT:    vmflt.vv v26, v12, v8
1259; CHECK-NEXT:    vmnor.mm v0, v26, v25
1260; CHECK-NEXT:    ret
1261  %vc = fcmp ueq <vscale x 8 x float> %va, %vb
1262  ret <vscale x 8 x i1> %vc
1263}
1264
1265define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1266; CHECK-LABEL: fcmp_ueq_vf_nxv8f32:
1267; CHECK:       # %bb.0:
1268; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1269; CHECK-NEXT:    vmflt.vf v25, v8, fa0
1270; CHECK-NEXT:    vmfgt.vf v26, v8, fa0
1271; CHECK-NEXT:    vmnor.mm v0, v26, v25
1272; CHECK-NEXT:    ret
1273  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1274  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1275  %vc = fcmp ueq <vscale x 8 x float> %va, %splat
1276  ret <vscale x 8 x i1> %vc
1277}
1278
1279define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1280; CHECK-LABEL: fcmp_ueq_fv_nxv8f32:
1281; CHECK:       # %bb.0:
1282; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1283; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
1284; CHECK-NEXT:    vmflt.vf v26, v8, fa0
1285; CHECK-NEXT:    vmnor.mm v0, v26, v25
1286; CHECK-NEXT:    ret
1287  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1288  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1289  %vc = fcmp ueq <vscale x 8 x float> %splat, %va
1290  ret <vscale x 8 x i1> %vc
1291}
1292
1293define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1294; CHECK-LABEL: fcmp_ueq_vv_nxv8f32_nonans:
1295; CHECK:       # %bb.0:
1296; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1297; CHECK-NEXT:    vmfeq.vv v0, v8, v12
1298; CHECK-NEXT:    ret
1299  %vc = fcmp ueq <vscale x 8 x float> %va, %vb
1300  ret <vscale x 8 x i1> %vc
1301}
1302
1303define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1304; CHECK-LABEL: fcmp_ueq_vf_nxv8f32_nonans:
1305; CHECK:       # %bb.0:
1306; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1307; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1308; CHECK-NEXT:    ret
1309  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1310  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1311  %vc = fcmp ueq <vscale x 8 x float> %va, %splat
1312  ret <vscale x 8 x i1> %vc
1313}
1314
1315define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1316; CHECK-LABEL: fcmp_ugt_vv_nxv8f32:
1317; CHECK:       # %bb.0:
1318; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1319; CHECK-NEXT:    vmfle.vv v25, v8, v12
1320; CHECK-NEXT:    vmnand.mm v0, v25, v25
1321; CHECK-NEXT:    ret
1322  %vc = fcmp ugt <vscale x 8 x float> %va, %vb
1323  ret <vscale x 8 x i1> %vc
1324}
1325
1326define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1327; CHECK-LABEL: fcmp_ugt_vf_nxv8f32:
1328; CHECK:       # %bb.0:
1329; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1330; CHECK-NEXT:    vmfle.vf v25, v8, fa0
1331; CHECK-NEXT:    vmnand.mm v0, v25, v25
1332; CHECK-NEXT:    ret
1333  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1334  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1335  %vc = fcmp ugt <vscale x 8 x float> %va, %splat
1336  ret <vscale x 8 x i1> %vc
1337}
1338
1339define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1340; CHECK-LABEL: fcmp_ugt_fv_nxv8f32:
1341; CHECK:       # %bb.0:
1342; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1343; CHECK-NEXT:    vmfge.vf v25, v8, fa0
1344; CHECK-NEXT:    vmnand.mm v0, v25, v25
1345; CHECK-NEXT:    ret
1346  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1347  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1348  %vc = fcmp ugt <vscale x 8 x float> %splat, %va
1349  ret <vscale x 8 x i1> %vc
1350}
1351
1352define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1353; CHECK-LABEL: fcmp_ugt_vv_nxv8f32_nonans:
1354; CHECK:       # %bb.0:
1355; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1356; CHECK-NEXT:    vmflt.vv v0, v12, v8
1357; CHECK-NEXT:    ret
1358  %vc = fcmp ugt <vscale x 8 x float> %va, %vb
1359  ret <vscale x 8 x i1> %vc
1360}
1361
1362define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1363; CHECK-LABEL: fcmp_ugt_vf_nxv8f32_nonans:
1364; CHECK:       # %bb.0:
1365; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1366; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1367; CHECK-NEXT:    ret
1368  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1369  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1370  %vc = fcmp ugt <vscale x 8 x float> %va, %splat
1371  ret <vscale x 8 x i1> %vc
1372}
1373
1374define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1375; CHECK-LABEL: fcmp_uge_vv_nxv8f32:
1376; CHECK:       # %bb.0:
1377; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1378; CHECK-NEXT:    vmflt.vv v25, v8, v12
1379; CHECK-NEXT:    vmnand.mm v0, v25, v25
1380; CHECK-NEXT:    ret
1381  %vc = fcmp uge <vscale x 8 x float> %va, %vb
1382  ret <vscale x 8 x i1> %vc
1383}
1384
1385define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1386; CHECK-LABEL: fcmp_uge_vf_nxv8f32:
1387; CHECK:       # %bb.0:
1388; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1389; CHECK-NEXT:    vmflt.vf v25, v8, fa0
1390; CHECK-NEXT:    vmnand.mm v0, v25, v25
1391; CHECK-NEXT:    ret
1392  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1393  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1394  %vc = fcmp uge <vscale x 8 x float> %va, %splat
1395  ret <vscale x 8 x i1> %vc
1396}
1397
1398define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1399; CHECK-LABEL: fcmp_uge_fv_nxv8f32:
1400; CHECK:       # %bb.0:
1401; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1402; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
1403; CHECK-NEXT:    vmnand.mm v0, v25, v25
1404; CHECK-NEXT:    ret
1405  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1406  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1407  %vc = fcmp uge <vscale x 8 x float> %splat, %va
1408  ret <vscale x 8 x i1> %vc
1409}
1410
1411define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1412; CHECK-LABEL: fcmp_uge_vv_nxv8f32_nonans:
1413; CHECK:       # %bb.0:
1414; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1415; CHECK-NEXT:    vmfle.vv v0, v12, v8
1416; CHECK-NEXT:    ret
1417  %vc = fcmp uge <vscale x 8 x float> %va, %vb
1418  ret <vscale x 8 x i1> %vc
1419}
1420
1421define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1422; CHECK-LABEL: fcmp_uge_vf_nxv8f32_nonans:
1423; CHECK:       # %bb.0:
1424; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1425; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1426; CHECK-NEXT:    ret
1427  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1428  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1429  %vc = fcmp uge <vscale x 8 x float> %va, %splat
1430  ret <vscale x 8 x i1> %vc
1431}
1432
1433define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1434; CHECK-LABEL: fcmp_ult_vv_nxv8f32:
1435; CHECK:       # %bb.0:
1436; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1437; CHECK-NEXT:    vmfle.vv v25, v12, v8
1438; CHECK-NEXT:    vmnand.mm v0, v25, v25
1439; CHECK-NEXT:    ret
1440  %vc = fcmp ult <vscale x 8 x float> %va, %vb
1441  ret <vscale x 8 x i1> %vc
1442}
1443
1444define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1445; CHECK-LABEL: fcmp_ult_vf_nxv8f32:
1446; CHECK:       # %bb.0:
1447; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1448; CHECK-NEXT:    vmfge.vf v25, v8, fa0
1449; CHECK-NEXT:    vmnand.mm v0, v25, v25
1450; CHECK-NEXT:    ret
1451  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1452  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1453  %vc = fcmp ult <vscale x 8 x float> %va, %splat
1454  ret <vscale x 8 x i1> %vc
1455}
1456
1457define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1458; CHECK-LABEL: fcmp_ult_fv_nxv8f32:
1459; CHECK:       # %bb.0:
1460; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1461; CHECK-NEXT:    vmfle.vf v25, v8, fa0
1462; CHECK-NEXT:    vmnand.mm v0, v25, v25
1463; CHECK-NEXT:    ret
1464  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1465  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1466  %vc = fcmp ult <vscale x 8 x float> %splat, %va
1467  ret <vscale x 8 x i1> %vc
1468}
1469
1470define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1471; CHECK-LABEL: fcmp_ult_vv_nxv8f32_nonans:
1472; CHECK:       # %bb.0:
1473; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1474; CHECK-NEXT:    vmflt.vv v0, v8, v12
1475; CHECK-NEXT:    ret
1476  %vc = fcmp ult <vscale x 8 x float> %va, %vb
1477  ret <vscale x 8 x i1> %vc
1478}
1479
1480define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1481; CHECK-LABEL: fcmp_ult_vf_nxv8f32_nonans:
1482; CHECK:       # %bb.0:
1483; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1484; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1485; CHECK-NEXT:    ret
1486  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1487  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1488  %vc = fcmp ult <vscale x 8 x float> %va, %splat
1489  ret <vscale x 8 x i1> %vc
1490}
1491
1492define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1493; CHECK-LABEL: fcmp_ule_vv_nxv8f32:
1494; CHECK:       # %bb.0:
1495; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1496; CHECK-NEXT:    vmflt.vv v25, v12, v8
1497; CHECK-NEXT:    vmnand.mm v0, v25, v25
1498; CHECK-NEXT:    ret
1499  %vc = fcmp ule <vscale x 8 x float> %va, %vb
1500  ret <vscale x 8 x i1> %vc
1501}
1502
1503define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1504; CHECK-LABEL: fcmp_ule_vf_nxv8f32:
1505; CHECK:       # %bb.0:
1506; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1507; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
1508; CHECK-NEXT:    vmnand.mm v0, v25, v25
1509; CHECK-NEXT:    ret
1510  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1511  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1512  %vc = fcmp ule <vscale x 8 x float> %va, %splat
1513  ret <vscale x 8 x i1> %vc
1514}
1515
1516define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1517; CHECK-LABEL: fcmp_ule_fv_nxv8f32:
1518; CHECK:       # %bb.0:
1519; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1520; CHECK-NEXT:    vmflt.vf v25, v8, fa0
1521; CHECK-NEXT:    vmnand.mm v0, v25, v25
1522; CHECK-NEXT:    ret
1523  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1524  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1525  %vc = fcmp ule <vscale x 8 x float> %splat, %va
1526  ret <vscale x 8 x i1> %vc
1527}
1528
1529define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1530; CHECK-LABEL: fcmp_ule_vv_nxv8f32_nonans:
1531; CHECK:       # %bb.0:
1532; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1533; CHECK-NEXT:    vmfle.vv v0, v8, v12
1534; CHECK-NEXT:    ret
1535  %vc = fcmp ule <vscale x 8 x float> %va, %vb
1536  ret <vscale x 8 x i1> %vc
1537}
1538
1539define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1540; CHECK-LABEL: fcmp_ule_vf_nxv8f32_nonans:
1541; CHECK:       # %bb.0:
1542; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1543; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1544; CHECK-NEXT:    ret
1545  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1546  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1547  %vc = fcmp ule <vscale x 8 x float> %va, %splat
1548  ret <vscale x 8 x i1> %vc
1549}
1550
1551define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1552; CHECK-LABEL: fcmp_une_vv_nxv8f32:
1553; CHECK:       # %bb.0:
1554; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1555; CHECK-NEXT:    vmfne.vv v0, v8, v12
1556; CHECK-NEXT:    ret
1557  %vc = fcmp une <vscale x 8 x float> %va, %vb
1558  ret <vscale x 8 x i1> %vc
1559}
1560
1561define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1562; CHECK-LABEL: fcmp_une_vf_nxv8f32:
1563; CHECK:       # %bb.0:
1564; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1565; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1566; CHECK-NEXT:    ret
1567  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1568  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1569  %vc = fcmp une <vscale x 8 x float> %va, %splat
1570  ret <vscale x 8 x i1> %vc
1571}
1572
1573define <vscale x 8 x i1> @fcmp_une_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1574; CHECK-LABEL: fcmp_une_fv_nxv8f32:
1575; CHECK:       # %bb.0:
1576; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1577; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1578; CHECK-NEXT:    ret
1579  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1580  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1581  %vc = fcmp une <vscale x 8 x float> %splat, %va
1582  ret <vscale x 8 x i1> %vc
1583}
1584
1585define <vscale x 8 x i1> @fcmp_une_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1586; CHECK-LABEL: fcmp_une_vv_nxv8f32_nonans:
1587; CHECK:       # %bb.0:
1588; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1589; CHECK-NEXT:    vmfne.vv v0, v8, v12
1590; CHECK-NEXT:    ret
1591  %vc = fcmp une <vscale x 8 x float> %va, %vb
1592  ret <vscale x 8 x i1> %vc
1593}
1594
1595define <vscale x 8 x i1> @fcmp_une_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1596; CHECK-LABEL: fcmp_une_vf_nxv8f32_nonans:
1597; CHECK:       # %bb.0:
1598; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1599; CHECK-NEXT:    vmfne.vf v0, v8, fa0
1600; CHECK-NEXT:    ret
1601  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1602  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1603  %vc = fcmp une <vscale x 8 x float> %va, %splat
1604  ret <vscale x 8 x i1> %vc
1605}
1606
1607define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {
1608; CHECK-LABEL: fcmp_uno_vv_nxv8f32:
1609; CHECK:       # %bb.0:
1610; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1611; CHECK-NEXT:    vmfne.vv v25, v12, v12
1612; CHECK-NEXT:    vmfne.vv v26, v8, v8
1613; CHECK-NEXT:    vmor.mm v0, v26, v25
1614; CHECK-NEXT:    ret
1615  %vc = fcmp uno <vscale x 8 x float> %va, %vb
1616  ret <vscale x 8 x i1> %vc
1617}
1618
1619define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32(<vscale x 8 x float> %va, float %b) {
1620; CHECK-LABEL: fcmp_uno_vf_nxv8f32:
1621; CHECK:       # %bb.0:
1622; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1623; CHECK-NEXT:    vfmv.v.f v28, fa0
1624; CHECK-NEXT:    vmfne.vf v25, v28, fa0
1625; CHECK-NEXT:    vmfne.vv v26, v8, v8
1626; CHECK-NEXT:    vmor.mm v0, v26, v25
1627; CHECK-NEXT:    ret
1628  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1629  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1630  %vc = fcmp uno <vscale x 8 x float> %va, %splat
1631  ret <vscale x 8 x i1> %vc
1632}
1633
1634define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f32(<vscale x 8 x float> %va, float %b) {
1635; CHECK-LABEL: fcmp_uno_fv_nxv8f32:
1636; CHECK:       # %bb.0:
1637; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1638; CHECK-NEXT:    vfmv.v.f v28, fa0
1639; CHECK-NEXT:    vmfne.vf v25, v28, fa0
1640; CHECK-NEXT:    vmfne.vv v26, v8, v8
1641; CHECK-NEXT:    vmor.mm v0, v25, v26
1642; CHECK-NEXT:    ret
1643  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1644  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1645  %vc = fcmp uno <vscale x 8 x float> %splat, %va
1646  ret <vscale x 8 x i1> %vc
1647}
1648
1649define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f32_nonans(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) #0 {
1650; CHECK-LABEL: fcmp_uno_vv_nxv8f32_nonans:
1651; CHECK:       # %bb.0:
1652; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1653; CHECK-NEXT:    vmfne.vv v25, v12, v12
1654; CHECK-NEXT:    vmfne.vv v26, v8, v8
1655; CHECK-NEXT:    vmor.mm v0, v26, v25
1656; CHECK-NEXT:    ret
1657  %vc = fcmp uno <vscale x 8 x float> %va, %vb
1658  ret <vscale x 8 x i1> %vc
1659}
1660
1661define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f32_nonans(<vscale x 8 x float> %va, float %b) #0 {
1662; CHECK-LABEL: fcmp_uno_vf_nxv8f32_nonans:
1663; CHECK:       # %bb.0:
1664; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1665; CHECK-NEXT:    vfmv.v.f v28, fa0
1666; CHECK-NEXT:    vmfne.vf v25, v28, fa0
1667; CHECK-NEXT:    vmfne.vv v26, v8, v8
1668; CHECK-NEXT:    vmor.mm v0, v26, v25
1669; CHECK-NEXT:    ret
1670  %head = insertelement <vscale x 8 x float> undef, float %b, i32 0
1671  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> undef, <vscale x 8 x i32> zeroinitializer
1672  %vc = fcmp uno <vscale x 8 x float> %va, %splat
1673  ret <vscale x 8 x i1> %vc
1674}
1675
1676define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
1677; CHECK-LABEL: fcmp_oeq_vv_nxv8f64:
1678; CHECK:       # %bb.0:
1679; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1680; CHECK-NEXT:    vmfeq.vv v0, v8, v16
1681; CHECK-NEXT:    ret
1682  %vc = fcmp oeq <vscale x 8 x double> %va, %vb
1683  ret <vscale x 8 x i1> %vc
1684}
1685
1686define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
1687; CHECK-LABEL: fcmp_oeq_vf_nxv8f64:
1688; CHECK:       # %bb.0:
1689; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1690; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1691; CHECK-NEXT:    ret
1692  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1693  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1694  %vc = fcmp oeq <vscale x 8 x double> %va, %splat
1695  ret <vscale x 8 x i1> %vc
1696}
1697
1698define <vscale x 8 x i1> @fcmp_oeq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
1699; CHECK-LABEL: fcmp_oeq_fv_nxv8f64:
1700; CHECK:       # %bb.0:
1701; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1702; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1703; CHECK-NEXT:    ret
1704  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1705  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1706  %vc = fcmp oeq <vscale x 8 x double> %splat, %va
1707  ret <vscale x 8 x i1> %vc
1708}
1709
1710define <vscale x 8 x i1> @fcmp_oeq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
1711; CHECK-LABEL: fcmp_oeq_vv_nxv8f64_nonans:
1712; CHECK:       # %bb.0:
1713; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1714; CHECK-NEXT:    vmfeq.vv v0, v8, v16
1715; CHECK-NEXT:    ret
1716  %vc = fcmp oeq <vscale x 8 x double> %va, %vb
1717  ret <vscale x 8 x i1> %vc
1718}
1719
1720define <vscale x 8 x i1> @fcmp_oeq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
1721; CHECK-LABEL: fcmp_oeq_vf_nxv8f64_nonans:
1722; CHECK:       # %bb.0:
1723; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1724; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
1725; CHECK-NEXT:    ret
1726  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1727  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1728  %vc = fcmp oeq <vscale x 8 x double> %va, %splat
1729  ret <vscale x 8 x i1> %vc
1730}
1731
1732define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
1733; CHECK-LABEL: fcmp_ogt_vv_nxv8f64:
1734; CHECK:       # %bb.0:
1735; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1736; CHECK-NEXT:    vmflt.vv v0, v16, v8
1737; CHECK-NEXT:    ret
1738  %vc = fcmp ogt <vscale x 8 x double> %va, %vb
1739  ret <vscale x 8 x i1> %vc
1740}
1741
1742define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
1743; CHECK-LABEL: fcmp_ogt_vf_nxv8f64:
1744; CHECK:       # %bb.0:
1745; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1746; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1747; CHECK-NEXT:    ret
1748  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1749  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1750  %vc = fcmp ogt <vscale x 8 x double> %va, %splat
1751  ret <vscale x 8 x i1> %vc
1752}
1753
1754define <vscale x 8 x i1> @fcmp_ogt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
1755; CHECK-LABEL: fcmp_ogt_fv_nxv8f64:
1756; CHECK:       # %bb.0:
1757; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1758; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1759; CHECK-NEXT:    ret
1760  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1761  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1762  %vc = fcmp ogt <vscale x 8 x double> %splat, %va
1763  ret <vscale x 8 x i1> %vc
1764}
1765
1766define <vscale x 8 x i1> @fcmp_ogt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
1767; CHECK-LABEL: fcmp_ogt_vv_nxv8f64_nonans:
1768; CHECK:       # %bb.0:
1769; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1770; CHECK-NEXT:    vmflt.vv v0, v16, v8
1771; CHECK-NEXT:    ret
1772  %vc = fcmp ogt <vscale x 8 x double> %va, %vb
1773  ret <vscale x 8 x i1> %vc
1774}
1775
1776define <vscale x 8 x i1> @fcmp_ogt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
1777; CHECK-LABEL: fcmp_ogt_vf_nxv8f64_nonans:
1778; CHECK:       # %bb.0:
1779; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1780; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1781; CHECK-NEXT:    ret
1782  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1783  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1784  %vc = fcmp ogt <vscale x 8 x double> %va, %splat
1785  ret <vscale x 8 x i1> %vc
1786}
1787
1788define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
1789; CHECK-LABEL: fcmp_oge_vv_nxv8f64:
1790; CHECK:       # %bb.0:
1791; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1792; CHECK-NEXT:    vmfle.vv v0, v16, v8
1793; CHECK-NEXT:    ret
1794  %vc = fcmp oge <vscale x 8 x double> %va, %vb
1795  ret <vscale x 8 x i1> %vc
1796}
1797
1798define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
1799; CHECK-LABEL: fcmp_oge_vf_nxv8f64:
1800; CHECK:       # %bb.0:
1801; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1802; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1803; CHECK-NEXT:    ret
1804  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1805  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1806  %vc = fcmp oge <vscale x 8 x double> %va, %splat
1807  ret <vscale x 8 x i1> %vc
1808}
1809
1810define <vscale x 8 x i1> @fcmp_oge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
1811; CHECK-LABEL: fcmp_oge_fv_nxv8f64:
1812; CHECK:       # %bb.0:
1813; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1814; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1815; CHECK-NEXT:    ret
1816  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1817  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1818  %vc = fcmp oge <vscale x 8 x double> %splat, %va
1819  ret <vscale x 8 x i1> %vc
1820}
1821
1822define <vscale x 8 x i1> @fcmp_oge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
1823; CHECK-LABEL: fcmp_oge_vv_nxv8f64_nonans:
1824; CHECK:       # %bb.0:
1825; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1826; CHECK-NEXT:    vmfle.vv v0, v16, v8
1827; CHECK-NEXT:    ret
1828  %vc = fcmp oge <vscale x 8 x double> %va, %vb
1829  ret <vscale x 8 x i1> %vc
1830}
1831
1832define <vscale x 8 x i1> @fcmp_oge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
1833; CHECK-LABEL: fcmp_oge_vf_nxv8f64_nonans:
1834; CHECK:       # %bb.0:
1835; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1836; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1837; CHECK-NEXT:    ret
1838  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1839  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1840  %vc = fcmp oge <vscale x 8 x double> %va, %splat
1841  ret <vscale x 8 x i1> %vc
1842}
1843
1844define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
1845; CHECK-LABEL: fcmp_olt_vv_nxv8f64:
1846; CHECK:       # %bb.0:
1847; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1848; CHECK-NEXT:    vmflt.vv v0, v8, v16
1849; CHECK-NEXT:    ret
1850  %vc = fcmp olt <vscale x 8 x double> %va, %vb
1851  ret <vscale x 8 x i1> %vc
1852}
1853
1854define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
1855; CHECK-LABEL: fcmp_olt_vf_nxv8f64:
1856; CHECK:       # %bb.0:
1857; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1858; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1859; CHECK-NEXT:    ret
1860  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1861  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1862  %vc = fcmp olt <vscale x 8 x double> %va, %splat
1863  ret <vscale x 8 x i1> %vc
1864}
1865
1866define <vscale x 8 x i1> @fcmp_olt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
1867; CHECK-LABEL: fcmp_olt_fv_nxv8f64:
1868; CHECK:       # %bb.0:
1869; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1870; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
1871; CHECK-NEXT:    ret
1872  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1873  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1874  %vc = fcmp olt <vscale x 8 x double> %splat, %va
1875  ret <vscale x 8 x i1> %vc
1876}
1877
1878define <vscale x 8 x i1> @fcmp_olt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
1879; CHECK-LABEL: fcmp_olt_vv_nxv8f64_nonans:
1880; CHECK:       # %bb.0:
1881; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1882; CHECK-NEXT:    vmflt.vv v0, v8, v16
1883; CHECK-NEXT:    ret
1884  %vc = fcmp olt <vscale x 8 x double> %va, %vb
1885  ret <vscale x 8 x i1> %vc
1886}
1887
1888define <vscale x 8 x i1> @fcmp_olt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
1889; CHECK-LABEL: fcmp_olt_vf_nxv8f64_nonans:
1890; CHECK:       # %bb.0:
1891; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1892; CHECK-NEXT:    vmflt.vf v0, v8, fa0
1893; CHECK-NEXT:    ret
1894  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1895  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1896  %vc = fcmp olt <vscale x 8 x double> %va, %splat
1897  ret <vscale x 8 x i1> %vc
1898}
1899
1900define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
1901; CHECK-LABEL: fcmp_ole_vv_nxv8f64:
1902; CHECK:       # %bb.0:
1903; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1904; CHECK-NEXT:    vmfle.vv v0, v8, v16
1905; CHECK-NEXT:    ret
1906  %vc = fcmp ole <vscale x 8 x double> %va, %vb
1907  ret <vscale x 8 x i1> %vc
1908}
1909
1910define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
1911; CHECK-LABEL: fcmp_ole_vf_nxv8f64:
1912; CHECK:       # %bb.0:
1913; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1914; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1915; CHECK-NEXT:    ret
1916  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1917  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1918  %vc = fcmp ole <vscale x 8 x double> %va, %splat
1919  ret <vscale x 8 x i1> %vc
1920}
1921
1922define <vscale x 8 x i1> @fcmp_ole_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
1923; CHECK-LABEL: fcmp_ole_fv_nxv8f64:
1924; CHECK:       # %bb.0:
1925; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1926; CHECK-NEXT:    vmfge.vf v0, v8, fa0
1927; CHECK-NEXT:    ret
1928  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1929  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1930  %vc = fcmp ole <vscale x 8 x double> %splat, %va
1931  ret <vscale x 8 x i1> %vc
1932}
1933
1934define <vscale x 8 x i1> @fcmp_ole_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
1935; CHECK-LABEL: fcmp_ole_vv_nxv8f64_nonans:
1936; CHECK:       # %bb.0:
1937; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1938; CHECK-NEXT:    vmfle.vv v0, v8, v16
1939; CHECK-NEXT:    ret
1940  %vc = fcmp ole <vscale x 8 x double> %va, %vb
1941  ret <vscale x 8 x i1> %vc
1942}
1943
1944define <vscale x 8 x i1> @fcmp_ole_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
1945; CHECK-LABEL: fcmp_ole_vf_nxv8f64_nonans:
1946; CHECK:       # %bb.0:
1947; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1948; CHECK-NEXT:    vmfle.vf v0, v8, fa0
1949; CHECK-NEXT:    ret
1950  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1951  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1952  %vc = fcmp ole <vscale x 8 x double> %va, %splat
1953  ret <vscale x 8 x i1> %vc
1954}
1955
1956define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
1957; CHECK-LABEL: fcmp_one_vv_nxv8f64:
1958; CHECK:       # %bb.0:
1959; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1960; CHECK-NEXT:    vmflt.vv v25, v8, v16
1961; CHECK-NEXT:    vmflt.vv v26, v16, v8
1962; CHECK-NEXT:    vmor.mm v0, v26, v25
1963; CHECK-NEXT:    ret
1964  %vc = fcmp one <vscale x 8 x double> %va, %vb
1965  ret <vscale x 8 x i1> %vc
1966}
1967
1968define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
1969; CHECK-LABEL: fcmp_one_vf_nxv8f64:
1970; CHECK:       # %bb.0:
1971; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1972; CHECK-NEXT:    vmflt.vf v25, v8, fa0
1973; CHECK-NEXT:    vmfgt.vf v26, v8, fa0
1974; CHECK-NEXT:    vmor.mm v0, v26, v25
1975; CHECK-NEXT:    ret
1976  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1977  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1978  %vc = fcmp one <vscale x 8 x double> %va, %splat
1979  ret <vscale x 8 x i1> %vc
1980}
1981
1982define <vscale x 8 x i1> @fcmp_one_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
1983; CHECK-LABEL: fcmp_one_fv_nxv8f64:
1984; CHECK:       # %bb.0:
1985; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
1986; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
1987; CHECK-NEXT:    vmflt.vf v26, v8, fa0
1988; CHECK-NEXT:    vmor.mm v0, v26, v25
1989; CHECK-NEXT:    ret
1990  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
1991  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
1992  %vc = fcmp one <vscale x 8 x double> %splat, %va
1993  ret <vscale x 8 x i1> %vc
1994}
1995
1996define <vscale x 8 x i1> @fcmp_one_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
1997; CHECK-LABEL: fcmp_one_vv_nxv8f64_nonans:
1998; CHECK:       # %bb.0:
1999; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2000; CHECK-NEXT:    vmfne.vv v0, v8, v16
2001; CHECK-NEXT:    ret
2002  %vc = fcmp one <vscale x 8 x double> %va, %vb
2003  ret <vscale x 8 x i1> %vc
2004}
2005
2006define <vscale x 8 x i1> @fcmp_one_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2007; CHECK-LABEL: fcmp_one_vf_nxv8f64_nonans:
2008; CHECK:       # %bb.0:
2009; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2010; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2011; CHECK-NEXT:    ret
2012  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2013  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2014  %vc = fcmp one <vscale x 8 x double> %va, %splat
2015  ret <vscale x 8 x i1> %vc
2016}
2017
2018define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2019; CHECK-LABEL: fcmp_ord_vv_nxv8f64:
2020; CHECK:       # %bb.0:
2021; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2022; CHECK-NEXT:    vmfeq.vv v25, v16, v16
2023; CHECK-NEXT:    vmfeq.vv v26, v8, v8
2024; CHECK-NEXT:    vmand.mm v0, v26, v25
2025; CHECK-NEXT:    ret
2026  %vc = fcmp ord <vscale x 8 x double> %va, %vb
2027  ret <vscale x 8 x i1> %vc
2028}
2029
2030define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2031; CHECK-LABEL: fcmp_ord_vf_nxv8f64:
2032; CHECK:       # %bb.0:
2033; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2034; CHECK-NEXT:    vfmv.v.f v16, fa0
2035; CHECK-NEXT:    vmfeq.vf v25, v16, fa0
2036; CHECK-NEXT:    vmfeq.vv v26, v8, v8
2037; CHECK-NEXT:    vmand.mm v0, v26, v25
2038; CHECK-NEXT:    ret
2039  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2040  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2041  %vc = fcmp ord <vscale x 8 x double> %va, %splat
2042  ret <vscale x 8 x i1> %vc
2043}
2044
2045define <vscale x 8 x i1> @fcmp_ord_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2046; CHECK-LABEL: fcmp_ord_fv_nxv8f64:
2047; CHECK:       # %bb.0:
2048; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2049; CHECK-NEXT:    vfmv.v.f v16, fa0
2050; CHECK-NEXT:    vmfeq.vf v25, v16, fa0
2051; CHECK-NEXT:    vmfeq.vv v26, v8, v8
2052; CHECK-NEXT:    vmand.mm v0, v25, v26
2053; CHECK-NEXT:    ret
2054  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2055  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2056  %vc = fcmp ord <vscale x 8 x double> %splat, %va
2057  ret <vscale x 8 x i1> %vc
2058}
2059
2060define <vscale x 8 x i1> @fcmp_ord_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2061; CHECK-LABEL: fcmp_ord_vv_nxv8f64_nonans:
2062; CHECK:       # %bb.0:
2063; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2064; CHECK-NEXT:    vmfeq.vv v25, v16, v16
2065; CHECK-NEXT:    vmfeq.vv v26, v8, v8
2066; CHECK-NEXT:    vmand.mm v0, v26, v25
2067; CHECK-NEXT:    ret
2068  %vc = fcmp ord <vscale x 8 x double> %va, %vb
2069  ret <vscale x 8 x i1> %vc
2070}
2071
2072define <vscale x 8 x i1> @fcmp_ord_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2073; CHECK-LABEL: fcmp_ord_vf_nxv8f64_nonans:
2074; CHECK:       # %bb.0:
2075; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2076; CHECK-NEXT:    vfmv.v.f v16, fa0
2077; CHECK-NEXT:    vmfeq.vf v25, v16, fa0
2078; CHECK-NEXT:    vmfeq.vv v26, v8, v8
2079; CHECK-NEXT:    vmand.mm v0, v26, v25
2080; CHECK-NEXT:    ret
2081  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2082  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2083  %vc = fcmp ord <vscale x 8 x double> %va, %splat
2084  ret <vscale x 8 x i1> %vc
2085}
2086
2087define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2088; CHECK-LABEL: fcmp_ueq_vv_nxv8f64:
2089; CHECK:       # %bb.0:
2090; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2091; CHECK-NEXT:    vmflt.vv v25, v8, v16
2092; CHECK-NEXT:    vmflt.vv v26, v16, v8
2093; CHECK-NEXT:    vmnor.mm v0, v26, v25
2094; CHECK-NEXT:    ret
2095  %vc = fcmp ueq <vscale x 8 x double> %va, %vb
2096  ret <vscale x 8 x i1> %vc
2097}
2098
2099define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2100; CHECK-LABEL: fcmp_ueq_vf_nxv8f64:
2101; CHECK:       # %bb.0:
2102; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2103; CHECK-NEXT:    vmflt.vf v25, v8, fa0
2104; CHECK-NEXT:    vmfgt.vf v26, v8, fa0
2105; CHECK-NEXT:    vmnor.mm v0, v26, v25
2106; CHECK-NEXT:    ret
2107  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2108  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2109  %vc = fcmp ueq <vscale x 8 x double> %va, %splat
2110  ret <vscale x 8 x i1> %vc
2111}
2112
2113define <vscale x 8 x i1> @fcmp_ueq_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2114; CHECK-LABEL: fcmp_ueq_fv_nxv8f64:
2115; CHECK:       # %bb.0:
2116; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2117; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
2118; CHECK-NEXT:    vmflt.vf v26, v8, fa0
2119; CHECK-NEXT:    vmnor.mm v0, v26, v25
2120; CHECK-NEXT:    ret
2121  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2122  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2123  %vc = fcmp ueq <vscale x 8 x double> %splat, %va
2124  ret <vscale x 8 x i1> %vc
2125}
2126
2127define <vscale x 8 x i1> @fcmp_ueq_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2128; CHECK-LABEL: fcmp_ueq_vv_nxv8f64_nonans:
2129; CHECK:       # %bb.0:
2130; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2131; CHECK-NEXT:    vmfeq.vv v0, v8, v16
2132; CHECK-NEXT:    ret
2133  %vc = fcmp ueq <vscale x 8 x double> %va, %vb
2134  ret <vscale x 8 x i1> %vc
2135}
2136
2137define <vscale x 8 x i1> @fcmp_ueq_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2138; CHECK-LABEL: fcmp_ueq_vf_nxv8f64_nonans:
2139; CHECK:       # %bb.0:
2140; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2141; CHECK-NEXT:    vmfeq.vf v0, v8, fa0
2142; CHECK-NEXT:    ret
2143  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2144  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2145  %vc = fcmp ueq <vscale x 8 x double> %va, %splat
2146  ret <vscale x 8 x i1> %vc
2147}
2148
2149define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2150; CHECK-LABEL: fcmp_ugt_vv_nxv8f64:
2151; CHECK:       # %bb.0:
2152; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2153; CHECK-NEXT:    vmfle.vv v25, v8, v16
2154; CHECK-NEXT:    vmnand.mm v0, v25, v25
2155; CHECK-NEXT:    ret
2156  %vc = fcmp ugt <vscale x 8 x double> %va, %vb
2157  ret <vscale x 8 x i1> %vc
2158}
2159
2160define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2161; CHECK-LABEL: fcmp_ugt_vf_nxv8f64:
2162; CHECK:       # %bb.0:
2163; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2164; CHECK-NEXT:    vmfle.vf v25, v8, fa0
2165; CHECK-NEXT:    vmnand.mm v0, v25, v25
2166; CHECK-NEXT:    ret
2167  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2168  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2169  %vc = fcmp ugt <vscale x 8 x double> %va, %splat
2170  ret <vscale x 8 x i1> %vc
2171}
2172
2173define <vscale x 8 x i1> @fcmp_ugt_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2174; CHECK-LABEL: fcmp_ugt_fv_nxv8f64:
2175; CHECK:       # %bb.0:
2176; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2177; CHECK-NEXT:    vmfge.vf v25, v8, fa0
2178; CHECK-NEXT:    vmnand.mm v0, v25, v25
2179; CHECK-NEXT:    ret
2180  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2181  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2182  %vc = fcmp ugt <vscale x 8 x double> %splat, %va
2183  ret <vscale x 8 x i1> %vc
2184}
2185
2186define <vscale x 8 x i1> @fcmp_ugt_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2187; CHECK-LABEL: fcmp_ugt_vv_nxv8f64_nonans:
2188; CHECK:       # %bb.0:
2189; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2190; CHECK-NEXT:    vmflt.vv v0, v16, v8
2191; CHECK-NEXT:    ret
2192  %vc = fcmp ugt <vscale x 8 x double> %va, %vb
2193  ret <vscale x 8 x i1> %vc
2194}
2195
2196define <vscale x 8 x i1> @fcmp_ugt_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2197; CHECK-LABEL: fcmp_ugt_vf_nxv8f64_nonans:
2198; CHECK:       # %bb.0:
2199; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2200; CHECK-NEXT:    vmfgt.vf v0, v8, fa0
2201; CHECK-NEXT:    ret
2202  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2203  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2204  %vc = fcmp ugt <vscale x 8 x double> %va, %splat
2205  ret <vscale x 8 x i1> %vc
2206}
2207
2208define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2209; CHECK-LABEL: fcmp_uge_vv_nxv8f64:
2210; CHECK:       # %bb.0:
2211; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2212; CHECK-NEXT:    vmflt.vv v25, v8, v16
2213; CHECK-NEXT:    vmnand.mm v0, v25, v25
2214; CHECK-NEXT:    ret
2215  %vc = fcmp uge <vscale x 8 x double> %va, %vb
2216  ret <vscale x 8 x i1> %vc
2217}
2218
2219define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2220; CHECK-LABEL: fcmp_uge_vf_nxv8f64:
2221; CHECK:       # %bb.0:
2222; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2223; CHECK-NEXT:    vmflt.vf v25, v8, fa0
2224; CHECK-NEXT:    vmnand.mm v0, v25, v25
2225; CHECK-NEXT:    ret
2226  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2227  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2228  %vc = fcmp uge <vscale x 8 x double> %va, %splat
2229  ret <vscale x 8 x i1> %vc
2230}
2231
2232define <vscale x 8 x i1> @fcmp_uge_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2233; CHECK-LABEL: fcmp_uge_fv_nxv8f64:
2234; CHECK:       # %bb.0:
2235; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2236; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
2237; CHECK-NEXT:    vmnand.mm v0, v25, v25
2238; CHECK-NEXT:    ret
2239  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2240  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2241  %vc = fcmp uge <vscale x 8 x double> %splat, %va
2242  ret <vscale x 8 x i1> %vc
2243}
2244
2245define <vscale x 8 x i1> @fcmp_uge_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2246; CHECK-LABEL: fcmp_uge_vv_nxv8f64_nonans:
2247; CHECK:       # %bb.0:
2248; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2249; CHECK-NEXT:    vmfle.vv v0, v16, v8
2250; CHECK-NEXT:    ret
2251  %vc = fcmp uge <vscale x 8 x double> %va, %vb
2252  ret <vscale x 8 x i1> %vc
2253}
2254
2255define <vscale x 8 x i1> @fcmp_uge_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2256; CHECK-LABEL: fcmp_uge_vf_nxv8f64_nonans:
2257; CHECK:       # %bb.0:
2258; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2259; CHECK-NEXT:    vmfge.vf v0, v8, fa0
2260; CHECK-NEXT:    ret
2261  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2262  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2263  %vc = fcmp uge <vscale x 8 x double> %va, %splat
2264  ret <vscale x 8 x i1> %vc
2265}
2266
2267define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2268; CHECK-LABEL: fcmp_ult_vv_nxv8f64:
2269; CHECK:       # %bb.0:
2270; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2271; CHECK-NEXT:    vmfle.vv v25, v16, v8
2272; CHECK-NEXT:    vmnand.mm v0, v25, v25
2273; CHECK-NEXT:    ret
2274  %vc = fcmp ult <vscale x 8 x double> %va, %vb
2275  ret <vscale x 8 x i1> %vc
2276}
2277
2278define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2279; CHECK-LABEL: fcmp_ult_vf_nxv8f64:
2280; CHECK:       # %bb.0:
2281; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2282; CHECK-NEXT:    vmfge.vf v25, v8, fa0
2283; CHECK-NEXT:    vmnand.mm v0, v25, v25
2284; CHECK-NEXT:    ret
2285  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2286  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2287  %vc = fcmp ult <vscale x 8 x double> %va, %splat
2288  ret <vscale x 8 x i1> %vc
2289}
2290
2291define <vscale x 8 x i1> @fcmp_ult_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2292; CHECK-LABEL: fcmp_ult_fv_nxv8f64:
2293; CHECK:       # %bb.0:
2294; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2295; CHECK-NEXT:    vmfle.vf v25, v8, fa0
2296; CHECK-NEXT:    vmnand.mm v0, v25, v25
2297; CHECK-NEXT:    ret
2298  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2299  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2300  %vc = fcmp ult <vscale x 8 x double> %splat, %va
2301  ret <vscale x 8 x i1> %vc
2302}
2303
2304define <vscale x 8 x i1> @fcmp_ult_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2305; CHECK-LABEL: fcmp_ult_vv_nxv8f64_nonans:
2306; CHECK:       # %bb.0:
2307; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2308; CHECK-NEXT:    vmflt.vv v0, v8, v16
2309; CHECK-NEXT:    ret
2310  %vc = fcmp ult <vscale x 8 x double> %va, %vb
2311  ret <vscale x 8 x i1> %vc
2312}
2313
2314define <vscale x 8 x i1> @fcmp_ult_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2315; CHECK-LABEL: fcmp_ult_vf_nxv8f64_nonans:
2316; CHECK:       # %bb.0:
2317; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2318; CHECK-NEXT:    vmflt.vf v0, v8, fa0
2319; CHECK-NEXT:    ret
2320  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2321  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2322  %vc = fcmp ult <vscale x 8 x double> %va, %splat
2323  ret <vscale x 8 x i1> %vc
2324}
2325
2326define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2327; CHECK-LABEL: fcmp_ule_vv_nxv8f64:
2328; CHECK:       # %bb.0:
2329; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2330; CHECK-NEXT:    vmflt.vv v25, v16, v8
2331; CHECK-NEXT:    vmnand.mm v0, v25, v25
2332; CHECK-NEXT:    ret
2333  %vc = fcmp ule <vscale x 8 x double> %va, %vb
2334  ret <vscale x 8 x i1> %vc
2335}
2336
2337define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2338; CHECK-LABEL: fcmp_ule_vf_nxv8f64:
2339; CHECK:       # %bb.0:
2340; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2341; CHECK-NEXT:    vmfgt.vf v25, v8, fa0
2342; CHECK-NEXT:    vmnand.mm v0, v25, v25
2343; CHECK-NEXT:    ret
2344  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2345  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2346  %vc = fcmp ule <vscale x 8 x double> %va, %splat
2347  ret <vscale x 8 x i1> %vc
2348}
2349
2350define <vscale x 8 x i1> @fcmp_ule_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2351; CHECK-LABEL: fcmp_ule_fv_nxv8f64:
2352; CHECK:       # %bb.0:
2353; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2354; CHECK-NEXT:    vmflt.vf v25, v8, fa0
2355; CHECK-NEXT:    vmnand.mm v0, v25, v25
2356; CHECK-NEXT:    ret
2357  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2358  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2359  %vc = fcmp ule <vscale x 8 x double> %splat, %va
2360  ret <vscale x 8 x i1> %vc
2361}
2362
2363define <vscale x 8 x i1> @fcmp_ule_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2364; CHECK-LABEL: fcmp_ule_vv_nxv8f64_nonans:
2365; CHECK:       # %bb.0:
2366; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2367; CHECK-NEXT:    vmfle.vv v0, v8, v16
2368; CHECK-NEXT:    ret
2369  %vc = fcmp ule <vscale x 8 x double> %va, %vb
2370  ret <vscale x 8 x i1> %vc
2371}
2372
2373define <vscale x 8 x i1> @fcmp_ule_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2374; CHECK-LABEL: fcmp_ule_vf_nxv8f64_nonans:
2375; CHECK:       # %bb.0:
2376; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2377; CHECK-NEXT:    vmfle.vf v0, v8, fa0
2378; CHECK-NEXT:    ret
2379  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2380  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2381  %vc = fcmp ule <vscale x 8 x double> %va, %splat
2382  ret <vscale x 8 x i1> %vc
2383}
2384
2385define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2386; CHECK-LABEL: fcmp_une_vv_nxv8f64:
2387; CHECK:       # %bb.0:
2388; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2389; CHECK-NEXT:    vmfne.vv v0, v8, v16
2390; CHECK-NEXT:    ret
2391  %vc = fcmp une <vscale x 8 x double> %va, %vb
2392  ret <vscale x 8 x i1> %vc
2393}
2394
2395define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2396; CHECK-LABEL: fcmp_une_vf_nxv8f64:
2397; CHECK:       # %bb.0:
2398; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2399; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2400; CHECK-NEXT:    ret
2401  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2402  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2403  %vc = fcmp une <vscale x 8 x double> %va, %splat
2404  ret <vscale x 8 x i1> %vc
2405}
2406
2407define <vscale x 8 x i1> @fcmp_une_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2408; CHECK-LABEL: fcmp_une_fv_nxv8f64:
2409; CHECK:       # %bb.0:
2410; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2411; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2412; CHECK-NEXT:    ret
2413  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2414  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2415  %vc = fcmp une <vscale x 8 x double> %splat, %va
2416  ret <vscale x 8 x i1> %vc
2417}
2418
2419define <vscale x 8 x i1> @fcmp_une_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2420; CHECK-LABEL: fcmp_une_vv_nxv8f64_nonans:
2421; CHECK:       # %bb.0:
2422; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2423; CHECK-NEXT:    vmfne.vv v0, v8, v16
2424; CHECK-NEXT:    ret
2425  %vc = fcmp une <vscale x 8 x double> %va, %vb
2426  ret <vscale x 8 x i1> %vc
2427}
2428
2429define <vscale x 8 x i1> @fcmp_une_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2430; CHECK-LABEL: fcmp_une_vf_nxv8f64_nonans:
2431; CHECK:       # %bb.0:
2432; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2433; CHECK-NEXT:    vmfne.vf v0, v8, fa0
2434; CHECK-NEXT:    ret
2435  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2436  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2437  %vc = fcmp une <vscale x 8 x double> %va, %splat
2438  ret <vscale x 8 x i1> %vc
2439}
2440
2441define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) {
2442; CHECK-LABEL: fcmp_uno_vv_nxv8f64:
2443; CHECK:       # %bb.0:
2444; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2445; CHECK-NEXT:    vmfne.vv v25, v16, v16
2446; CHECK-NEXT:    vmfne.vv v26, v8, v8
2447; CHECK-NEXT:    vmor.mm v0, v26, v25
2448; CHECK-NEXT:    ret
2449  %vc = fcmp uno <vscale x 8 x double> %va, %vb
2450  ret <vscale x 8 x i1> %vc
2451}
2452
2453define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64(<vscale x 8 x double> %va, double %b) {
2454; CHECK-LABEL: fcmp_uno_vf_nxv8f64:
2455; CHECK:       # %bb.0:
2456; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2457; CHECK-NEXT:    vfmv.v.f v16, fa0
2458; CHECK-NEXT:    vmfne.vf v25, v16, fa0
2459; CHECK-NEXT:    vmfne.vv v26, v8, v8
2460; CHECK-NEXT:    vmor.mm v0, v26, v25
2461; CHECK-NEXT:    ret
2462  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2463  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2464  %vc = fcmp uno <vscale x 8 x double> %va, %splat
2465  ret <vscale x 8 x i1> %vc
2466}
2467
2468define <vscale x 8 x i1> @fcmp_uno_fv_nxv8f64(<vscale x 8 x double> %va, double %b) {
2469; CHECK-LABEL: fcmp_uno_fv_nxv8f64:
2470; CHECK:       # %bb.0:
2471; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2472; CHECK-NEXT:    vfmv.v.f v16, fa0
2473; CHECK-NEXT:    vmfne.vf v25, v16, fa0
2474; CHECK-NEXT:    vmfne.vv v26, v8, v8
2475; CHECK-NEXT:    vmor.mm v0, v25, v26
2476; CHECK-NEXT:    ret
2477  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2478  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2479  %vc = fcmp uno <vscale x 8 x double> %splat, %va
2480  ret <vscale x 8 x i1> %vc
2481}
2482
2483define <vscale x 8 x i1> @fcmp_uno_vv_nxv8f64_nonans(<vscale x 8 x double> %va, <vscale x 8 x double> %vb) #0 {
2484; CHECK-LABEL: fcmp_uno_vv_nxv8f64_nonans:
2485; CHECK:       # %bb.0:
2486; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2487; CHECK-NEXT:    vmfne.vv v25, v16, v16
2488; CHECK-NEXT:    vmfne.vv v26, v8, v8
2489; CHECK-NEXT:    vmor.mm v0, v26, v25
2490; CHECK-NEXT:    ret
2491  %vc = fcmp uno <vscale x 8 x double> %va, %vb
2492  ret <vscale x 8 x i1> %vc
2493}
2494
2495define <vscale x 8 x i1> @fcmp_uno_vf_nxv8f64_nonans(<vscale x 8 x double> %va, double %b) #0 {
2496; CHECK-LABEL: fcmp_uno_vf_nxv8f64_nonans:
2497; CHECK:       # %bb.0:
2498; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2499; CHECK-NEXT:    vfmv.v.f v16, fa0
2500; CHECK-NEXT:    vmfne.vf v25, v16, fa0
2501; CHECK-NEXT:    vmfne.vv v26, v8, v8
2502; CHECK-NEXT:    vmor.mm v0, v26, v25
2503; CHECK-NEXT:    ret
2504  %head = insertelement <vscale x 8 x double> undef, double %b, i32 0
2505  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> undef, <vscale x 8 x i32> zeroinitializer
2506  %vc = fcmp uno <vscale x 8 x double> %va, %splat
2507  ret <vscale x 8 x i1> %vc
2508}
2509
2510; This fcmp/setcc is split and so we find a scalable-vector mask CONCAT_VECTOR
2511; node. Ensure we correctly (custom) lower this.
2512define <vscale x 16 x i1> @fcmp_oeq_vf_nx16f64(<vscale x 16 x double> %va) {
2513; CHECK-LABEL: fcmp_oeq_vf_nx16f64:
2514; CHECK:       # %bb.0:
2515; CHECK-NEXT:    fcvt.d.w ft0, zero
2516; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, mu
2517; CHECK-NEXT:    vmfeq.vf v25, v16, ft0
2518; CHECK-NEXT:    vmfeq.vf v0, v8, ft0
2519; CHECK-NEXT:    csrr a0, vlenb
2520; CHECK-NEXT:    srli a0, a0, 3
2521; CHECK-NEXT:    add a1, a0, a0
2522; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, tu, mu
2523; CHECK-NEXT:    vslideup.vx v0, v25, a0
2524; CHECK-NEXT:    ret
2525  %vc = fcmp oeq <vscale x 16 x double> %va, zeroinitializer
2526  ret <vscale x 16 x i1> %vc
2527}
2528
2529attributes #0 = { "no-nans-fp-math"="true" }
2530