[OptTable] Fix typo VALUE => VALUES (NFCI) (#121523)
[llvm-project.git] / llvm / test / CodeGen / X86 / GlobalISel / regbankselect-X86_64.mir
blob03d4c7dd3281dd5542076412d53fadee7e42c4dd
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=x86_64-linux-gnu                       -run-pass=regbankselect %s -o - | FileCheck %s --check-prefix=FAST
3 # RUN: llc -mtriple=x86_64-linux-gnu -regbankselect-greedy -run-pass=regbankselect %s -o - | FileCheck %s --check-prefix=GREEDY
5 --- |
6   define i8 @test_add_i8(i8 %arg1, i8 %arg2) {
7     %ret = add i8 %arg1, %arg2
8     ret i8 %ret
9   }
11   define i16 @test_add_i16(i16 %arg1, i16 %arg2) {
12     %ret = add i16 %arg1, %arg2
13     ret i16 %ret
14   }
16   define i32 @test_add_i32(i32 %arg1, i32 %arg2) {
17     %ret = add i32 %arg1, %arg2
18     ret i32 %ret
19   }
21   define i64 @test_add_i64(i64 %arg1, i64 %arg2) {
22     %ret = add i64 %arg1, %arg2
23     ret i64 %ret
24   }
26   define void @test_mul_gpr() {
27     ret void
28   }
30   define float @test_add_float(float %arg1, float %arg2) {
31     %ret = fadd float %arg1, %arg2
32     ret float %ret
33   }
35   define double @test_add_double(double %arg1, double %arg2) {
36     %ret = fadd double %arg1, %arg2
37     ret double %ret
38   }
40   define void @test_fsub_float() {
41     %ret1 = fsub float undef, undef
42     %ret2 = fsub double undef, undef
43     ret void
44   }
46   define void @test_fmul_float() {
47     %ret1 = fmul float undef, undef
48     %ret2 = fmul double undef, undef
49     ret void
50   }
52   define void @test_fdiv_float() {
53     %ret1 = fdiv float undef, undef
54     %ret2 = fdiv double undef, undef
55     ret void
56   }
59   define <4 x i32> @test_add_v4i32(<4 x i32> %arg1, <4 x i32> %arg2) {
60     %ret = add <4 x i32> %arg1, %arg2
61     ret <4 x i32> %ret
62   }
64   define <4 x float> @test_add_v4f32(<4 x float> %arg1, <4 x float> %arg2) {
65     %ret = fadd <4 x float> %arg1, %arg2
66     ret <4 x float> %ret
67   }
69   define i8 @test_load_i8(ptr %p1) {
70     %r = load i8, ptr %p1
71     ret i8 %r
72   }
74   define i16 @test_load_i16(ptr %p1) {
75     %r = load i16, ptr %p1
76     ret i16 %r
77   }
79   define i32 @test_load_i32(ptr %p1) {
80     %r = load i32, ptr %p1
81     ret i32 %r
82   }
84   define i64 @test_load_i64(ptr %p1) {
85     %r = load i64, ptr %p1
86     ret i64 %r
87   }
89   define float @test_load_float(ptr %p1) {
90     %r = load float, ptr %p1
91     ret float %r
92   }
94   define double @test_load_double(ptr %p1) {
95     %r = load double, ptr %p1
96     ret double %r
97   }
99   define <4 x i32> @test_load_v4i32(ptr %p1) {
100     %r = load <4 x i32>, ptr %p1, align 16
101     ret <4 x i32> %r
102   }
104   define ptr @test_store_i32(i32 %val, ptr %p1) {
105     store i32 %val, ptr %p1
106     ret ptr %p1
107   }
109   define ptr @test_store_i64(i64 %val, ptr %p1) {
110     store i64 %val, ptr %p1
111     ret ptr %p1
112   }
114   define ptr @test_store_float(float %val, ptr %p1) {
115     store float %val, ptr %p1
116     ret ptr %p1
117   }
119   define ptr @test_store_double(double %val, ptr %p1) {
120     store double %val, ptr %p1
121     ret ptr %p1
122   }
124   define void @constInt_check() {
125     ret void
126   }
128   define void @trunc_check() {
129     ret void
130   }
132   define void @test_gep() {
133     %p1 = getelementptr i32, ptr undef, i32 5
134     %p2 = getelementptr i32, ptr undef, i64 5
135     ret void
136   }
138   define i1 @test_icmp_eq_i8(i8 %a, i8 %b) {
139     %r = icmp eq i8 %a, %b
140     ret i1 %r
141   }
143   define i1 @test_icmp_eq_i16(i16 %a, i16 %b) {
144     %r = icmp eq i16 %a, %b
145     ret i1 %r
146   }
148   define i1 @test_icmp_eq_i32(i32 %a, i32 %b) {
149     %r = icmp eq i32 %a, %b
150     ret i1 %r
151   }
153   define i1 @test_icmp_eq_i64(i64 %a, i64 %b) {
154     %r = icmp eq i64 %a, %b
155     ret i1 %r
156   }
158   define i8 @test_xor_i8() {
159     %ret = xor i8 undef, undef
160     ret i8 %ret
161   }
163   define i16 @test_or_i16() {
164     %ret = or i16 undef, undef
165     ret i16 %ret
166   }
168   define i32 @test_and_i32() {
169     %ret = and i32 undef, undef
170     ret i32 %ret
171   }
173   define i64 @test_and_i64() {
174     %ret = and i64 undef, undef
175     ret i64 %ret
176   }
178   @g_int = global i32 0, align 4
180   define ptr @test_global_ptrv() {
181   entry:
182     ret ptr @g_int
183   }
185   define i8 @test_undef() {
186     ret i8 undef
187   }
189   define i8 @test_undef2(i8 %a) {
190     %r = add i8 %a, undef
191     ret i8 %r
192   }
194   define float @test_undef3() {
195     ret float undef
196   }
198   define float @test_undef4(float %a) {
199     %r = fadd float %a, undef
200     ret float %r
201   }
203   define i32 @test_i32(i32 %a, i32 %f, i32 %t) {
204   entry:
205     %cmp = icmp sgt i32 %a, 0
206     br i1 %cmp, label %cond.true, label %cond.false
208   cond.true:                                        ; preds = %entry
209     br label %cond.end
211   cond.false:                                       ; preds = %entry
212     br label %cond.end
214   cond.end:                                         ; preds = %cond.false, %cond.true
215     %cond = phi i32 [ %f, %cond.true ], [ %t, %cond.false ]
216     ret i32 %cond
217   }
219   define float @test_float(i32 %a, float %f, float %t) {
220   entry:
221     %cmp = icmp sgt i32 %a, 0
222     br i1 %cmp, label %cond.true, label %cond.false
224   cond.true:                                        ; preds = %entry
225     br label %cond.end
227   cond.false:                                       ; preds = %entry
228     br label %cond.end
230   cond.end:                                         ; preds = %cond.false, %cond.true
231     %cond = phi float [ %f, %cond.true ], [ %t, %cond.false ]
232     ret float %cond
233   }
235   define double @test_fpext(float %a) {
236   entry:
237     %conv = fpext float %a to double
238     ret double %conv
239   }
241   define float @test_fptrunc(double %a) {
242   entry:
243     %conv = fptrunc double %a to float
244     ret float %conv
245   }
247   define void @test_fconstant() {
248     ret void
249   }
251   define float @int32_to_float(i32 %a) {
252   entry:
253     %conv = sitofp i32 %a to float
254     ret float %conv
255   }
257   define float @int64_to_float(i64 %a) {
258   entry:
259     %conv = sitofp i64 %a to float
260     ret float %conv
261   }
263   define double @int32_to_double(i32 %a) {
264   entry:
265     %conv = sitofp i32 %a to double
266     ret double %conv
267   }
269   define double @int64_to_double(i64 %a) {
270   entry:
271     %conv = sitofp i64 %a to double
272     ret double %conv
273   }
275   define signext i8 @float_to_int8(float %val) {
276   entry:
277     %conv = fptosi float %val to i8
278     ret i8 %conv
279   }
281   define signext i16 @float_to_int16(float %val) {
282   entry:
283     %conv = fptosi float %val to i16
284     ret i16 %conv
285   }
287   define i32 @float_to_int32(float %val) {
288   entry:
289     %conv = fptosi float %val to i32
290     ret i32 %conv
291   }
293   define i64 @float_to_int64(float %val) {
294   entry:
295     %conv = fptosi float %val to i64
296     ret i64 %conv
297   }
299   define signext i8 @double_to_int8(double %val) {
300   entry:
301     %conv = fptosi double %val to i8
302     ret i8 %conv
303   }
305   define signext i16 @double_to_int16(double %val) {
306   entry:
307     %conv = fptosi double %val to i16
308     ret i16 %conv
309   }
311   define i32 @double_to_int32(double %val) {
312   entry:
313     %conv = fptosi double %val to i32
314     ret i32 %conv
315   }
317   define i64 @double_to_int64(double %val) {
318   entry:
319     %conv = fptosi double %val to i64
320     ret i64 %conv
321   }
323   define i1 @fcmp_float_oeq(float %x, float %y) {
324     %1 = fcmp oeq float %x, %y
325     ret i1 %1
326   }
328   define i1 @fcmp_float_ogt(float %x, float %y) {
329     %1 = fcmp ogt float %x, %y
330     ret i1 %1
331   }
333   define i1 @fcmp_float_oge(float %x, float %y) {
334     %1 = fcmp oge float %x, %y
335     ret i1 %1
336   }
338   define i1 @fcmp_float_olt(float %x, float %y) {
339     %1 = fcmp olt float %x, %y
340     ret i1 %1
341   }
343   define i1 @fcmp_float_ole(float %x, float %y) {
344     %1 = fcmp ole float %x, %y
345     ret i1 %1
346   }
348   define i1 @fcmp_float_one(float %x, float %y) {
349     %1 = fcmp one float %x, %y
350     ret i1 %1
351   }
353   define i1 @fcmp_float_ord(float %x, float %y) {
354     %1 = fcmp ord float %x, %y
355     ret i1 %1
356   }
358   define i1 @fcmp_float_uno(float %x, float %y) {
359     %1 = fcmp uno float %x, %y
360     ret i1 %1
361   }
363   define i1 @fcmp_float_ueq(float %x, float %y) {
364     %1 = fcmp ueq float %x, %y
365     ret i1 %1
366   }
368   define i1 @fcmp_float_ugt(float %x, float %y) {
369     %1 = fcmp ugt float %x, %y
370     ret i1 %1
371   }
373   define i1 @fcmp_float_uge(float %x, float %y) {
374     %1 = fcmp uge float %x, %y
375     ret i1 %1
376   }
378   define i1 @fcmp_float_ult(float %x, float %y) {
379     %1 = fcmp ult float %x, %y
380     ret i1 %1
381   }
383   define i1 @fcmp_float_ule(float %x, float %y) {
384     %1 = fcmp ule float %x, %y
385     ret i1 %1
386   }
388   define i1 @fcmp_float_une(float %x, float %y) {
389     %1 = fcmp une float %x, %y
390     ret i1 %1
391   }
393   define i1 @fcmp_double_oeq(double %x, double %y) {
394     %1 = fcmp oeq double %x, %y
395     ret i1 %1
396   }
398   define i1 @fcmp_double_ogt(double %x, double %y) {
399     %1 = fcmp ogt double %x, %y
400     ret i1 %1
401   }
403   define i1 @fcmp_double_oge(double %x, double %y) {
404     %1 = fcmp oge double %x, %y
405     ret i1 %1
406   }
408   define i1 @fcmp_double_olt(double %x, double %y) {
409     %1 = fcmp olt double %x, %y
410     ret i1 %1
411   }
413   define i1 @fcmp_double_ole(double %x, double %y) {
414     %1 = fcmp ole double %x, %y
415     ret i1 %1
416   }
418   define i1 @fcmp_double_one(double %x, double %y) {
419     %1 = fcmp one double %x, %y
420     ret i1 %1
421   }
423   define i1 @fcmp_double_ord(double %x, double %y) {
424     %1 = fcmp ord double %x, %y
425     ret i1 %1
426   }
428   define i1 @fcmp_double_uno(double %x, double %y) {
429     %1 = fcmp uno double %x, %y
430     ret i1 %1
431   }
433   define i1 @fcmp_double_ueq(double %x, double %y) {
434     %1 = fcmp ueq double %x, %y
435     ret i1 %1
436   }
438   define i1 @fcmp_double_ugt(double %x, double %y) {
439     %1 = fcmp ugt double %x, %y
440     ret i1 %1
441   }
443   define i1 @fcmp_double_uge(double %x, double %y) {
444     %1 = fcmp uge double %x, %y
445     ret i1 %1
446   }
448   define i1 @fcmp_double_ult(double %x, double %y) {
449     %1 = fcmp ult double %x, %y
450     ret i1 %1
451   }
453   define i1 @fcmp_double_ule(double %x, double %y) {
454     %1 = fcmp ule double %x, %y
455     ret i1 %1
456   }
458   define i1 @fcmp_double_une(double %x, double %y) {
459     %1 = fcmp une double %x, %y
460     ret i1 %1
461   }
465 name:            test_add_i8
466 alignment:       16
467 legalized:       true
468 regBankSelected: false
469 selected:        false
470 tracksRegLiveness: true
471 registers:
472   - { id: 0, class: _ }
473   - { id: 1, class: _ }
474   - { id: 2, class: _ }
475 body:             |
476   bb.1 (%ir-block.0):
477     liveins: $edi, $esi
479     ; FAST-LABEL: name: test_add_i8
480     ; FAST: liveins: $edi, $esi
481     ; FAST: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
482     ; FAST: [[COPY1:%[0-9]+]]:gpr(s8) = COPY $sil
483     ; FAST: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[COPY1]]
484     ; FAST: $al = COPY [[ADD]](s8)
485     ; FAST: RET 0, implicit $al
486     ; GREEDY-LABEL: name: test_add_i8
487     ; GREEDY: liveins: $edi, $esi
488     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
489     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s8) = COPY $sil
490     ; GREEDY: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[COPY1]]
491     ; GREEDY: $al = COPY [[ADD]](s8)
492     ; GREEDY: RET 0, implicit $al
493     %0(s8) = COPY $dil
494     %1(s8) = COPY $sil
495     %2(s8) = G_ADD %0, %1
496     $al = COPY %2(s8)
497     RET 0, implicit $al
501 name:            test_add_i16
502 alignment:       16
503 legalized:       true
504 regBankSelected: false
505 selected:        false
506 tracksRegLiveness: true
507 registers:
508   - { id: 0, class: _ }
509   - { id: 1, class: _ }
510   - { id: 2, class: _ }
511 body:             |
512   bb.1 (%ir-block.0):
513     liveins: $edi, $esi
515     ; FAST-LABEL: name: test_add_i16
516     ; FAST: liveins: $edi, $esi
517     ; FAST: [[COPY:%[0-9]+]]:gpr(s16) = COPY $di
518     ; FAST: [[COPY1:%[0-9]+]]:gpr(s16) = COPY $si
519     ; FAST: [[ADD:%[0-9]+]]:gpr(s16) = G_ADD [[COPY]], [[COPY1]]
520     ; FAST: $ax = COPY [[ADD]](s16)
521     ; FAST: RET 0, implicit $ax
522     ; GREEDY-LABEL: name: test_add_i16
523     ; GREEDY: liveins: $edi, $esi
524     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s16) = COPY $di
525     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s16) = COPY $si
526     ; GREEDY: [[ADD:%[0-9]+]]:gpr(s16) = G_ADD [[COPY]], [[COPY1]]
527     ; GREEDY: $ax = COPY [[ADD]](s16)
528     ; GREEDY: RET 0, implicit $ax
529     %0(s16) = COPY $di
530     %1(s16) = COPY $si
531     %2(s16) = G_ADD %0, %1
532     $ax = COPY %2(s16)
533     RET 0, implicit $ax
537 name:            test_add_i32
538 alignment:       16
539 legalized:       true
540 regBankSelected: false
541 selected:        false
542 tracksRegLiveness: true
543 registers:
544   - { id: 0, class: _ }
545   - { id: 1, class: _ }
546   - { id: 2, class: _ }
547 body:             |
548   bb.1 (%ir-block.0):
549     liveins: $edi, $esi
551     ; FAST-LABEL: name: test_add_i32
552     ; FAST: liveins: $edi, $esi
553     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
554     ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
555     ; FAST: [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[COPY]], [[COPY1]]
556     ; FAST: $eax = COPY [[ADD]](s32)
557     ; FAST: RET 0, implicit $eax
558     ; GREEDY-LABEL: name: test_add_i32
559     ; GREEDY: liveins: $edi, $esi
560     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
561     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
562     ; GREEDY: [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[COPY]], [[COPY1]]
563     ; GREEDY: $eax = COPY [[ADD]](s32)
564     ; GREEDY: RET 0, implicit $eax
565     %0(s32) = COPY $edi
566     %1(s32) = COPY $esi
567     %2(s32) = G_ADD %0, %1
568     $eax = COPY %2(s32)
569     RET 0, implicit $eax
573 name:            test_add_i64
574 alignment:       16
575 legalized:       true
576 regBankSelected: false
577 selected:        false
578 tracksRegLiveness: true
579 registers:
580   - { id: 0, class: _ }
581   - { id: 1, class: _ }
582   - { id: 2, class: _ }
583 body:             |
584   bb.1 (%ir-block.0):
585     liveins: $rdi, $rsi
587     ; FAST-LABEL: name: test_add_i64
588     ; FAST: liveins: $rdi, $rsi
589     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
590     ; FAST: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
591     ; FAST: [[ADD:%[0-9]+]]:gpr(s64) = G_ADD [[COPY]], [[COPY1]]
592     ; FAST: $rax = COPY [[ADD]](s64)
593     ; FAST: RET 0, implicit $rax
594     ; GREEDY-LABEL: name: test_add_i64
595     ; GREEDY: liveins: $rdi, $rsi
596     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
597     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
598     ; GREEDY: [[ADD:%[0-9]+]]:gpr(s64) = G_ADD [[COPY]], [[COPY1]]
599     ; GREEDY: $rax = COPY [[ADD]](s64)
600     ; GREEDY: RET 0, implicit $rax
601     %0(s64) = COPY $rdi
602     %1(s64) = COPY $rsi
603     %2(s64) = G_ADD %0, %1
604     $rax = COPY %2(s64)
605     RET 0, implicit $rax
609 name:            test_mul_gpr
610 alignment:       16
611 legalized:       true
612 regBankSelected: false
613 selected:        false
614 tracksRegLiveness: true
615 registers:
616   - { id: 0, class: _ }
617   - { id: 1, class: _ }
618   - { id: 2, class: _ }
619   - { id: 3, class: _ }
620   - { id: 4, class: _ }
621   - { id: 5, class: _ }
622   - { id: 6, class: _ }
623   - { id: 7, class: _ }
624 body:             |
625   bb.1 (%ir-block.0):
627     ; FAST-LABEL: name: test_mul_gpr
628     ; FAST: [[DEF:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
629     ; FAST: [[DEF1:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
630     ; FAST: [[DEF2:%[0-9]+]]:gpr(s16) = G_IMPLICIT_DEF
631     ; FAST: [[DEF3:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
632     ; FAST: [[MUL:%[0-9]+]]:gpr(s64) = G_MUL [[DEF]], [[DEF]]
633     ; FAST: [[MUL1:%[0-9]+]]:gpr(s32) = G_MUL [[DEF1]], [[DEF1]]
634     ; FAST: [[MUL2:%[0-9]+]]:gpr(s16) = G_MUL [[DEF2]], [[DEF2]]
635     ; FAST: [[MUL3:%[0-9]+]]:gpr(s8) = G_MUL [[DEF3]], [[DEF3]]
636     ; FAST: RET 0
637     ; GREEDY-LABEL: name: test_mul_gpr
638     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
639     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
640     ; GREEDY: [[DEF2:%[0-9]+]]:gpr(s16) = G_IMPLICIT_DEF
641     ; GREEDY: [[DEF3:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
642     ; GREEDY: [[MUL:%[0-9]+]]:gpr(s64) = G_MUL [[DEF]], [[DEF]]
643     ; GREEDY: [[MUL1:%[0-9]+]]:gpr(s32) = G_MUL [[DEF1]], [[DEF1]]
644     ; GREEDY: [[MUL2:%[0-9]+]]:gpr(s16) = G_MUL [[DEF2]], [[DEF2]]
645     ; GREEDY: [[MUL3:%[0-9]+]]:gpr(s8) = G_MUL [[DEF3]], [[DEF3]]
646     ; GREEDY: RET 0
647     %0(s64) = G_IMPLICIT_DEF
648     %1(s32) = G_IMPLICIT_DEF
649     %2(s16) = G_IMPLICIT_DEF
650     %3(s8)  = G_IMPLICIT_DEF
651     %4(s64) = G_MUL %0, %0
652     %5(s32) = G_MUL %1, %1
653     %6(s16) = G_MUL %2, %2
654     %7(s8)  = G_MUL %3, %3
655     RET 0
658 name:            test_add_float
659 alignment:       16
660 legalized:       true
661 regBankSelected: false
662 selected:        false
663 tracksRegLiveness: true
664 registers:
665   - { id: 0, class: _ }
666   - { id: 1, class: _ }
667   - { id: 2, class: _ }
668   - { id: 3, class: _ }
669   - { id: 4, class: _ }
670   - { id: 5, class: _ }
671 body:             |
672   bb.1 (%ir-block.0):
673     liveins: $xmm0, $xmm1
675     ; FAST-LABEL: name: test_add_float
676     ; FAST: liveins: $xmm0, $xmm1
677     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
678     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
679     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
680     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
681     ; FAST: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[TRUNC1]]
682     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
683     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
684     ; FAST: RET 0, implicit $xmm0
685     ; GREEDY-LABEL: name: test_add_float
686     ; GREEDY: liveins: $xmm0, $xmm1
687     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
688     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
689     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
690     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
691     ; GREEDY: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[TRUNC1]]
692     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
693     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
694     ; GREEDY: RET 0, implicit $xmm0
695     %2:_(s128) = COPY $xmm0
696     %0:_(s32) = G_TRUNC %2(s128)
697     %3:_(s128) = COPY $xmm1
698     %1:_(s32) = G_TRUNC %3(s128)
699     %4:_(s32) = G_FADD %0, %1
700     %5:_(s128) = G_ANYEXT %4(s32)
701     $xmm0 = COPY %5(s128)
702     RET 0, implicit $xmm0
706 name:            test_add_double
707 alignment:       16
708 legalized:       true
709 regBankSelected: false
710 selected:        false
711 tracksRegLiveness: true
712 registers:
713   - { id: 0, class: _ }
714   - { id: 1, class: _ }
715   - { id: 2, class: _ }
716   - { id: 3, class: _ }
717   - { id: 4, class: _ }
718   - { id: 5, class: _ }
719 body:             |
720   bb.1 (%ir-block.0):
721     liveins: $xmm0, $xmm1
723     ; FAST-LABEL: name: test_add_double
724     ; FAST: liveins: $xmm0, $xmm1
725     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
726     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
727     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
728     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
729     ; FAST: [[FADD:%[0-9]+]]:vecr(s64) = G_FADD [[TRUNC]], [[TRUNC1]]
730     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s64)
731     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
732     ; FAST: RET 0, implicit $xmm0
733     ; GREEDY-LABEL: name: test_add_double
734     ; GREEDY: liveins: $xmm0, $xmm1
735     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
736     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
737     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
738     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
739     ; GREEDY: [[FADD:%[0-9]+]]:vecr(s64) = G_FADD [[TRUNC]], [[TRUNC1]]
740     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s64)
741     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
742     ; GREEDY: RET 0, implicit $xmm0
743     %2:_(s128) = COPY $xmm0
744     %0:_(s64) = G_TRUNC %2(s128)
745     %3:_(s128) = COPY $xmm1
746     %1:_(s64) = G_TRUNC %3(s128)
747     %4:_(s64) = G_FADD %0, %1
748     %5:_(s128) = G_ANYEXT %4(s64)
749     $xmm0 = COPY %5(s128)
750     RET 0, implicit $xmm0
754 name:            test_fsub_float
755 alignment:       16
756 legalized:       true
757 regBankSelected: false
758 registers:
759   - { id: 0, class: _, preferred-register: '' }
760   - { id: 1, class: _, preferred-register: '' }
761   - { id: 2, class: _, preferred-register: '' }
762   - { id: 3, class: _, preferred-register: '' }
763 liveins:
764 fixedStack:
765 stack:
766 constants:
767 body:             |
768   bb.1 (%ir-block.0):
769     ; FAST-LABEL: name: test_fsub_float
770     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
771     ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
772     ; FAST: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
773     ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
774     ; FAST: [[FSUB:%[0-9]+]]:vecr(s32) = G_FSUB [[COPY]], [[COPY1]]
775     ; FAST: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
776     ; FAST: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
777     ; FAST: [[FSUB1:%[0-9]+]]:vecr(s64) = G_FSUB [[COPY2]], [[COPY3]]
778     ; FAST: RET 0
779     ; GREEDY-LABEL: name: test_fsub_float
780     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
781     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
782     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
783     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
784     ; GREEDY: [[FSUB:%[0-9]+]]:vecr(s32) = G_FSUB [[COPY]], [[COPY1]]
785     ; GREEDY: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
786     ; GREEDY: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
787     ; GREEDY: [[FSUB1:%[0-9]+]]:vecr(s64) = G_FSUB [[COPY2]], [[COPY3]]
788     ; GREEDY: RET 0
789     %0(s32) = G_IMPLICIT_DEF
790     %2(s64) = G_IMPLICIT_DEF
791     %1(s32) = G_FSUB %0, %0
792     %3(s64) = G_FSUB %2, %2
793     RET 0
797 name:            test_fmul_float
798 alignment:       16
799 legalized:       true
800 regBankSelected: false
801 registers:
802   - { id: 0, class: _, preferred-register: '' }
803   - { id: 1, class: _, preferred-register: '' }
804   - { id: 2, class: _, preferred-register: '' }
805   - { id: 3, class: _, preferred-register: '' }
806 liveins:
807 fixedStack:
808 stack:
809 constants:
810 body:             |
811   bb.1 (%ir-block.0):
812     ; FAST-LABEL: name: test_fmul_float
813     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
814     ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
815     ; FAST: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
816     ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
817     ; FAST: [[FMUL:%[0-9]+]]:vecr(s32) = G_FMUL [[COPY]], [[COPY1]]
818     ; FAST: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
819     ; FAST: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
820     ; FAST: [[FMUL1:%[0-9]+]]:vecr(s64) = G_FMUL [[COPY2]], [[COPY3]]
821     ; FAST: RET 0
822     ; GREEDY-LABEL: name: test_fmul_float
823     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
824     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
825     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
826     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
827     ; GREEDY: [[FMUL:%[0-9]+]]:vecr(s32) = G_FMUL [[COPY]], [[COPY1]]
828     ; GREEDY: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
829     ; GREEDY: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
830     ; GREEDY: [[FMUL1:%[0-9]+]]:vecr(s64) = G_FMUL [[COPY2]], [[COPY3]]
831     ; GREEDY: RET 0
832     %0(s32) = G_IMPLICIT_DEF
833     %2(s64) = G_IMPLICIT_DEF
834     %1(s32) = G_FMUL %0, %0
835     %3(s64) = G_FMUL %2, %2
836     RET 0
840 name:            test_fdiv_float
841 alignment:       16
842 legalized:       true
843 regBankSelected: false
844 registers:
845   - { id: 0, class: _, preferred-register: '' }
846   - { id: 1, class: _, preferred-register: '' }
847   - { id: 2, class: _, preferred-register: '' }
848   - { id: 3, class: _, preferred-register: '' }
849 liveins:
850 fixedStack:
851 stack:
852 constants:
853 body:             |
854   bb.1 (%ir-block.0):
855     ; FAST-LABEL: name: test_fdiv_float
856     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
857     ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
858     ; FAST: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
859     ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
860     ; FAST: [[FDIV:%[0-9]+]]:vecr(s32) = G_FDIV [[COPY]], [[COPY1]]
861     ; FAST: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
862     ; FAST: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
863     ; FAST: [[FDIV1:%[0-9]+]]:vecr(s64) = G_FDIV [[COPY2]], [[COPY3]]
864     ; FAST: RET 0
865     ; GREEDY-LABEL: name: test_fdiv_float
866     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
867     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
868     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
869     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
870     ; GREEDY: [[FDIV:%[0-9]+]]:vecr(s32) = G_FDIV [[COPY]], [[COPY1]]
871     ; GREEDY: [[COPY2:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
872     ; GREEDY: [[COPY3:%[0-9]+]]:vecr(s64) = COPY [[DEF1]](s64)
873     ; GREEDY: [[FDIV1:%[0-9]+]]:vecr(s64) = G_FDIV [[COPY2]], [[COPY3]]
874     ; GREEDY: RET 0
875     %0(s32) = G_IMPLICIT_DEF
876     %2(s64) = G_IMPLICIT_DEF
877     %1(s32) = G_FDIV %0, %0
878     %3(s64) = G_FDIV %2, %2
879     RET 0
883 name:            test_add_v4i32
884 alignment:       16
885 legalized:       true
886 regBankSelected: false
887 selected:        false
888 tracksRegLiveness: true
889 registers:
890   - { id: 0, class: _ }
891   - { id: 1, class: _ }
892   - { id: 2, class: _ }
893 body:             |
894   bb.1 (%ir-block.0):
895     liveins: $xmm0, $xmm1
897     ; FAST-LABEL: name: test_add_v4i32
898     ; FAST: liveins: $xmm0, $xmm1
899     ; FAST: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
900     ; FAST: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
901     ; FAST: [[ADD:%[0-9]+]]:vecr(<4 x s32>) = G_ADD [[COPY]], [[COPY1]]
902     ; FAST: $xmm0 = COPY [[ADD]](<4 x s32>)
903     ; FAST: RET 0, implicit $xmm0
904     ; GREEDY-LABEL: name: test_add_v4i32
905     ; GREEDY: liveins: $xmm0, $xmm1
906     ; GREEDY: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
907     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
908     ; GREEDY: [[ADD:%[0-9]+]]:vecr(<4 x s32>) = G_ADD [[COPY]], [[COPY1]]
909     ; GREEDY: $xmm0 = COPY [[ADD]](<4 x s32>)
910     ; GREEDY: RET 0, implicit $xmm0
911     %0(<4 x s32>) = COPY $xmm0
912     %1(<4 x s32>) = COPY $xmm1
913     %2(<4 x s32>) = G_ADD %0, %1
914     $xmm0 = COPY %2(<4 x s32>)
915     RET 0, implicit $xmm0
919 name:            test_add_v4f32
920 alignment:       16
921 legalized:       true
922 regBankSelected: false
923 selected:        false
924 tracksRegLiveness: true
925 registers:
926   - { id: 0, class: _ }
927   - { id: 1, class: _ }
928   - { id: 2, class: _ }
929 body:             |
930   bb.1 (%ir-block.0):
931     liveins: $xmm0, $xmm1
933     ; FAST-LABEL: name: test_add_v4f32
934     ; FAST: liveins: $xmm0, $xmm1
935     ; FAST: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
936     ; FAST: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
937     ; FAST: [[FADD:%[0-9]+]]:vecr(<4 x s32>) = G_FADD [[COPY]], [[COPY1]]
938     ; FAST: $xmm0 = COPY [[FADD]](<4 x s32>)
939     ; FAST: RET 0, implicit $xmm0
940     ; GREEDY-LABEL: name: test_add_v4f32
941     ; GREEDY: liveins: $xmm0, $xmm1
942     ; GREEDY: [[COPY:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm0
943     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(<4 x s32>) = COPY $xmm1
944     ; GREEDY: [[FADD:%[0-9]+]]:vecr(<4 x s32>) = G_FADD [[COPY]], [[COPY1]]
945     ; GREEDY: $xmm0 = COPY [[FADD]](<4 x s32>)
946     ; GREEDY: RET 0, implicit $xmm0
947     %0(<4 x s32>) = COPY $xmm0
948     %1(<4 x s32>) = COPY $xmm1
949     %2(<4 x s32>) = G_FADD %0, %1
950     $xmm0 = COPY %2(<4 x s32>)
951     RET 0, implicit $xmm0
955 name:            test_load_i8
956 alignment:       16
957 legalized:       true
958 regBankSelected: false
959 selected:        false
960 registers:
961   - { id: 0, class: _ }
962   - { id: 1, class: _ }
963 body:             |
964   bb.1 (%ir-block.0):
965     liveins: $rdi
967     ; FAST-LABEL: name: test_load_i8
968     ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
969     ; FAST: [[LOAD:%[0-9]+]]:gpr(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.p1)
970     ; FAST: $al = COPY [[LOAD]](s8)
971     ; FAST: RET 0, implicit $al
972     ; GREEDY-LABEL: name: test_load_i8
973     ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
974     ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s8) = G_LOAD [[COPY]](p0) :: (load (s8) from %ir.p1)
975     ; GREEDY: $al = COPY [[LOAD]](s8)
976     ; GREEDY: RET 0, implicit $al
977     %0(p0) = COPY $rdi
978     %1(s8) = G_LOAD %0(p0) :: (load (s8) from %ir.p1)
979     $al = COPY %1(s8)
980     RET 0, implicit $al
984 name:            test_load_i16
985 alignment:       16
986 legalized:       true
987 regBankSelected: false
988 selected:        false
989 registers:
990   - { id: 0, class: _ }
991   - { id: 1, class: _ }
992 body:             |
993   bb.1 (%ir-block.0):
994     liveins: $rdi
996     ; FAST-LABEL: name: test_load_i16
997     ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
998     ; FAST: [[LOAD:%[0-9]+]]:gpr(s16) = G_LOAD [[COPY]](p0) :: (load (s16) from %ir.p1)
999     ; FAST: $ax = COPY [[LOAD]](s16)
1000     ; FAST: RET 0, implicit $ax
1001     ; GREEDY-LABEL: name: test_load_i16
1002     ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1003     ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s16) = G_LOAD [[COPY]](p0) :: (load (s16) from %ir.p1)
1004     ; GREEDY: $ax = COPY [[LOAD]](s16)
1005     ; GREEDY: RET 0, implicit $ax
1006     %0(p0) = COPY $rdi
1007     %1(s16) = G_LOAD %0(p0) :: (load (s16) from %ir.p1)
1008     $ax = COPY %1(s16)
1009     RET 0, implicit $ax
1013 name:            test_load_i32
1014 alignment:       16
1015 legalized:       true
1016 regBankSelected: false
1017 selected:        false
1018 registers:
1019   - { id: 0, class: _ }
1020   - { id: 1, class: _ }
1021 body:             |
1022   bb.1 (%ir-block.0):
1023     liveins: $rdi
1025     ; FAST-LABEL: name: test_load_i32
1026     ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1027     ; FAST: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.p1)
1028     ; FAST: $eax = COPY [[LOAD]](s32)
1029     ; FAST: RET 0, implicit $eax
1030     ; GREEDY-LABEL: name: test_load_i32
1031     ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1032     ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.p1)
1033     ; GREEDY: $eax = COPY [[LOAD]](s32)
1034     ; GREEDY: RET 0, implicit $eax
1035     %0(p0) = COPY $rdi
1036     %1(s32) = G_LOAD %0(p0) :: (load (s32) from %ir.p1)
1037     $eax = COPY %1(s32)
1038     RET 0, implicit $eax
1042 name:            test_load_i64
1043 alignment:       16
1044 exposesReturnsTwice: false
1045 legalized:       true
1046 regBankSelected: false
1047 selected:        false
1048 registers:
1049   - { id: 0, class: _ }
1050   - { id: 1, class: _ }
1051 body:             |
1052   bb.1 (%ir-block.0):
1053     liveins: $rdi
1055     ; FAST-LABEL: name: test_load_i64
1056     ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1057     ; FAST: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.p1)
1058     ; FAST: $rax = COPY [[LOAD]](s64)
1059     ; FAST: RET 0, implicit $rax
1060     ; GREEDY-LABEL: name: test_load_i64
1061     ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1062     ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.p1)
1063     ; GREEDY: $rax = COPY [[LOAD]](s64)
1064     ; GREEDY: RET 0, implicit $rax
1065     %0(p0) = COPY $rdi
1066     %1(s64) = G_LOAD %0(p0) :: (load (s64) from %ir.p1)
1067     $rax = COPY %1(s64)
1068     RET 0, implicit $rax
1072 name:            test_load_float
1073 alignment:       16
1074 legalized:       true
1075 regBankSelected: false
1076 selected:        false
1077 registers:
1078   - { id: 0, class: _ }
1079   - { id: 1, class: _ }
1080 body:             |
1081   bb.1 (%ir-block.0):
1082     liveins: $rdi
1084     ; FAST-LABEL: name: test_load_float
1085     ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1086     ; FAST: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.p1)
1087     ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[LOAD]](s32)
1088     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s32)
1089     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1090     ; FAST: RET 0, implicit $xmm0
1091     ; GREEDY-LABEL: name: test_load_float
1092     ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1093     ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load (s32) from %ir.p1)
1094     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[LOAD]](s32)
1095     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s32)
1096     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1097     ; GREEDY: RET 0, implicit $xmm0
1098     %0:_(p0) = COPY $rdi
1099     %1:_(s32) = G_LOAD %0(p0) :: (load (s32) from %ir.p1)
1100     %2:_(s128) = G_ANYEXT %1(s32)
1101     $xmm0 = COPY %2(s128)
1102     RET 0, implicit $xmm0
1106 name:            test_load_double
1107 alignment:       16
1108 legalized:       true
1109 regBankSelected: false
1110 selected:        false
1111 registers:
1112   - { id: 0, class: _ }
1113   - { id: 1, class: _ }
1114 body:             |
1115   bb.1 (%ir-block.0):
1116     liveins: $rdi
1118     ; FAST-LABEL: name: test_load_double
1119     ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1120     ; FAST: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.p1)
1121     ; FAST: [[COPY1:%[0-9]+]]:vecr(s64) = COPY [[LOAD]](s64)
1122     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s64)
1123     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1124     ; FAST: RET 0, implicit $xmm0
1125     ; GREEDY-LABEL: name: test_load_double
1126     ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1127     ; GREEDY: [[LOAD:%[0-9]+]]:gpr(s64) = G_LOAD [[COPY]](p0) :: (load (s64) from %ir.p1)
1128     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s64) = COPY [[LOAD]](s64)
1129     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[COPY1]](s64)
1130     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1131     ; GREEDY: RET 0, implicit $xmm0
1132     %0:_(p0) = COPY $rdi
1133     %1:_(s64) = G_LOAD %0(p0) :: (load (s64) from %ir.p1)
1134     %2:_(s128) = G_ANYEXT %1(s64)
1135     $xmm0 = COPY %2(s128)
1136     RET 0, implicit $xmm0
1140 name:            test_load_v4i32
1141 alignment:       16
1142 legalized:       true
1143 regBankSelected: false
1144 selected:        false
1145 registers:
1146   - { id: 0, class: _ }
1147   - { id: 1, class: _ }
1148 body:             |
1149   bb.1 (%ir-block.0):
1150     liveins: $rdi
1152     ; FAST-LABEL: name: test_load_v4i32
1153     ; FAST: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1154     ; FAST: [[LOAD:%[0-9]+]]:vecr(<4 x s32>) = G_LOAD [[COPY]](p0) :: (load (<4 x s32>) from %ir.p1, align 1)
1155     ; FAST: $xmm0 = COPY [[LOAD]](<4 x s32>)
1156     ; FAST: RET 0, implicit $xmm0
1157     ; GREEDY-LABEL: name: test_load_v4i32
1158     ; GREEDY: [[COPY:%[0-9]+]]:gpr(p0) = COPY $rdi
1159     ; GREEDY: [[LOAD:%[0-9]+]]:vecr(<4 x s32>) = G_LOAD [[COPY]](p0) :: (load (<4 x s32>) from %ir.p1, align 1)
1160     ; GREEDY: $xmm0 = COPY [[LOAD]](<4 x s32>)
1161     ; GREEDY: RET 0, implicit $xmm0
1162     %0(p0) = COPY $rdi
1163     %1(<4 x s32>) = G_LOAD %0(p0) :: (load (<4 x s32>) from %ir.p1, align 1)
1164     $xmm0 = COPY %1(<4 x s32>)
1165     RET 0, implicit $xmm0
1169 name:            test_store_i32
1170 alignment:       16
1171 legalized:       true
1172 regBankSelected: false
1173 selected:        false
1174 registers:
1175   - { id: 0, class: _ }
1176   - { id: 1, class: _ }
1177 body:             |
1178   bb.1 (%ir-block.0):
1179     liveins: $edi, $rsi
1181     ; FAST-LABEL: name: test_store_i32
1182     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1183     ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1184     ; FAST: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32) into %ir.p1)
1185     ; FAST: $rax = COPY [[COPY1]](p0)
1186     ; FAST: RET 0, implicit $rax
1187     ; GREEDY-LABEL: name: test_store_i32
1188     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1189     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1190     ; GREEDY: G_STORE [[COPY]](s32), [[COPY1]](p0) :: (store (s32) into %ir.p1)
1191     ; GREEDY: $rax = COPY [[COPY1]](p0)
1192     ; GREEDY: RET 0, implicit $rax
1193     %0(s32) = COPY $edi
1194     %1(p0) = COPY $rsi
1195     G_STORE %0(s32), %1(p0) :: (store (s32) into %ir.p1)
1196     $rax = COPY %1(p0)
1197     RET 0, implicit $rax
1201 name:            test_store_i64
1202 alignment:       16
1203 legalized:       true
1204 regBankSelected: false
1205 selected:        false
1206 registers:
1207   - { id: 0, class: _ }
1208   - { id: 1, class: _ }
1209 body:             |
1210   bb.1 (%ir-block.0):
1211     liveins: $rdi, $rsi
1213     ; FAST-LABEL: name: test_store_i64
1214     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1215     ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1216     ; FAST: G_STORE [[COPY]](s64), [[COPY1]](p0) :: (store (s64) into %ir.p1)
1217     ; FAST: $rax = COPY [[COPY1]](p0)
1218     ; FAST: RET 0, implicit $rax
1219     ; GREEDY-LABEL: name: test_store_i64
1220     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1221     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rsi
1222     ; GREEDY: G_STORE [[COPY]](s64), [[COPY1]](p0) :: (store (s64) into %ir.p1)
1223     ; GREEDY: $rax = COPY [[COPY1]](p0)
1224     ; GREEDY: RET 0, implicit $rax
1225     %0(s64) = COPY $rdi
1226     %1(p0) = COPY $rsi
1227     G_STORE %0(s64), %1(p0) :: (store (s64) into %ir.p1)
1228     $rax = COPY %1(p0)
1229     RET 0, implicit $rax
1233 name:            test_store_float
1234 alignment:       16
1235 legalized:       true
1236 regBankSelected: false
1237 selected:        false
1241 registers:
1242   - { id: 0, class: _ }
1243   - { id: 1, class: _ }
1244 body:             |
1245   bb.1 (%ir-block.0):
1246     liveins: $rdi, $xmm0
1248     ; FAST-LABEL: name: test_store_float
1249     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1250     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1251     ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1252     ; FAST: [[COPY2:%[0-9]+]]:gpr(s32) = COPY [[TRUNC]](s32)
1253     ; FAST: G_STORE [[COPY2]](s32), [[COPY1]](p0) :: (store (s32) into %ir.p1)
1254     ; FAST: $rax = COPY [[COPY1]](p0)
1255     ; FAST: RET 0, implicit $rax
1256     ; GREEDY-LABEL: name: test_store_float
1257     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1258     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1259     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1260     ; GREEDY: G_STORE [[TRUNC]](s32), [[COPY1]](p0) :: (store (s32) into %ir.p1)
1261     ; GREEDY: $rax = COPY [[COPY1]](p0)
1262     ; GREEDY: RET 0, implicit $rax
1263     %2:_(s128) = COPY $xmm0
1264     %0:_(s32) = G_TRUNC %2(s128)
1265     %1:_(p0) = COPY $rdi
1266     G_STORE %0(s32), %1(p0) :: (store (s32) into %ir.p1)
1267     $rax = COPY %1(p0)
1268     RET 0, implicit $rax
1272 name:            test_store_double
1273 alignment:       16
1274 legalized:       true
1275 regBankSelected: false
1276 selected:        false
1280 registers:
1281   - { id: 0, class: _ }
1282   - { id: 1, class: _ }
1283 body:             |
1284   bb.1 (%ir-block.0):
1285     liveins: $rdi, $xmm0
1287     ; FAST-LABEL: name: test_store_double
1288     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1289     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
1290     ; FAST: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1291     ; FAST: [[COPY2:%[0-9]+]]:gpr(s64) = COPY [[TRUNC]](s64)
1292     ; FAST: G_STORE [[COPY2]](s64), [[COPY1]](p0) :: (store (s64) into %ir.p1)
1293     ; FAST: $rax = COPY [[COPY1]](p0)
1294     ; FAST: RET 0, implicit $rax
1295     ; GREEDY-LABEL: name: test_store_double
1296     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1297     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
1298     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(p0) = COPY $rdi
1299     ; GREEDY: G_STORE [[TRUNC]](s64), [[COPY1]](p0) :: (store (s64) into %ir.p1)
1300     ; GREEDY: $rax = COPY [[COPY1]](p0)
1301     ; GREEDY: RET 0, implicit $rax
1302     %2:_(s128) = COPY $xmm0
1303     %0:_(s64) = G_TRUNC %2(s128)
1304     %1:_(p0) = COPY $rdi
1305     G_STORE %0(s64), %1(p0) :: (store (s64) into %ir.p1)
1306     $rax = COPY %1(p0)
1307     RET 0, implicit $rax
1311 name:            constInt_check
1312 alignment:       16
1313 legalized:       true
1314 registers:
1315   - { id: 0, class: _ }
1316   - { id: 1, class: _ }
1317   - { id: 2, class: _ }
1318   - { id: 3, class: _ }
1319 body:             |
1320   bb.0 (%ir-block.0):
1321     ; FAST-LABEL: name: constInt_check
1322     ; FAST: [[C:%[0-9]+]]:gpr(s8) = G_CONSTANT i8 8
1323     ; FAST: [[C1:%[0-9]+]]:gpr(s16) = G_CONSTANT i16 16
1324     ; FAST: [[C2:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 32
1325     ; FAST: [[C3:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 64
1326     ; FAST: RET 0
1327     ; GREEDY-LABEL: name: constInt_check
1328     ; GREEDY: [[C:%[0-9]+]]:gpr(s8) = G_CONSTANT i8 8
1329     ; GREEDY: [[C1:%[0-9]+]]:gpr(s16) = G_CONSTANT i16 16
1330     ; GREEDY: [[C2:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 32
1331     ; GREEDY: [[C3:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 64
1332     ; GREEDY: RET 0
1333     %0(s8) = G_CONSTANT i8 8
1334     %1(s16) = G_CONSTANT i16 16
1335     %2(s32) = G_CONSTANT i32 32
1336     %3(s64) = G_CONSTANT i64 64
1337     RET 0
1341 name:            trunc_check
1342 alignment:       16
1343 legalized:       true
1344 registers:
1345   - { id: 0, class: _ }
1346   - { id: 1, class: _ }
1347   - { id: 2, class: _ }
1348   - { id: 3, class: _ }
1349 body:             |
1350   bb.0 (%ir-block.0):
1351     ; FAST-LABEL: name: trunc_check
1352     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1353     ; FAST: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[DEF]](s32)
1354     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[DEF]](s32)
1355     ; FAST: [[TRUNC2:%[0-9]+]]:gpr(s16) = G_TRUNC [[DEF]](s32)
1356     ; FAST: RET 0
1357     ; GREEDY-LABEL: name: trunc_check
1358     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1359     ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[DEF]](s32)
1360     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[DEF]](s32)
1361     ; GREEDY: [[TRUNC2:%[0-9]+]]:gpr(s16) = G_TRUNC [[DEF]](s32)
1362     ; GREEDY: RET 0
1363     %0(s32) = G_IMPLICIT_DEF
1364     %1(s1) = G_TRUNC %0(s32)
1365     %2(s8) = G_TRUNC %0(s32)
1366     %3(s16) = G_TRUNC %0(s32)
1367     RET 0
1371 name:            test_gep
1372 legalized:       true
1373 registers:
1374   - { id: 0, class: _ }
1375   - { id: 1, class: _ }
1376   - { id: 2, class: _ }
1377   - { id: 3, class: _ }
1378   - { id: 4, class: _ }
1379 body:             |
1380   bb.0 (%ir-block.0):
1381     ; FAST-LABEL: name: test_gep
1382     ; FAST: [[DEF:%[0-9]+]]:gpr(p0) = G_IMPLICIT_DEF
1383     ; FAST: [[C:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 20
1384     ; FAST: [[PTR_ADD:%[0-9]+]]:gpr(p0) = G_PTR_ADD [[DEF]], [[C]](s64)
1385     ; FAST: RET 0
1386     ;
1387     ; GREEDY-LABEL: name: test_gep
1388     ; GREEDY: [[DEF:%[0-9]+]]:gpr(p0) = G_IMPLICIT_DEF
1389     ; GREEDY: [[C:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 20
1390     ; GREEDY: [[PTR_ADD:%[0-9]+]]:gpr(p0) = G_PTR_ADD [[DEF]], [[C]](s64)
1391     ; GREEDY: RET 0
1392     %0(p0) = G_IMPLICIT_DEF
1393     %1(s64) = G_CONSTANT i64 20
1394     %2(p0) = G_PTR_ADD %0, %1(s64)
1395     RET 0
1399 name:            test_icmp_eq_i8
1400 alignment:       16
1401 legalized:       true
1402 regBankSelected: false
1403 registers:
1404   - { id: 0, class: _ }
1405   - { id: 1, class: _ }
1406   - { id: 2, class: _ }
1407 body:             |
1408   bb.1 (%ir-block.0):
1409     liveins: $edi, $esi
1411     ; FAST-LABEL: name: test_icmp_eq_i8
1412     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1413     ; FAST: [[TRUNC:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY]](s32)
1414     ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1415     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY1]](s32)
1416     ; FAST: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[TRUNC]](s8), [[TRUNC1]]
1417     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1418     ; FAST: $al = COPY [[COPY2]](s8)
1419     ; FAST: RET 0, implicit $al
1420     ; GREEDY-LABEL: name: test_icmp_eq_i8
1421     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1422     ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY]](s32)
1423     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1424     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY1]](s32)
1425     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[TRUNC]](s8), [[TRUNC1]]
1426     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1427     ; GREEDY: $al = COPY [[COPY2]](s8)
1428     ; GREEDY: RET 0, implicit $al
1429     %2:_(s32) = COPY $edi
1430     %0:_(s8) = G_TRUNC %2(s32)
1431     %3:_(s32) = COPY $esi
1432     %1:_(s8) = G_TRUNC %3(s32)
1433     %6:_(s8) = G_ICMP intpred(eq), %0(s8), %1
1434     %5:_(s8) = COPY %6(s8)
1435     $al = COPY %5(s8)
1436     RET 0, implicit $al
1440 name:            test_icmp_eq_i16
1441 alignment:       16
1442 legalized:       true
1443 regBankSelected: false
1444 registers:
1445   - { id: 0, class: _ }
1446   - { id: 1, class: _ }
1447   - { id: 2, class: _ }
1448 body:             |
1449   bb.1 (%ir-block.0):
1450     liveins: $edi, $esi
1452     ; FAST-LABEL: name: test_icmp_eq_i16
1453     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1454     ; FAST: [[TRUNC:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY]](s32)
1455     ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1456     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY1]](s32)
1457     ; FAST: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[TRUNC]](s16), [[TRUNC1]]
1458     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1459     ; FAST: $al = COPY [[COPY2]](s8)
1460     ; FAST: RET 0, implicit $al
1461     ; GREEDY-LABEL: name: test_icmp_eq_i16
1462     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1463     ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY]](s32)
1464     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1465     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY1]](s32)
1466     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[TRUNC]](s16), [[TRUNC1]]
1467     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1468     ; GREEDY: $al = COPY [[COPY2]](s8)
1469     ; GREEDY: RET 0, implicit $al
1470     %2:_(s32) = COPY $edi
1471     %0:_(s16) = G_TRUNC %2(s32)
1472     %3:_(s32) = COPY $esi
1473     %1:_(s16) = G_TRUNC %3(s32)
1474     %6:_(s8) = G_ICMP intpred(eq), %0(s16), %1
1475     %5:_(s8) = COPY %6(s8)
1476     $al = COPY %5(s8)
1477     RET 0, implicit $al
1481 name:            test_icmp_eq_i32
1482 alignment:       16
1483 legalized:       true
1484 regBankSelected: false
1485 registers:
1486   - { id: 0, class: _ }
1487   - { id: 1, class: _ }
1488   - { id: 2, class: _ }
1489 body:             |
1490   bb.1 (%ir-block.0):
1491     liveins: $edi, $esi
1493     ; FAST-LABEL: name: test_icmp_eq_i32
1494     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1495     ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1496     ; FAST: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
1497     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1498     ; FAST: $al = COPY [[COPY2]](s8)
1499     ; FAST: RET 0, implicit $al
1500     ; GREEDY-LABEL: name: test_icmp_eq_i32
1501     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1502     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1503     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
1504     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1505     ; GREEDY: $al = COPY [[COPY2]](s8)
1506     ; GREEDY: RET 0, implicit $al
1507     %0:_(s32) = COPY $edi
1508     %1:_(s32) = COPY $esi
1509     %4:_(s8) = G_ICMP intpred(eq), %0(s32), %1
1510     %3:_(s8) = COPY %4(s8)
1511     $al = COPY %3(s8)
1512     RET 0, implicit $al
1516 name:            test_icmp_eq_i64
1517 alignment:       16
1518 legalized:       true
1519 regBankSelected: false
1520 registers:
1521   - { id: 0, class: _ }
1522   - { id: 1, class: _ }
1523   - { id: 2, class: _ }
1524 body:             |
1525   bb.1 (%ir-block.0):
1526     liveins: $rdi, $rsi
1528     ; FAST-LABEL: name: test_icmp_eq_i64
1529     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1530     ; FAST: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
1531     ; FAST: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
1532     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1533     ; FAST: $al = COPY [[COPY2]](s8)
1534     ; FAST: RET 0, implicit $al
1535     ; GREEDY-LABEL: name: test_icmp_eq_i64
1536     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1537     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
1538     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
1539     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[ICMP]](s8)
1540     ; GREEDY: $al = COPY [[COPY2]](s8)
1541     ; GREEDY: RET 0, implicit $al
1542     %0:_(s64) = COPY $rdi
1543     %1:_(s64) = COPY $rsi
1544     %4:_(s8) = G_ICMP intpred(eq), %0(s64), %1
1545     %3:_(s8) = COPY %4(s8)
1546     $al = COPY %3(s8)
1547     RET 0, implicit $al
1551 name:            test_xor_i8
1552 alignment:       16
1553 legalized:       true
1554 regBankSelected: false
1555 registers:
1556   - { id: 0, class: _, preferred-register: '' }
1557   - { id: 1, class: _, preferred-register: '' }
1558 liveins:
1559 fixedStack:
1560 stack:
1561 constants:
1562 body:             |
1563   bb.1 (%ir-block.0):
1564     ; FAST-LABEL: name: test_xor_i8
1565     ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1566     ; FAST: [[XOR:%[0-9]+]]:gpr(s8) = G_XOR [[DEF]], [[DEF]]
1567     ; FAST: $al = COPY [[XOR]](s8)
1568     ; FAST: RET 0, implicit $al
1569     ; GREEDY-LABEL: name: test_xor_i8
1570     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1571     ; GREEDY: [[XOR:%[0-9]+]]:gpr(s8) = G_XOR [[DEF]], [[DEF]]
1572     ; GREEDY: $al = COPY [[XOR]](s8)
1573     ; GREEDY: RET 0, implicit $al
1574     %0(s8) = G_IMPLICIT_DEF
1575     %1(s8) = G_XOR %0, %0
1576     $al = COPY %1(s8)
1577     RET 0, implicit $al
1581 name:            test_or_i16
1582 alignment:       16
1583 legalized:       true
1584 regBankSelected: false
1585 registers:
1586   - { id: 0, class: _, preferred-register: '' }
1587   - { id: 1, class: _, preferred-register: '' }
1588 liveins:
1589 fixedStack:
1590 stack:
1591 constants:
1592 body:             |
1593   bb.1 (%ir-block.0):
1594     ; FAST-LABEL: name: test_or_i16
1595     ; FAST: [[DEF:%[0-9]+]]:gpr(s16) = G_IMPLICIT_DEF
1596     ; FAST: [[OR:%[0-9]+]]:gpr(s16) = G_OR [[DEF]], [[DEF]]
1597     ; FAST: $ax = COPY [[OR]](s16)
1598     ; FAST: RET 0, implicit $ax
1599     ; GREEDY-LABEL: name: test_or_i16
1600     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s16) = G_IMPLICIT_DEF
1601     ; GREEDY: [[OR:%[0-9]+]]:gpr(s16) = G_OR [[DEF]], [[DEF]]
1602     ; GREEDY: $ax = COPY [[OR]](s16)
1603     ; GREEDY: RET 0, implicit $ax
1604     %0(s16) = G_IMPLICIT_DEF
1605     %1(s16) = G_OR %0, %0
1606     $ax = COPY %1(s16)
1607     RET 0, implicit $ax
1611 name:            test_and_i32
1612 alignment:       16
1613 legalized:       true
1614 regBankSelected: false
1615 registers:
1616   - { id: 0, class: _, preferred-register: '' }
1617   - { id: 1, class: _, preferred-register: '' }
1618 liveins:
1619 fixedStack:
1620 stack:
1621 constants:
1622 body:             |
1623   bb.1 (%ir-block.0):
1624     ; FAST-LABEL: name: test_and_i32
1625     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1626     ; FAST: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[DEF]], [[DEF]]
1627     ; FAST: $eax = COPY [[AND]](s32)
1628     ; FAST: RET 0, implicit $eax
1629     ; GREEDY-LABEL: name: test_and_i32
1630     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1631     ; GREEDY: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[DEF]], [[DEF]]
1632     ; GREEDY: $eax = COPY [[AND]](s32)
1633     ; GREEDY: RET 0, implicit $eax
1634     %0(s32) = G_IMPLICIT_DEF
1635     %1(s32) = G_AND %0, %0
1636     $eax = COPY %1(s32)
1637     RET 0, implicit $eax
1641 name:            test_and_i64
1642 alignment:       16
1643 legalized:       true
1644 regBankSelected: false
1645 registers:
1646   - { id: 0, class: _, preferred-register: '' }
1647   - { id: 1, class: _, preferred-register: '' }
1648 liveins:
1649 fixedStack:
1650 stack:
1651 constants:
1652 body:             |
1653   bb.1 (%ir-block.0):
1654     ; FAST-LABEL: name: test_and_i64
1655     ; FAST: [[DEF:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
1656     ; FAST: [[AND:%[0-9]+]]:gpr(s64) = G_AND [[DEF]], [[DEF]]
1657     ; FAST: $rax = COPY [[AND]](s64)
1658     ; FAST: RET 0, implicit $rax
1659     ; GREEDY-LABEL: name: test_and_i64
1660     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s64) = G_IMPLICIT_DEF
1661     ; GREEDY: [[AND:%[0-9]+]]:gpr(s64) = G_AND [[DEF]], [[DEF]]
1662     ; GREEDY: $rax = COPY [[AND]](s64)
1663     ; GREEDY: RET 0, implicit $rax
1664     %0(s64) = G_IMPLICIT_DEF
1665     %1(s64) = G_AND %0, %0
1666     $rax = COPY %1(s64)
1667     RET 0, implicit $rax
1671 name:            test_global_ptrv
1672 alignment:       16
1673 legalized:       true
1674 regBankSelected: false
1675 registers:
1676   - { id: 0, class: _, preferred-register: '' }
1677 body:             |
1678   bb.1.entry:
1679     ; FAST-LABEL: name: test_global_ptrv
1680     ; FAST: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @g_int
1681     ; FAST: $rax = COPY [[GV]](p0)
1682     ; FAST: RET 0, implicit $rax
1683     ; GREEDY-LABEL: name: test_global_ptrv
1684     ; GREEDY: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @g_int
1685     ; GREEDY: $rax = COPY [[GV]](p0)
1686     ; GREEDY: RET 0, implicit $rax
1687     %0(p0) = G_GLOBAL_VALUE @g_int
1688     $rax = COPY %0(p0)
1689     RET 0, implicit $rax
1693 name:            test_undef
1694 alignment:       16
1695 legalized:       true
1696 regBankSelected: false
1697 registers:
1698   - { id: 0, class: _, preferred-register: '' }
1699 liveins:
1700 fixedStack:
1701 stack:
1702 constants:
1703 body:             |
1704   bb.1 (%ir-block.0):
1705     ; FAST-LABEL: name: test_undef
1706     ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1707     ; FAST: $al = COPY [[DEF]](s8)
1708     ; FAST: RET 0, implicit $al
1709     ; GREEDY-LABEL: name: test_undef
1710     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1711     ; GREEDY: $al = COPY [[DEF]](s8)
1712     ; GREEDY: RET 0, implicit $al
1713     %0(s8) = G_IMPLICIT_DEF
1714     $al = COPY %0(s8)
1715     RET 0, implicit $al
1719 name:            test_undef2
1720 alignment:       16
1721 legalized:       true
1722 regBankSelected: false
1723 registers:
1724   - { id: 0, class: _, preferred-register: '' }
1725   - { id: 1, class: _, preferred-register: '' }
1726   - { id: 2, class: _, preferred-register: '' }
1727 liveins:
1728 fixedStack:
1729 stack:
1730 constants:
1731 body:             |
1732   bb.1 (%ir-block.0):
1733     liveins: $edi
1735     ; FAST-LABEL: name: test_undef2
1736     ; FAST: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
1737     ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1738     ; FAST: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[DEF]]
1739     ; FAST: $al = COPY [[ADD]](s8)
1740     ; FAST: RET 0, implicit $al
1741     ; GREEDY-LABEL: name: test_undef2
1742     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
1743     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1744     ; GREEDY: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[DEF]]
1745     ; GREEDY: $al = COPY [[ADD]](s8)
1746     ; GREEDY: RET 0, implicit $al
1747     %0(s8) = COPY $dil
1748     %1(s8) = G_IMPLICIT_DEF
1749     %2(s8) = G_ADD %0, %1
1750     $al = COPY %2(s8)
1751     RET 0, implicit $al
1755 name:            test_undef3
1756 alignment:       16
1757 legalized:       true
1758 regBankSelected: false
1759 registers:
1760   - { id: 1, class: _, preferred-register: '' }
1761 liveins:
1762 fixedStack:
1763 stack:
1764 constants:
1765 body:             |
1766   bb.1 (%ir-block.0):
1767     ; FAST-LABEL: name: test_undef3
1768     ; FAST: [[DEF:%[0-9]+]]:vecr(s128) = G_IMPLICIT_DEF
1769     ; FAST: $xmm0 = COPY [[DEF]](s128)
1770     ; FAST: RET 0, implicit $xmm0
1771     ; GREEDY-LABEL: name: test_undef3
1772     ; GREEDY: [[DEF:%[0-9]+]]:vecr(s128) = G_IMPLICIT_DEF
1773     ; GREEDY: $xmm0 = COPY [[DEF]](s128)
1774     ; GREEDY: RET 0, implicit $xmm0
1775     %1(s128) = G_IMPLICIT_DEF
1776     $xmm0 = COPY %1(s128)
1777     RET 0, implicit $xmm0
1781 name:            test_undef4
1782 alignment:       16
1783 legalized:       true
1784 regBankSelected: false
1785 registers:
1786   - { id: 0, class: _, preferred-register: '' }
1787   - { id: 1, class: _, preferred-register: '' }
1788   - { id: 2, class: _, preferred-register: '' }
1789   - { id: 3, class: _, preferred-register: '' }
1790   - { id: 4, class: _, preferred-register: '' }
1791 liveins:
1792 fixedStack:
1793 stack:
1794 constants:
1795 body:             |
1796   bb.1 (%ir-block.0):
1797     liveins: $xmm0
1799     ; FAST-LABEL: name: test_undef4
1800     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1801     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1802     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1803     ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
1804     ; FAST: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[COPY1]]
1805     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
1806     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1807     ; FAST: RET 0, implicit $xmm0
1808     ; GREEDY-LABEL: name: test_undef4
1809     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1810     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1811     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1812     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
1813     ; GREEDY: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[COPY1]]
1814     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
1815     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1816     ; GREEDY: RET 0, implicit $xmm0
1817     %1:_(s128) = COPY $xmm0
1818     %0:_(s32) = G_TRUNC %1(s128)
1819     %2:_(s32) = G_IMPLICIT_DEF
1820     %3:_(s32) = G_FADD %0, %2
1821     %4:_(s128) = G_ANYEXT %3(s32)
1822     $xmm0 = COPY %4(s128)
1823     RET 0, implicit $xmm0
1827 name:            test_i32
1828 alignment:       16
1829 legalized:       true
1830 regBankSelected: false
1831 tracksRegLiveness: true
1832 registers:
1833   - { id: 0, class: _, preferred-register: '' }
1834   - { id: 1, class: _, preferred-register: '' }
1835   - { id: 2, class: _, preferred-register: '' }
1836   - { id: 3, class: _, preferred-register: '' }
1837   - { id: 4, class: _, preferred-register: '' }
1838   - { id: 5, class: _, preferred-register: '' }
1839   - { id: 6, class: _, preferred-register: '' }
1840 body:             |
1841   ; FAST-LABEL: name: test_i32
1842   ; FAST: bb.0.entry:
1843   ; FAST:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
1844   ; FAST:   liveins: $edi, $edx, $esi
1845   ; FAST:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1846   ; FAST:   [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1847   ; FAST:   [[COPY2:%[0-9]+]]:gpr(s32) = COPY $edx
1848   ; FAST:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1849   ; FAST:   [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1850   ; FAST:   [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[ICMP]](s8)
1851   ; FAST:   G_BRCOND [[TRUNC]](s1), %bb.1
1852   ; FAST:   G_BR %bb.2
1853   ; FAST: bb.1.cond.true:
1854   ; FAST:   successors: %bb.3(0x80000000)
1855   ; FAST:   G_BR %bb.3
1856   ; FAST: bb.2.cond.false:
1857   ; FAST:   successors: %bb.3(0x80000000)
1858   ; FAST: bb.3.cond.end:
1859   ; FAST:   [[PHI:%[0-9]+]]:gpr(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
1860   ; FAST:   $eax = COPY [[PHI]](s32)
1861   ; FAST:   RET 0, implicit $eax
1862   ; GREEDY-LABEL: name: test_i32
1863   ; GREEDY: bb.0.entry:
1864   ; GREEDY:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
1865   ; GREEDY:   liveins: $edi, $edx, $esi
1866   ; GREEDY:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1867   ; GREEDY:   [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1868   ; GREEDY:   [[COPY2:%[0-9]+]]:gpr(s32) = COPY $edx
1869   ; GREEDY:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1870   ; GREEDY:   [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1871   ; GREEDY:   [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[ICMP]](s8)
1872   ; GREEDY:   G_BRCOND [[TRUNC]](s1), %bb.1
1873   ; GREEDY:   G_BR %bb.2
1874   ; GREEDY: bb.1.cond.true:
1875   ; GREEDY:   successors: %bb.3(0x80000000)
1876   ; GREEDY:   G_BR %bb.3
1877   ; GREEDY: bb.2.cond.false:
1878   ; GREEDY:   successors: %bb.3(0x80000000)
1879   ; GREEDY: bb.3.cond.end:
1880   ; GREEDY:   [[PHI:%[0-9]+]]:gpr(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
1881   ; GREEDY:   $eax = COPY [[PHI]](s32)
1882   ; GREEDY:   RET 0, implicit $eax
1883   bb.0.entry:
1884     successors: %bb.1(0x40000000), %bb.2(0x40000000)
1885     liveins: $edi, $edx, $esi
1887     %0(s32) = COPY $edi
1888     %1(s32) = COPY $esi
1889     %2(s32) = COPY $edx
1890     %3(s32) = G_CONSTANT i32 0
1891     %6(s8) = G_ICMP intpred(sgt), %0(s32), %3
1892     %4(s1) = G_TRUNC %6(s8)
1893     G_BRCOND %4(s1), %bb.1
1894     G_BR %bb.2
1896   bb.1.cond.true:
1897     successors: %bb.3(0x80000000)
1899     G_BR %bb.3
1901   bb.2.cond.false:
1902     successors: %bb.3(0x80000000)
1904   bb.3.cond.end:
1905     %5(s32) = G_PHI %1(s32), %bb.1, %2(s32), %bb.2
1906     $eax = COPY %5(s32)
1907     RET 0, implicit $eax
1911 name:            test_float
1912 alignment:       16
1913 legalized:       true
1914 regBankSelected: false
1915 tracksRegLiveness: true
1916 registers:
1917   - { id: 0, class: _, preferred-register: '' }
1918   - { id: 1, class: _, preferred-register: '' }
1919   - { id: 2, class: _, preferred-register: '' }
1920   - { id: 3, class: _, preferred-register: '' }
1921   - { id: 4, class: _, preferred-register: '' }
1922   - { id: 5, class: _, preferred-register: '' }
1923 body:             |
1924   ; FAST-LABEL: name: test_float
1925   ; FAST: bb.0.entry:
1926   ; FAST:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
1927   ; FAST:   liveins: $edi, $xmm0, $xmm1
1928   ; FAST:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1929   ; FAST:   [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm0
1930   ; FAST:   [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
1931   ; FAST:   [[COPY2:%[0-9]+]]:vecr(s128) = COPY $xmm1
1932   ; FAST:   [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY2]](s128)
1933   ; FAST:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1934   ; FAST:   [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1935   ; FAST:   [[TRUNC2:%[0-9]+]]:gpr(s1) = G_TRUNC [[ICMP]](s8)
1936   ; FAST:   G_BRCOND [[TRUNC2]](s1), %bb.2
1937   ; FAST: bb.1.cond.false:
1938   ; FAST:   successors: %bb.2(0x80000000)
1939   ; FAST: bb.2.cond.end:
1940   ; FAST:   [[PHI:%[0-9]+]]:vecr(s32) = G_PHI [[TRUNC1]](s32), %bb.1, [[TRUNC]](s32), %bb.0
1941   ; FAST:   [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[PHI]](s32)
1942   ; FAST:   $xmm0 = COPY [[ANYEXT]](s128)
1943   ; FAST:   RET 0, implicit $xmm0
1944   ; GREEDY-LABEL: name: test_float
1945   ; GREEDY: bb.0.entry:
1946   ; GREEDY:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
1947   ; GREEDY:   liveins: $edi, $xmm0, $xmm1
1948   ; GREEDY:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1949   ; GREEDY:   [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm0
1950   ; GREEDY:   [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
1951   ; GREEDY:   [[COPY2:%[0-9]+]]:vecr(s128) = COPY $xmm1
1952   ; GREEDY:   [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY2]](s128)
1953   ; GREEDY:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1954   ; GREEDY:   [[ICMP:%[0-9]+]]:gpr(s8) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1955   ; GREEDY:   [[TRUNC2:%[0-9]+]]:gpr(s1) = G_TRUNC [[ICMP]](s8)
1956   ; GREEDY:   G_BRCOND [[TRUNC2]](s1), %bb.2
1957   ; GREEDY: bb.1.cond.false:
1958   ; GREEDY:   successors: %bb.2(0x80000000)
1959   ; GREEDY: bb.2.cond.end:
1960   ; GREEDY:   [[PHI:%[0-9]+]]:vecr(s32) = G_PHI [[TRUNC1]](s32), %bb.1, [[TRUNC]](s32), %bb.0
1961   ; GREEDY:   [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[PHI]](s32)
1962   ; GREEDY:   $xmm0 = COPY [[ANYEXT]](s128)
1963   ; GREEDY:   RET 0, implicit $xmm0
1964   bb.1.entry:
1965     successors: %bb.3(0x40000000), %bb.2(0x40000000)
1966     liveins: $edi, $xmm0, $xmm1
1968     %0:_(s32) = COPY $edi
1969     %3:_(s128) = COPY $xmm0
1970     %1:_(s32) = G_TRUNC %3(s128)
1971     %4:_(s128) = COPY $xmm1
1972     %2:_(s32) = G_TRUNC %4(s128)
1973     %5:_(s32) = G_CONSTANT i32 0
1974     %9:_(s8) = G_ICMP intpred(sgt), %0(s32), %5
1975     %6:_(s1) = G_TRUNC %9(s8)
1976     G_BRCOND %6(s1), %bb.3
1978   bb.2.cond.false:
1979     successors: %bb.3(0x80000000)
1982   bb.3.cond.end:
1983     %7:_(s32) = G_PHI %2(s32), %bb.2, %1(s32), %bb.1
1984     %8:_(s128) = G_ANYEXT %7(s32)
1985     $xmm0 = COPY %8(s128)
1986     RET 0, implicit $xmm0
1990 name:            test_fpext
1991 alignment:       16
1992 legalized:       true
1993 regBankSelected: false
1994 registers:
1995   - { id: 0, class: _, preferred-register: '' }
1996   - { id: 1, class: _, preferred-register: '' }
1997 body:             |
1998   bb.1.entry:
1999     liveins: $xmm0
2001     ; FAST-LABEL: name: test_fpext
2002     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2003     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2004     ; FAST: [[FPEXT:%[0-9]+]]:vecr(s64) = G_FPEXT [[TRUNC]](s32)
2005     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPEXT]](s64)
2006     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2007     ; FAST: RET 0, implicit $xmm0
2008     ; GREEDY-LABEL: name: test_fpext
2009     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2010     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2011     ; GREEDY: [[FPEXT:%[0-9]+]]:vecr(s64) = G_FPEXT [[TRUNC]](s32)
2012     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPEXT]](s64)
2013     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2014     ; GREEDY: RET 0, implicit $xmm0
2015     %1:_(s128) = COPY $xmm0
2016     %0:_(s32) = G_TRUNC %1(s128)
2017     %2:_(s64) = G_FPEXT %0(s32)
2018     %3:_(s128) = G_ANYEXT %2(s64)
2019     $xmm0 = COPY %3(s128)
2020     RET 0, implicit $xmm0
2024 name:            test_fptrunc
2025 alignment:       16
2026 legalized:       true
2027 tracksRegLiveness: true
2028 registers:
2029   - { id: 0, class: _ }
2030   - { id: 1, class: _ }
2031   - { id: 2, class: _ }
2032   - { id: 3, class: _ }
2033 body:             |
2034   bb.1.entry:
2035     liveins: $xmm0
2037     ; FAST-LABEL: name: test_fptrunc
2038     ; FAST: liveins: $xmm0
2039     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2040     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2041     ; FAST: [[FPTRUNC:%[0-9]+]]:vecr(s32) = G_FPTRUNC [[TRUNC]](s64)
2042     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPTRUNC]](s32)
2043     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2044     ; FAST: RET 0, implicit $xmm0
2045     ; GREEDY-LABEL: name: test_fptrunc
2046     ; GREEDY: liveins: $xmm0
2047     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2048     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2049     ; GREEDY: [[FPTRUNC:%[0-9]+]]:vecr(s32) = G_FPTRUNC [[TRUNC]](s64)
2050     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPTRUNC]](s32)
2051     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2052     ; GREEDY: RET 0, implicit $xmm0
2053     %1:_(s128) = COPY $xmm0
2054     %0:_(s64) = G_TRUNC %1(s128)
2055     %2:_(s32) = G_FPTRUNC %0(s64)
2056     %3:_(s128) = G_ANYEXT %2(s32)
2057     $xmm0 = COPY %3(s128)
2058     RET 0, implicit $xmm0
2062 name:            test_fconstant
2063 # ALL-LABEL: name:            test_fconstant
2064 legalized:       true
2065 registers:
2066   - { id: 0, class: _ }
2067   - { id: 1, class: _ }
2068 body: |
2069   bb.0:
2070     ; FAST-LABEL: name: test_fconstant
2071     ; FAST: [[C:%[0-9]+]]:vecr(s32) = G_FCONSTANT float 1.000000e+00
2072     ; FAST: [[C1:%[0-9]+]]:vecr(s64) = G_FCONSTANT double 2.000000e+00
2073     ; GREEDY-LABEL: name: test_fconstant
2074     ; GREEDY: [[C:%[0-9]+]]:vecr(s32) = G_FCONSTANT float 1.000000e+00
2075     ; GREEDY: [[C1:%[0-9]+]]:vecr(s64) = G_FCONSTANT double 2.000000e+00
2076     %0(s32) = G_FCONSTANT float 1.0
2077     %1(s64) = G_FCONSTANT double 2.0
2081 name:            int32_to_float
2082 alignment:       16
2083 legalized:       true
2084 tracksRegLiveness: true
2085 registers:
2086   - { id: 0, class: _ }
2087   - { id: 1, class: _ }
2088   - { id: 2, class: _ }
2089 body:             |
2090   bb.1.entry:
2091     liveins: $edi
2093     ; FAST-LABEL: name: int32_to_float
2094     ; FAST: liveins: $edi
2095     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2096     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s32)
2097     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2098     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2099     ; FAST: RET 0, implicit $xmm0
2100     ; GREEDY-LABEL: name: int32_to_float
2101     ; GREEDY: liveins: $edi
2102     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2103     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s32)
2104     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2105     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2106     ; GREEDY: RET 0, implicit $xmm0
2107     %0:_(s32) = COPY $edi
2108     %1:_(s32) = G_SITOFP %0(s32)
2109     %2:_(s128) = G_ANYEXT %1(s32)
2110     $xmm0 = COPY %2(s128)
2111     RET 0, implicit $xmm0
2115 name:            int64_to_float
2116 alignment:       16
2117 legalized:       true
2118 tracksRegLiveness: true
2119 registers:
2120   - { id: 0, class: _ }
2121   - { id: 1, class: _ }
2122   - { id: 2, class: _ }
2123 body:             |
2124   bb.1.entry:
2125     liveins: $rdi
2127     ; FAST-LABEL: name: int64_to_float
2128     ; FAST: liveins: $rdi
2129     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2130     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s64)
2131     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2132     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2133     ; FAST: RET 0, implicit $xmm0
2134     ; GREEDY-LABEL: name: int64_to_float
2135     ; GREEDY: liveins: $rdi
2136     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2137     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s64)
2138     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2139     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2140     ; GREEDY: RET 0, implicit $xmm0
2141     %0:_(s64) = COPY $rdi
2142     %1:_(s32) = G_SITOFP %0(s64)
2143     %2:_(s128) = G_ANYEXT %1(s32)
2144     $xmm0 = COPY %2(s128)
2145     RET 0, implicit $xmm0
2149 name:            int32_to_double
2150 alignment:       16
2151 legalized:       true
2152 tracksRegLiveness: true
2153 registers:
2154   - { id: 0, class: _ }
2155   - { id: 1, class: _ }
2156   - { id: 2, class: _ }
2157 body:             |
2158   bb.1.entry:
2159     liveins: $edi
2161     ; FAST-LABEL: name: int32_to_double
2162     ; FAST: liveins: $edi
2163     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2164     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s32)
2165     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2166     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2167     ; FAST: RET 0, implicit $xmm0
2168     ; GREEDY-LABEL: name: int32_to_double
2169     ; GREEDY: liveins: $edi
2170     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2171     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s32)
2172     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2173     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2174     ; GREEDY: RET 0, implicit $xmm0
2175     %0:_(s32) = COPY $edi
2176     %1:_(s64) = G_SITOFP %0(s32)
2177     %2:_(s128) = G_ANYEXT %1(s64)
2178     $xmm0 = COPY %2(s128)
2179     RET 0, implicit $xmm0
2183 name:            int64_to_double
2184 alignment:       16
2185 legalized:       true
2186 tracksRegLiveness: true
2187 registers:
2188   - { id: 0, class: _ }
2189   - { id: 1, class: _ }
2190   - { id: 2, class: _ }
2191 body:             |
2192   bb.1.entry:
2193     liveins: $rdi
2195     ; FAST-LABEL: name: int64_to_double
2196     ; FAST: liveins: $rdi
2197     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2198     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s64)
2199     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2200     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2201     ; FAST: RET 0, implicit $xmm0
2202     ; GREEDY-LABEL: name: int64_to_double
2203     ; GREEDY: liveins: $rdi
2204     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2205     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s64)
2206     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2207     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2208     ; GREEDY: RET 0, implicit $xmm0
2209     %0:_(s64) = COPY $rdi
2210     %1:_(s64) = G_SITOFP %0(s64)
2211     %2:_(s128) = G_ANYEXT %1(s64)
2212     $xmm0 = COPY %2(s128)
2213     RET 0, implicit $xmm0
2217 name:            float_to_int8
2218 alignment:       16
2219 legalized:       true
2220 tracksRegLiveness: true
2221 registers:
2222   - { id: 0, class: _ }
2223   - { id: 1, class: _ }
2224   - { id: 2, class: _ }
2225   - { id: 3, class: _ }
2226 body:             |
2227   bb.1.entry:
2228     liveins: $xmm0
2230     ; FAST-LABEL: name: float_to_int8
2231     ; FAST: liveins: $xmm0
2232     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2233     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2234     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2235     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2236     ; FAST: $al = COPY [[TRUNC1]](s8)
2237     ; FAST: RET 0, implicit $al
2238     ; GREEDY-LABEL: name: float_to_int8
2239     ; GREEDY: liveins: $xmm0
2240     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2241     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2242     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2243     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2244     ; GREEDY: $al = COPY [[TRUNC1]](s8)
2245     ; GREEDY: RET 0, implicit $al
2246     %1:_(s128) = COPY $xmm0
2247     %0:_(s32) = G_TRUNC %1(s128)
2248     %3:_(s32) = G_FPTOSI %0(s32)
2249     %2:_(s8) = G_TRUNC %3(s32)
2250     $al = COPY %2(s8)
2251     RET 0, implicit $al
2255 name:            float_to_int16
2256 alignment:       16
2257 legalized:       true
2258 tracksRegLiveness: true
2259 registers:
2260   - { id: 0, class: _ }
2261   - { id: 1, class: _ }
2262   - { id: 2, class: _ }
2263   - { id: 3, class: _ }
2264 body:             |
2265   bb.1.entry:
2266     liveins: $xmm0
2268     ; FAST-LABEL: name: float_to_int16
2269     ; FAST: liveins: $xmm0
2270     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2271     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2272     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2273     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2274     ; FAST: $ax = COPY [[TRUNC1]](s16)
2275     ; FAST: RET 0, implicit $ax
2276     ; GREEDY-LABEL: name: float_to_int16
2277     ; GREEDY: liveins: $xmm0
2278     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2279     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2280     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2281     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2282     ; GREEDY: $ax = COPY [[TRUNC1]](s16)
2283     ; GREEDY: RET 0, implicit $ax
2284     %1:_(s128) = COPY $xmm0
2285     %0:_(s32) = G_TRUNC %1(s128)
2286     %3:_(s32) = G_FPTOSI %0(s32)
2287     %2:_(s16) = G_TRUNC %3(s32)
2288     $ax = COPY %2(s16)
2289     RET 0, implicit $ax
2293 name:            float_to_int32
2294 alignment:       16
2295 legalized:       true
2296 tracksRegLiveness: true
2297 registers:
2298   - { id: 0, class: _ }
2299   - { id: 1, class: _ }
2300   - { id: 2, class: _ }
2301 body:             |
2302   bb.1.entry:
2303     liveins: $xmm0
2305     ; FAST-LABEL: name: float_to_int32
2306     ; FAST: liveins: $xmm0
2307     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2308     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2309     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2310     ; FAST: $eax = COPY [[FPTOSI]](s32)
2311     ; FAST: RET 0, implicit $eax
2312     ; GREEDY-LABEL: name: float_to_int32
2313     ; GREEDY: liveins: $xmm0
2314     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2315     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2316     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2317     ; GREEDY: $eax = COPY [[FPTOSI]](s32)
2318     ; GREEDY: RET 0, implicit $eax
2319     %1:_(s128) = COPY $xmm0
2320     %0:_(s32) = G_TRUNC %1(s128)
2321     %2:_(s32) = G_FPTOSI %0(s32)
2322     $eax = COPY %2(s32)
2323     RET 0, implicit $eax
2327 name:            float_to_int64
2328 alignment:       16
2329 legalized:       true
2330 tracksRegLiveness: true
2331 registers:
2332   - { id: 0, class: _ }
2333   - { id: 1, class: _ }
2334   - { id: 2, class: _ }
2335 body:             |
2336   bb.1.entry:
2337     liveins: $xmm0
2339     ; FAST-LABEL: name: float_to_int64
2340     ; FAST: liveins: $xmm0
2341     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2342     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2343     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s32)
2344     ; FAST: $rax = COPY [[FPTOSI]](s64)
2345     ; FAST: RET 0, implicit $rax
2346     ; GREEDY-LABEL: name: float_to_int64
2347     ; GREEDY: liveins: $xmm0
2348     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2349     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2350     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s32)
2351     ; GREEDY: $rax = COPY [[FPTOSI]](s64)
2352     ; GREEDY: RET 0, implicit $rax
2353     %1:_(s128) = COPY $xmm0
2354     %0:_(s32) = G_TRUNC %1(s128)
2355     %2:_(s64) = G_FPTOSI %0(s32)
2356     $rax = COPY %2(s64)
2357     RET 0, implicit $rax
2361 name:            double_to_int8
2362 alignment:       16
2363 legalized:       true
2364 tracksRegLiveness: true
2365 registers:
2366   - { id: 0, class: _ }
2367   - { id: 1, class: _ }
2368   - { id: 2, class: _ }
2369   - { id: 3, class: _ }
2370 body:             |
2371   bb.1.entry:
2372     liveins: $xmm0
2374     ; FAST-LABEL: name: double_to_int8
2375     ; FAST: liveins: $xmm0
2376     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2377     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2378     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2379     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2380     ; FAST: $al = COPY [[TRUNC1]](s8)
2381     ; FAST: RET 0, implicit $al
2382     ; GREEDY-LABEL: name: double_to_int8
2383     ; GREEDY: liveins: $xmm0
2384     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2385     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2386     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2387     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2388     ; GREEDY: $al = COPY [[TRUNC1]](s8)
2389     ; GREEDY: RET 0, implicit $al
2390     %1:_(s128) = COPY $xmm0
2391     %0:_(s64) = G_TRUNC %1(s128)
2392     %3:_(s32) = G_FPTOSI %0(s64)
2393     %2:_(s8) = G_TRUNC %3(s32)
2394     $al = COPY %2(s8)
2395     RET 0, implicit $al
2399 name:            double_to_int16
2400 alignment:       16
2401 legalized:       true
2402 tracksRegLiveness: true
2403 registers:
2404   - { id: 0, class: _ }
2405   - { id: 1, class: _ }
2406   - { id: 2, class: _ }
2407   - { id: 3, class: _ }
2408 body:             |
2409   bb.1.entry:
2410     liveins: $xmm0
2412     ; FAST-LABEL: name: double_to_int16
2413     ; FAST: liveins: $xmm0
2414     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2415     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2416     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2417     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2418     ; FAST: $ax = COPY [[TRUNC1]](s16)
2419     ; FAST: RET 0, implicit $ax
2420     ; GREEDY-LABEL: name: double_to_int16
2421     ; GREEDY: liveins: $xmm0
2422     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2423     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2424     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2425     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2426     ; GREEDY: $ax = COPY [[TRUNC1]](s16)
2427     ; GREEDY: RET 0, implicit $ax
2428     %1:_(s128) = COPY $xmm0
2429     %0:_(s64) = G_TRUNC %1(s128)
2430     %3:_(s32) = G_FPTOSI %0(s64)
2431     %2:_(s16) = G_TRUNC %3(s32)
2432     $ax = COPY %2(s16)
2433     RET 0, implicit $ax
2437 name:            double_to_int32
2438 alignment:       16
2439 legalized:       true
2440 tracksRegLiveness: true
2441 registers:
2442   - { id: 0, class: _ }
2443   - { id: 1, class: _ }
2444   - { id: 2, class: _ }
2445 body:             |
2446   bb.1.entry:
2447     liveins: $xmm0
2449     ; FAST-LABEL: name: double_to_int32
2450     ; FAST: liveins: $xmm0
2451     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2452     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2453     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2454     ; FAST: $eax = COPY [[FPTOSI]](s32)
2455     ; FAST: RET 0, implicit $eax
2456     ; GREEDY-LABEL: name: double_to_int32
2457     ; GREEDY: liveins: $xmm0
2458     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2459     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2460     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2461     ; GREEDY: $eax = COPY [[FPTOSI]](s32)
2462     ; GREEDY: RET 0, implicit $eax
2463     %1:_(s128) = COPY $xmm0
2464     %0:_(s64) = G_TRUNC %1(s128)
2465     %2:_(s32) = G_FPTOSI %0(s64)
2466     $eax = COPY %2(s32)
2467     RET 0, implicit $eax
2471 name:            double_to_int64
2472 alignment:       16
2473 legalized:       true
2474 tracksRegLiveness: true
2475 registers:
2476   - { id: 0, class: _ }
2477   - { id: 1, class: _ }
2478   - { id: 2, class: _ }
2479 body:             |
2480   bb.1.entry:
2481     liveins: $xmm0
2483     ; FAST-LABEL: name: double_to_int64
2484     ; FAST: liveins: $xmm0
2485     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2486     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2487     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s64)
2488     ; FAST: $rax = COPY [[FPTOSI]](s64)
2489     ; FAST: RET 0, implicit $rax
2490     ; GREEDY-LABEL: name: double_to_int64
2491     ; GREEDY: liveins: $xmm0
2492     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2493     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2494     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s64)
2495     ; GREEDY: $rax = COPY [[FPTOSI]](s64)
2496     ; GREEDY: RET 0, implicit $rax
2497     %1:_(s128) = COPY $xmm0
2498     %0:_(s64) = G_TRUNC %1(s128)
2499     %2:_(s64) = G_FPTOSI %0(s64)
2500     $rax = COPY %2(s64)
2501     RET 0, implicit $rax
2505 name:            fcmp_float_oeq
2506 alignment:       16
2507 legalized:       true
2508 tracksRegLiveness: true
2509 registers:
2510   - { id: 0, class: _ }
2511   - { id: 1, class: _ }
2512   - { id: 2, class: _ }
2513   - { id: 3, class: _ }
2514   - { id: 4, class: _ }
2515   - { id: 5, class: _ }
2516   - { id: 6, class: _ }
2517 body:             |
2518   bb.1 (%ir-block.0):
2519     liveins: $xmm0, $xmm1
2521     ; FAST-LABEL: name: fcmp_float_oeq
2522     ; FAST: liveins: $xmm0, $xmm1
2523     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2524     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2525     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2526     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2527     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s32), [[TRUNC1]]
2528     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2529     ; FAST: $al = COPY [[COPY2]](s8)
2530     ; FAST: RET 0, implicit $al
2531     ; GREEDY-LABEL: name: fcmp_float_oeq
2532     ; GREEDY: liveins: $xmm0, $xmm1
2533     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2534     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2535     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2536     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2537     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s32), [[TRUNC1]]
2538     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2539     ; GREEDY: $al = COPY [[COPY2]](s8)
2540     ; GREEDY: RET 0, implicit $al
2541     %2:_(s128) = COPY $xmm0
2542     %0:_(s32) = G_TRUNC %2(s128)
2543     %3:_(s128) = COPY $xmm1
2544     %1:_(s32) = G_TRUNC %3(s128)
2545     %6:_(s8) = G_FCMP floatpred(oeq), %0(s32), %1
2546     %5:_(s8) = COPY %6(s8)
2547     $al = COPY %5(s8)
2548     RET 0, implicit $al
2552 name:            fcmp_float_ogt
2553 alignment:       16
2554 legalized:       true
2555 tracksRegLiveness: true
2556 registers:
2557   - { id: 0, class: _ }
2558   - { id: 1, class: _ }
2559   - { id: 2, class: _ }
2560   - { id: 3, class: _ }
2561   - { id: 4, class: _ }
2562   - { id: 5, class: _ }
2563   - { id: 6, class: _ }
2564 body:             |
2565   bb.1 (%ir-block.0):
2566     liveins: $xmm0, $xmm1
2568     ; FAST-LABEL: name: fcmp_float_ogt
2569     ; FAST: liveins: $xmm0, $xmm1
2570     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2571     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2572     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2573     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2574     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s32), [[TRUNC1]]
2575     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2576     ; FAST: $al = COPY [[COPY2]](s8)
2577     ; FAST: RET 0, implicit $al
2578     ; GREEDY-LABEL: name: fcmp_float_ogt
2579     ; GREEDY: liveins: $xmm0, $xmm1
2580     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2581     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2582     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2583     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2584     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s32), [[TRUNC1]]
2585     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2586     ; GREEDY: $al = COPY [[COPY2]](s8)
2587     ; GREEDY: RET 0, implicit $al
2588     %2:_(s128) = COPY $xmm0
2589     %0:_(s32) = G_TRUNC %2(s128)
2590     %3:_(s128) = COPY $xmm1
2591     %1:_(s32) = G_TRUNC %3(s128)
2592     %6:_(s8) = G_FCMP floatpred(ogt), %0(s32), %1
2593     %5:_(s8) = COPY %6(s8)
2594     $al = COPY %5(s8)
2595     RET 0, implicit $al
2599 name:            fcmp_float_oge
2600 alignment:       16
2601 legalized:       true
2602 tracksRegLiveness: true
2603 registers:
2604   - { id: 0, class: _ }
2605   - { id: 1, class: _ }
2606   - { id: 2, class: _ }
2607   - { id: 3, class: _ }
2608   - { id: 4, class: _ }
2609   - { id: 5, class: _ }
2610   - { id: 6, class: _ }
2611 body:             |
2612   bb.1 (%ir-block.0):
2613     liveins: $xmm0, $xmm1
2615     ; FAST-LABEL: name: fcmp_float_oge
2616     ; FAST: liveins: $xmm0, $xmm1
2617     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2618     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2619     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2620     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2621     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s32), [[TRUNC1]]
2622     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2623     ; FAST: $al = COPY [[COPY2]](s8)
2624     ; FAST: RET 0, implicit $al
2625     ; GREEDY-LABEL: name: fcmp_float_oge
2626     ; GREEDY: liveins: $xmm0, $xmm1
2627     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2628     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2629     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2630     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2631     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s32), [[TRUNC1]]
2632     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2633     ; GREEDY: $al = COPY [[COPY2]](s8)
2634     ; GREEDY: RET 0, implicit $al
2635     %2:_(s128) = COPY $xmm0
2636     %0:_(s32) = G_TRUNC %2(s128)
2637     %3:_(s128) = COPY $xmm1
2638     %1:_(s32) = G_TRUNC %3(s128)
2639     %6:_(s8) = G_FCMP floatpred(oge), %0(s32), %1
2640     %5:_(s8) = COPY %6(s8)
2641     $al = COPY %5(s8)
2642     RET 0, implicit $al
2646 name:            fcmp_float_olt
2647 alignment:       16
2648 legalized:       true
2649 tracksRegLiveness: true
2650 registers:
2651   - { id: 0, class: _ }
2652   - { id: 1, class: _ }
2653   - { id: 2, class: _ }
2654   - { id: 3, class: _ }
2655   - { id: 4, class: _ }
2656   - { id: 5, class: _ }
2657   - { id: 6, class: _ }
2658 body:             |
2659   bb.1 (%ir-block.0):
2660     liveins: $xmm0, $xmm1
2662     ; FAST-LABEL: name: fcmp_float_olt
2663     ; FAST: liveins: $xmm0, $xmm1
2664     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2665     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2666     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2667     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2668     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s32), [[TRUNC1]]
2669     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2670     ; FAST: $al = COPY [[COPY2]](s8)
2671     ; FAST: RET 0, implicit $al
2672     ; GREEDY-LABEL: name: fcmp_float_olt
2673     ; GREEDY: liveins: $xmm0, $xmm1
2674     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2675     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2676     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2677     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2678     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s32), [[TRUNC1]]
2679     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2680     ; GREEDY: $al = COPY [[COPY2]](s8)
2681     ; GREEDY: RET 0, implicit $al
2682     %2:_(s128) = COPY $xmm0
2683     %0:_(s32) = G_TRUNC %2(s128)
2684     %3:_(s128) = COPY $xmm1
2685     %1:_(s32) = G_TRUNC %3(s128)
2686     %6:_(s8) = G_FCMP floatpred(olt), %0(s32), %1
2687     %5:_(s8) = COPY %6(s8)
2688     $al = COPY %5(s8)
2689     RET 0, implicit $al
2693 name:            fcmp_float_ole
2694 alignment:       16
2695 legalized:       true
2696 tracksRegLiveness: true
2697 registers:
2698   - { id: 0, class: _ }
2699   - { id: 1, class: _ }
2700   - { id: 2, class: _ }
2701   - { id: 3, class: _ }
2702   - { id: 4, class: _ }
2703   - { id: 5, class: _ }
2704   - { id: 6, class: _ }
2705 body:             |
2706   bb.1 (%ir-block.0):
2707     liveins: $xmm0, $xmm1
2709     ; FAST-LABEL: name: fcmp_float_ole
2710     ; FAST: liveins: $xmm0, $xmm1
2711     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2712     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2713     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2714     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2715     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s32), [[TRUNC1]]
2716     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2717     ; FAST: $al = COPY [[COPY2]](s8)
2718     ; FAST: RET 0, implicit $al
2719     ; GREEDY-LABEL: name: fcmp_float_ole
2720     ; GREEDY: liveins: $xmm0, $xmm1
2721     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2722     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2723     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2724     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2725     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s32), [[TRUNC1]]
2726     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2727     ; GREEDY: $al = COPY [[COPY2]](s8)
2728     ; GREEDY: RET 0, implicit $al
2729     %2:_(s128) = COPY $xmm0
2730     %0:_(s32) = G_TRUNC %2(s128)
2731     %3:_(s128) = COPY $xmm1
2732     %1:_(s32) = G_TRUNC %3(s128)
2733     %6:_(s8) = G_FCMP floatpred(ole), %0(s32), %1
2734     %5:_(s8) = COPY %6(s8)
2735     $al = COPY %5(s8)
2736     RET 0, implicit $al
2740 name:            fcmp_float_one
2741 alignment:       16
2742 legalized:       true
2743 tracksRegLiveness: true
2744 registers:
2745   - { id: 0, class: _ }
2746   - { id: 1, class: _ }
2747   - { id: 2, class: _ }
2748   - { id: 3, class: _ }
2749   - { id: 4, class: _ }
2750   - { id: 5, class: _ }
2751   - { id: 6, class: _ }
2752 body:             |
2753   bb.1 (%ir-block.0):
2754     liveins: $xmm0, $xmm1
2756     ; FAST-LABEL: name: fcmp_float_one
2757     ; FAST: liveins: $xmm0, $xmm1
2758     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2759     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2760     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2761     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2762     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s32), [[TRUNC1]]
2763     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2764     ; FAST: $al = COPY [[COPY2]](s8)
2765     ; FAST: RET 0, implicit $al
2766     ; GREEDY-LABEL: name: fcmp_float_one
2767     ; GREEDY: liveins: $xmm0, $xmm1
2768     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2769     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2770     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2771     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2772     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s32), [[TRUNC1]]
2773     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2774     ; GREEDY: $al = COPY [[COPY2]](s8)
2775     ; GREEDY: RET 0, implicit $al
2776     %2:_(s128) = COPY $xmm0
2777     %0:_(s32) = G_TRUNC %2(s128)
2778     %3:_(s128) = COPY $xmm1
2779     %1:_(s32) = G_TRUNC %3(s128)
2780     %6:_(s8) = G_FCMP floatpred(one), %0(s32), %1
2781     %5:_(s8) = COPY %6(s8)
2782     $al = COPY %5(s8)
2783     RET 0, implicit $al
2787 name:            fcmp_float_ord
2788 alignment:       16
2789 legalized:       true
2790 tracksRegLiveness: true
2791 registers:
2792   - { id: 0, class: _ }
2793   - { id: 1, class: _ }
2794   - { id: 2, class: _ }
2795   - { id: 3, class: _ }
2796   - { id: 4, class: _ }
2797   - { id: 5, class: _ }
2798   - { id: 6, class: _ }
2799 body:             |
2800   bb.1 (%ir-block.0):
2801     liveins: $xmm0, $xmm1
2803     ; FAST-LABEL: name: fcmp_float_ord
2804     ; FAST: liveins: $xmm0, $xmm1
2805     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2806     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2807     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2808     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2809     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s32), [[TRUNC1]]
2810     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2811     ; FAST: $al = COPY [[COPY2]](s8)
2812     ; FAST: RET 0, implicit $al
2813     ; GREEDY-LABEL: name: fcmp_float_ord
2814     ; GREEDY: liveins: $xmm0, $xmm1
2815     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2816     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2817     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2818     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2819     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s32), [[TRUNC1]]
2820     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2821     ; GREEDY: $al = COPY [[COPY2]](s8)
2822     ; GREEDY: RET 0, implicit $al
2823     %2:_(s128) = COPY $xmm0
2824     %0:_(s32) = G_TRUNC %2(s128)
2825     %3:_(s128) = COPY $xmm1
2826     %1:_(s32) = G_TRUNC %3(s128)
2827     %6:_(s8) = G_FCMP floatpred(ord), %0(s32), %1
2828     %5:_(s8) = COPY %6(s8)
2829     $al = COPY %5(s8)
2830     RET 0, implicit $al
2834 name:            fcmp_float_uno
2835 alignment:       16
2836 legalized:       true
2837 tracksRegLiveness: true
2838 registers:
2839   - { id: 0, class: _ }
2840   - { id: 1, class: _ }
2841   - { id: 2, class: _ }
2842   - { id: 3, class: _ }
2843   - { id: 4, class: _ }
2844   - { id: 5, class: _ }
2845   - { id: 6, class: _ }
2846 body:             |
2847   bb.1 (%ir-block.0):
2848     liveins: $xmm0, $xmm1
2850     ; FAST-LABEL: name: fcmp_float_uno
2851     ; FAST: liveins: $xmm0, $xmm1
2852     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2853     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2854     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2855     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2856     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s32), [[TRUNC1]]
2857     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2858     ; FAST: $al = COPY [[COPY2]](s8)
2859     ; FAST: RET 0, implicit $al
2860     ; GREEDY-LABEL: name: fcmp_float_uno
2861     ; GREEDY: liveins: $xmm0, $xmm1
2862     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2863     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2864     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2865     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2866     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s32), [[TRUNC1]]
2867     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2868     ; GREEDY: $al = COPY [[COPY2]](s8)
2869     ; GREEDY: RET 0, implicit $al
2870     %2:_(s128) = COPY $xmm0
2871     %0:_(s32) = G_TRUNC %2(s128)
2872     %3:_(s128) = COPY $xmm1
2873     %1:_(s32) = G_TRUNC %3(s128)
2874     %6:_(s8) = G_FCMP floatpred(uno), %0(s32), %1
2875     %5:_(s8) = COPY %6(s8)
2876     $al = COPY %5(s8)
2877     RET 0, implicit $al
2881 name:            fcmp_float_ueq
2882 alignment:       16
2883 legalized:       true
2884 tracksRegLiveness: true
2885 registers:
2886   - { id: 0, class: _ }
2887   - { id: 1, class: _ }
2888   - { id: 2, class: _ }
2889   - { id: 3, class: _ }
2890   - { id: 4, class: _ }
2891   - { id: 5, class: _ }
2892   - { id: 6, class: _ }
2893 body:             |
2894   bb.1 (%ir-block.0):
2895     liveins: $xmm0, $xmm1
2897     ; FAST-LABEL: name: fcmp_float_ueq
2898     ; FAST: liveins: $xmm0, $xmm1
2899     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2900     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2901     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2902     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2903     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s32), [[TRUNC1]]
2904     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2905     ; FAST: $al = COPY [[COPY2]](s8)
2906     ; FAST: RET 0, implicit $al
2907     ; GREEDY-LABEL: name: fcmp_float_ueq
2908     ; GREEDY: liveins: $xmm0, $xmm1
2909     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2910     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2911     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2912     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2913     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s32), [[TRUNC1]]
2914     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2915     ; GREEDY: $al = COPY [[COPY2]](s8)
2916     ; GREEDY: RET 0, implicit $al
2917     %2:_(s128) = COPY $xmm0
2918     %0:_(s32) = G_TRUNC %2(s128)
2919     %3:_(s128) = COPY $xmm1
2920     %1:_(s32) = G_TRUNC %3(s128)
2921     %6:_(s8) = G_FCMP floatpred(ueq), %0(s32), %1
2922     %5:_(s8) = COPY %6(s8)
2923     $al = COPY %5(s8)
2924     RET 0, implicit $al
2928 name:            fcmp_float_ugt
2929 alignment:       16
2930 legalized:       true
2931 tracksRegLiveness: true
2932 registers:
2933   - { id: 0, class: _ }
2934   - { id: 1, class: _ }
2935   - { id: 2, class: _ }
2936   - { id: 3, class: _ }
2937   - { id: 4, class: _ }
2938   - { id: 5, class: _ }
2939   - { id: 6, class: _ }
2940 body:             |
2941   bb.1 (%ir-block.0):
2942     liveins: $xmm0, $xmm1
2944     ; FAST-LABEL: name: fcmp_float_ugt
2945     ; FAST: liveins: $xmm0, $xmm1
2946     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2947     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2948     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2949     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2950     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s32), [[TRUNC1]]
2951     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2952     ; FAST: $al = COPY [[COPY2]](s8)
2953     ; FAST: RET 0, implicit $al
2954     ; GREEDY-LABEL: name: fcmp_float_ugt
2955     ; GREEDY: liveins: $xmm0, $xmm1
2956     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2957     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2958     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2959     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2960     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s32), [[TRUNC1]]
2961     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2962     ; GREEDY: $al = COPY [[COPY2]](s8)
2963     ; GREEDY: RET 0, implicit $al
2964     %2:_(s128) = COPY $xmm0
2965     %0:_(s32) = G_TRUNC %2(s128)
2966     %3:_(s128) = COPY $xmm1
2967     %1:_(s32) = G_TRUNC %3(s128)
2968     %6:_(s8) = G_FCMP floatpred(ugt), %0(s32), %1
2969     %5:_(s8) = COPY %6(s8)
2970     $al = COPY %5(s8)
2971     RET 0, implicit $al
2975 name:            fcmp_float_uge
2976 alignment:       16
2977 legalized:       true
2978 tracksRegLiveness: true
2979 registers:
2980   - { id: 0, class: _ }
2981   - { id: 1, class: _ }
2982   - { id: 2, class: _ }
2983   - { id: 3, class: _ }
2984   - { id: 4, class: _ }
2985   - { id: 5, class: _ }
2986   - { id: 6, class: _ }
2987 body:             |
2988   bb.1 (%ir-block.0):
2989     liveins: $xmm0, $xmm1
2991     ; FAST-LABEL: name: fcmp_float_uge
2992     ; FAST: liveins: $xmm0, $xmm1
2993     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2994     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2995     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2996     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2997     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s32), [[TRUNC1]]
2998     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2999     ; FAST: $al = COPY [[COPY2]](s8)
3000     ; FAST: RET 0, implicit $al
3001     ; GREEDY-LABEL: name: fcmp_float_uge
3002     ; GREEDY: liveins: $xmm0, $xmm1
3003     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3004     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3005     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3006     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3007     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s32), [[TRUNC1]]
3008     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3009     ; GREEDY: $al = COPY [[COPY2]](s8)
3010     ; GREEDY: RET 0, implicit $al
3011     %2:_(s128) = COPY $xmm0
3012     %0:_(s32) = G_TRUNC %2(s128)
3013     %3:_(s128) = COPY $xmm1
3014     %1:_(s32) = G_TRUNC %3(s128)
3015     %6:_(s8) = G_FCMP floatpred(uge), %0(s32), %1
3016     %5:_(s8) = COPY %6(s8)
3017     $al = COPY %5(s8)
3018     RET 0, implicit $al
3022 name:            fcmp_float_ult
3023 alignment:       16
3024 legalized:       true
3025 tracksRegLiveness: true
3026 registers:
3027   - { id: 0, class: _ }
3028   - { id: 1, class: _ }
3029   - { id: 2, class: _ }
3030   - { id: 3, class: _ }
3031   - { id: 4, class: _ }
3032   - { id: 5, class: _ }
3033   - { id: 6, class: _ }
3034 body:             |
3035   bb.1 (%ir-block.0):
3036     liveins: $xmm0, $xmm1
3038     ; FAST-LABEL: name: fcmp_float_ult
3039     ; FAST: liveins: $xmm0, $xmm1
3040     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3041     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3042     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3043     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3044     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s32), [[TRUNC1]]
3045     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3046     ; FAST: $al = COPY [[COPY2]](s8)
3047     ; FAST: RET 0, implicit $al
3048     ; GREEDY-LABEL: name: fcmp_float_ult
3049     ; GREEDY: liveins: $xmm0, $xmm1
3050     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3051     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3052     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3053     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3054     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s32), [[TRUNC1]]
3055     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3056     ; GREEDY: $al = COPY [[COPY2]](s8)
3057     ; GREEDY: RET 0, implicit $al
3058     %2:_(s128) = COPY $xmm0
3059     %0:_(s32) = G_TRUNC %2(s128)
3060     %3:_(s128) = COPY $xmm1
3061     %1:_(s32) = G_TRUNC %3(s128)
3062     %6:_(s8) = G_FCMP floatpred(ult), %0(s32), %1
3063     %5:_(s8) = COPY %6(s8)
3064     $al = COPY %5(s8)
3065     RET 0, implicit $al
3069 name:            fcmp_float_ule
3070 alignment:       16
3071 legalized:       true
3072 tracksRegLiveness: true
3073 registers:
3074   - { id: 0, class: _ }
3075   - { id: 1, class: _ }
3076   - { id: 2, class: _ }
3077   - { id: 3, class: _ }
3078   - { id: 4, class: _ }
3079   - { id: 5, class: _ }
3080   - { id: 6, class: _ }
3081 body:             |
3082   bb.1 (%ir-block.0):
3083     liveins: $xmm0, $xmm1
3085     ; FAST-LABEL: name: fcmp_float_ule
3086     ; FAST: liveins: $xmm0, $xmm1
3087     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3088     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3089     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3090     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3091     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s32), [[TRUNC1]]
3092     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3093     ; FAST: $al = COPY [[COPY2]](s8)
3094     ; FAST: RET 0, implicit $al
3095     ; GREEDY-LABEL: name: fcmp_float_ule
3096     ; GREEDY: liveins: $xmm0, $xmm1
3097     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3098     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3099     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3100     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3101     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s32), [[TRUNC1]]
3102     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3103     ; GREEDY: $al = COPY [[COPY2]](s8)
3104     ; GREEDY: RET 0, implicit $al
3105     %2:_(s128) = COPY $xmm0
3106     %0:_(s32) = G_TRUNC %2(s128)
3107     %3:_(s128) = COPY $xmm1
3108     %1:_(s32) = G_TRUNC %3(s128)
3109     %6:_(s8) = G_FCMP floatpred(ule), %0(s32), %1
3110     %5:_(s8) = COPY %6(s8)
3111     $al = COPY %5(s8)
3112     RET 0, implicit $al
3116 name:            fcmp_float_une
3117 alignment:       16
3118 legalized:       true
3119 tracksRegLiveness: true
3120 registers:
3121   - { id: 0, class: _ }
3122   - { id: 1, class: _ }
3123   - { id: 2, class: _ }
3124   - { id: 3, class: _ }
3125   - { id: 4, class: _ }
3126   - { id: 5, class: _ }
3127   - { id: 6, class: _ }
3128 body:             |
3129   bb.1 (%ir-block.0):
3130     liveins: $xmm0, $xmm1
3132     ; FAST-LABEL: name: fcmp_float_une
3133     ; FAST: liveins: $xmm0, $xmm1
3134     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3135     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3136     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3137     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3138     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s32), [[TRUNC1]]
3139     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3140     ; FAST: $al = COPY [[COPY2]](s8)
3141     ; FAST: RET 0, implicit $al
3142     ; GREEDY-LABEL: name: fcmp_float_une
3143     ; GREEDY: liveins: $xmm0, $xmm1
3144     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3145     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3146     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3147     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3148     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s32), [[TRUNC1]]
3149     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3150     ; GREEDY: $al = COPY [[COPY2]](s8)
3151     ; GREEDY: RET 0, implicit $al
3152     %2:_(s128) = COPY $xmm0
3153     %0:_(s32) = G_TRUNC %2(s128)
3154     %3:_(s128) = COPY $xmm1
3155     %1:_(s32) = G_TRUNC %3(s128)
3156     %6:_(s8) = G_FCMP floatpred(une), %0(s32), %1
3157     %5:_(s8) = COPY %6(s8)
3158     $al = COPY %5(s8)
3159     RET 0, implicit $al
3163 name:            fcmp_double_oeq
3164 alignment:       16
3165 legalized:       true
3166 tracksRegLiveness: true
3167 registers:
3168   - { id: 0, class: _ }
3169   - { id: 1, class: _ }
3170   - { id: 2, class: _ }
3171   - { id: 3, class: _ }
3172   - { id: 4, class: _ }
3173   - { id: 5, class: _ }
3174   - { id: 6, class: _ }
3175 body:             |
3176   bb.1 (%ir-block.0):
3177     liveins: $xmm0, $xmm1
3179     ; FAST-LABEL: name: fcmp_double_oeq
3180     ; FAST: liveins: $xmm0, $xmm1
3181     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3182     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3183     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3184     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3185     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s64), [[TRUNC1]]
3186     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3187     ; FAST: $al = COPY [[COPY2]](s8)
3188     ; FAST: RET 0, implicit $al
3189     ; GREEDY-LABEL: name: fcmp_double_oeq
3190     ; GREEDY: liveins: $xmm0, $xmm1
3191     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3192     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3193     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3194     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3195     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s64), [[TRUNC1]]
3196     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3197     ; GREEDY: $al = COPY [[COPY2]](s8)
3198     ; GREEDY: RET 0, implicit $al
3199     %2:_(s128) = COPY $xmm0
3200     %0:_(s64) = G_TRUNC %2(s128)
3201     %3:_(s128) = COPY $xmm1
3202     %1:_(s64) = G_TRUNC %3(s128)
3203     %6:_(s8) = G_FCMP floatpred(oeq), %0(s64), %1
3204     %5:_(s8) = COPY %6(s8)
3205     $al = COPY %5(s8)
3206     RET 0, implicit $al
3210 name:            fcmp_double_ogt
3211 alignment:       16
3212 legalized:       true
3213 tracksRegLiveness: true
3214 registers:
3215   - { id: 0, class: _ }
3216   - { id: 1, class: _ }
3217   - { id: 2, class: _ }
3218   - { id: 3, class: _ }
3219   - { id: 4, class: _ }
3220   - { id: 5, class: _ }
3221   - { id: 6, class: _ }
3222 body:             |
3223   bb.1 (%ir-block.0):
3224     liveins: $xmm0, $xmm1
3226     ; FAST-LABEL: name: fcmp_double_ogt
3227     ; FAST: liveins: $xmm0, $xmm1
3228     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3229     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3230     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3231     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3232     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s64), [[TRUNC1]]
3233     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3234     ; FAST: $al = COPY [[COPY2]](s8)
3235     ; FAST: RET 0, implicit $al
3236     ; GREEDY-LABEL: name: fcmp_double_ogt
3237     ; GREEDY: liveins: $xmm0, $xmm1
3238     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3239     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3240     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3241     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3242     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s64), [[TRUNC1]]
3243     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3244     ; GREEDY: $al = COPY [[COPY2]](s8)
3245     ; GREEDY: RET 0, implicit $al
3246     %2:_(s128) = COPY $xmm0
3247     %0:_(s64) = G_TRUNC %2(s128)
3248     %3:_(s128) = COPY $xmm1
3249     %1:_(s64) = G_TRUNC %3(s128)
3250     %6:_(s8) = G_FCMP floatpred(ogt), %0(s64), %1
3251     %5:_(s8) = COPY %6(s8)
3252     $al = COPY %5(s8)
3253     RET 0, implicit $al
3257 name:            fcmp_double_oge
3258 alignment:       16
3259 legalized:       true
3260 tracksRegLiveness: true
3261 registers:
3262   - { id: 0, class: _ }
3263   - { id: 1, class: _ }
3264   - { id: 2, class: _ }
3265   - { id: 3, class: _ }
3266   - { id: 4, class: _ }
3267   - { id: 5, class: _ }
3268   - { id: 6, class: _ }
3269 body:             |
3270   bb.1 (%ir-block.0):
3271     liveins: $xmm0, $xmm1
3273     ; FAST-LABEL: name: fcmp_double_oge
3274     ; FAST: liveins: $xmm0, $xmm1
3275     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3276     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3277     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3278     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3279     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s64), [[TRUNC1]]
3280     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3281     ; FAST: $al = COPY [[COPY2]](s8)
3282     ; FAST: RET 0, implicit $al
3283     ; GREEDY-LABEL: name: fcmp_double_oge
3284     ; GREEDY: liveins: $xmm0, $xmm1
3285     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3286     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3287     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3288     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3289     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s64), [[TRUNC1]]
3290     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3291     ; GREEDY: $al = COPY [[COPY2]](s8)
3292     ; GREEDY: RET 0, implicit $al
3293     %2:_(s128) = COPY $xmm0
3294     %0:_(s64) = G_TRUNC %2(s128)
3295     %3:_(s128) = COPY $xmm1
3296     %1:_(s64) = G_TRUNC %3(s128)
3297     %6:_(s8) = G_FCMP floatpred(oge), %0(s64), %1
3298     %5:_(s8) = COPY %6(s8)
3299     $al = COPY %5(s8)
3300     RET 0, implicit $al
3304 name:            fcmp_double_olt
3305 alignment:       16
3306 legalized:       true
3307 tracksRegLiveness: true
3308 registers:
3309   - { id: 0, class: _ }
3310   - { id: 1, class: _ }
3311   - { id: 2, class: _ }
3312   - { id: 3, class: _ }
3313   - { id: 4, class: _ }
3314   - { id: 5, class: _ }
3315   - { id: 6, class: _ }
3316 body:             |
3317   bb.1 (%ir-block.0):
3318     liveins: $xmm0, $xmm1
3320     ; FAST-LABEL: name: fcmp_double_olt
3321     ; FAST: liveins: $xmm0, $xmm1
3322     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3323     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3324     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3325     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3326     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s64), [[TRUNC1]]
3327     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3328     ; FAST: $al = COPY [[COPY2]](s8)
3329     ; FAST: RET 0, implicit $al
3330     ; GREEDY-LABEL: name: fcmp_double_olt
3331     ; GREEDY: liveins: $xmm0, $xmm1
3332     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3333     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3334     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3335     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3336     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s64), [[TRUNC1]]
3337     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3338     ; GREEDY: $al = COPY [[COPY2]](s8)
3339     ; GREEDY: RET 0, implicit $al
3340     %2:_(s128) = COPY $xmm0
3341     %0:_(s64) = G_TRUNC %2(s128)
3342     %3:_(s128) = COPY $xmm1
3343     %1:_(s64) = G_TRUNC %3(s128)
3344     %6:_(s8) = G_FCMP floatpred(olt), %0(s64), %1
3345     %5:_(s8) = COPY %6(s8)
3346     $al = COPY %5(s8)
3347     RET 0, implicit $al
3351 name:            fcmp_double_ole
3352 alignment:       16
3353 legalized:       true
3354 tracksRegLiveness: true
3355 registers:
3356   - { id: 0, class: _ }
3357   - { id: 1, class: _ }
3358   - { id: 2, class: _ }
3359   - { id: 3, class: _ }
3360   - { id: 4, class: _ }
3361   - { id: 5, class: _ }
3362   - { id: 6, class: _ }
3363 body:             |
3364   bb.1 (%ir-block.0):
3365     liveins: $xmm0, $xmm1
3367     ; FAST-LABEL: name: fcmp_double_ole
3368     ; FAST: liveins: $xmm0, $xmm1
3369     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3370     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3371     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3372     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3373     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s64), [[TRUNC1]]
3374     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3375     ; FAST: $al = COPY [[COPY2]](s8)
3376     ; FAST: RET 0, implicit $al
3377     ; GREEDY-LABEL: name: fcmp_double_ole
3378     ; GREEDY: liveins: $xmm0, $xmm1
3379     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3380     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3381     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3382     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3383     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s64), [[TRUNC1]]
3384     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3385     ; GREEDY: $al = COPY [[COPY2]](s8)
3386     ; GREEDY: RET 0, implicit $al
3387     %2:_(s128) = COPY $xmm0
3388     %0:_(s64) = G_TRUNC %2(s128)
3389     %3:_(s128) = COPY $xmm1
3390     %1:_(s64) = G_TRUNC %3(s128)
3391     %6:_(s8) = G_FCMP floatpred(ole), %0(s64), %1
3392     %5:_(s8) = COPY %6(s8)
3393     $al = COPY %5(s8)
3394     RET 0, implicit $al
3398 name:            fcmp_double_one
3399 alignment:       16
3400 legalized:       true
3401 tracksRegLiveness: true
3402 registers:
3403   - { id: 0, class: _ }
3404   - { id: 1, class: _ }
3405   - { id: 2, class: _ }
3406   - { id: 3, class: _ }
3407   - { id: 4, class: _ }
3408   - { id: 5, class: _ }
3409   - { id: 6, class: _ }
3410 body:             |
3411   bb.1 (%ir-block.0):
3412     liveins: $xmm0, $xmm1
3414     ; FAST-LABEL: name: fcmp_double_one
3415     ; FAST: liveins: $xmm0, $xmm1
3416     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3417     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3418     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3419     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3420     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s64), [[TRUNC1]]
3421     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3422     ; FAST: $al = COPY [[COPY2]](s8)
3423     ; FAST: RET 0, implicit $al
3424     ; GREEDY-LABEL: name: fcmp_double_one
3425     ; GREEDY: liveins: $xmm0, $xmm1
3426     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3427     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3428     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3429     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3430     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s64), [[TRUNC1]]
3431     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3432     ; GREEDY: $al = COPY [[COPY2]](s8)
3433     ; GREEDY: RET 0, implicit $al
3434     %2:_(s128) = COPY $xmm0
3435     %0:_(s64) = G_TRUNC %2(s128)
3436     %3:_(s128) = COPY $xmm1
3437     %1:_(s64) = G_TRUNC %3(s128)
3438     %6:_(s8) = G_FCMP floatpred(one), %0(s64), %1
3439     %5:_(s8) = COPY %6(s8)
3440     $al = COPY %5(s8)
3441     RET 0, implicit $al
3445 name:            fcmp_double_ord
3446 alignment:       16
3447 legalized:       true
3448 tracksRegLiveness: true
3449 registers:
3450   - { id: 0, class: _ }
3451   - { id: 1, class: _ }
3452   - { id: 2, class: _ }
3453   - { id: 3, class: _ }
3454   - { id: 4, class: _ }
3455   - { id: 5, class: _ }
3456   - { id: 6, class: _ }
3457 body:             |
3458   bb.1 (%ir-block.0):
3459     liveins: $xmm0, $xmm1
3461     ; FAST-LABEL: name: fcmp_double_ord
3462     ; FAST: liveins: $xmm0, $xmm1
3463     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3464     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3465     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3466     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3467     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s64), [[TRUNC1]]
3468     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3469     ; FAST: $al = COPY [[COPY2]](s8)
3470     ; FAST: RET 0, implicit $al
3471     ; GREEDY-LABEL: name: fcmp_double_ord
3472     ; GREEDY: liveins: $xmm0, $xmm1
3473     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3474     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3475     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3476     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3477     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s64), [[TRUNC1]]
3478     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3479     ; GREEDY: $al = COPY [[COPY2]](s8)
3480     ; GREEDY: RET 0, implicit $al
3481     %2:_(s128) = COPY $xmm0
3482     %0:_(s64) = G_TRUNC %2(s128)
3483     %3:_(s128) = COPY $xmm1
3484     %1:_(s64) = G_TRUNC %3(s128)
3485     %6:_(s8) = G_FCMP floatpred(ord), %0(s64), %1
3486     %5:_(s8) = COPY %6(s8)
3487     $al = COPY %5(s8)
3488     RET 0, implicit $al
3492 name:            fcmp_double_uno
3493 alignment:       16
3494 legalized:       true
3495 tracksRegLiveness: true
3496 registers:
3497   - { id: 0, class: _ }
3498   - { id: 1, class: _ }
3499   - { id: 2, class: _ }
3500   - { id: 3, class: _ }
3501   - { id: 4, class: _ }
3502   - { id: 5, class: _ }
3503   - { id: 6, class: _ }
3504 body:             |
3505   bb.1 (%ir-block.0):
3506     liveins: $xmm0, $xmm1
3508     ; FAST-LABEL: name: fcmp_double_uno
3509     ; FAST: liveins: $xmm0, $xmm1
3510     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3511     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3512     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3513     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3514     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s64), [[TRUNC1]]
3515     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3516     ; FAST: $al = COPY [[COPY2]](s8)
3517     ; FAST: RET 0, implicit $al
3518     ; GREEDY-LABEL: name: fcmp_double_uno
3519     ; GREEDY: liveins: $xmm0, $xmm1
3520     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3521     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3522     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3523     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3524     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s64), [[TRUNC1]]
3525     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3526     ; GREEDY: $al = COPY [[COPY2]](s8)
3527     ; GREEDY: RET 0, implicit $al
3528     %2:_(s128) = COPY $xmm0
3529     %0:_(s64) = G_TRUNC %2(s128)
3530     %3:_(s128) = COPY $xmm1
3531     %1:_(s64) = G_TRUNC %3(s128)
3532     %6:_(s8) = G_FCMP floatpred(uno), %0(s64), %1
3533     %5:_(s8) = COPY %6(s8)
3534     $al = COPY %5(s8)
3535     RET 0, implicit $al
3539 name:            fcmp_double_ueq
3540 alignment:       16
3541 legalized:       true
3542 tracksRegLiveness: true
3543 registers:
3544   - { id: 0, class: _ }
3545   - { id: 1, class: _ }
3546   - { id: 2, class: _ }
3547   - { id: 3, class: _ }
3548   - { id: 4, class: _ }
3549   - { id: 5, class: _ }
3550   - { id: 6, class: _ }
3551 body:             |
3552   bb.1 (%ir-block.0):
3553     liveins: $xmm0, $xmm1
3555     ; FAST-LABEL: name: fcmp_double_ueq
3556     ; FAST: liveins: $xmm0, $xmm1
3557     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3558     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3559     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3560     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3561     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s64), [[TRUNC1]]
3562     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3563     ; FAST: $al = COPY [[COPY2]](s8)
3564     ; FAST: RET 0, implicit $al
3565     ; GREEDY-LABEL: name: fcmp_double_ueq
3566     ; GREEDY: liveins: $xmm0, $xmm1
3567     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3568     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3569     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3570     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3571     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s64), [[TRUNC1]]
3572     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3573     ; GREEDY: $al = COPY [[COPY2]](s8)
3574     ; GREEDY: RET 0, implicit $al
3575     %2:_(s128) = COPY $xmm0
3576     %0:_(s64) = G_TRUNC %2(s128)
3577     %3:_(s128) = COPY $xmm1
3578     %1:_(s64) = G_TRUNC %3(s128)
3579     %6:_(s8) = G_FCMP floatpred(ueq), %0(s64), %1
3580     %5:_(s8) = COPY %6(s8)
3581     $al = COPY %5(s8)
3582     RET 0, implicit $al
3586 name:            fcmp_double_ugt
3587 alignment:       16
3588 legalized:       true
3589 tracksRegLiveness: true
3590 registers:
3591   - { id: 0, class: _ }
3592   - { id: 1, class: _ }
3593   - { id: 2, class: _ }
3594   - { id: 3, class: _ }
3595   - { id: 4, class: _ }
3596   - { id: 5, class: _ }
3597   - { id: 6, class: _ }
3598 body:             |
3599   bb.1 (%ir-block.0):
3600     liveins: $xmm0, $xmm1
3602     ; FAST-LABEL: name: fcmp_double_ugt
3603     ; FAST: liveins: $xmm0, $xmm1
3604     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3605     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3606     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3607     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3608     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s64), [[TRUNC1]]
3609     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3610     ; FAST: $al = COPY [[COPY2]](s8)
3611     ; FAST: RET 0, implicit $al
3612     ; GREEDY-LABEL: name: fcmp_double_ugt
3613     ; GREEDY: liveins: $xmm0, $xmm1
3614     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3615     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3616     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3617     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3618     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s64), [[TRUNC1]]
3619     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3620     ; GREEDY: $al = COPY [[COPY2]](s8)
3621     ; GREEDY: RET 0, implicit $al
3622     %2:_(s128) = COPY $xmm0
3623     %0:_(s64) = G_TRUNC %2(s128)
3624     %3:_(s128) = COPY $xmm1
3625     %1:_(s64) = G_TRUNC %3(s128)
3626     %6:_(s8) = G_FCMP floatpred(ugt), %0(s64), %1
3627     %5:_(s8) = COPY %6(s8)
3628     $al = COPY %5(s8)
3629     RET 0, implicit $al
3633 name:            fcmp_double_uge
3634 alignment:       16
3635 legalized:       true
3636 tracksRegLiveness: true
3637 registers:
3638   - { id: 0, class: _ }
3639   - { id: 1, class: _ }
3640   - { id: 2, class: _ }
3641   - { id: 3, class: _ }
3642   - { id: 4, class: _ }
3643   - { id: 5, class: _ }
3644   - { id: 6, class: _ }
3645 body:             |
3646   bb.1 (%ir-block.0):
3647     liveins: $xmm0, $xmm1
3649     ; FAST-LABEL: name: fcmp_double_uge
3650     ; FAST: liveins: $xmm0, $xmm1
3651     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3652     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3653     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3654     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3655     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s64), [[TRUNC1]]
3656     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3657     ; FAST: $al = COPY [[COPY2]](s8)
3658     ; FAST: RET 0, implicit $al
3659     ; GREEDY-LABEL: name: fcmp_double_uge
3660     ; GREEDY: liveins: $xmm0, $xmm1
3661     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3662     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3663     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3664     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3665     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s64), [[TRUNC1]]
3666     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3667     ; GREEDY: $al = COPY [[COPY2]](s8)
3668     ; GREEDY: RET 0, implicit $al
3669     %2:_(s128) = COPY $xmm0
3670     %0:_(s64) = G_TRUNC %2(s128)
3671     %3:_(s128) = COPY $xmm1
3672     %1:_(s64) = G_TRUNC %3(s128)
3673     %6:_(s8) = G_FCMP floatpred(uge), %0(s64), %1
3674     %5:_(s8) = COPY %6(s8)
3675     $al = COPY %5(s8)
3676     RET 0, implicit $al
3680 name:            fcmp_double_ult
3681 alignment:       16
3682 legalized:       true
3683 tracksRegLiveness: true
3684 registers:
3685   - { id: 0, class: _ }
3686   - { id: 1, class: _ }
3687   - { id: 2, class: _ }
3688   - { id: 3, class: _ }
3689   - { id: 4, class: _ }
3690   - { id: 5, class: _ }
3691   - { id: 6, class: _ }
3692 body:             |
3693   bb.1 (%ir-block.0):
3694     liveins: $xmm0, $xmm1
3696     ; FAST-LABEL: name: fcmp_double_ult
3697     ; FAST: liveins: $xmm0, $xmm1
3698     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3699     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3700     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3701     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3702     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s64), [[TRUNC1]]
3703     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3704     ; FAST: $al = COPY [[COPY2]](s8)
3705     ; FAST: RET 0, implicit $al
3706     ; GREEDY-LABEL: name: fcmp_double_ult
3707     ; GREEDY: liveins: $xmm0, $xmm1
3708     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3709     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3710     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3711     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3712     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s64), [[TRUNC1]]
3713     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3714     ; GREEDY: $al = COPY [[COPY2]](s8)
3715     ; GREEDY: RET 0, implicit $al
3716     %2:_(s128) = COPY $xmm0
3717     %0:_(s64) = G_TRUNC %2(s128)
3718     %3:_(s128) = COPY $xmm1
3719     %1:_(s64) = G_TRUNC %3(s128)
3720     %6:_(s8) = G_FCMP floatpred(ult), %0(s64), %1
3721     %5:_(s8) = COPY %6(s8)
3722     $al = COPY %5(s8)
3723     RET 0, implicit $al
3727 name:            fcmp_double_ule
3728 alignment:       16
3729 legalized:       true
3730 tracksRegLiveness: true
3731 registers:
3732   - { id: 0, class: _ }
3733   - { id: 1, class: _ }
3734   - { id: 2, class: _ }
3735   - { id: 3, class: _ }
3736   - { id: 4, class: _ }
3737   - { id: 5, class: _ }
3738   - { id: 6, class: _ }
3739 body:             |
3740   bb.1 (%ir-block.0):
3741     liveins: $xmm0, $xmm1
3743     ; FAST-LABEL: name: fcmp_double_ule
3744     ; FAST: liveins: $xmm0, $xmm1
3745     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3746     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3747     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3748     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3749     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s64), [[TRUNC1]]
3750     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3751     ; FAST: $al = COPY [[COPY2]](s8)
3752     ; FAST: RET 0, implicit $al
3753     ; GREEDY-LABEL: name: fcmp_double_ule
3754     ; GREEDY: liveins: $xmm0, $xmm1
3755     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3756     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3757     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3758     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3759     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s64), [[TRUNC1]]
3760     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3761     ; GREEDY: $al = COPY [[COPY2]](s8)
3762     ; GREEDY: RET 0, implicit $al
3763     %2:_(s128) = COPY $xmm0
3764     %0:_(s64) = G_TRUNC %2(s128)
3765     %3:_(s128) = COPY $xmm1
3766     %1:_(s64) = G_TRUNC %3(s128)
3767     %6:_(s8) = G_FCMP floatpred(ule), %0(s64), %1
3768     %5:_(s8) = COPY %6(s8)
3769     $al = COPY %5(s8)
3770     RET 0, implicit $al
3774 name:            fcmp_double_une
3775 alignment:       16
3776 legalized:       true
3777 tracksRegLiveness: true
3778 registers:
3779   - { id: 0, class: _ }
3780   - { id: 1, class: _ }
3781   - { id: 2, class: _ }
3782   - { id: 3, class: _ }
3783   - { id: 4, class: _ }
3784   - { id: 5, class: _ }
3785   - { id: 6, class: _ }
3786 body:             |
3787   bb.1 (%ir-block.0):
3788     liveins: $xmm0, $xmm1
3790     ; FAST-LABEL: name: fcmp_double_une
3791     ; FAST: liveins: $xmm0, $xmm1
3792     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3793     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3794     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3795     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3796     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s64), [[TRUNC1]]
3797     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3798     ; FAST: $al = COPY [[COPY2]](s8)
3799     ; FAST: RET 0, implicit $al
3800     ; GREEDY-LABEL: name: fcmp_double_une
3801     ; GREEDY: liveins: $xmm0, $xmm1
3802     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3803     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3804     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3805     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3806     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s64), [[TRUNC1]]
3807     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3808     ; GREEDY: $al = COPY [[COPY2]](s8)
3809     ; GREEDY: RET 0, implicit $al
3810     %2:_(s128) = COPY $xmm0
3811     %0:_(s64) = G_TRUNC %2(s128)
3812     %3:_(s128) = COPY $xmm1
3813     %1:_(s64) = G_TRUNC %3(s128)
3814     %6:_(s8) = G_FCMP floatpred(une), %0(s64), %1
3815     %5:_(s8) = COPY %6(s8)
3816     $al = COPY %5(s8)
3817     RET 0, implicit $al