1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=aarch64--linux-gnu -mattr=+sve < %s | FileCheck %s
4 define <vscale x 4 x i1> @oeq(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
7 ; CHECK-NEXT: ptrue p0.s
8 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s
10 %y = fcmp oeq <vscale x 4 x float> %x, %x2
11 ret <vscale x 4 x i1> %y
13 define <vscale x 4 x i1> @ogt(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
16 ; CHECK-NEXT: ptrue p0.s
17 ; CHECK-NEXT: fcmgt p0.s, p0/z, z0.s, z1.s
19 %y = fcmp ogt <vscale x 4 x float> %x, %x2
20 ret <vscale x 4 x i1> %y
22 define <vscale x 4 x i1> @oge(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
25 ; CHECK-NEXT: ptrue p0.s
26 ; CHECK-NEXT: fcmge p0.s, p0/z, z0.s, z1.s
28 %y = fcmp oge <vscale x 4 x float> %x, %x2
29 ret <vscale x 4 x i1> %y
31 define <vscale x 4 x i1> @olt(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
34 ; CHECK-NEXT: ptrue p0.s
35 ; CHECK-NEXT: fcmgt p0.s, p0/z, z1.s, z0.s
37 %y = fcmp olt <vscale x 4 x float> %x, %x2
38 ret <vscale x 4 x i1> %y
40 define <vscale x 4 x i1> @ole(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
43 ; CHECK-NEXT: ptrue p0.s
44 ; CHECK-NEXT: fcmge p0.s, p0/z, z1.s, z0.s
46 %y = fcmp ole <vscale x 4 x float> %x, %x2
47 ret <vscale x 4 x i1> %y
49 define <vscale x 4 x i1> @one(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
52 ; CHECK-NEXT: ptrue p0.s
53 ; CHECK-NEXT: fcmgt p1.s, p0/z, z1.s, z0.s
54 ; CHECK-NEXT: fcmgt p0.s, p0/z, z0.s, z1.s
55 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
57 %y = fcmp one <vscale x 4 x float> %x, %x2
58 ret <vscale x 4 x i1> %y
60 define <vscale x 4 x i1> @ord(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
63 ; CHECK-NEXT: ptrue p0.s
64 ; CHECK-NEXT: fcmuo p1.s, p0/z, z0.s, z1.s
65 ; CHECK-NEXT: not p0.b, p0/z, p1.b
67 %y = fcmp ord <vscale x 4 x float> %x, %x2
68 ret <vscale x 4 x i1> %y
70 define <vscale x 4 x i1> @ueq(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
73 ; CHECK-NEXT: ptrue p0.s
74 ; CHECK-NEXT: fcmuo p1.s, p0/z, z0.s, z1.s
75 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s
76 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
78 %y = fcmp ueq <vscale x 4 x float> %x, %x2
79 ret <vscale x 4 x i1> %y
81 define <vscale x 4 x i1> @ugt(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
84 ; CHECK-NEXT: ptrue p0.s
85 ; CHECK-NEXT: fcmge p1.s, p0/z, z1.s, z0.s
86 ; CHECK-NEXT: not p0.b, p0/z, p1.b
88 %y = fcmp ugt <vscale x 4 x float> %x, %x2
89 ret <vscale x 4 x i1> %y
91 define <vscale x 4 x i1> @uge(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
94 ; CHECK-NEXT: ptrue p0.s
95 ; CHECK-NEXT: fcmgt p1.s, p0/z, z1.s, z0.s
96 ; CHECK-NEXT: not p0.b, p0/z, p1.b
98 %y = fcmp uge <vscale x 4 x float> %x, %x2
99 ret <vscale x 4 x i1> %y
101 define <vscale x 4 x i1> @ult(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
104 ; CHECK-NEXT: ptrue p0.s
105 ; CHECK-NEXT: fcmge p1.s, p0/z, z0.s, z1.s
106 ; CHECK-NEXT: not p0.b, p0/z, p1.b
108 %y = fcmp ult <vscale x 4 x float> %x, %x2
109 ret <vscale x 4 x i1> %y
111 define <vscale x 4 x i1> @ule(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
114 ; CHECK-NEXT: ptrue p0.s
115 ; CHECK-NEXT: fcmgt p1.s, p0/z, z0.s, z1.s
116 ; CHECK-NEXT: not p0.b, p0/z, p1.b
118 %y = fcmp ule <vscale x 4 x float> %x, %x2
119 ret <vscale x 4 x i1> %y
121 define <vscale x 4 x i1> @une(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
124 ; CHECK-NEXT: ptrue p0.s
125 ; CHECK-NEXT: fcmne p0.s, p0/z, z0.s, z1.s
127 %y = fcmp une <vscale x 4 x float> %x, %x2
128 ret <vscale x 4 x i1> %y
130 define <vscale x 4 x i1> @uno(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
133 ; CHECK-NEXT: ptrue p0.s
134 ; CHECK-NEXT: fcmuo p0.s, p0/z, z0.s, z1.s
136 %y = fcmp uno <vscale x 4 x float> %x, %x2
137 ret <vscale x 4 x i1> %y
139 define <vscale x 2 x i1> @oeq_2f32(<vscale x 2 x float> %x, <vscale x 2 x float> %x2) {
140 ; CHECK-LABEL: oeq_2f32:
142 ; CHECK-NEXT: ptrue p0.d
143 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s
145 %y = fcmp oeq <vscale x 2 x float> %x, %x2
146 ret <vscale x 2 x i1> %y
148 define <vscale x 2 x i1> @ueq_2f32(<vscale x 2 x float> %x, <vscale x 2 x float> %x2) {
149 ; CHECK-LABEL: ueq_2f32:
151 ; CHECK-NEXT: ptrue p0.d
152 ; CHECK-NEXT: fcmuo p1.s, p0/z, z0.s, z1.s
153 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s
154 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
156 %y = fcmp ueq <vscale x 2 x float> %x, %x2
157 ret <vscale x 2 x i1> %y
159 define <vscale x 2 x i1> @oeq_2f64(<vscale x 2 x double> %x, <vscale x 2 x double> %x2) {
160 ; CHECK-LABEL: oeq_2f64:
162 ; CHECK-NEXT: ptrue p0.d
163 ; CHECK-NEXT: fcmeq p0.d, p0/z, z0.d, z1.d
165 %y = fcmp oeq <vscale x 2 x double> %x, %x2
166 ret <vscale x 2 x i1> %y
168 define <vscale x 2 x i1> @ueq_2f64(<vscale x 2 x double> %x, <vscale x 2 x double> %x2) {
169 ; CHECK-LABEL: ueq_2f64:
171 ; CHECK-NEXT: ptrue p0.d
172 ; CHECK-NEXT: fcmuo p1.d, p0/z, z0.d, z1.d
173 ; CHECK-NEXT: fcmeq p0.d, p0/z, z0.d, z1.d
174 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
176 %y = fcmp ueq <vscale x 2 x double> %x, %x2
177 ret <vscale x 2 x i1> %y
179 define <vscale x 2 x i1> @oeq_2f16(<vscale x 2 x half> %x, <vscale x 2 x half> %x2) {
180 ; CHECK-LABEL: oeq_2f16:
182 ; CHECK-NEXT: ptrue p0.d
183 ; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h
185 %y = fcmp oeq <vscale x 2 x half> %x, %x2
186 ret <vscale x 2 x i1> %y
188 define <vscale x 2 x i1> @ueq_2f16(<vscale x 2 x half> %x, <vscale x 2 x half> %x2) {
189 ; CHECK-LABEL: ueq_2f16:
191 ; CHECK-NEXT: ptrue p0.d
192 ; CHECK-NEXT: fcmuo p1.h, p0/z, z0.h, z1.h
193 ; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h
194 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
196 %y = fcmp ueq <vscale x 2 x half> %x, %x2
197 ret <vscale x 2 x i1> %y
199 define <vscale x 4 x i1> @oeq_4f16(<vscale x 4 x half> %x, <vscale x 4 x half> %x2) {
200 ; CHECK-LABEL: oeq_4f16:
202 ; CHECK-NEXT: ptrue p0.s
203 ; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h
205 %y = fcmp oeq <vscale x 4 x half> %x, %x2
206 ret <vscale x 4 x i1> %y
208 define <vscale x 4 x i1> @ueq_4f16(<vscale x 4 x half> %x, <vscale x 4 x half> %x2) {
209 ; CHECK-LABEL: ueq_4f16:
211 ; CHECK-NEXT: ptrue p0.s
212 ; CHECK-NEXT: fcmuo p1.h, p0/z, z0.h, z1.h
213 ; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h
214 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
216 %y = fcmp ueq <vscale x 4 x half> %x, %x2
217 ret <vscale x 4 x i1> %y
219 define <vscale x 8 x i1> @oeq_8f16(<vscale x 8 x half> %x, <vscale x 8 x half> %x2) {
220 ; CHECK-LABEL: oeq_8f16:
222 ; CHECK-NEXT: ptrue p0.h
223 ; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h
225 %y = fcmp oeq <vscale x 8 x half> %x, %x2
226 ret <vscale x 8 x i1> %y
228 define <vscale x 8 x i1> @ueq_8f16(<vscale x 8 x half> %x, <vscale x 8 x half> %x2) {
229 ; CHECK-LABEL: ueq_8f16:
231 ; CHECK-NEXT: ptrue p0.h
232 ; CHECK-NEXT: fcmuo p1.h, p0/z, z0.h, z1.h
233 ; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, z1.h
234 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
236 %y = fcmp ueq <vscale x 8 x half> %x, %x2
237 ret <vscale x 8 x i1> %y
240 define <vscale x 4 x i32> @oeq_4f32_sext(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
241 ; CHECK-LABEL: oeq_4f32_sext:
243 ; CHECK-NEXT: ptrue p0.s
244 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s
245 ; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff
247 %y = fcmp oeq <vscale x 4 x float> %x, %x2
248 %r = sext <vscale x 4 x i1> %y to <vscale x 4 x i32>
249 ret <vscale x 4 x i32> %r
252 define <vscale x 4 x i32> @oeq_4f32_zext(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
253 ; CHECK-LABEL: oeq_4f32_zext:
255 ; CHECK-NEXT: ptrue p0.s
256 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s
257 ; CHECK-NEXT: mov z0.s, p0/z, #1 // =0x1
259 %y = fcmp oeq <vscale x 4 x float> %x, %x2
260 %r = zext <vscale x 4 x i1> %y to <vscale x 4 x i32>
261 ret <vscale x 4 x i32> %r
264 define <vscale x 4 x i1> @eq_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
265 ; CHECK-LABEL: eq_fast:
267 ; CHECK-NEXT: ptrue p0.s
268 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, z1.s
270 %y = fcmp fast oeq <vscale x 4 x float> %x, %x2
271 ret <vscale x 4 x i1> %y
273 define <vscale x 4 x i1> @gt_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
274 ; CHECK-LABEL: gt_fast:
276 ; CHECK-NEXT: ptrue p0.s
277 ; CHECK-NEXT: fcmgt p0.s, p0/z, z0.s, z1.s
279 %y = fcmp fast ogt <vscale x 4 x float> %x, %x2
280 ret <vscale x 4 x i1> %y
282 define <vscale x 4 x i1> @ge_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
283 ; CHECK-LABEL: ge_fast:
285 ; CHECK-NEXT: ptrue p0.s
286 ; CHECK-NEXT: fcmge p0.s, p0/z, z0.s, z1.s
288 %y = fcmp fast oge <vscale x 4 x float> %x, %x2
289 ret <vscale x 4 x i1> %y
291 define <vscale x 4 x i1> @lt_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
292 ; CHECK-LABEL: lt_fast:
294 ; CHECK-NEXT: ptrue p0.s
295 ; CHECK-NEXT: fcmgt p0.s, p0/z, z1.s, z0.s
297 %y = fcmp fast olt <vscale x 4 x float> %x, %x2
298 ret <vscale x 4 x i1> %y
300 define <vscale x 4 x i1> @le_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
301 ; CHECK-LABEL: le_fast:
303 ; CHECK-NEXT: ptrue p0.s
304 ; CHECK-NEXT: fcmge p0.s, p0/z, z1.s, z0.s
306 %y = fcmp fast ole <vscale x 4 x float> %x, %x2
307 ret <vscale x 4 x i1> %y
309 define <vscale x 4 x i1> @ne_fast(<vscale x 4 x float> %x, <vscale x 4 x float> %x2) {
310 ; CHECK-LABEL: ne_fast:
312 ; CHECK-NEXT: ptrue p0.s
313 ; CHECK-NEXT: fcmne p0.s, p0/z, z0.s, z1.s
315 %y = fcmp fast one <vscale x 4 x float> %x, %x2
316 ret <vscale x 4 x i1> %y
318 define <vscale x 4 x i1> @oeq_zero(<vscale x 4 x float> %x) {
319 ; CHECK-LABEL: oeq_zero:
321 ; CHECK-NEXT: ptrue p0.s
322 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, #0.0
324 %y = fcmp oeq <vscale x 4 x float> %x, zeroinitializer
325 ret <vscale x 4 x i1> %y
327 define <vscale x 4 x i1> @ogt_zero(<vscale x 4 x float> %x) {
328 ; CHECK-LABEL: ogt_zero:
330 ; CHECK-NEXT: ptrue p0.s
331 ; CHECK-NEXT: fcmgt p0.s, p0/z, z0.s, #0.0
333 %y = fcmp ogt <vscale x 4 x float> %x, zeroinitializer
334 ret <vscale x 4 x i1> %y
336 define <vscale x 4 x i1> @oge_zero(<vscale x 4 x float> %x) {
337 ; CHECK-LABEL: oge_zero:
339 ; CHECK-NEXT: ptrue p0.s
340 ; CHECK-NEXT: fcmge p0.s, p0/z, z0.s, #0.0
342 %y = fcmp oge <vscale x 4 x float> %x, zeroinitializer
343 ret <vscale x 4 x i1> %y
345 define <vscale x 4 x i1> @olt_zero(<vscale x 4 x float> %x) {
346 ; CHECK-LABEL: olt_zero:
348 ; CHECK-NEXT: ptrue p0.s
349 ; CHECK-NEXT: fcmlt p0.s, p0/z, z0.s, #0.0
351 %y = fcmp olt <vscale x 4 x float> %x, zeroinitializer
352 ret <vscale x 4 x i1> %y
354 define <vscale x 4 x i1> @ole_zero(<vscale x 4 x float> %x) {
355 ; CHECK-LABEL: ole_zero:
357 ; CHECK-NEXT: ptrue p0.s
358 ; CHECK-NEXT: fcmle p0.s, p0/z, z0.s, #0.0
360 %y = fcmp ole <vscale x 4 x float> %x, zeroinitializer
361 ret <vscale x 4 x i1> %y
363 define <vscale x 4 x i1> @one_zero(<vscale x 4 x float> %x) {
364 ; CHECK-LABEL: one_zero:
366 ; CHECK-NEXT: ptrue p0.s
367 ; CHECK-NEXT: fcmlt p1.s, p0/z, z0.s, #0.0
368 ; CHECK-NEXT: fcmgt p0.s, p0/z, z0.s, #0.0
369 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
371 %y = fcmp one <vscale x 4 x float> %x, zeroinitializer
372 ret <vscale x 4 x i1> %y
374 define <vscale x 4 x i1> @ueq_zero(<vscale x 4 x float> %x) {
375 ; CHECK-LABEL: ueq_zero:
377 ; CHECK-NEXT: ptrue p0.s
378 ; CHECK-NEXT: mov z1.s, #0 // =0x0
379 ; CHECK-NEXT: fcmuo p1.s, p0/z, z0.s, z1.s
380 ; CHECK-NEXT: fcmeq p0.s, p0/z, z0.s, #0.0
381 ; CHECK-NEXT: sel p0.b, p0, p0.b, p1.b
383 %y = fcmp ueq <vscale x 4 x float> %x, zeroinitializer
384 ret <vscale x 4 x i1> %y
386 define <vscale x 4 x i1> @ugt_zero(<vscale x 4 x float> %x) {
387 ; CHECK-LABEL: ugt_zero:
389 ; CHECK-NEXT: ptrue p0.s
390 ; CHECK-NEXT: fcmle p1.s, p0/z, z0.s, #0.0
391 ; CHECK-NEXT: not p0.b, p0/z, p1.b
393 %y = fcmp ugt <vscale x 4 x float> %x, zeroinitializer
394 ret <vscale x 4 x i1> %y
396 define <vscale x 4 x i1> @uge_zero(<vscale x 4 x float> %x) {
397 ; CHECK-LABEL: uge_zero:
399 ; CHECK-NEXT: ptrue p0.s
400 ; CHECK-NEXT: fcmlt p1.s, p0/z, z0.s, #0.0
401 ; CHECK-NEXT: not p0.b, p0/z, p1.b
403 %y = fcmp uge <vscale x 4 x float> %x, zeroinitializer
404 ret <vscale x 4 x i1> %y
406 define <vscale x 4 x i1> @ult_zero(<vscale x 4 x float> %x) {
407 ; CHECK-LABEL: ult_zero:
409 ; CHECK-NEXT: ptrue p0.s
410 ; CHECK-NEXT: fcmge p1.s, p0/z, z0.s, #0.0
411 ; CHECK-NEXT: not p0.b, p0/z, p1.b
413 %y = fcmp ult <vscale x 4 x float> %x, zeroinitializer
414 ret <vscale x 4 x i1> %y
416 define <vscale x 4 x i1> @ule_zero(<vscale x 4 x float> %x) {
417 ; CHECK-LABEL: ule_zero:
419 ; CHECK-NEXT: ptrue p0.s
420 ; CHECK-NEXT: fcmgt p1.s, p0/z, z0.s, #0.0
421 ; CHECK-NEXT: not p0.b, p0/z, p1.b
423 %y = fcmp ule <vscale x 4 x float> %x, zeroinitializer
424 ret <vscale x 4 x i1> %y
426 define <vscale x 4 x i1> @une_zero(<vscale x 4 x float> %x) {
427 ; CHECK-LABEL: une_zero:
429 ; CHECK-NEXT: ptrue p0.s
430 ; CHECK-NEXT: fcmne p0.s, p0/z, z0.s, #0.0
432 %y = fcmp une <vscale x 4 x float> %x, zeroinitializer
433 ret <vscale x 4 x i1> %y
435 define <vscale x 8 x i1> @oeq_zero_pred(<vscale x 8 x i1> %pg, <vscale x 8 x half> %x) {
436 ; CHECK-LABEL: oeq_zero_pred:
438 ; CHECK-NEXT: fcmeq p0.h, p0/z, z0.h, #0.0
440 %y = fcmp oeq <vscale x 8 x half> %x, zeroinitializer
441 %z = and <vscale x 8 x i1> %pg, %y
442 ret <vscale x 8 x i1> %z
444 define <vscale x 4 x i1> @ogt_zero_pred(<vscale x 4 x i1> %pg, <vscale x 4 x half> %x) {
445 ; CHECK-LABEL: ogt_zero_pred:
447 ; CHECK-NEXT: fcmgt p0.h, p0/z, z0.h, #0.0
449 %y = fcmp ogt <vscale x 4 x half> %x, zeroinitializer
450 %z = and <vscale x 4 x i1> %pg, %y
451 ret <vscale x 4 x i1> %z
453 define <vscale x 2 x i1> @oge_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x half> %x) {
454 ; CHECK-LABEL: oge_zero_pred:
456 ; CHECK-NEXT: fcmge p0.h, p0/z, z0.h, #0.0
458 %y = fcmp oge <vscale x 2 x half> %x, zeroinitializer
459 %z = and <vscale x 2 x i1> %pg, %y
460 ret <vscale x 2 x i1> %z
462 define <vscale x 4 x i1> @olt_zero_pred(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
463 ; CHECK-LABEL: olt_zero_pred:
465 ; CHECK-NEXT: fcmlt p0.s, p0/z, z0.s, #0.0
467 %y = fcmp olt <vscale x 4 x float> %x, zeroinitializer
468 %z = and <vscale x 4 x i1> %pg, %y
469 ret <vscale x 4 x i1> %z
471 define <vscale x 2 x i1> @ole_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x float> %x) {
472 ; CHECK-LABEL: ole_zero_pred:
474 ; CHECK-NEXT: fcmle p0.s, p0/z, z0.s, #0.0
476 %y = fcmp ole <vscale x 2 x float> %x, zeroinitializer
477 %z = and <vscale x 2 x i1> %pg, %y
478 ret <vscale x 2 x i1> %z
480 define <vscale x 2 x i1> @une_zero_pred(<vscale x 2 x i1> %pg, <vscale x 2 x double> %x) {
481 ; CHECK-LABEL: une_zero_pred:
483 ; CHECK-NEXT: fcmne p0.d, p0/z, z0.d, #0.0
485 %y = fcmp une <vscale x 2 x double> %x, zeroinitializer
486 %z = and <vscale x 2 x i1> %pg, %y
487 ret <vscale x 2 x i1> %z
490 %svboolx2 = type { <vscale x 4 x i1>, <vscale x 4 x i1> }
492 define %svboolx2 @and_of_multiuse_fcmp_ogt(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
493 ; CHECK-LABEL: and_of_multiuse_fcmp_ogt:
495 ; CHECK-NEXT: ptrue p1.s
496 ; CHECK-NEXT: fcmgt p1.s, p1/z, z0.s, z1.s
497 ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
499 %cmp = fcmp ogt <vscale x 4 x float> %x, %y
500 %and = and <vscale x 4 x i1> %pg, %cmp
501 %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0
502 %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1
506 define %svboolx2 @and_of_multiuse_fcmp_ogt_zero(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
507 ; CHECK-LABEL: and_of_multiuse_fcmp_ogt_zero:
509 ; CHECK-NEXT: ptrue p1.s
510 ; CHECK-NEXT: fcmgt p1.s, p1/z, z0.s, #0.0
511 ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
513 %cmp = fcmp ogt <vscale x 4 x float> %x, zeroinitializer
514 %and = and <vscale x 4 x i1> %pg, %cmp
515 %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0
516 %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1
520 define %svboolx2 @and_of_multiuse_fcmp_olt(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x, <vscale x 4 x float> %y) {
521 ; CHECK-LABEL: and_of_multiuse_fcmp_olt:
523 ; CHECK-NEXT: ptrue p1.s
524 ; CHECK-NEXT: fcmgt p1.s, p1/z, z1.s, z0.s
525 ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
527 %cmp = fcmp olt <vscale x 4 x float> %x, %y
528 %and = and <vscale x 4 x i1> %pg, %cmp
529 %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0
530 %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1
534 define %svboolx2 @and_of_multiuse_fcmp_olt_zero(<vscale x 4 x i1> %pg, <vscale x 4 x float> %x) {
535 ; CHECK-LABEL: and_of_multiuse_fcmp_olt_zero:
537 ; CHECK-NEXT: ptrue p1.s
538 ; CHECK-NEXT: fcmlt p1.s, p1/z, z0.s, #0.0
539 ; CHECK-NEXT: and p0.b, p0/z, p0.b, p1.b
541 %cmp = fcmp olt <vscale x 4 x float> %x, zeroinitializer
542 %and = and <vscale x 4 x i1> %pg, %cmp
543 %ins.1 = insertvalue %svboolx2 poison, <vscale x 4 x i1> %and, 0
544 %ins.2 = insertvalue %svboolx2 %ins.1, <vscale x 4 x i1> %cmp, 1