1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s
3
4
5; <256 x float>
6
7;; TODO v256i1 zero-mask isel
8;; ; Function Attrs: nounwind
9;; define fastcc <256 x i1> @fcmp_false_vv_v256f32(<256 x float> %x, <256 x float> %y) {
10;;   %z = fcmp false <256 x float> %x, %y
11;;   ret <256 x i1> %z
12;; }
13;;
14;; ; Function Attrs: nounwind
15;; define fastcc <256 x i1> @fcmp_false_sv_v256f32(float %x, <256 x float> %y) {
16;;   %xins = insertelement <256 x float> undef, float %x, i32 0
17;;   %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
18;;   %z = fcmp false <256 x float> %vx, %y
19;;   ret <256 x i1> %z
20;; }
21;;
22;; ; Function Attrs: nounwind
23;; define fastcc <256 x i1> @fcmp_false_vs_v256f32(<256 x float> %x, float %y) {
24;;   %yins = insertelement <256 x float> undef, float %y, i32 0
25;;   %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
26;;   %z = fcmp false <256 x float> %x, %vy
27;;   ret <256 x i1> %z
28;; }
29
30; Function Attrs: nounwind
31define fastcc <256 x i1> @fcmp_oeq_vv_v256f32(<256 x float> %x, <256 x float> %y) {
32; CHECK-LABEL: fcmp_oeq_vv_v256f32:
33; CHECK:       # %bb.0:
34; CHECK-NEXT:    lea %s0, 256
35; CHECK-NEXT:    lvl %s0
36; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
37; CHECK-NEXT:    vfmk.s.eq %vm1, %v0
38; CHECK-NEXT:    b.l.t (, %s10)
39  %z = fcmp oeq <256 x float> %x, %y
40  ret <256 x i1> %z
41}
42
43; Function Attrs: nounwind
44define fastcc <256 x i1> @fcmp_oeq_sv_v256f32(float %x, <256 x float> %y) {
45; CHECK-LABEL: fcmp_oeq_sv_v256f32:
46; CHECK:       # %bb.0:
47; CHECK-NEXT:    lea %s1, 256
48; CHECK-NEXT:    lvl %s1
49; CHECK-NEXT:    vbrd %v1, %s0
50; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
51; CHECK-NEXT:    vfmk.s.eq %vm1, %v0
52; CHECK-NEXT:    b.l.t (, %s10)
53  %xins = insertelement <256 x float> undef, float %x, i32 0
54  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
55  %z = fcmp oeq <256 x float> %vx, %y
56  ret <256 x i1> %z
57}
58
59; Function Attrs: nounwind
60define fastcc <256 x i1> @fcmp_oeq_vs_v256f32(<256 x float> %x, float %y) {
61; CHECK-LABEL: fcmp_oeq_vs_v256f32:
62; CHECK:       # %bb.0:
63; CHECK-NEXT:    lea %s1, 256
64; CHECK-NEXT:    lvl %s1
65; CHECK-NEXT:    vbrd %v1, %s0
66; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
67; CHECK-NEXT:    vfmk.s.eq %vm1, %v0
68; CHECK-NEXT:    b.l.t (, %s10)
69  %yins = insertelement <256 x float> undef, float %y, i32 0
70  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
71  %z = fcmp oeq <256 x float> %x, %vy
72  ret <256 x i1> %z
73}
74
75; Function Attrs: nounwind
76define fastcc <256 x i1> @fcmp_ogt_vv_v256f32(<256 x float> %x, <256 x float> %y) {
77; CHECK-LABEL: fcmp_ogt_vv_v256f32:
78; CHECK:       # %bb.0:
79; CHECK-NEXT:    lea %s0, 256
80; CHECK-NEXT:    lvl %s0
81; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
82; CHECK-NEXT:    vfmk.s.gt %vm1, %v0
83; CHECK-NEXT:    b.l.t (, %s10)
84  %z = fcmp ogt <256 x float> %x, %y
85  ret <256 x i1> %z
86}
87
88; Function Attrs: nounwind
89define fastcc <256 x i1> @fcmp_ogt_sv_v256f32(float %x, <256 x float> %y) {
90; CHECK-LABEL: fcmp_ogt_sv_v256f32:
91; CHECK:       # %bb.0:
92; CHECK-NEXT:    lea %s1, 256
93; CHECK-NEXT:    lvl %s1
94; CHECK-NEXT:    vbrd %v1, %s0
95; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
96; CHECK-NEXT:    vfmk.s.gt %vm1, %v0
97; CHECK-NEXT:    b.l.t (, %s10)
98  %xins = insertelement <256 x float> undef, float %x, i32 0
99  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
100  %z = fcmp ogt <256 x float> %vx, %y
101  ret <256 x i1> %z
102}
103
104; Function Attrs: nounwind
105define fastcc <256 x i1> @fcmp_ogt_vs_v256f32(<256 x float> %x, float %y) {
106; CHECK-LABEL: fcmp_ogt_vs_v256f32:
107; CHECK:       # %bb.0:
108; CHECK-NEXT:    lea %s1, 256
109; CHECK-NEXT:    lvl %s1
110; CHECK-NEXT:    vbrd %v1, %s0
111; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
112; CHECK-NEXT:    vfmk.s.gt %vm1, %v0
113; CHECK-NEXT:    b.l.t (, %s10)
114  %yins = insertelement <256 x float> undef, float %y, i32 0
115  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
116  %z = fcmp ogt <256 x float> %x, %vy
117  ret <256 x i1> %z
118}
119
120; Function Attrs: nounwind
121define fastcc <256 x i1> @fcmp_oge_vv_v256f32(<256 x float> %x, <256 x float> %y) {
122; CHECK-LABEL: fcmp_oge_vv_v256f32:
123; CHECK:       # %bb.0:
124; CHECK-NEXT:    lea %s0, 256
125; CHECK-NEXT:    lvl %s0
126; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
127; CHECK-NEXT:    vfmk.s.ge %vm1, %v0
128; CHECK-NEXT:    b.l.t (, %s10)
129  %z = fcmp oge <256 x float> %x, %y
130  ret <256 x i1> %z
131}
132
133; Function Attrs: nounwind
134define fastcc <256 x i1> @fcmp_oge_sv_v256f32(float %x, <256 x float> %y) {
135; CHECK-LABEL: fcmp_oge_sv_v256f32:
136; CHECK:       # %bb.0:
137; CHECK-NEXT:    lea %s1, 256
138; CHECK-NEXT:    lvl %s1
139; CHECK-NEXT:    vbrd %v1, %s0
140; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
141; CHECK-NEXT:    vfmk.s.ge %vm1, %v0
142; CHECK-NEXT:    b.l.t (, %s10)
143  %xins = insertelement <256 x float> undef, float %x, i32 0
144  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
145  %z = fcmp oge <256 x float> %vx, %y
146  ret <256 x i1> %z
147}
148
149; Function Attrs: nounwind
150define fastcc <256 x i1> @fcmp_oge_vs_v256f32(<256 x float> %x, float %y) {
151; CHECK-LABEL: fcmp_oge_vs_v256f32:
152; CHECK:       # %bb.0:
153; CHECK-NEXT:    lea %s1, 256
154; CHECK-NEXT:    lvl %s1
155; CHECK-NEXT:    vbrd %v1, %s0
156; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
157; CHECK-NEXT:    vfmk.s.ge %vm1, %v0
158; CHECK-NEXT:    b.l.t (, %s10)
159  %yins = insertelement <256 x float> undef, float %y, i32 0
160  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
161  %z = fcmp oge <256 x float> %x, %vy
162  ret <256 x i1> %z
163}
164
165; Function Attrs: nounwind
166define fastcc <256 x i1> @fcmp_olt_vv_v256f32(<256 x float> %x, <256 x float> %y) {
167; CHECK-LABEL: fcmp_olt_vv_v256f32:
168; CHECK:       # %bb.0:
169; CHECK-NEXT:    lea %s0, 256
170; CHECK-NEXT:    lvl %s0
171; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
172; CHECK-NEXT:    vfmk.s.lt %vm1, %v0
173; CHECK-NEXT:    b.l.t (, %s10)
174  %z = fcmp olt <256 x float> %x, %y
175  ret <256 x i1> %z
176}
177
178; Function Attrs: nounwind
179define fastcc <256 x i1> @fcmp_olt_sv_v256f32(float %x, <256 x float> %y) {
180; CHECK-LABEL: fcmp_olt_sv_v256f32:
181; CHECK:       # %bb.0:
182; CHECK-NEXT:    lea %s1, 256
183; CHECK-NEXT:    lvl %s1
184; CHECK-NEXT:    vbrd %v1, %s0
185; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
186; CHECK-NEXT:    vfmk.s.lt %vm1, %v0
187; CHECK-NEXT:    b.l.t (, %s10)
188  %xins = insertelement <256 x float> undef, float %x, i32 0
189  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
190  %z = fcmp olt <256 x float> %vx, %y
191  ret <256 x i1> %z
192}
193
194; Function Attrs: nounwind
195define fastcc <256 x i1> @fcmp_olt_vs_v256f32(<256 x float> %x, float %y) {
196; CHECK-LABEL: fcmp_olt_vs_v256f32:
197; CHECK:       # %bb.0:
198; CHECK-NEXT:    lea %s1, 256
199; CHECK-NEXT:    lvl %s1
200; CHECK-NEXT:    vbrd %v1, %s0
201; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
202; CHECK-NEXT:    vfmk.s.lt %vm1, %v0
203; CHECK-NEXT:    b.l.t (, %s10)
204  %yins = insertelement <256 x float> undef, float %y, i32 0
205  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
206  %z = fcmp olt <256 x float> %x, %vy
207  ret <256 x i1> %z
208}
209
210; Function Attrs: nounwind
211define fastcc <256 x i1> @fcmp_ole_vv_v256f32(<256 x float> %x, <256 x float> %y) {
212; CHECK-LABEL: fcmp_ole_vv_v256f32:
213; CHECK:       # %bb.0:
214; CHECK-NEXT:    lea %s0, 256
215; CHECK-NEXT:    lvl %s0
216; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
217; CHECK-NEXT:    vfmk.s.le %vm1, %v0
218; CHECK-NEXT:    b.l.t (, %s10)
219  %z = fcmp ole <256 x float> %x, %y
220  ret <256 x i1> %z
221}
222
223; Function Attrs: nounwind
224define fastcc <256 x i1> @fcmp_ole_sv_v256f32(float %x, <256 x float> %y) {
225; CHECK-LABEL: fcmp_ole_sv_v256f32:
226; CHECK:       # %bb.0:
227; CHECK-NEXT:    lea %s1, 256
228; CHECK-NEXT:    lvl %s1
229; CHECK-NEXT:    vbrd %v1, %s0
230; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
231; CHECK-NEXT:    vfmk.s.le %vm1, %v0
232; CHECK-NEXT:    b.l.t (, %s10)
233  %xins = insertelement <256 x float> undef, float %x, i32 0
234  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
235  %z = fcmp ole <256 x float> %vx, %y
236  ret <256 x i1> %z
237}
238
239; Function Attrs: nounwind
240define fastcc <256 x i1> @fcmp_ole_vs_v256f32(<256 x float> %x, float %y) {
241; CHECK-LABEL: fcmp_ole_vs_v256f32:
242; CHECK:       # %bb.0:
243; CHECK-NEXT:    lea %s1, 256
244; CHECK-NEXT:    lvl %s1
245; CHECK-NEXT:    vbrd %v1, %s0
246; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
247; CHECK-NEXT:    vfmk.s.le %vm1, %v0
248; CHECK-NEXT:    b.l.t (, %s10)
249  %yins = insertelement <256 x float> undef, float %y, i32 0
250  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
251  %z = fcmp ole <256 x float> %x, %vy
252  ret <256 x i1> %z
253}
254
255; Function Attrs: nounwind
256define fastcc <256 x i1> @fcmp_one_vv_v256f32(<256 x float> %x, <256 x float> %y) {
257; CHECK-LABEL: fcmp_one_vv_v256f32:
258; CHECK:       # %bb.0:
259; CHECK-NEXT:    lea %s0, 256
260; CHECK-NEXT:    lvl %s0
261; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
262; CHECK-NEXT:    vfmk.s.ne %vm1, %v0
263; CHECK-NEXT:    b.l.t (, %s10)
264  %z = fcmp one <256 x float> %x, %y
265  ret <256 x i1> %z
266}
267
268; Function Attrs: nounwind
269define fastcc <256 x i1> @fcmp_one_sv_v256f32(float %x, <256 x float> %y) {
270; CHECK-LABEL: fcmp_one_sv_v256f32:
271; CHECK:       # %bb.0:
272; CHECK-NEXT:    lea %s1, 256
273; CHECK-NEXT:    lvl %s1
274; CHECK-NEXT:    vbrd %v1, %s0
275; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
276; CHECK-NEXT:    vfmk.s.ne %vm1, %v0
277; CHECK-NEXT:    b.l.t (, %s10)
278  %xins = insertelement <256 x float> undef, float %x, i32 0
279  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
280  %z = fcmp one <256 x float> %vx, %y
281  ret <256 x i1> %z
282}
283
284; Function Attrs: nounwind
285define fastcc <256 x i1> @fcmp_one_vs_v256f32(<256 x float> %x, float %y) {
286; CHECK-LABEL: fcmp_one_vs_v256f32:
287; CHECK:       # %bb.0:
288; CHECK-NEXT:    lea %s1, 256
289; CHECK-NEXT:    lvl %s1
290; CHECK-NEXT:    vbrd %v1, %s0
291; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
292; CHECK-NEXT:    vfmk.s.ne %vm1, %v0
293; CHECK-NEXT:    b.l.t (, %s10)
294  %yins = insertelement <256 x float> undef, float %y, i32 0
295  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
296  %z = fcmp one <256 x float> %x, %vy
297  ret <256 x i1> %z
298}
299
300; Function Attrs: nounwind
301define fastcc <256 x i1> @fcmp_ord_vv_v256f32(<256 x float> %x, <256 x float> %y) {
302; CHECK-LABEL: fcmp_ord_vv_v256f32:
303; CHECK:       # %bb.0:
304; CHECK-NEXT:    lea %s0, 256
305; CHECK-NEXT:    lvl %s0
306; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
307; CHECK-NEXT:    vfmk.s.num %vm1, %v0
308; CHECK-NEXT:    b.l.t (, %s10)
309  %z = fcmp ord <256 x float> %x, %y
310  ret <256 x i1> %z
311}
312
313; Function Attrs: nounwind
314define fastcc <256 x i1> @fcmp_ord_sv_v256f32(float %x, <256 x float> %y) {
315; CHECK-LABEL: fcmp_ord_sv_v256f32:
316; CHECK:       # %bb.0:
317; CHECK-NEXT:    lea %s1, 256
318; CHECK-NEXT:    lvl %s1
319; CHECK-NEXT:    vbrd %v1, %s0
320; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
321; CHECK-NEXT:    vfmk.s.num %vm1, %v0
322; CHECK-NEXT:    b.l.t (, %s10)
323  %xins = insertelement <256 x float> undef, float %x, i32 0
324  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
325  %z = fcmp ord <256 x float> %vx, %y
326  ret <256 x i1> %z
327}
328
329; Function Attrs: nounwind
330define fastcc <256 x i1> @fcmp_ord_vs_v256f32(<256 x float> %x, float %y) {
331; CHECK-LABEL: fcmp_ord_vs_v256f32:
332; CHECK:       # %bb.0:
333; CHECK-NEXT:    lea %s1, 256
334; CHECK-NEXT:    lvl %s1
335; CHECK-NEXT:    vbrd %v1, %s0
336; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
337; CHECK-NEXT:    vfmk.s.num %vm1, %v0
338; CHECK-NEXT:    b.l.t (, %s10)
339  %yins = insertelement <256 x float> undef, float %y, i32 0
340  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
341  %z = fcmp ord <256 x float> %x, %vy
342  ret <256 x i1> %z
343}
344
345; Function Attrs: nounwind
346define fastcc <256 x i1> @fcmp_uno_vv_v256f32(<256 x float> %x, <256 x float> %y) {
347; CHECK-LABEL: fcmp_uno_vv_v256f32:
348; CHECK:       # %bb.0:
349; CHECK-NEXT:    lea %s0, 256
350; CHECK-NEXT:    lvl %s0
351; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
352; CHECK-NEXT:    vfmk.s.nan %vm1, %v0
353; CHECK-NEXT:    b.l.t (, %s10)
354  %z = fcmp uno <256 x float> %x, %y
355  ret <256 x i1> %z
356}
357
358; Function Attrs: nounwind
359define fastcc <256 x i1> @fcmp_uno_sv_v256f32(float %x, <256 x float> %y) {
360; CHECK-LABEL: fcmp_uno_sv_v256f32:
361; CHECK:       # %bb.0:
362; CHECK-NEXT:    lea %s1, 256
363; CHECK-NEXT:    lvl %s1
364; CHECK-NEXT:    vbrd %v1, %s0
365; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
366; CHECK-NEXT:    vfmk.s.nan %vm1, %v0
367; CHECK-NEXT:    b.l.t (, %s10)
368  %xins = insertelement <256 x float> undef, float %x, i32 0
369  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
370  %z = fcmp uno <256 x float> %vx, %y
371  ret <256 x i1> %z
372}
373
374; Function Attrs: nounwind
375define fastcc <256 x i1> @fcmp_uno_vs_v256f32(<256 x float> %x, float %y) {
376; CHECK-LABEL: fcmp_uno_vs_v256f32:
377; CHECK:       # %bb.0:
378; CHECK-NEXT:    lea %s1, 256
379; CHECK-NEXT:    lvl %s1
380; CHECK-NEXT:    vbrd %v1, %s0
381; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
382; CHECK-NEXT:    vfmk.s.nan %vm1, %v0
383; CHECK-NEXT:    b.l.t (, %s10)
384  %yins = insertelement <256 x float> undef, float %y, i32 0
385  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
386  %z = fcmp uno <256 x float> %x, %vy
387  ret <256 x i1> %z
388}
389
390; Function Attrs: nounwind
391define fastcc <256 x i1> @fcmp_ueq_vv_v256f32(<256 x float> %x, <256 x float> %y) {
392; CHECK-LABEL: fcmp_ueq_vv_v256f32:
393; CHECK:       # %bb.0:
394; CHECK-NEXT:    lea %s0, 256
395; CHECK-NEXT:    lvl %s0
396; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
397; CHECK-NEXT:    vfmk.s.eqnan %vm1, %v0
398; CHECK-NEXT:    b.l.t (, %s10)
399  %z = fcmp ueq <256 x float> %x, %y
400  ret <256 x i1> %z
401}
402
403; Function Attrs: nounwind
404define fastcc <256 x i1> @fcmp_ueq_sv_v256f32(float %x, <256 x float> %y) {
405; CHECK-LABEL: fcmp_ueq_sv_v256f32:
406; CHECK:       # %bb.0:
407; CHECK-NEXT:    lea %s1, 256
408; CHECK-NEXT:    lvl %s1
409; CHECK-NEXT:    vbrd %v1, %s0
410; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
411; CHECK-NEXT:    vfmk.s.eqnan %vm1, %v0
412; CHECK-NEXT:    b.l.t (, %s10)
413  %xins = insertelement <256 x float> undef, float %x, i32 0
414  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
415  %z = fcmp ueq <256 x float> %vx, %y
416  ret <256 x i1> %z
417}
418
419; Function Attrs: nounwind
420define fastcc <256 x i1> @fcmp_ueq_vs_v256f32(<256 x float> %x, float %y) {
421; CHECK-LABEL: fcmp_ueq_vs_v256f32:
422; CHECK:       # %bb.0:
423; CHECK-NEXT:    lea %s1, 256
424; CHECK-NEXT:    lvl %s1
425; CHECK-NEXT:    vbrd %v1, %s0
426; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
427; CHECK-NEXT:    vfmk.s.eqnan %vm1, %v0
428; CHECK-NEXT:    b.l.t (, %s10)
429  %yins = insertelement <256 x float> undef, float %y, i32 0
430  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
431  %z = fcmp ueq <256 x float> %x, %vy
432  ret <256 x i1> %z
433}
434
435; Function Attrs: nounwind
436define fastcc <256 x i1> @fcmp_ugt_vv_v256f32(<256 x float> %x, <256 x float> %y) {
437; CHECK-LABEL: fcmp_ugt_vv_v256f32:
438; CHECK:       # %bb.0:
439; CHECK-NEXT:    lea %s0, 256
440; CHECK-NEXT:    lvl %s0
441; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
442; CHECK-NEXT:    vfmk.s.gtnan %vm1, %v0
443; CHECK-NEXT:    b.l.t (, %s10)
444  %z = fcmp ugt <256 x float> %x, %y
445  ret <256 x i1> %z
446}
447
448; Function Attrs: nounwind
449define fastcc <256 x i1> @fcmp_ugt_sv_v256f32(float %x, <256 x float> %y) {
450; CHECK-LABEL: fcmp_ugt_sv_v256f32:
451; CHECK:       # %bb.0:
452; CHECK-NEXT:    lea %s1, 256
453; CHECK-NEXT:    lvl %s1
454; CHECK-NEXT:    vbrd %v1, %s0
455; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
456; CHECK-NEXT:    vfmk.s.gtnan %vm1, %v0
457; CHECK-NEXT:    b.l.t (, %s10)
458  %xins = insertelement <256 x float> undef, float %x, i32 0
459  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
460  %z = fcmp ugt <256 x float> %vx, %y
461  ret <256 x i1> %z
462}
463
464; Function Attrs: nounwind
465define fastcc <256 x i1> @fcmp_ugt_vs_v256f32(<256 x float> %x, float %y) {
466; CHECK-LABEL: fcmp_ugt_vs_v256f32:
467; CHECK:       # %bb.0:
468; CHECK-NEXT:    lea %s1, 256
469; CHECK-NEXT:    lvl %s1
470; CHECK-NEXT:    vbrd %v1, %s0
471; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
472; CHECK-NEXT:    vfmk.s.gtnan %vm1, %v0
473; CHECK-NEXT:    b.l.t (, %s10)
474  %yins = insertelement <256 x float> undef, float %y, i32 0
475  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
476  %z = fcmp ugt <256 x float> %x, %vy
477  ret <256 x i1> %z
478}
479
480; Function Attrs: nounwind
481define fastcc <256 x i1> @fcmp_uge_vv_v256f32(<256 x float> %x, <256 x float> %y) {
482; CHECK-LABEL: fcmp_uge_vv_v256f32:
483; CHECK:       # %bb.0:
484; CHECK-NEXT:    lea %s0, 256
485; CHECK-NEXT:    lvl %s0
486; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
487; CHECK-NEXT:    vfmk.s.genan %vm1, %v0
488; CHECK-NEXT:    b.l.t (, %s10)
489  %z = fcmp uge <256 x float> %x, %y
490  ret <256 x i1> %z
491}
492
493; Function Attrs: nounwind
494define fastcc <256 x i1> @fcmp_uge_sv_v256f32(float %x, <256 x float> %y) {
495; CHECK-LABEL: fcmp_uge_sv_v256f32:
496; CHECK:       # %bb.0:
497; CHECK-NEXT:    lea %s1, 256
498; CHECK-NEXT:    lvl %s1
499; CHECK-NEXT:    vbrd %v1, %s0
500; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
501; CHECK-NEXT:    vfmk.s.genan %vm1, %v0
502; CHECK-NEXT:    b.l.t (, %s10)
503  %xins = insertelement <256 x float> undef, float %x, i32 0
504  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
505  %z = fcmp uge <256 x float> %vx, %y
506  ret <256 x i1> %z
507}
508
509; Function Attrs: nounwind
510define fastcc <256 x i1> @fcmp_uge_vs_v256f32(<256 x float> %x, float %y) {
511; CHECK-LABEL: fcmp_uge_vs_v256f32:
512; CHECK:       # %bb.0:
513; CHECK-NEXT:    lea %s1, 256
514; CHECK-NEXT:    lvl %s1
515; CHECK-NEXT:    vbrd %v1, %s0
516; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
517; CHECK-NEXT:    vfmk.s.genan %vm1, %v0
518; CHECK-NEXT:    b.l.t (, %s10)
519  %yins = insertelement <256 x float> undef, float %y, i32 0
520  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
521  %z = fcmp uge <256 x float> %x, %vy
522  ret <256 x i1> %z
523}
524
525; Function Attrs: nounwind
526define fastcc <256 x i1> @fcmp_ult_vv_v256f32(<256 x float> %x, <256 x float> %y) {
527; CHECK-LABEL: fcmp_ult_vv_v256f32:
528; CHECK:       # %bb.0:
529; CHECK-NEXT:    lea %s0, 256
530; CHECK-NEXT:    lvl %s0
531; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
532; CHECK-NEXT:    vfmk.s.ltnan %vm1, %v0
533; CHECK-NEXT:    b.l.t (, %s10)
534  %z = fcmp ult <256 x float> %x, %y
535  ret <256 x i1> %z
536}
537
538; Function Attrs: nounwind
539define fastcc <256 x i1> @fcmp_ult_sv_v256f32(float %x, <256 x float> %y) {
540; CHECK-LABEL: fcmp_ult_sv_v256f32:
541; CHECK:       # %bb.0:
542; CHECK-NEXT:    lea %s1, 256
543; CHECK-NEXT:    lvl %s1
544; CHECK-NEXT:    vbrd %v1, %s0
545; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
546; CHECK-NEXT:    vfmk.s.ltnan %vm1, %v0
547; CHECK-NEXT:    b.l.t (, %s10)
548  %xins = insertelement <256 x float> undef, float %x, i32 0
549  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
550  %z = fcmp ult <256 x float> %vx, %y
551  ret <256 x i1> %z
552}
553
554; Function Attrs: nounwind
555define fastcc <256 x i1> @fcmp_ult_vs_v256f32(<256 x float> %x, float %y) {
556; CHECK-LABEL: fcmp_ult_vs_v256f32:
557; CHECK:       # %bb.0:
558; CHECK-NEXT:    lea %s1, 256
559; CHECK-NEXT:    lvl %s1
560; CHECK-NEXT:    vbrd %v1, %s0
561; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
562; CHECK-NEXT:    vfmk.s.ltnan %vm1, %v0
563; CHECK-NEXT:    b.l.t (, %s10)
564  %yins = insertelement <256 x float> undef, float %y, i32 0
565  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
566  %z = fcmp ult <256 x float> %x, %vy
567  ret <256 x i1> %z
568}
569
570; Function Attrs: nounwind
571define fastcc <256 x i1> @fcmp_ule_vv_v256f32(<256 x float> %x, <256 x float> %y) {
572; CHECK-LABEL: fcmp_ule_vv_v256f32:
573; CHECK:       # %bb.0:
574; CHECK-NEXT:    lea %s0, 256
575; CHECK-NEXT:    lvl %s0
576; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
577; CHECK-NEXT:    vfmk.s.lenan %vm1, %v0
578; CHECK-NEXT:    b.l.t (, %s10)
579  %z = fcmp ule <256 x float> %x, %y
580  ret <256 x i1> %z
581}
582
583; Function Attrs: nounwind
584define fastcc <256 x i1> @fcmp_ule_sv_v256f32(float %x, <256 x float> %y) {
585; CHECK-LABEL: fcmp_ule_sv_v256f32:
586; CHECK:       # %bb.0:
587; CHECK-NEXT:    lea %s1, 256
588; CHECK-NEXT:    lvl %s1
589; CHECK-NEXT:    vbrd %v1, %s0
590; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
591; CHECK-NEXT:    vfmk.s.lenan %vm1, %v0
592; CHECK-NEXT:    b.l.t (, %s10)
593  %xins = insertelement <256 x float> undef, float %x, i32 0
594  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
595  %z = fcmp ule <256 x float> %vx, %y
596  ret <256 x i1> %z
597}
598
599; Function Attrs: nounwind
600define fastcc <256 x i1> @fcmp_ule_vs_v256f32(<256 x float> %x, float %y) {
601; CHECK-LABEL: fcmp_ule_vs_v256f32:
602; CHECK:       # %bb.0:
603; CHECK-NEXT:    lea %s1, 256
604; CHECK-NEXT:    lvl %s1
605; CHECK-NEXT:    vbrd %v1, %s0
606; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
607; CHECK-NEXT:    vfmk.s.lenan %vm1, %v0
608; CHECK-NEXT:    b.l.t (, %s10)
609  %yins = insertelement <256 x float> undef, float %y, i32 0
610  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
611  %z = fcmp ule <256 x float> %x, %vy
612  ret <256 x i1> %z
613}
614
615; Function Attrs: nounwind
616define fastcc <256 x i1> @fcmp_une_vv_v256f32(<256 x float> %x, <256 x float> %y) {
617; CHECK-LABEL: fcmp_une_vv_v256f32:
618; CHECK:       # %bb.0:
619; CHECK-NEXT:    lea %s0, 256
620; CHECK-NEXT:    lvl %s0
621; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
622; CHECK-NEXT:    vfmk.s.nenan %vm1, %v0
623; CHECK-NEXT:    b.l.t (, %s10)
624  %z = fcmp une <256 x float> %x, %y
625  ret <256 x i1> %z
626}
627
628; Function Attrs: nounwind
629define fastcc <256 x i1> @fcmp_une_sv_v256f32(float %x, <256 x float> %y) {
630; CHECK-LABEL: fcmp_une_sv_v256f32:
631; CHECK:       # %bb.0:
632; CHECK-NEXT:    lea %s1, 256
633; CHECK-NEXT:    lvl %s1
634; CHECK-NEXT:    vbrd %v1, %s0
635; CHECK-NEXT:    vfcmp.s %v0, %v1, %v0
636; CHECK-NEXT:    vfmk.s.nenan %vm1, %v0
637; CHECK-NEXT:    b.l.t (, %s10)
638  %xins = insertelement <256 x float> undef, float %x, i32 0
639  %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
640  %z = fcmp une <256 x float> %vx, %y
641  ret <256 x i1> %z
642}
643
644; Function Attrs: nounwind
645define fastcc <256 x i1> @fcmp_une_vs_v256f32(<256 x float> %x, float %y) {
646; CHECK-LABEL: fcmp_une_vs_v256f32:
647; CHECK:       # %bb.0:
648; CHECK-NEXT:    lea %s1, 256
649; CHECK-NEXT:    lvl %s1
650; CHECK-NEXT:    vbrd %v1, %s0
651; CHECK-NEXT:    vfcmp.s %v0, %v0, %v1
652; CHECK-NEXT:    vfmk.s.nenan %vm1, %v0
653; CHECK-NEXT:    b.l.t (, %s10)
654  %yins = insertelement <256 x float> undef, float %y, i32 0
655  %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
656  %z = fcmp une <256 x float> %x, %vy
657  ret <256 x i1> %z
658}
659
660;; TODO v256i1 all-one mask isel.
661;; ; Function Attrs: nounwind
662;; define fastcc <256 x i1> @fcmp_true_vv_v256f32(<256 x float> %x, <256 x float> %y) {
663;;   %z = fcmp true <256 x float> %x, %y
664;;   ret <256 x i1> %z
665;; }
666;;
667;; ; Function Attrs: nounwind
668;; define fastcc <256 x i1> @fcmp_true_sv_v256f32(float %x, <256 x float> %y) {
669;;   %xins = insertelement <256 x float> undef, float %x, i32 0
670;;   %vx = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
671;;   %z = fcmp true <256 x float> %vx, %y
672;;   ret <256 x i1> %z
673;; }
674;;
675;; ; Function Attrs: nounwind
676;; define fastcc <256 x i1> @fcmp_true_vs_v256f32(<256 x float> %x, float %y) {
677;;   %yins = insertelement <256 x float> undef, float %y, i32 0
678;;   %vy = shufflevector <256 x float> %yins, <256 x float> undef, <256 x i32> zeroinitializer
679;;   %z = fcmp true <256 x float> %x, %vy
680;;   ret <256 x i1> %z
681;; }
682