[RISCV] Match vcompress during shuffle lowering (#117748)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / lower-neon-vector-fcmp.mir
blob1f5fb892df5820bd6c507596a3562bbcb52aa014
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-lowering -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s
3 ...
4 ---
5 name:            oeq
6 alignment:       4
7 legalized:       true
8 body:             |
9   bb.0:
10     liveins: $q0, $q1
11     ; CHECK-LABEL: name: oeq
12     ; CHECK: liveins: $q0, $q1
13     ; CHECK-NEXT: {{  $}}
14     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
15     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
16     ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %rhs(<2 x s64>)
17     ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<2 x s64>)
18     ; CHECK-NEXT: RET_ReallyLR implicit $q0
19     %lhs:_(<2 x s64>) = COPY $q0
20     %rhs:_(<2 x s64>) = COPY $q1
21     %fcmp:_(<2 x s64>) = G_FCMP floatpred(oeq), %lhs(<2 x s64>), %rhs
22     $q0 = COPY %fcmp(<2 x s64>)
23     RET_ReallyLR implicit $q0
25 ...
26 ---
27 name:            oeq_zero
28 alignment:       4
29 legalized:       true
30 body:             |
31   bb.0:
32     liveins: $q0, $q1
34     ; Should be inverted. Needs two compares.
36     ; CHECK-LABEL: name: oeq_zero
37     ; CHECK: liveins: $q0, $q1
38     ; CHECK-NEXT: {{  $}}
39     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
40     ; CHECK-NEXT: [[FCMEQZ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQZ %lhs
41     ; CHECK-NEXT: $q0 = COPY [[FCMEQZ]](<2 x s64>)
42     ; CHECK-NEXT: RET_ReallyLR implicit $q0
43     %lhs:_(<2 x s64>) = COPY $q0
44     %zero:_(s64) = G_CONSTANT i64 0
45     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
46     %fcmp:_(<2 x s64>) = G_FCMP floatpred(oeq), %lhs(<2 x s64>), %zero_vec
47     $q0 = COPY %fcmp(<2 x s64>)
48     RET_ReallyLR implicit $q0
51 ...
52 ---
53 name:            ogt
54 alignment:       4
55 legalized:       true
56 body:             |
57   bb.0:
58     liveins: $q0, $q1
59     ; CHECK-LABEL: name: ogt
60     ; CHECK: liveins: $q0, $q1
61     ; CHECK-NEXT: {{  $}}
62     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
63     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
64     ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %lhs, %rhs(<2 x s64>)
65     ; CHECK-NEXT: $q0 = COPY [[FCMGT]](<2 x s64>)
66     ; CHECK-NEXT: RET_ReallyLR implicit $q0
67     %lhs:_(<2 x s64>) = COPY $q0
68     %rhs:_(<2 x s64>) = COPY $q1
69     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ogt), %lhs(<2 x s64>), %rhs
70     $q0 = COPY %fcmp(<2 x s64>)
71     RET_ReallyLR implicit $q0
73 ...
74 ---
75 name:            ogt_zero
76 alignment:       4
77 legalized:       true
78 body:             |
79   bb.0:
80     liveins: $q0, $q1
81     ; CHECK-LABEL: name: ogt_zero
82     ; CHECK: liveins: $q0, $q1
83     ; CHECK-NEXT: {{  $}}
84     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
85     ; CHECK-NEXT: [[FCMGTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGTZ %lhs
86     ; CHECK-NEXT: $q0 = COPY [[FCMGTZ]](<2 x s64>)
87     ; CHECK-NEXT: RET_ReallyLR implicit $q0
88     %lhs:_(<2 x s64>) = COPY $q0
89     %zero:_(s64) = G_CONSTANT i64 0
90     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
91     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ogt), %lhs(<2 x s64>), %zero_vec
92     $q0 = COPY %fcmp(<2 x s64>)
93     RET_ReallyLR implicit $q0
95 ...
96 ---
97 name:            oge
98 alignment:       4
99 legalized:       true
100 body:             |
101   bb.0:
102     liveins: $q0, $q1
103     ; CHECK-LABEL: name: oge
104     ; CHECK: liveins: $q0, $q1
105     ; CHECK-NEXT: {{  $}}
106     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
107     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
108     ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>)
109     ; CHECK-NEXT: $q0 = COPY [[FCMGE]](<2 x s64>)
110     ; CHECK-NEXT: RET_ReallyLR implicit $q0
111     %lhs:_(<2 x s64>) = COPY $q0
112     %rhs:_(<2 x s64>) = COPY $q1
113     %fcmp:_(<2 x s64>) = G_FCMP floatpred(oge), %lhs(<2 x s64>), %rhs
114     $q0 = COPY %fcmp(<2 x s64>)
115     RET_ReallyLR implicit $q0
119 name:            oge_zero
120 alignment:       4
121 legalized:       true
122 body:             |
123   bb.0:
124     liveins: $q0, $q1
126     ; Should be inverted. Needs two compares.
128     ; CHECK-LABEL: name: oge_zero
129     ; CHECK: liveins: $q0, $q1
130     ; CHECK-NEXT: {{  $}}
131     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
132     ; CHECK-NEXT: [[FCMGEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGEZ %lhs
133     ; CHECK-NEXT: $q0 = COPY [[FCMGEZ]](<2 x s64>)
134     ; CHECK-NEXT: RET_ReallyLR implicit $q0
135     %lhs:_(<2 x s64>) = COPY $q0
136     %zero:_(s64) = G_CONSTANT i64 0
137     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
138     %fcmp:_(<2 x s64>) = G_FCMP floatpred(oge), %lhs(<2 x s64>), %zero_vec
139     $q0 = COPY %fcmp(<2 x s64>)
140     RET_ReallyLR implicit $q0
145 name:            olt
146 alignment:       4
147 legalized:       true
148 body:             |
149   bb.0:
150     liveins: $q0, $q1
151     ; CHECK-LABEL: name: olt
152     ; CHECK: liveins: $q0, $q1
153     ; CHECK-NEXT: {{  $}}
154     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
155     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
156     ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>)
157     ; CHECK-NEXT: $q0 = COPY [[FCMGT]](<2 x s64>)
158     ; CHECK-NEXT: RET_ReallyLR implicit $q0
159     %lhs:_(<2 x s64>) = COPY $q0
160     %rhs:_(<2 x s64>) = COPY $q1
161     %fcmp:_(<2 x s64>) = G_FCMP floatpred(olt), %lhs(<2 x s64>), %rhs
162     $q0 = COPY %fcmp(<2 x s64>)
163     RET_ReallyLR implicit $q0
167 name:            olt_zero
168 alignment:       4
169 legalized:       true
170 body:             |
171   bb.0:
172     liveins: $q0, $q1
173     ; CHECK-LABEL: name: olt_zero
174     ; CHECK: liveins: $q0, $q1
175     ; CHECK-NEXT: {{  $}}
176     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
177     ; CHECK-NEXT: [[FCMLTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLTZ %lhs
178     ; CHECK-NEXT: $q0 = COPY [[FCMLTZ]](<2 x s64>)
179     ; CHECK-NEXT: RET_ReallyLR implicit $q0
180     %lhs:_(<2 x s64>) = COPY $q0
181     %zero:_(s64) = G_CONSTANT i64 0
182     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
183     %fcmp:_(<2 x s64>) = G_FCMP floatpred(olt), %lhs(<2 x s64>), %zero_vec
184     $q0 = COPY %fcmp(<2 x s64>)
185     RET_ReallyLR implicit $q0
189 name:            ole
190 alignment:       4
191 legalized:       true
192 body:             |
193   bb.0:
194     liveins: $q0, $q1
195     ; CHECK-LABEL: name: ole
196     ; CHECK: liveins: $q0, $q1
197     ; CHECK-NEXT: {{  $}}
198     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
199     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
200     ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %rhs, %lhs(<2 x s64>)
201     ; CHECK-NEXT: $q0 = COPY [[FCMGE]](<2 x s64>)
202     ; CHECK-NEXT: RET_ReallyLR implicit $q0
203     %lhs:_(<2 x s64>) = COPY $q0
204     %rhs:_(<2 x s64>) = COPY $q1
205     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ole), %lhs(<2 x s64>), %rhs
206     $q0 = COPY %fcmp(<2 x s64>)
207     RET_ReallyLR implicit $q0
211 name:            ole_zero
212 alignment:       4
213 legalized:       true
214 body:             |
215   bb.0:
216     liveins: $q0, $q1
217     ; CHECK-LABEL: name: ole_zero
218     ; CHECK: liveins: $q0, $q1
219     ; CHECK-NEXT: {{  $}}
220     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
221     ; CHECK-NEXT: [[FCMLEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLEZ %lhs
222     ; CHECK-NEXT: $q0 = COPY [[FCMLEZ]](<2 x s64>)
223     ; CHECK-NEXT: RET_ReallyLR implicit $q0
224     %lhs:_(<2 x s64>) = COPY $q0
225     %zero:_(s64) = G_CONSTANT i64 0
226     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
227     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ole), %lhs(<2 x s64>), %zero_vec
228     $q0 = COPY %fcmp(<2 x s64>)
229     RET_ReallyLR implicit $q0
233 name:            one
234 alignment:       4
235 legalized:       true
236 body:             |
237   bb.0:
238     liveins: $q0, $q1
240     ; Two compares.
242     ; CHECK-LABEL: name: one
243     ; CHECK: liveins: $q0, $q1
244     ; CHECK-NEXT: {{  $}}
245     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
246     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
247     ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %lhs, %rhs(<2 x s64>)
248     ; CHECK-NEXT: [[FCMGT1:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>)
249     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMGT1]], [[FCMGT]]
250     ; CHECK-NEXT: $q0 = COPY [[OR]](<2 x s64>)
251     ; CHECK-NEXT: RET_ReallyLR implicit $q0
252     %lhs:_(<2 x s64>) = COPY $q0
253     %rhs:_(<2 x s64>) = COPY $q1
254     %fcmp:_(<2 x s64>) = G_FCMP floatpred(one), %lhs(<2 x s64>), %rhs
255     $q0 = COPY %fcmp(<2 x s64>)
256     RET_ReallyLR implicit $q0
260 name:            one_zero
261 alignment:       4
262 legalized:       true
263 body:             |
264   bb.0:
265     liveins: $q0, $q1
267     ; Two compares.
269     ; CHECK-LABEL: name: one_zero
270     ; CHECK: liveins: $q0, $q1
271     ; CHECK-NEXT: {{  $}}
272     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
273     ; CHECK-NEXT: [[FCMGTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGTZ %lhs
274     ; CHECK-NEXT: [[FCMLTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLTZ %lhs
275     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMLTZ]], [[FCMGTZ]]
276     ; CHECK-NEXT: $q0 = COPY [[OR]](<2 x s64>)
277     ; CHECK-NEXT: RET_ReallyLR implicit $q0
278     %lhs:_(<2 x s64>) = COPY $q0
279     %zero:_(s64) = G_CONSTANT i64 0
280     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
281     %fcmp:_(<2 x s64>) = G_FCMP floatpred(one), %lhs(<2 x s64>), %zero_vec
282     $q0 = COPY %fcmp(<2 x s64>)
283     RET_ReallyLR implicit $q0
287 name:            uno
288 alignment:       4
289 legalized:       true
290 body:             |
291   bb.0:
292     liveins: $q0, $q1
294     ; Should be inverted. Needs two compares.
296     ; CHECK-LABEL: name: uno
297     ; CHECK: liveins: $q0, $q1
298     ; CHECK-NEXT: {{  $}}
299     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
300     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
301     ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>)
302     ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>)
303     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMGT]], [[FCMGE]]
304     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
305     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
306     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[OR]], [[BUILD_VECTOR]]
307     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
308     ; CHECK-NEXT: RET_ReallyLR implicit $q0
309     %lhs:_(<2 x s64>) = COPY $q0
310     %rhs:_(<2 x s64>) = COPY $q1
311     %fcmp:_(<2 x s64>) = G_FCMP floatpred(uno), %lhs(<2 x s64>), %rhs
312     $q0 = COPY %fcmp(<2 x s64>)
313     RET_ReallyLR implicit $q0
317 name:            uno_zero
318 alignment:       4
319 legalized:       true
320 body:             |
321   bb.0:
322     liveins: $q0, $q1
325     ; CHECK-LABEL: name: uno_zero
326     ; CHECK: liveins: $q0, $q1
327     ; CHECK-NEXT: {{  $}}
328     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
329     ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %lhs(<2 x s64>)
330     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
331     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
332     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMEQ]], [[BUILD_VECTOR]]
333     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
334     ; CHECK-NEXT: RET_ReallyLR implicit $q0
335     %lhs:_(<2 x s64>) = COPY $q0
336     %zero:_(s64) = G_CONSTANT i64 0
337     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
338     %fcmp:_(<2 x s64>) = G_FCMP floatpred(uno), %lhs(<2 x s64>), %zero_vec
339     $q0 = COPY %fcmp(<2 x s64>)
340     RET_ReallyLR implicit $q0
344 name:            ord
345 alignment:       4
346 legalized:       true
347 body:             |
348   bb.0:
349     liveins: $q0, $q1
351     ; Needs two compares. No invert.
353     ; CHECK-LABEL: name: ord
354     ; CHECK: liveins: $q0, $q1
355     ; CHECK-NEXT: {{  $}}
356     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
357     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
358     ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>)
359     ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>)
360     ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[FCMGT]], [[FCMGE]]
361     ; CHECK-NEXT: $q0 = COPY [[OR]](<2 x s64>)
362     ; CHECK-NEXT: RET_ReallyLR implicit $q0
363     %lhs:_(<2 x s64>) = COPY $q0
364     %rhs:_(<2 x s64>) = COPY $q1
365     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ord), %lhs(<2 x s64>), %rhs
366     $q0 = COPY %fcmp(<2 x s64>)
367     RET_ReallyLR implicit $q0
371 name:            ord_zero
372 alignment:       4
373 legalized:       true
374 body:             |
375   bb.0:
376     liveins: $q0, $q1
378     ; Needs two compares. No invert.
380     ; CHECK-LABEL: name: ord_zero
381     ; CHECK: liveins: $q0, $q1
382     ; CHECK-NEXT: {{  $}}
383     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
384     ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %lhs(<2 x s64>)
385     ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<2 x s64>)
386     ; CHECK-NEXT: RET_ReallyLR implicit $q0
387     %lhs:_(<2 x s64>) = COPY $q0
388     %zero:_(s64) = G_CONSTANT i64 0
389     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
390     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ord), %lhs(<2 x s64>), %zero_vec
391     $q0 = COPY %fcmp(<2 x s64>)
392     RET_ReallyLR implicit $q0
396 name:            ult
397 alignment:       4
398 legalized:       true
399 body:             |
400   bb.0:
401     liveins: $q0, $q1
403     ; Should be inverted. Needs two compares.
405     ; CHECK-LABEL: name: ult
406     ; CHECK: liveins: $q0, $q1
407     ; CHECK-NEXT: {{  $}}
408     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
409     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
410     ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %lhs, %rhs(<2 x s64>)
411     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
412     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
413     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGE]], [[BUILD_VECTOR]]
414     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
415     ; CHECK-NEXT: RET_ReallyLR implicit $q0
416     %lhs:_(<2 x s64>) = COPY $q0
417     %rhs:_(<2 x s64>) = COPY $q1
418     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ult), %lhs(<2 x s64>), %rhs
419     $q0 = COPY %fcmp(<2 x s64>)
420     RET_ReallyLR implicit $q0
424 name:            ueq_zero
425 alignment:       4
426 legalized:       true
427 body:             |
428   bb.0:
429     liveins: $q0, $q1
431     ; Should be inverted. Needs two compares.
433     ; CHECK-LABEL: name: ueq_zero
434     ; CHECK: liveins: $q0, $q1
435     ; CHECK-NEXT: {{  $}}
436     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
437     ; CHECK-NEXT: [[FCMGEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGEZ %lhs
438     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
439     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
440     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGEZ]], [[BUILD_VECTOR]]
441     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
442     ; CHECK-NEXT: RET_ReallyLR implicit $q0
443     %lhs:_(<2 x s64>) = COPY $q0
444     %zero:_(s64) = G_CONSTANT i64 0
445     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
446     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ult), %lhs(<2 x s64>), %zero_vec
447     $q0 = COPY %fcmp(<2 x s64>)
448     RET_ReallyLR implicit $q0
452 name:            ule
453 alignment:       4
454 legalized:       true
455 body:             |
456   bb.0:
457     liveins: $q0, $q1
459     ; Should be inverted. Needs two compares.
461     ; CHECK-LABEL: name: ule
462     ; CHECK: liveins: $q0, $q1
463     ; CHECK-NEXT: {{  $}}
464     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
465     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
466     ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %lhs, %rhs(<2 x s64>)
467     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
468     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
469     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGT]], [[BUILD_VECTOR]]
470     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
471     ; CHECK-NEXT: RET_ReallyLR implicit $q0
472     %lhs:_(<2 x s64>) = COPY $q0
473     %rhs:_(<2 x s64>) = COPY $q1
474     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ule), %lhs(<2 x s64>), %rhs
475     $q0 = COPY %fcmp(<2 x s64>)
476     RET_ReallyLR implicit $q0
480 name:            ule_zero
481 alignment:       4
482 legalized:       true
483 body:             |
484   bb.0:
485     liveins: $q0, $q1
487     ; Should be inverted. Needs two compares.
489     ; CHECK-LABEL: name: ule_zero
490     ; CHECK: liveins: $q0, $q1
491     ; CHECK-NEXT: {{  $}}
492     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
493     ; CHECK-NEXT: [[FCMGTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMGTZ %lhs
494     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
495     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
496     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGTZ]], [[BUILD_VECTOR]]
497     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
498     ; CHECK-NEXT: RET_ReallyLR implicit $q0
499     %lhs:_(<2 x s64>) = COPY $q0
500     %zero:_(s64) = G_CONSTANT i64 0
501     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
502     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ule), %lhs(<2 x s64>), %zero_vec
503     $q0 = COPY %fcmp(<2 x s64>)
504     RET_ReallyLR implicit $q0
508 name:            ugt
509 alignment:       4
510 legalized:       true
511 body:             |
512   bb.0:
513     liveins: $q0, $q1
515     ; Should be inverted. Needs two compares.
517     ; CHECK-LABEL: name: ugt
518     ; CHECK: liveins: $q0, $q1
519     ; CHECK-NEXT: {{  $}}
520     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
521     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
522     ; CHECK-NEXT: [[FCMGE:%[0-9]+]]:_(<2 x s64>) = G_FCMGE %rhs, %lhs(<2 x s64>)
523     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
524     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
525     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGE]], [[BUILD_VECTOR]]
526     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
527     ; CHECK-NEXT: RET_ReallyLR implicit $q0
528     %lhs:_(<2 x s64>) = COPY $q0
529     %rhs:_(<2 x s64>) = COPY $q1
530     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ugt), %lhs(<2 x s64>), %rhs
531     $q0 = COPY %fcmp(<2 x s64>)
532     RET_ReallyLR implicit $q0
536 name:            ugt_zero
537 alignment:       4
538 legalized:       true
539 body:             |
540   bb.0:
541     liveins: $q0, $q1
543     ; Should be inverted. Needs two compares.
545     ; CHECK-LABEL: name: ugt_zero
546     ; CHECK: liveins: $q0, $q1
547     ; CHECK-NEXT: {{  $}}
548     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
549     ; CHECK-NEXT: [[FCMLEZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLEZ %lhs
550     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
551     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
552     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMLEZ]], [[BUILD_VECTOR]]
553     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
554     ; CHECK-NEXT: RET_ReallyLR implicit $q0
555     %lhs:_(<2 x s64>) = COPY $q0
556     %zero:_(s64) = G_CONSTANT i64 0
557     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
558     %fcmp:_(<2 x s64>) = G_FCMP floatpred(ugt), %lhs(<2 x s64>), %zero_vec
559     $q0 = COPY %fcmp(<2 x s64>)
560     RET_ReallyLR implicit $q0
564 name:            uge
565 alignment:       4
566 legalized:       true
567 body:             |
568   bb.0:
569     liveins: $q0, $q1
571     ; Should be inverted. Needs two compares.
573     ; CHECK-LABEL: name: uge
574     ; CHECK: liveins: $q0, $q1
575     ; CHECK-NEXT: {{  $}}
576     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
577     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
578     ; CHECK-NEXT: [[FCMGT:%[0-9]+]]:_(<2 x s64>) = G_FCMGT %rhs, %lhs(<2 x s64>)
579     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
580     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
581     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMGT]], [[BUILD_VECTOR]]
582     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
583     ; CHECK-NEXT: RET_ReallyLR implicit $q0
584     %lhs:_(<2 x s64>) = COPY $q0
585     %rhs:_(<2 x s64>) = COPY $q1
586     %fcmp:_(<2 x s64>) = G_FCMP floatpred(uge), %lhs(<2 x s64>), %rhs
587     $q0 = COPY %fcmp(<2 x s64>)
588     RET_ReallyLR implicit $q0
592 name:            uge_zero
593 alignment:       4
594 legalized:       true
595 body:             |
596   bb.0:
597     liveins: $q0, $q1
599     ; Should be inverted. Needs two compares.
601     ; CHECK-LABEL: name: uge_zero
602     ; CHECK: liveins: $q0, $q1
603     ; CHECK-NEXT: {{  $}}
604     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
605     ; CHECK-NEXT: [[FCMLTZ:%[0-9]+]]:_(<2 x s64>) = G_FCMLTZ %lhs
606     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
607     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
608     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMLTZ]], [[BUILD_VECTOR]]
609     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
610     ; CHECK-NEXT: RET_ReallyLR implicit $q0
611     %lhs:_(<2 x s64>) = COPY $q0
612     %zero:_(s64) = G_CONSTANT i64 0
613     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
614     %fcmp:_(<2 x s64>) = G_FCMP floatpred(uge), %lhs(<2 x s64>), %zero_vec
615     $q0 = COPY %fcmp(<2 x s64>)
616     RET_ReallyLR implicit $q0
620 name:            une
621 alignment:       4
622 legalized:       true
623 body:             |
624   bb.0:
625     liveins: $q0, $q1
627     ; Negated EQ.
629     ; CHECK-LABEL: name: une
630     ; CHECK: liveins: $q0, $q1
631     ; CHECK-NEXT: {{  $}}
632     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
633     ; CHECK-NEXT: %rhs:_(<2 x s64>) = COPY $q1
634     ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQ %lhs, %rhs(<2 x s64>)
635     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
636     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
637     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMEQ]], [[BUILD_VECTOR]]
638     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
639     ; CHECK-NEXT: RET_ReallyLR implicit $q0
640     %lhs:_(<2 x s64>) = COPY $q0
641     %rhs:_(<2 x s64>) = COPY $q1
642     %fcmp:_(<2 x s64>) = G_FCMP floatpred(une), %lhs(<2 x s64>), %rhs
643     $q0 = COPY %fcmp(<2 x s64>)
644     RET_ReallyLR implicit $q0
648 name:            une_zero
649 alignment:       4
650 legalized:       true
651 body:             |
652   bb.0:
653     liveins: $q0, $q1
655     ; Negated EQ.
657     ; CHECK-LABEL: name: une_zero
658     ; CHECK: liveins: $q0, $q1
659     ; CHECK-NEXT: {{  $}}
660     ; CHECK-NEXT: %lhs:_(<2 x s64>) = COPY $q0
661     ; CHECK-NEXT: [[FCMEQZ:%[0-9]+]]:_(<2 x s64>) = G_FCMEQZ %lhs
662     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
663     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
664     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[FCMEQZ]], [[BUILD_VECTOR]]
665     ; CHECK-NEXT: $q0 = COPY [[XOR]](<2 x s64>)
666     ; CHECK-NEXT: RET_ReallyLR implicit $q0
667     %lhs:_(<2 x s64>) = COPY $q0
668     %zero:_(s64) = G_CONSTANT i64 0
669     %zero_vec:_(<2 x s64>) = G_BUILD_VECTOR %zero, %zero
670     %fcmp:_(<2 x s64>) = G_FCMP floatpred(une), %lhs(<2 x s64>), %zero_vec
671     $q0 = COPY %fcmp(<2 x s64>)
672     RET_ReallyLR implicit $q0
676 name:            lower_v8s16
677 alignment:       4
678 legalized:       true
679 body:             |
680   bb.0:
681     liveins: $q0, $q1
683     ; CHECK-LABEL: name: lower_v8s16
684     ; CHECK: liveins: $q0, $q1
685     ; CHECK-NEXT: {{  $}}
686     ; CHECK-NEXT: %lhs:_(<8 x s16>) = COPY $q0
687     ; CHECK-NEXT: %rhs:_(<8 x s16>) = COPY $q1
688     ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<8 x s16>) = G_FCMEQ %lhs, %rhs(<8 x s16>)
689     ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<8 x s16>)
690     ; CHECK-NEXT: RET_ReallyLR implicit $q0
691     %lhs:_(<8 x s16>) = COPY $q0
692     %rhs:_(<8 x s16>) = COPY $q1
693     %fcmp:_(<8 x s16>) = G_FCMP floatpred(oeq), %lhs(<8 x s16>), %rhs
694     $q0 = COPY %fcmp(<8 x s16>)
695     RET_ReallyLR implicit $q0
699 name:            lower_v4s16
700 alignment:       4
701 legalized:       true
702 body:             |
703   bb.0:
704     liveins: $d0, $d1
706     ; CHECK-LABEL: name: lower_v4s16
707     ; CHECK: liveins: $d0, $d1
708     ; CHECK-NEXT: {{  $}}
709     ; CHECK-NEXT: %lhs:_(<4 x s16>) = COPY $d0
710     ; CHECK-NEXT: %rhs:_(<4 x s16>) = COPY $d1
711     ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<4 x s16>) = G_FCMEQ %lhs, %rhs(<4 x s16>)
712     ; CHECK-NEXT: $d0 = COPY [[FCMEQ]](<4 x s16>)
713     ; CHECK-NEXT: RET_ReallyLR implicit $d0
714     %lhs:_(<4 x s16>) = COPY $d0
715     %rhs:_(<4 x s16>) = COPY $d1
716     %fcmp:_(<4 x s16>) = G_FCMP floatpred(oeq), %lhs(<4 x s16>), %rhs
717     $d0 = COPY %fcmp(<4 x s16>)
718     RET_ReallyLR implicit $d0
722 name:            is_not_nan
723 alignment:       4
724 legalized:       true
725 body:             |
726   bb.0:
727     liveins: $q0, $q1
729     ; CHECK-LABEL: name: is_not_nan
730     ; CHECK: liveins: $q0, $q1
731     ; CHECK-NEXT: {{  $}}
732     ; CHECK-NEXT: %lhs:_(<4 x s32>) = COPY $q0
733     ; CHECK-NEXT: [[FCMEQ:%[0-9]+]]:_(<4 x s32>) = G_FCMEQ %lhs, %lhs(<4 x s32>)
734     ; CHECK-NEXT: $q0 = COPY [[FCMEQ]](<4 x s32>)
735     ; CHECK-NEXT: RET_ReallyLR implicit $q0
736     %lhs:_(<4 x s32>) = COPY $q0
737     %zero:_(s32) = G_FCONSTANT float 0.000000e+00
738     %veczero:_(<4 x s32>) = G_BUILD_VECTOR %zero, %zero, %zero, %zero
739     %fcmp:_(<4 x s32>) = G_FCMP floatpred(ord), %lhs(<4 x s32>), %veczero
740     $q0 = COPY %fcmp(<4 x s32>)
741     RET_ReallyLR implicit $q0