[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / GlobalISel / x86_64-select-fcmp.mir
blobe60720cfa87eaa636553236c9eb5b923deb76032
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
4 --- |
6   define i1 @fcmp_float_oeq(float %x, float %y) {
7     %1 = fcmp oeq float %x, %y
8     ret i1 %1
9   }
11   define i1 @fcmp_float_ogt(float %x, float %y) {
12     %1 = fcmp ogt float %x, %y
13     ret i1 %1
14   }
16   define i1 @fcmp_float_oge(float %x, float %y) {
17     %1 = fcmp oge float %x, %y
18     ret i1 %1
19   }
21   define i1 @fcmp_float_olt(float %x, float %y) {
22     %1 = fcmp olt float %x, %y
23     ret i1 %1
24   }
26   define i1 @fcmp_float_ole(float %x, float %y) {
27     %1 = fcmp ole float %x, %y
28     ret i1 %1
29   }
31   define i1 @fcmp_float_one(float %x, float %y) {
32     %1 = fcmp one float %x, %y
33     ret i1 %1
34   }
36   define i1 @fcmp_float_ord(float %x, float %y) {
37     %1 = fcmp ord float %x, %y
38     ret i1 %1
39   }
41   define i1 @fcmp_float_uno(float %x, float %y) {
42     %1 = fcmp uno float %x, %y
43     ret i1 %1
44   }
46   define i1 @fcmp_float_ueq(float %x, float %y) {
47     %1 = fcmp ueq float %x, %y
48     ret i1 %1
49   }
51   define i1 @fcmp_float_ugt(float %x, float %y) {
52     %1 = fcmp ugt float %x, %y
53     ret i1 %1
54   }
56   define i1 @fcmp_float_uge(float %x, float %y) {
57     %1 = fcmp uge float %x, %y
58     ret i1 %1
59   }
61   define i1 @fcmp_float_ult(float %x, float %y) {
62     %1 = fcmp ult float %x, %y
63     ret i1 %1
64   }
66   define i1 @fcmp_float_ule(float %x, float %y) {
67     %1 = fcmp ule float %x, %y
68     ret i1 %1
69   }
71   define i1 @fcmp_float_une(float %x, float %y) {
72     %1 = fcmp une float %x, %y
73     ret i1 %1
74   }
76   define i1 @fcmp_double_oeq(double %x, double %y) {
77     %1 = fcmp oeq double %x, %y
78     ret i1 %1
79   }
81   define i1 @fcmp_double_ogt(double %x, double %y) {
82     %1 = fcmp ogt double %x, %y
83     ret i1 %1
84   }
86   define i1 @fcmp_double_oge(double %x, double %y) {
87     %1 = fcmp oge double %x, %y
88     ret i1 %1
89   }
91   define i1 @fcmp_double_olt(double %x, double %y) {
92     %1 = fcmp olt double %x, %y
93     ret i1 %1
94   }
96   define i1 @fcmp_double_ole(double %x, double %y) {
97     %1 = fcmp ole double %x, %y
98     ret i1 %1
99   }
101   define i1 @fcmp_double_one(double %x, double %y) {
102     %1 = fcmp one double %x, %y
103     ret i1 %1
104   }
106   define i1 @fcmp_double_ord(double %x, double %y) {
107     %1 = fcmp ord double %x, %y
108     ret i1 %1
109   }
111   define i1 @fcmp_double_uno(double %x, double %y) {
112     %1 = fcmp uno double %x, %y
113     ret i1 %1
114   }
116   define i1 @fcmp_double_ueq(double %x, double %y) {
117     %1 = fcmp ueq double %x, %y
118     ret i1 %1
119   }
121   define i1 @fcmp_double_ugt(double %x, double %y) {
122     %1 = fcmp ugt double %x, %y
123     ret i1 %1
124   }
126   define i1 @fcmp_double_uge(double %x, double %y) {
127     %1 = fcmp uge double %x, %y
128     ret i1 %1
129   }
131   define i1 @fcmp_double_ult(double %x, double %y) {
132     %1 = fcmp ult double %x, %y
133     ret i1 %1
134   }
136   define i1 @fcmp_double_ule(double %x, double %y) {
137     %1 = fcmp ule double %x, %y
138     ret i1 %1
139   }
141   define i1 @fcmp_double_une(double %x, double %y) {
142     %1 = fcmp une double %x, %y
143     ret i1 %1
144   }
148 name:            fcmp_float_oeq
149 alignment:       16
150 legalized:       true
151 regBankSelected: true
152 tracksRegLiveness: true
153 registers:
154   - { id: 0, class: vecr }
155   - { id: 1, class: vecr }
156   - { id: 2, class: vecr }
157   - { id: 3, class: vecr }
158   - { id: 4, class: _ }
159   - { id: 5, class: gpr }
160   - { id: 6, class: gpr }
161 body:             |
162   bb.1 (%ir-block.0):
163     liveins: $xmm0, $xmm1
165     ; CHECK-LABEL: name: fcmp_float_oeq
166     ; CHECK: liveins: $xmm0, $xmm1
167     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
168     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
169     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
170     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
171     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
172     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
173     ; CHECK: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 11, implicit $eflags
174     ; CHECK: [[AND8rr:%[0-9]+]]:gr8 = AND8rr [[SETCCr]], [[SETCCr1]], implicit-def $eflags
175     ; CHECK: $al = COPY [[AND8rr]]
176     ; CHECK: RET 0, implicit $al
177     %2:vecr(s128) = COPY $xmm0
178     %0:vecr(s32) = G_TRUNC %2(s128)
179     %3:vecr(s128) = COPY $xmm1
180     %1:vecr(s32) = G_TRUNC %3(s128)
181     %6:gpr(s8) = G_FCMP floatpred(oeq), %0(s32), %1
182     %5:gpr(s8) = COPY %6(s8)
183     $al = COPY %5(s8)
184     RET 0, implicit $al
188 name:            fcmp_float_ogt
189 alignment:       16
190 legalized:       true
191 regBankSelected: true
192 tracksRegLiveness: true
193 registers:
194   - { id: 0, class: vecr }
195   - { id: 1, class: vecr }
196   - { id: 2, class: vecr }
197   - { id: 3, class: vecr }
198   - { id: 4, class: _ }
199   - { id: 5, class: gpr }
200   - { id: 6, class: gpr }
201 body:             |
202   bb.1 (%ir-block.0):
203     liveins: $xmm0, $xmm1
205     ; CHECK-LABEL: name: fcmp_float_ogt
206     ; CHECK: liveins: $xmm0, $xmm1
207     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
208     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
209     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
210     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
211     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
212     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
213     ; CHECK: $al = COPY [[SETCCr]]
214     ; CHECK: RET 0, implicit $al
215     %2:vecr(s128) = COPY $xmm0
216     %0:vecr(s32) = G_TRUNC %2(s128)
217     %3:vecr(s128) = COPY $xmm1
218     %1:vecr(s32) = G_TRUNC %3(s128)
219     %6:gpr(s8) = G_FCMP floatpred(ogt), %0(s32), %1
220     %5:gpr(s8) = COPY %6(s8)
221     $al = COPY %5(s8)
222     RET 0, implicit $al
226 name:            fcmp_float_oge
227 alignment:       16
228 legalized:       true
229 regBankSelected: true
230 tracksRegLiveness: true
231 registers:
232   - { id: 0, class: vecr }
233   - { id: 1, class: vecr }
234   - { id: 2, class: vecr }
235   - { id: 3, class: vecr }
236   - { id: 4, class: _ }
237   - { id: 5, class: gpr }
238   - { id: 6, class: gpr }
239 body:             |
240   bb.1 (%ir-block.0):
241     liveins: $xmm0, $xmm1
243     ; CHECK-LABEL: name: fcmp_float_oge
244     ; CHECK: liveins: $xmm0, $xmm1
245     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
246     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
247     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
248     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
249     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
250     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 3, implicit $eflags
251     ; CHECK: $al = COPY [[SETCCr]]
252     ; CHECK: RET 0, implicit $al
253     %2:vecr(s128) = COPY $xmm0
254     %0:vecr(s32) = G_TRUNC %2(s128)
255     %3:vecr(s128) = COPY $xmm1
256     %1:vecr(s32) = G_TRUNC %3(s128)
257     %6:gpr(s8) = G_FCMP floatpred(oge), %0(s32), %1
258     %5:gpr(s8) = COPY %6(s8)
259     $al = COPY %5(s8)
260     RET 0, implicit $al
264 name:            fcmp_float_olt
265 alignment:       16
266 legalized:       true
267 regBankSelected: true
268 tracksRegLiveness: true
269 registers:
270   - { id: 0, class: vecr }
271   - { id: 1, class: vecr }
272   - { id: 2, class: vecr }
273   - { id: 3, class: vecr }
274   - { id: 4, class: _ }
275   - { id: 5, class: gpr }
276   - { id: 6, class: gpr }
277 body:             |
278   bb.1 (%ir-block.0):
279     liveins: $xmm0, $xmm1
281     ; CHECK-LABEL: name: fcmp_float_olt
282     ; CHECK: liveins: $xmm0, $xmm1
283     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
284     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
285     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
286     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
287     ; CHECK: UCOMISSrr [[COPY3]], [[COPY1]], implicit-def $eflags
288     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
289     ; CHECK: $al = COPY [[SETCCr]]
290     ; CHECK: RET 0, implicit $al
291     %2:vecr(s128) = COPY $xmm0
292     %0:vecr(s32) = G_TRUNC %2(s128)
293     %3:vecr(s128) = COPY $xmm1
294     %1:vecr(s32) = G_TRUNC %3(s128)
295     %6:gpr(s8) = G_FCMP floatpred(olt), %0(s32), %1
296     %5:gpr(s8) = COPY %6(s8)
297     $al = COPY %5(s8)
298     RET 0, implicit $al
302 name:            fcmp_float_ole
303 alignment:       16
304 legalized:       true
305 regBankSelected: true
306 tracksRegLiveness: true
307 registers:
308   - { id: 0, class: vecr }
309   - { id: 1, class: vecr }
310   - { id: 2, class: vecr }
311   - { id: 3, class: vecr }
312   - { id: 4, class: _ }
313   - { id: 5, class: gpr }
314   - { id: 6, class: gpr }
315 body:             |
316   bb.1 (%ir-block.0):
317     liveins: $xmm0, $xmm1
319     ; CHECK-LABEL: name: fcmp_float_ole
320     ; CHECK: liveins: $xmm0, $xmm1
321     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
322     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
323     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
324     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
325     ; CHECK: UCOMISSrr [[COPY3]], [[COPY1]], implicit-def $eflags
326     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 3, implicit $eflags
327     ; CHECK: $al = COPY [[SETCCr]]
328     ; CHECK: RET 0, implicit $al
329     %2:vecr(s128) = COPY $xmm0
330     %0:vecr(s32) = G_TRUNC %2(s128)
331     %3:vecr(s128) = COPY $xmm1
332     %1:vecr(s32) = G_TRUNC %3(s128)
333     %6:gpr(s8) = G_FCMP floatpred(ole), %0(s32), %1
334     %5:gpr(s8) = COPY %6(s8)
335     $al = COPY %5(s8)
336     RET 0, implicit $al
340 name:            fcmp_float_one
341 alignment:       16
342 legalized:       true
343 regBankSelected: true
344 tracksRegLiveness: true
345 registers:
346   - { id: 0, class: vecr }
347   - { id: 1, class: vecr }
348   - { id: 2, class: vecr }
349   - { id: 3, class: vecr }
350   - { id: 4, class: _ }
351   - { id: 5, class: gpr }
352   - { id: 6, class: gpr }
353 body:             |
354   bb.1 (%ir-block.0):
355     liveins: $xmm0, $xmm1
357     ; CHECK-LABEL: name: fcmp_float_one
358     ; CHECK: liveins: $xmm0, $xmm1
359     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
360     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
361     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
362     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
363     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
364     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 5, implicit $eflags
365     ; CHECK: $al = COPY [[SETCCr]]
366     ; CHECK: RET 0, implicit $al
367     %2:vecr(s128) = COPY $xmm0
368     %0:vecr(s32) = G_TRUNC %2(s128)
369     %3:vecr(s128) = COPY $xmm1
370     %1:vecr(s32) = G_TRUNC %3(s128)
371     %6:gpr(s8) = G_FCMP floatpred(one), %0(s32), %1
372     %5:gpr(s8) = COPY %6(s8)
373     $al = COPY %5(s8)
374     RET 0, implicit $al
378 name:            fcmp_float_ord
379 alignment:       16
380 legalized:       true
381 regBankSelected: true
382 tracksRegLiveness: true
383 registers:
384   - { id: 0, class: vecr }
385   - { id: 1, class: vecr }
386   - { id: 2, class: vecr }
387   - { id: 3, class: vecr }
388   - { id: 4, class: _ }
389   - { id: 5, class: gpr }
390   - { id: 6, class: gpr }
391 body:             |
392   bb.1 (%ir-block.0):
393     liveins: $xmm0, $xmm1
395     ; CHECK-LABEL: name: fcmp_float_ord
396     ; CHECK: liveins: $xmm0, $xmm1
397     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
398     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
399     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
400     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
401     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
402     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 11, implicit $eflags
403     ; CHECK: $al = COPY [[SETCCr]]
404     ; CHECK: RET 0, implicit $al
405     %2:vecr(s128) = COPY $xmm0
406     %0:vecr(s32) = G_TRUNC %2(s128)
407     %3:vecr(s128) = COPY $xmm1
408     %1:vecr(s32) = G_TRUNC %3(s128)
409     %6:gpr(s8) = G_FCMP floatpred(ord), %0(s32), %1
410     %5:gpr(s8) = COPY %6(s8)
411     $al = COPY %5(s8)
412     RET 0, implicit $al
416 name:            fcmp_float_uno
417 alignment:       16
418 legalized:       true
419 regBankSelected: true
420 tracksRegLiveness: true
421 registers:
422   - { id: 0, class: vecr }
423   - { id: 1, class: vecr }
424   - { id: 2, class: vecr }
425   - { id: 3, class: vecr }
426   - { id: 4, class: _ }
427   - { id: 5, class: gpr }
428   - { id: 6, class: gpr }
429 body:             |
430   bb.1 (%ir-block.0):
431     liveins: $xmm0, $xmm1
433     ; CHECK-LABEL: name: fcmp_float_uno
434     ; CHECK: liveins: $xmm0, $xmm1
435     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
436     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
437     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
438     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
439     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
440     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 10, implicit $eflags
441     ; CHECK: $al = COPY [[SETCCr]]
442     ; CHECK: RET 0, implicit $al
443     %2:vecr(s128) = COPY $xmm0
444     %0:vecr(s32) = G_TRUNC %2(s128)
445     %3:vecr(s128) = COPY $xmm1
446     %1:vecr(s32) = G_TRUNC %3(s128)
447     %6:gpr(s8) = G_FCMP floatpred(uno), %0(s32), %1
448     %5:gpr(s8) = COPY %6(s8)
449     $al = COPY %5(s8)
450     RET 0, implicit $al
454 name:            fcmp_float_ueq
455 alignment:       16
456 legalized:       true
457 regBankSelected: true
458 tracksRegLiveness: true
459 registers:
460   - { id: 0, class: vecr }
461   - { id: 1, class: vecr }
462   - { id: 2, class: vecr }
463   - { id: 3, class: vecr }
464   - { id: 4, class: _ }
465   - { id: 5, class: gpr }
466   - { id: 6, class: gpr }
467 body:             |
468   bb.1 (%ir-block.0):
469     liveins: $xmm0, $xmm1
471     ; CHECK-LABEL: name: fcmp_float_ueq
472     ; CHECK: liveins: $xmm0, $xmm1
473     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
474     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
475     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
476     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
477     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
478     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
479     ; CHECK: $al = COPY [[SETCCr]]
480     ; CHECK: RET 0, implicit $al
481     %2:vecr(s128) = COPY $xmm0
482     %0:vecr(s32) = G_TRUNC %2(s128)
483     %3:vecr(s128) = COPY $xmm1
484     %1:vecr(s32) = G_TRUNC %3(s128)
485     %6:gpr(s8) = G_FCMP floatpred(ueq), %0(s32), %1
486     %5:gpr(s8) = COPY %6(s8)
487     $al = COPY %5(s8)
488     RET 0, implicit $al
492 name:            fcmp_float_ugt
493 alignment:       16
494 legalized:       true
495 regBankSelected: true
496 tracksRegLiveness: true
497 registers:
498   - { id: 0, class: vecr }
499   - { id: 1, class: vecr }
500   - { id: 2, class: vecr }
501   - { id: 3, class: vecr }
502   - { id: 4, class: _ }
503   - { id: 5, class: gpr }
504   - { id: 6, class: gpr }
505 body:             |
506   bb.1 (%ir-block.0):
507     liveins: $xmm0, $xmm1
509     ; CHECK-LABEL: name: fcmp_float_ugt
510     ; CHECK: liveins: $xmm0, $xmm1
511     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
512     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
513     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
514     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
515     ; CHECK: UCOMISSrr [[COPY3]], [[COPY1]], implicit-def $eflags
516     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
517     ; CHECK: $al = COPY [[SETCCr]]
518     ; CHECK: RET 0, implicit $al
519     %2:vecr(s128) = COPY $xmm0
520     %0:vecr(s32) = G_TRUNC %2(s128)
521     %3:vecr(s128) = COPY $xmm1
522     %1:vecr(s32) = G_TRUNC %3(s128)
523     %6:gpr(s8) = G_FCMP floatpred(ugt), %0(s32), %1
524     %5:gpr(s8) = COPY %6(s8)
525     $al = COPY %5(s8)
526     RET 0, implicit $al
530 name:            fcmp_float_uge
531 alignment:       16
532 legalized:       true
533 regBankSelected: true
534 tracksRegLiveness: true
535 registers:
536   - { id: 0, class: vecr }
537   - { id: 1, class: vecr }
538   - { id: 2, class: vecr }
539   - { id: 3, class: vecr }
540   - { id: 4, class: _ }
541   - { id: 5, class: gpr }
542   - { id: 6, class: gpr }
543 body:             |
544   bb.1 (%ir-block.0):
545     liveins: $xmm0, $xmm1
547     ; CHECK-LABEL: name: fcmp_float_uge
548     ; CHECK: liveins: $xmm0, $xmm1
549     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
550     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
551     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
552     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
553     ; CHECK: UCOMISSrr [[COPY3]], [[COPY1]], implicit-def $eflags
554     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 6, implicit $eflags
555     ; CHECK: $al = COPY [[SETCCr]]
556     ; CHECK: RET 0, implicit $al
557     %2:vecr(s128) = COPY $xmm0
558     %0:vecr(s32) = G_TRUNC %2(s128)
559     %3:vecr(s128) = COPY $xmm1
560     %1:vecr(s32) = G_TRUNC %3(s128)
561     %6:gpr(s8) = G_FCMP floatpred(uge), %0(s32), %1
562     %5:gpr(s8) = COPY %6(s8)
563     $al = COPY %5(s8)
564     RET 0, implicit $al
568 name:            fcmp_float_ult
569 alignment:       16
570 legalized:       true
571 regBankSelected: true
572 tracksRegLiveness: true
573 registers:
574   - { id: 0, class: vecr }
575   - { id: 1, class: vecr }
576   - { id: 2, class: vecr }
577   - { id: 3, class: vecr }
578   - { id: 4, class: _ }
579   - { id: 5, class: gpr }
580   - { id: 6, class: gpr }
581 body:             |
582   bb.1 (%ir-block.0):
583     liveins: $xmm0, $xmm1
585     ; CHECK-LABEL: name: fcmp_float_ult
586     ; CHECK: liveins: $xmm0, $xmm1
587     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
588     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
589     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
590     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
591     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
592     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
593     ; CHECK: $al = COPY [[SETCCr]]
594     ; CHECK: RET 0, implicit $al
595     %2:vecr(s128) = COPY $xmm0
596     %0:vecr(s32) = G_TRUNC %2(s128)
597     %3:vecr(s128) = COPY $xmm1
598     %1:vecr(s32) = G_TRUNC %3(s128)
599     %6:gpr(s8) = G_FCMP floatpred(ult), %0(s32), %1
600     %5:gpr(s8) = COPY %6(s8)
601     $al = COPY %5(s8)
602     RET 0, implicit $al
606 name:            fcmp_float_ule
607 alignment:       16
608 legalized:       true
609 regBankSelected: true
610 tracksRegLiveness: true
611 registers:
612   - { id: 0, class: vecr }
613   - { id: 1, class: vecr }
614   - { id: 2, class: vecr }
615   - { id: 3, class: vecr }
616   - { id: 4, class: _ }
617   - { id: 5, class: gpr }
618   - { id: 6, class: gpr }
619 body:             |
620   bb.1 (%ir-block.0):
621     liveins: $xmm0, $xmm1
623     ; CHECK-LABEL: name: fcmp_float_ule
624     ; CHECK: liveins: $xmm0, $xmm1
625     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
626     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
627     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
628     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
629     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
630     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 6, implicit $eflags
631     ; CHECK: $al = COPY [[SETCCr]]
632     ; CHECK: RET 0, implicit $al
633     %2:vecr(s128) = COPY $xmm0
634     %0:vecr(s32) = G_TRUNC %2(s128)
635     %3:vecr(s128) = COPY $xmm1
636     %1:vecr(s32) = G_TRUNC %3(s128)
637     %6:gpr(s8) = G_FCMP floatpred(ule), %0(s32), %1
638     %5:gpr(s8) = COPY %6(s8)
639     $al = COPY %5(s8)
640     RET 0, implicit $al
644 name:            fcmp_float_une
645 alignment:       16
646 legalized:       true
647 regBankSelected: true
648 tracksRegLiveness: true
649 registers:
650   - { id: 0, class: vecr }
651   - { id: 1, class: vecr }
652   - { id: 2, class: vecr }
653   - { id: 3, class: vecr }
654   - { id: 4, class: _ }
655   - { id: 5, class: gpr }
656   - { id: 6, class: gpr }
657 body:             |
658   bb.1 (%ir-block.0):
659     liveins: $xmm0, $xmm1
661     ; CHECK-LABEL: name: fcmp_float_une
662     ; CHECK: liveins: $xmm0, $xmm1
663     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
664     ; CHECK: [[COPY1:%[0-9]+]]:fr32 = COPY [[COPY]]
665     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
666     ; CHECK: [[COPY3:%[0-9]+]]:fr32 = COPY [[COPY2]]
667     ; CHECK: UCOMISSrr [[COPY1]], [[COPY3]], implicit-def $eflags
668     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 5, implicit $eflags
669     ; CHECK: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 10, implicit $eflags
670     ; CHECK: [[OR8rr:%[0-9]+]]:gr8 = OR8rr [[SETCCr]], [[SETCCr1]], implicit-def $eflags
671     ; CHECK: $al = COPY [[OR8rr]]
672     ; CHECK: RET 0, implicit $al
673     %2:vecr(s128) = COPY $xmm0
674     %0:vecr(s32) = G_TRUNC %2(s128)
675     %3:vecr(s128) = COPY $xmm1
676     %1:vecr(s32) = G_TRUNC %3(s128)
677     %6:gpr(s8) = G_FCMP floatpred(une), %0(s32), %1
678     %5:gpr(s8) = COPY %6(s8)
679     $al = COPY %5(s8)
680     RET 0, implicit $al
684 name:            fcmp_double_oeq
685 alignment:       16
686 legalized:       true
687 regBankSelected: true
688 tracksRegLiveness: true
689 registers:
690   - { id: 0, class: vecr }
691   - { id: 1, class: vecr }
692   - { id: 2, class: vecr }
693   - { id: 3, class: vecr }
694   - { id: 4, class: _ }
695   - { id: 5, class: gpr }
696   - { id: 6, class: gpr }
697 body:             |
698   bb.1 (%ir-block.0):
699     liveins: $xmm0, $xmm1
701     ; CHECK-LABEL: name: fcmp_double_oeq
702     ; CHECK: liveins: $xmm0, $xmm1
703     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
704     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
705     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
706     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
707     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
708     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
709     ; CHECK: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 11, implicit $eflags
710     ; CHECK: [[AND8rr:%[0-9]+]]:gr8 = AND8rr [[SETCCr]], [[SETCCr1]], implicit-def $eflags
711     ; CHECK: $al = COPY [[AND8rr]]
712     ; CHECK: RET 0, implicit $al
713     %2:vecr(s128) = COPY $xmm0
714     %0:vecr(s64) = G_TRUNC %2(s128)
715     %3:vecr(s128) = COPY $xmm1
716     %1:vecr(s64) = G_TRUNC %3(s128)
717     %6:gpr(s8) = G_FCMP floatpred(oeq), %0(s64), %1
718     %5:gpr(s8) = COPY %6(s8)
719     $al = COPY %5(s8)
720     RET 0, implicit $al
724 name:            fcmp_double_ogt
725 alignment:       16
726 legalized:       true
727 regBankSelected: true
728 tracksRegLiveness: true
729 registers:
730   - { id: 0, class: vecr }
731   - { id: 1, class: vecr }
732   - { id: 2, class: vecr }
733   - { id: 3, class: vecr }
734   - { id: 4, class: _ }
735   - { id: 5, class: gpr }
736   - { id: 6, class: gpr }
737 body:             |
738   bb.1 (%ir-block.0):
739     liveins: $xmm0, $xmm1
741     ; CHECK-LABEL: name: fcmp_double_ogt
742     ; CHECK: liveins: $xmm0, $xmm1
743     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
744     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
745     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
746     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
747     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
748     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
749     ; CHECK: $al = COPY [[SETCCr]]
750     ; CHECK: RET 0, implicit $al
751     %2:vecr(s128) = COPY $xmm0
752     %0:vecr(s64) = G_TRUNC %2(s128)
753     %3:vecr(s128) = COPY $xmm1
754     %1:vecr(s64) = G_TRUNC %3(s128)
755     %6:gpr(s8) = G_FCMP floatpred(ogt), %0(s64), %1
756     %5:gpr(s8) = COPY %6(s8)
757     $al = COPY %5(s8)
758     RET 0, implicit $al
762 name:            fcmp_double_oge
763 alignment:       16
764 legalized:       true
765 regBankSelected: true
766 tracksRegLiveness: true
767 registers:
768   - { id: 0, class: vecr }
769   - { id: 1, class: vecr }
770   - { id: 2, class: vecr }
771   - { id: 3, class: vecr }
772   - { id: 4, class: _ }
773   - { id: 5, class: gpr }
774   - { id: 6, class: gpr }
775 body:             |
776   bb.1 (%ir-block.0):
777     liveins: $xmm0, $xmm1
779     ; CHECK-LABEL: name: fcmp_double_oge
780     ; CHECK: liveins: $xmm0, $xmm1
781     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
782     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
783     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
784     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
785     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
786     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 3, implicit $eflags
787     ; CHECK: $al = COPY [[SETCCr]]
788     ; CHECK: RET 0, implicit $al
789     %2:vecr(s128) = COPY $xmm0
790     %0:vecr(s64) = G_TRUNC %2(s128)
791     %3:vecr(s128) = COPY $xmm1
792     %1:vecr(s64) = G_TRUNC %3(s128)
793     %6:gpr(s8) = G_FCMP floatpred(oge), %0(s64), %1
794     %5:gpr(s8) = COPY %6(s8)
795     $al = COPY %5(s8)
796     RET 0, implicit $al
800 name:            fcmp_double_olt
801 alignment:       16
802 legalized:       true
803 regBankSelected: true
804 tracksRegLiveness: true
805 registers:
806   - { id: 0, class: vecr }
807   - { id: 1, class: vecr }
808   - { id: 2, class: vecr }
809   - { id: 3, class: vecr }
810   - { id: 4, class: _ }
811   - { id: 5, class: gpr }
812   - { id: 6, class: gpr }
813 body:             |
814   bb.1 (%ir-block.0):
815     liveins: $xmm0, $xmm1
817     ; CHECK-LABEL: name: fcmp_double_olt
818     ; CHECK: liveins: $xmm0, $xmm1
819     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
820     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
821     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
822     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
823     ; CHECK: UCOMISDrr [[COPY3]], [[COPY1]], implicit-def $eflags
824     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 7, implicit $eflags
825     ; CHECK: $al = COPY [[SETCCr]]
826     ; CHECK: RET 0, implicit $al
827     %2:vecr(s128) = COPY $xmm0
828     %0:vecr(s64) = G_TRUNC %2(s128)
829     %3:vecr(s128) = COPY $xmm1
830     %1:vecr(s64) = G_TRUNC %3(s128)
831     %6:gpr(s8) = G_FCMP floatpred(olt), %0(s64), %1
832     %5:gpr(s8) = COPY %6(s8)
833     $al = COPY %5(s8)
834     RET 0, implicit $al
838 name:            fcmp_double_ole
839 alignment:       16
840 legalized:       true
841 regBankSelected: true
842 tracksRegLiveness: true
843 registers:
844   - { id: 0, class: vecr }
845   - { id: 1, class: vecr }
846   - { id: 2, class: vecr }
847   - { id: 3, class: vecr }
848   - { id: 4, class: _ }
849   - { id: 5, class: gpr }
850   - { id: 6, class: gpr }
851 body:             |
852   bb.1 (%ir-block.0):
853     liveins: $xmm0, $xmm1
855     ; CHECK-LABEL: name: fcmp_double_ole
856     ; CHECK: liveins: $xmm0, $xmm1
857     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
858     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
859     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
860     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
861     ; CHECK: UCOMISDrr [[COPY3]], [[COPY1]], implicit-def $eflags
862     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 3, implicit $eflags
863     ; CHECK: $al = COPY [[SETCCr]]
864     ; CHECK: RET 0, implicit $al
865     %2:vecr(s128) = COPY $xmm0
866     %0:vecr(s64) = G_TRUNC %2(s128)
867     %3:vecr(s128) = COPY $xmm1
868     %1:vecr(s64) = G_TRUNC %3(s128)
869     %6:gpr(s8) = G_FCMP floatpred(ole), %0(s64), %1
870     %5:gpr(s8) = COPY %6(s8)
871     $al = COPY %5(s8)
872     RET 0, implicit $al
876 name:            fcmp_double_one
877 alignment:       16
878 legalized:       true
879 regBankSelected: true
880 tracksRegLiveness: true
881 registers:
882   - { id: 0, class: vecr }
883   - { id: 1, class: vecr }
884   - { id: 2, class: vecr }
885   - { id: 3, class: vecr }
886   - { id: 4, class: _ }
887   - { id: 5, class: gpr }
888   - { id: 6, class: gpr }
889 body:             |
890   bb.1 (%ir-block.0):
891     liveins: $xmm0, $xmm1
893     ; CHECK-LABEL: name: fcmp_double_one
894     ; CHECK: liveins: $xmm0, $xmm1
895     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
896     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
897     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
898     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
899     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
900     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 5, implicit $eflags
901     ; CHECK: $al = COPY [[SETCCr]]
902     ; CHECK: RET 0, implicit $al
903     %2:vecr(s128) = COPY $xmm0
904     %0:vecr(s64) = G_TRUNC %2(s128)
905     %3:vecr(s128) = COPY $xmm1
906     %1:vecr(s64) = G_TRUNC %3(s128)
907     %6:gpr(s8) = G_FCMP floatpred(one), %0(s64), %1
908     %5:gpr(s8) = COPY %6(s8)
909     $al = COPY %5(s8)
910     RET 0, implicit $al
914 name:            fcmp_double_ord
915 alignment:       16
916 legalized:       true
917 regBankSelected: true
918 tracksRegLiveness: true
919 registers:
920   - { id: 0, class: vecr }
921   - { id: 1, class: vecr }
922   - { id: 2, class: vecr }
923   - { id: 3, class: vecr }
924   - { id: 4, class: _ }
925   - { id: 5, class: gpr }
926   - { id: 6, class: gpr }
927 body:             |
928   bb.1 (%ir-block.0):
929     liveins: $xmm0, $xmm1
931     ; CHECK-LABEL: name: fcmp_double_ord
932     ; CHECK: liveins: $xmm0, $xmm1
933     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
934     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
935     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
936     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
937     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
938     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 11, implicit $eflags
939     ; CHECK: $al = COPY [[SETCCr]]
940     ; CHECK: RET 0, implicit $al
941     %2:vecr(s128) = COPY $xmm0
942     %0:vecr(s64) = G_TRUNC %2(s128)
943     %3:vecr(s128) = COPY $xmm1
944     %1:vecr(s64) = G_TRUNC %3(s128)
945     %6:gpr(s8) = G_FCMP floatpred(ord), %0(s64), %1
946     %5:gpr(s8) = COPY %6(s8)
947     $al = COPY %5(s8)
948     RET 0, implicit $al
952 name:            fcmp_double_uno
953 alignment:       16
954 legalized:       true
955 regBankSelected: true
956 tracksRegLiveness: true
957 registers:
958   - { id: 0, class: vecr }
959   - { id: 1, class: vecr }
960   - { id: 2, class: vecr }
961   - { id: 3, class: vecr }
962   - { id: 4, class: _ }
963   - { id: 5, class: gpr }
964   - { id: 6, class: gpr }
965 body:             |
966   bb.1 (%ir-block.0):
967     liveins: $xmm0, $xmm1
969     ; CHECK-LABEL: name: fcmp_double_uno
970     ; CHECK: liveins: $xmm0, $xmm1
971     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
972     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
973     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
974     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
975     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
976     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 10, implicit $eflags
977     ; CHECK: $al = COPY [[SETCCr]]
978     ; CHECK: RET 0, implicit $al
979     %2:vecr(s128) = COPY $xmm0
980     %0:vecr(s64) = G_TRUNC %2(s128)
981     %3:vecr(s128) = COPY $xmm1
982     %1:vecr(s64) = G_TRUNC %3(s128)
983     %6:gpr(s8) = G_FCMP floatpred(uno), %0(s64), %1
984     %5:gpr(s8) = COPY %6(s8)
985     $al = COPY %5(s8)
986     RET 0, implicit $al
990 name:            fcmp_double_ueq
991 alignment:       16
992 legalized:       true
993 regBankSelected: true
994 tracksRegLiveness: true
995 registers:
996   - { id: 0, class: vecr }
997   - { id: 1, class: vecr }
998   - { id: 2, class: vecr }
999   - { id: 3, class: vecr }
1000   - { id: 4, class: _ }
1001   - { id: 5, class: gpr }
1002   - { id: 6, class: gpr }
1003 body:             |
1004   bb.1 (%ir-block.0):
1005     liveins: $xmm0, $xmm1
1007     ; CHECK-LABEL: name: fcmp_double_ueq
1008     ; CHECK: liveins: $xmm0, $xmm1
1009     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
1010     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
1011     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
1012     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
1013     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
1014     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 4, implicit $eflags
1015     ; CHECK: $al = COPY [[SETCCr]]
1016     ; CHECK: RET 0, implicit $al
1017     %2:vecr(s128) = COPY $xmm0
1018     %0:vecr(s64) = G_TRUNC %2(s128)
1019     %3:vecr(s128) = COPY $xmm1
1020     %1:vecr(s64) = G_TRUNC %3(s128)
1021     %6:gpr(s8) = G_FCMP floatpred(ueq), %0(s64), %1
1022     %5:gpr(s8) = COPY %6(s8)
1023     $al = COPY %5(s8)
1024     RET 0, implicit $al
1028 name:            fcmp_double_ugt
1029 alignment:       16
1030 legalized:       true
1031 regBankSelected: true
1032 tracksRegLiveness: true
1033 registers:
1034   - { id: 0, class: vecr }
1035   - { id: 1, class: vecr }
1036   - { id: 2, class: vecr }
1037   - { id: 3, class: vecr }
1038   - { id: 4, class: _ }
1039   - { id: 5, class: gpr }
1040   - { id: 6, class: gpr }
1041 body:             |
1042   bb.1 (%ir-block.0):
1043     liveins: $xmm0, $xmm1
1045     ; CHECK-LABEL: name: fcmp_double_ugt
1046     ; CHECK: liveins: $xmm0, $xmm1
1047     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
1048     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
1049     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
1050     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
1051     ; CHECK: UCOMISDrr [[COPY3]], [[COPY1]], implicit-def $eflags
1052     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
1053     ; CHECK: $al = COPY [[SETCCr]]
1054     ; CHECK: RET 0, implicit $al
1055     %2:vecr(s128) = COPY $xmm0
1056     %0:vecr(s64) = G_TRUNC %2(s128)
1057     %3:vecr(s128) = COPY $xmm1
1058     %1:vecr(s64) = G_TRUNC %3(s128)
1059     %6:gpr(s8) = G_FCMP floatpred(ugt), %0(s64), %1
1060     %5:gpr(s8) = COPY %6(s8)
1061     $al = COPY %5(s8)
1062     RET 0, implicit $al
1066 name:            fcmp_double_uge
1067 alignment:       16
1068 legalized:       true
1069 regBankSelected: true
1070 tracksRegLiveness: true
1071 registers:
1072   - { id: 0, class: vecr }
1073   - { id: 1, class: vecr }
1074   - { id: 2, class: vecr }
1075   - { id: 3, class: vecr }
1076   - { id: 4, class: _ }
1077   - { id: 5, class: gpr }
1078   - { id: 6, class: gpr }
1079 body:             |
1080   bb.1 (%ir-block.0):
1081     liveins: $xmm0, $xmm1
1083     ; CHECK-LABEL: name: fcmp_double_uge
1084     ; CHECK: liveins: $xmm0, $xmm1
1085     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
1086     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
1087     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
1088     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
1089     ; CHECK: UCOMISDrr [[COPY3]], [[COPY1]], implicit-def $eflags
1090     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 6, implicit $eflags
1091     ; CHECK: $al = COPY [[SETCCr]]
1092     ; CHECK: RET 0, implicit $al
1093     %2:vecr(s128) = COPY $xmm0
1094     %0:vecr(s64) = G_TRUNC %2(s128)
1095     %3:vecr(s128) = COPY $xmm1
1096     %1:vecr(s64) = G_TRUNC %3(s128)
1097     %6:gpr(s8) = G_FCMP floatpred(uge), %0(s64), %1
1098     %5:gpr(s8) = COPY %6(s8)
1099     $al = COPY %5(s8)
1100     RET 0, implicit $al
1104 name:            fcmp_double_ult
1105 alignment:       16
1106 legalized:       true
1107 regBankSelected: true
1108 tracksRegLiveness: true
1109 registers:
1110   - { id: 0, class: vecr }
1111   - { id: 1, class: vecr }
1112   - { id: 2, class: vecr }
1113   - { id: 3, class: vecr }
1114   - { id: 4, class: _ }
1115   - { id: 5, class: gpr }
1116   - { id: 6, class: gpr }
1117 body:             |
1118   bb.1 (%ir-block.0):
1119     liveins: $xmm0, $xmm1
1121     ; CHECK-LABEL: name: fcmp_double_ult
1122     ; CHECK: liveins: $xmm0, $xmm1
1123     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
1124     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
1125     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
1126     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
1127     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
1128     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 2, implicit $eflags
1129     ; CHECK: $al = COPY [[SETCCr]]
1130     ; CHECK: RET 0, implicit $al
1131     %2:vecr(s128) = COPY $xmm0
1132     %0:vecr(s64) = G_TRUNC %2(s128)
1133     %3:vecr(s128) = COPY $xmm1
1134     %1:vecr(s64) = G_TRUNC %3(s128)
1135     %6:gpr(s8) = G_FCMP floatpred(ult), %0(s64), %1
1136     %5:gpr(s8) = COPY %6(s8)
1137     $al = COPY %5(s8)
1138     RET 0, implicit $al
1142 name:            fcmp_double_ule
1143 alignment:       16
1144 legalized:       true
1145 regBankSelected: true
1146 tracksRegLiveness: true
1147 registers:
1148   - { id: 0, class: vecr }
1149   - { id: 1, class: vecr }
1150   - { id: 2, class: vecr }
1151   - { id: 3, class: vecr }
1152   - { id: 4, class: _ }
1153   - { id: 5, class: gpr }
1154   - { id: 6, class: gpr }
1155 body:             |
1156   bb.1 (%ir-block.0):
1157     liveins: $xmm0, $xmm1
1159     ; CHECK-LABEL: name: fcmp_double_ule
1160     ; CHECK: liveins: $xmm0, $xmm1
1161     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
1162     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
1163     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
1164     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
1165     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
1166     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 6, implicit $eflags
1167     ; CHECK: $al = COPY [[SETCCr]]
1168     ; CHECK: RET 0, implicit $al
1169     %2:vecr(s128) = COPY $xmm0
1170     %0:vecr(s64) = G_TRUNC %2(s128)
1171     %3:vecr(s128) = COPY $xmm1
1172     %1:vecr(s64) = G_TRUNC %3(s128)
1173     %6:gpr(s8) = G_FCMP floatpred(ule), %0(s64), %1
1174     %5:gpr(s8) = COPY %6(s8)
1175     $al = COPY %5(s8)
1176     RET 0, implicit $al
1180 name:            fcmp_double_une
1181 alignment:       16
1182 legalized:       true
1183 regBankSelected: true
1184 tracksRegLiveness: true
1185 registers:
1186   - { id: 0, class: vecr }
1187   - { id: 1, class: vecr }
1188   - { id: 2, class: vecr }
1189   - { id: 3, class: vecr }
1190   - { id: 4, class: _ }
1191   - { id: 5, class: gpr }
1192   - { id: 6, class: gpr }
1193 body:             |
1194   bb.1 (%ir-block.0):
1195     liveins: $xmm0, $xmm1
1197     ; CHECK-LABEL: name: fcmp_double_une
1198     ; CHECK: liveins: $xmm0, $xmm1
1199     ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0
1200     ; CHECK: [[COPY1:%[0-9]+]]:fr64 = COPY [[COPY]]
1201     ; CHECK: [[COPY2:%[0-9]+]]:vr128 = COPY $xmm1
1202     ; CHECK: [[COPY3:%[0-9]+]]:fr64 = COPY [[COPY2]]
1203     ; CHECK: UCOMISDrr [[COPY1]], [[COPY3]], implicit-def $eflags
1204     ; CHECK: [[SETCCr:%[0-9]+]]:gr8 = SETCCr 5, implicit $eflags
1205     ; CHECK: [[SETCCr1:%[0-9]+]]:gr8 = SETCCr 10, implicit $eflags
1206     ; CHECK: [[OR8rr:%[0-9]+]]:gr8 = OR8rr [[SETCCr]], [[SETCCr1]], implicit-def $eflags
1207     ; CHECK: $al = COPY [[OR8rr]]
1208     ; CHECK: RET 0, implicit $al
1209     %2:vecr(s128) = COPY $xmm0
1210     %0:vecr(s64) = G_TRUNC %2(s128)
1211     %3:vecr(s128) = COPY $xmm1
1212     %1:vecr(s64) = G_TRUNC %3(s128)
1213     %6:gpr(s8) = G_FCMP floatpred(une), %0(s64), %1
1214     %5:gpr(s8) = COPY %6(s8)
1215     $al = COPY %5(s8)
1216     RET 0, implicit $al