[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / X86 / GlobalISel / regbankselect-X86_64.mir
blob9cf6845b3a0ffec1543c32d7e7de1ad63bf48cc3
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=CHECK --check-prefix=FAST
3 # RUN: llc -mtriple=x86_64-linux-gnu -regbankselect-greedy -run-pass=regbankselect %s -o - | FileCheck %s --check-prefix=CHECK --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(i8* %p1) {
70     %r = load i8, i8* %p1
71     ret i8 %r
72   }
74   define i16 @test_load_i16(i16* %p1) {
75     %r = load i16, i16* %p1
76     ret i16 %r
77   }
79   define i32 @test_load_i32(i32* %p1) {
80     %r = load i32, i32* %p1
81     ret i32 %r
82   }
84   define i64 @test_load_i64(i64* %p1) {
85     %r = load i64, i64* %p1
86     ret i64 %r
87   }
89   define float @test_load_float(float* %p1) {
90     %r = load float, float* %p1
91     ret float %r
92   }
94   define double @test_load_double(double* %p1) {
95     %r = load double, double* %p1
96     ret double %r
97   }
99   define <4 x i32> @test_load_v4i32(<4 x i32>* %p1) {
100     %r = load <4 x i32>, <4 x i32>* %p1, align 16
101     ret <4 x i32> %r
102   }
104   define i32* @test_store_i32(i32 %val, i32* %p1) {
105     store i32 %val, i32* %p1
106     ret i32* %p1
107   }
109   define i64* @test_store_i64(i64 %val, i64* %p1) {
110     store i64 %val, i64* %p1
111     ret i64* %p1
112   }
114   define float* @test_store_float(float %val, float* %p1) {
115     store float %val, float* %p1
116     ret float* %p1
117   }
119   define double* @test_store_double(double %val, double* %p1) {
120     store double %val, double* %p1
121     ret double* %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, i32* undef, i32 5
134     %p2 = getelementptr i32, i32* 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 i32* @test_global_ptrv() {
181   entry:
182     ret i32* @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) = IMPLICIT_DEF
629     ; FAST: [[DEF1:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
630     ; FAST: [[DEF2:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
631     ; FAST: [[DEF3:%[0-9]+]]:gpr(s8) = 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) = IMPLICIT_DEF
639     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
640     ; GREEDY: [[DEF2:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
641     ; GREEDY: [[DEF3:%[0-9]+]]:gpr(s8) = 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) = IMPLICIT_DEF
648     %1(s32) = IMPLICIT_DEF
649     %2(s16) = IMPLICIT_DEF
650     %3(s8)  = 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) = IMPLICIT_DEF
771     ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = 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) = IMPLICIT_DEF
781     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = 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) = IMPLICIT_DEF
790     %2(s64) = 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) = IMPLICIT_DEF
814     ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = 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) = IMPLICIT_DEF
824     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = 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) = IMPLICIT_DEF
833     %2(s64) = 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) = IMPLICIT_DEF
857     ; FAST: [[DEF1:%[0-9]+]]:gpr(s64) = 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) = IMPLICIT_DEF
867     ; GREEDY: [[DEF1:%[0-9]+]]:gpr(s64) = 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) = IMPLICIT_DEF
876     %2(s64) = 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 1 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 1 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 1 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 2 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 2 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 2 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 4 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 4 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 4 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 8 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 8 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 8 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 4 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 4 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 4 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 8 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 8 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 8 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 16 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 16 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 16 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 4 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 4 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 4 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 8 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 8 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 8 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 4 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 4 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 4 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 8 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 8 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 8 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) = 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) = 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) = 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) = IMPLICIT_DEF
1383     ; FAST: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 20
1384     ; FAST: [[GEP:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C]](s32)
1385     ; FAST: [[C1:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 20
1386     ; FAST: [[GEP1:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C1]](s64)
1387     ; FAST: RET 0
1388     ; GREEDY-LABEL: name: test_gep
1389     ; GREEDY: [[DEF:%[0-9]+]]:gpr(p0) = IMPLICIT_DEF
1390     ; GREEDY: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 20
1391     ; GREEDY: [[GEP:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C]](s32)
1392     ; GREEDY: [[C1:%[0-9]+]]:gpr(s64) = G_CONSTANT i64 20
1393     ; GREEDY: [[GEP1:%[0-9]+]]:gpr(p0) = G_GEP [[DEF]], [[C1]](s64)
1394     ; GREEDY: RET 0
1395     %0(p0) = IMPLICIT_DEF
1396     %1(s32) = G_CONSTANT i32 20
1397     %2(p0) = G_GEP %0, %1(s32)
1398     %3(s64) = G_CONSTANT i64 20
1399     %4(p0) = G_GEP %0, %3(s64)
1400     RET 0
1404 name:            test_icmp_eq_i8
1405 alignment:       16
1406 legalized:       true
1407 regBankSelected: false
1408 registers:
1409   - { id: 0, class: _ }
1410   - { id: 1, class: _ }
1411   - { id: 2, class: _ }
1412 body:             |
1413   bb.1 (%ir-block.0):
1414     liveins: $edi, $esi
1416     ; FAST-LABEL: name: test_icmp_eq_i8
1417     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1418     ; FAST: [[TRUNC:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY]](s32)
1419     ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1420     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY1]](s32)
1421     ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s8), [[TRUNC1]]
1422     ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1423     ; FAST: $al = COPY [[ANYEXT]](s8)
1424     ; FAST: RET 0, implicit $al
1425     ; GREEDY-LABEL: name: test_icmp_eq_i8
1426     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1427     ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY]](s32)
1428     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1429     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[COPY1]](s32)
1430     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s8), [[TRUNC1]]
1431     ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1432     ; GREEDY: $al = COPY [[ANYEXT]](s8)
1433     ; GREEDY: RET 0, implicit $al
1434     %2:_(s32) = COPY $edi
1435     %0:_(s8) = G_TRUNC %2(s32)
1436     %3:_(s32) = COPY $esi
1437     %1:_(s8) = G_TRUNC %3(s32)
1438     %4:_(s1) = G_ICMP intpred(eq), %0(s8), %1
1439     %5:_(s8) = G_ANYEXT %4(s1)
1440     $al = COPY %5(s8)
1441     RET 0, implicit $al
1445 name:            test_icmp_eq_i16
1446 alignment:       16
1447 legalized:       true
1448 regBankSelected: false
1449 registers:
1450   - { id: 0, class: _ }
1451   - { id: 1, class: _ }
1452   - { id: 2, class: _ }
1453 body:             |
1454   bb.1 (%ir-block.0):
1455     liveins: $edi, $esi
1457     ; FAST-LABEL: name: test_icmp_eq_i16
1458     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1459     ; FAST: [[TRUNC:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY]](s32)
1460     ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1461     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY1]](s32)
1462     ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s16), [[TRUNC1]]
1463     ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1464     ; FAST: $al = COPY [[ANYEXT]](s8)
1465     ; FAST: RET 0, implicit $al
1466     ; GREEDY-LABEL: name: test_icmp_eq_i16
1467     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1468     ; GREEDY: [[TRUNC:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY]](s32)
1469     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1470     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[COPY1]](s32)
1471     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[TRUNC]](s16), [[TRUNC1]]
1472     ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1473     ; GREEDY: $al = COPY [[ANYEXT]](s8)
1474     ; GREEDY: RET 0, implicit $al
1475     %2:_(s32) = COPY $edi
1476     %0:_(s16) = G_TRUNC %2(s32)
1477     %3:_(s32) = COPY $esi
1478     %1:_(s16) = G_TRUNC %3(s32)
1479     %4:_(s1) = G_ICMP intpred(eq), %0(s16), %1
1480     %5:_(s8) = G_ANYEXT %4(s1)
1481     $al = COPY %5(s8)
1482     RET 0, implicit $al
1486 name:            test_icmp_eq_i32
1487 alignment:       16
1488 legalized:       true
1489 regBankSelected: false
1490 registers:
1491   - { id: 0, class: _ }
1492   - { id: 1, class: _ }
1493   - { id: 2, class: _ }
1494 body:             |
1495   bb.1 (%ir-block.0):
1496     liveins: $edi, $esi
1498     ; FAST-LABEL: name: test_icmp_eq_i32
1499     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1500     ; FAST: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1501     ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
1502     ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1503     ; FAST: $al = COPY [[ANYEXT]](s8)
1504     ; FAST: RET 0, implicit $al
1505     ; GREEDY-LABEL: name: test_icmp_eq_i32
1506     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1507     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1508     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
1509     ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1510     ; GREEDY: $al = COPY [[ANYEXT]](s8)
1511     ; GREEDY: RET 0, implicit $al
1512     %0:_(s32) = COPY $edi
1513     %1:_(s32) = COPY $esi
1514     %2:_(s1) = G_ICMP intpred(eq), %0(s32), %1
1515     %3:_(s8) = G_ANYEXT %2(s1)
1516     $al = COPY %3(s8)
1517     RET 0, implicit $al
1521 name:            test_icmp_eq_i64
1522 alignment:       16
1523 legalized:       true
1524 regBankSelected: false
1525 registers:
1526   - { id: 0, class: _ }
1527   - { id: 1, class: _ }
1528   - { id: 2, class: _ }
1529 body:             |
1530   bb.1 (%ir-block.0):
1531     liveins: $rdi, $rsi
1533     ; FAST-LABEL: name: test_icmp_eq_i64
1534     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1535     ; FAST: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
1536     ; FAST: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
1537     ; FAST: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1538     ; FAST: $al = COPY [[ANYEXT]](s8)
1539     ; FAST: RET 0, implicit $al
1540     ; GREEDY-LABEL: name: test_icmp_eq_i64
1541     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
1542     ; GREEDY: [[COPY1:%[0-9]+]]:gpr(s64) = COPY $rsi
1543     ; GREEDY: [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
1544     ; GREEDY: [[ANYEXT:%[0-9]+]]:gpr(s8) = G_ANYEXT [[ICMP]](s1)
1545     ; GREEDY: $al = COPY [[ANYEXT]](s8)
1546     ; GREEDY: RET 0, implicit $al
1547     %0:_(s64) = COPY $rdi
1548     %1:_(s64) = COPY $rsi
1549     %2:_(s1) = G_ICMP intpred(eq), %0(s64), %1
1550     %3:_(s8) = G_ANYEXT %2(s1)
1551     $al = COPY %3(s8)
1552     RET 0, implicit $al
1556 name:            test_xor_i8
1557 alignment:       16
1558 legalized:       true
1559 regBankSelected: false
1560 registers:
1561   - { id: 0, class: _, preferred-register: '' }
1562   - { id: 1, class: _, preferred-register: '' }
1563 liveins:
1564 fixedStack:
1565 stack:
1566 constants:
1567 body:             |
1568   bb.1 (%ir-block.0):
1569     ; FAST-LABEL: name: test_xor_i8
1570     ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = IMPLICIT_DEF
1571     ; FAST: [[XOR:%[0-9]+]]:gpr(s8) = G_XOR [[DEF]], [[DEF]]
1572     ; FAST: $al = COPY [[XOR]](s8)
1573     ; FAST: RET 0, implicit $al
1574     ; GREEDY-LABEL: name: test_xor_i8
1575     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = IMPLICIT_DEF
1576     ; GREEDY: [[XOR:%[0-9]+]]:gpr(s8) = G_XOR [[DEF]], [[DEF]]
1577     ; GREEDY: $al = COPY [[XOR]](s8)
1578     ; GREEDY: RET 0, implicit $al
1579     %0(s8) = IMPLICIT_DEF
1580     %1(s8) = G_XOR %0, %0
1581     $al = COPY %1(s8)
1582     RET 0, implicit $al
1586 name:            test_or_i16
1587 alignment:       16
1588 legalized:       true
1589 regBankSelected: false
1590 registers:
1591   - { id: 0, class: _, preferred-register: '' }
1592   - { id: 1, class: _, preferred-register: '' }
1593 liveins:
1594 fixedStack:
1595 stack:
1596 constants:
1597 body:             |
1598   bb.1 (%ir-block.0):
1599     ; FAST-LABEL: name: test_or_i16
1600     ; FAST: [[DEF:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
1601     ; FAST: [[OR:%[0-9]+]]:gpr(s16) = G_OR [[DEF]], [[DEF]]
1602     ; FAST: $ax = COPY [[OR]](s16)
1603     ; FAST: RET 0, implicit $ax
1604     ; GREEDY-LABEL: name: test_or_i16
1605     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s16) = IMPLICIT_DEF
1606     ; GREEDY: [[OR:%[0-9]+]]:gpr(s16) = G_OR [[DEF]], [[DEF]]
1607     ; GREEDY: $ax = COPY [[OR]](s16)
1608     ; GREEDY: RET 0, implicit $ax
1609     %0(s16) = IMPLICIT_DEF
1610     %1(s16) = G_OR %0, %0
1611     $ax = COPY %1(s16)
1612     RET 0, implicit $ax
1616 name:            test_and_i32
1617 alignment:       16
1618 legalized:       true
1619 regBankSelected: false
1620 registers:
1621   - { id: 0, class: _, preferred-register: '' }
1622   - { id: 1, class: _, preferred-register: '' }
1623 liveins:
1624 fixedStack:
1625 stack:
1626 constants:
1627 body:             |
1628   bb.1 (%ir-block.0):
1629     ; FAST-LABEL: name: test_and_i32
1630     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
1631     ; FAST: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[DEF]], [[DEF]]
1632     ; FAST: $eax = COPY [[AND]](s32)
1633     ; FAST: RET 0, implicit $eax
1634     ; GREEDY-LABEL: name: test_and_i32
1635     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = IMPLICIT_DEF
1636     ; GREEDY: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[DEF]], [[DEF]]
1637     ; GREEDY: $eax = COPY [[AND]](s32)
1638     ; GREEDY: RET 0, implicit $eax
1639     %0(s32) = IMPLICIT_DEF
1640     %1(s32) = G_AND %0, %0
1641     $eax = COPY %1(s32)
1642     RET 0, implicit $eax
1646 name:            test_and_i64
1647 alignment:       16
1648 legalized:       true
1649 regBankSelected: false
1650 registers:
1651   - { id: 0, class: _, preferred-register: '' }
1652   - { id: 1, class: _, preferred-register: '' }
1653 liveins:
1654 fixedStack:
1655 stack:
1656 constants:
1657 body:             |
1658   bb.1 (%ir-block.0):
1659     ; FAST-LABEL: name: test_and_i64
1660     ; FAST: [[DEF:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
1661     ; FAST: [[AND:%[0-9]+]]:gpr(s64) = G_AND [[DEF]], [[DEF]]
1662     ; FAST: $rax = COPY [[AND]](s64)
1663     ; FAST: RET 0, implicit $rax
1664     ; GREEDY-LABEL: name: test_and_i64
1665     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s64) = IMPLICIT_DEF
1666     ; GREEDY: [[AND:%[0-9]+]]:gpr(s64) = G_AND [[DEF]], [[DEF]]
1667     ; GREEDY: $rax = COPY [[AND]](s64)
1668     ; GREEDY: RET 0, implicit $rax
1669     %0(s64) = IMPLICIT_DEF
1670     %1(s64) = G_AND %0, %0
1671     $rax = COPY %1(s64)
1672     RET 0, implicit $rax
1676 name:            test_global_ptrv
1677 alignment:       16
1678 legalized:       true
1679 regBankSelected: false
1680 registers:
1681   - { id: 0, class: _, preferred-register: '' }
1682 body:             |
1683   bb.1.entry:
1684     ; FAST-LABEL: name: test_global_ptrv
1685     ; FAST: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @g_int
1686     ; FAST: $rax = COPY [[GV]](p0)
1687     ; FAST: RET 0, implicit $rax
1688     ; GREEDY-LABEL: name: test_global_ptrv
1689     ; GREEDY: [[GV:%[0-9]+]]:gpr(p0) = G_GLOBAL_VALUE @g_int
1690     ; GREEDY: $rax = COPY [[GV]](p0)
1691     ; GREEDY: RET 0, implicit $rax
1692     %0(p0) = G_GLOBAL_VALUE @g_int
1693     $rax = COPY %0(p0)
1694     RET 0, implicit $rax
1698 name:            test_undef
1699 alignment:       16
1700 legalized:       true
1701 regBankSelected: false
1702 registers:
1703   - { id: 0, class: _, preferred-register: '' }
1704 liveins:
1705 fixedStack:
1706 stack:
1707 constants:
1708 body:             |
1709   bb.1 (%ir-block.0):
1710     ; FAST-LABEL: name: test_undef
1711     ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1712     ; FAST: $al = COPY [[DEF]](s8)
1713     ; FAST: RET 0, implicit $al
1714     ; GREEDY-LABEL: name: test_undef
1715     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1716     ; GREEDY: $al = COPY [[DEF]](s8)
1717     ; GREEDY: RET 0, implicit $al
1718     %0(s8) = G_IMPLICIT_DEF
1719     $al = COPY %0(s8)
1720     RET 0, implicit $al
1724 name:            test_undef2
1725 alignment:       16
1726 legalized:       true
1727 regBankSelected: false
1728 registers:
1729   - { id: 0, class: _, preferred-register: '' }
1730   - { id: 1, class: _, preferred-register: '' }
1731   - { id: 2, class: _, preferred-register: '' }
1732 liveins:
1733 fixedStack:
1734 stack:
1735 constants:
1736 body:             |
1737   bb.1 (%ir-block.0):
1738     liveins: $edi
1740     ; FAST-LABEL: name: test_undef2
1741     ; FAST: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
1742     ; FAST: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1743     ; FAST: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[DEF]]
1744     ; FAST: $al = COPY [[ADD]](s8)
1745     ; FAST: RET 0, implicit $al
1746     ; GREEDY-LABEL: name: test_undef2
1747     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s8) = COPY $dil
1748     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s8) = G_IMPLICIT_DEF
1749     ; GREEDY: [[ADD:%[0-9]+]]:gpr(s8) = G_ADD [[COPY]], [[DEF]]
1750     ; GREEDY: $al = COPY [[ADD]](s8)
1751     ; GREEDY: RET 0, implicit $al
1752     %0(s8) = COPY $dil
1753     %1(s8) = G_IMPLICIT_DEF
1754     %2(s8) = G_ADD %0, %1
1755     $al = COPY %2(s8)
1756     RET 0, implicit $al
1760 name:            test_undef3
1761 alignment:       16
1762 legalized:       true
1763 regBankSelected: false
1764 registers:
1765   - { id: 1, class: _, preferred-register: '' }
1766 liveins:
1767 fixedStack:
1768 stack:
1769 constants:
1770 body:             |
1771   bb.1 (%ir-block.0):
1772     ; FAST-LABEL: name: test_undef3
1773     ; FAST: [[DEF:%[0-9]+]]:vecr(s128) = G_IMPLICIT_DEF
1774     ; FAST: $xmm0 = COPY [[DEF]](s128)
1775     ; FAST: RET 0, implicit $xmm0
1776     ; GREEDY-LABEL: name: test_undef3
1777     ; GREEDY: [[DEF:%[0-9]+]]:vecr(s128) = G_IMPLICIT_DEF
1778     ; GREEDY: $xmm0 = COPY [[DEF]](s128)
1779     ; GREEDY: RET 0, implicit $xmm0
1780     %1(s128) = G_IMPLICIT_DEF
1781     $xmm0 = COPY %1(s128)
1782     RET 0, implicit $xmm0
1786 name:            test_undef4
1787 alignment:       16
1788 legalized:       true
1789 regBankSelected: false
1790 registers:
1791   - { id: 0, class: _, preferred-register: '' }
1792   - { id: 1, class: _, preferred-register: '' }
1793   - { id: 2, class: _, preferred-register: '' }
1794   - { id: 3, class: _, preferred-register: '' }
1795   - { id: 4, class: _, preferred-register: '' }
1796 liveins:
1797 fixedStack:
1798 stack:
1799 constants:
1800 body:             |
1801   bb.1 (%ir-block.0):
1802     liveins: $xmm0
1804     ; FAST-LABEL: name: test_undef4
1805     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1806     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1807     ; FAST: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1808     ; FAST: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
1809     ; FAST: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[COPY1]]
1810     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
1811     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
1812     ; FAST: RET 0, implicit $xmm0
1813     ; GREEDY-LABEL: name: test_undef4
1814     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
1815     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
1816     ; GREEDY: [[DEF:%[0-9]+]]:gpr(s32) = G_IMPLICIT_DEF
1817     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s32) = COPY [[DEF]](s32)
1818     ; GREEDY: [[FADD:%[0-9]+]]:vecr(s32) = G_FADD [[TRUNC]], [[COPY1]]
1819     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FADD]](s32)
1820     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
1821     ; GREEDY: RET 0, implicit $xmm0
1822     %1:_(s128) = COPY $xmm0
1823     %0:_(s32) = G_TRUNC %1(s128)
1824     %2:_(s32) = G_IMPLICIT_DEF
1825     %3:_(s32) = G_FADD %0, %2
1826     %4:_(s128) = G_ANYEXT %3(s32)
1827     $xmm0 = COPY %4(s128)
1828     RET 0, implicit $xmm0
1832 name:            test_i32
1833 alignment:       16
1834 legalized:       true
1835 regBankSelected: false
1836 tracksRegLiveness: true
1837 registers:
1838   - { id: 0, class: _, preferred-register: '' }
1839   - { id: 1, class: _, preferred-register: '' }
1840   - { id: 2, class: _, preferred-register: '' }
1841   - { id: 3, class: _, preferred-register: '' }
1842   - { id: 4, class: _, preferred-register: '' }
1843   - { id: 5, class: _, preferred-register: '' }
1844 body:             |
1845   ; FAST-LABEL: name: test_i32
1846   ; FAST: bb.0.entry:
1847   ; FAST:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
1848   ; FAST:   liveins: $edi, $edx, $esi
1849   ; FAST:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1850   ; FAST:   [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1851   ; FAST:   [[COPY2:%[0-9]+]]:gpr(s32) = COPY $edx
1852   ; FAST:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1853   ; FAST:   [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1854   ; FAST:   G_BRCOND [[ICMP]](s1), %bb.1
1855   ; FAST:   G_BR %bb.2
1856   ; FAST: bb.1.cond.true:
1857   ; FAST:   successors: %bb.3(0x80000000)
1858   ; FAST:   G_BR %bb.3
1859   ; FAST: bb.2.cond.false:
1860   ; FAST:   successors: %bb.3(0x80000000)
1861   ; FAST: bb.3.cond.end:
1862   ; FAST:   [[PHI:%[0-9]+]]:gpr(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
1863   ; FAST:   $eax = COPY [[PHI]](s32)
1864   ; FAST:   RET 0, implicit $eax
1865   ; GREEDY-LABEL: name: test_i32
1866   ; GREEDY: bb.0.entry:
1867   ; GREEDY:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
1868   ; GREEDY:   liveins: $edi, $edx, $esi
1869   ; GREEDY:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1870   ; GREEDY:   [[COPY1:%[0-9]+]]:gpr(s32) = COPY $esi
1871   ; GREEDY:   [[COPY2:%[0-9]+]]:gpr(s32) = COPY $edx
1872   ; GREEDY:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1873   ; GREEDY:   [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1874   ; GREEDY:   G_BRCOND [[ICMP]](s1), %bb.1
1875   ; GREEDY:   G_BR %bb.2
1876   ; GREEDY: bb.1.cond.true:
1877   ; GREEDY:   successors: %bb.3(0x80000000)
1878   ; GREEDY:   G_BR %bb.3
1879   ; GREEDY: bb.2.cond.false:
1880   ; GREEDY:   successors: %bb.3(0x80000000)
1881   ; GREEDY: bb.3.cond.end:
1882   ; GREEDY:   [[PHI:%[0-9]+]]:gpr(s32) = G_PHI [[COPY1]](s32), %bb.1, [[COPY2]](s32), %bb.2
1883   ; GREEDY:   $eax = COPY [[PHI]](s32)
1884   ; GREEDY:   RET 0, implicit $eax
1885   bb.0.entry:
1886     successors: %bb.1(0x40000000), %bb.2(0x40000000)
1887     liveins: $edi, $edx, $esi
1889     %0(s32) = COPY $edi
1890     %1(s32) = COPY $esi
1891     %2(s32) = COPY $edx
1892     %3(s32) = G_CONSTANT i32 0
1893     %4(s1) = G_ICMP intpred(sgt), %0(s32), %3
1894     G_BRCOND %4(s1), %bb.1
1895     G_BR %bb.2
1897   bb.1.cond.true:
1898     successors: %bb.3(0x80000000)
1900     G_BR %bb.3
1902   bb.2.cond.false:
1903     successors: %bb.3(0x80000000)
1905   bb.3.cond.end:
1906     %5(s32) = G_PHI %1(s32), %bb.1, %2(s32), %bb.2
1907     $eax = COPY %5(s32)
1908     RET 0, implicit $eax
1912 name:            test_float
1913 alignment:       16
1914 legalized:       true
1915 regBankSelected: false
1916 tracksRegLiveness: true
1917 registers:
1918   - { id: 0, class: _, preferred-register: '' }
1919   - { id: 1, class: _, preferred-register: '' }
1920   - { id: 2, class: _, preferred-register: '' }
1921   - { id: 3, class: _, preferred-register: '' }
1922   - { id: 4, class: _, preferred-register: '' }
1923   - { id: 5, class: _, preferred-register: '' }
1924 body:             |
1925   ; FAST-LABEL: name: test_float
1926   ; FAST: bb.0.entry:
1927   ; FAST:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
1928   ; FAST:   liveins: $edi, $xmm0, $xmm1
1929   ; FAST:   [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
1930   ; FAST:   [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm0
1931   ; FAST:   [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
1932   ; FAST:   [[COPY2:%[0-9]+]]:vecr(s128) = COPY $xmm1
1933   ; FAST:   [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY2]](s128)
1934   ; FAST:   [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 0
1935   ; FAST:   [[ICMP:%[0-9]+]]:gpr(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1936   ; FAST:   G_BRCOND [[ICMP]](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(s1) = G_ICMP intpred(sgt), [[COPY]](s32), [[C]]
1955   ; GREEDY:   G_BRCOND [[ICMP]](s1), %bb.2
1956   ; GREEDY: bb.1.cond.false:
1957   ; GREEDY:   successors: %bb.2(0x80000000)
1958   ; GREEDY: bb.2.cond.end:
1959   ; GREEDY:   [[PHI:%[0-9]+]]:vecr(s32) = G_PHI [[TRUNC1]](s32), %bb.1, [[TRUNC]](s32), %bb.0
1960   ; GREEDY:   [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[PHI]](s32)
1961   ; GREEDY:   $xmm0 = COPY [[ANYEXT]](s128)
1962   ; GREEDY:   RET 0, implicit $xmm0
1963   bb.1.entry:
1964     successors: %bb.3(0x40000000), %bb.2(0x40000000)
1965     liveins: $edi, $xmm0, $xmm1
1967     %0:_(s32) = COPY $edi
1968     %3:_(s128) = COPY $xmm0
1969     %1:_(s32) = G_TRUNC %3(s128)
1970     %4:_(s128) = COPY $xmm1
1971     %2:_(s32) = G_TRUNC %4(s128)
1972     %5:_(s32) = G_CONSTANT i32 0
1973     %6:_(s1) = G_ICMP intpred(sgt), %0(s32), %5
1974     G_BRCOND %6(s1), %bb.3
1976   bb.2.cond.false:
1977     successors: %bb.3(0x80000000)
1980   bb.3.cond.end:
1981     %7:_(s32) = G_PHI %2(s32), %bb.2, %1(s32), %bb.1
1982     %8:_(s128) = G_ANYEXT %7(s32)
1983     $xmm0 = COPY %8(s128)
1984     RET 0, implicit $xmm0
1988 name:            test_fpext
1989 alignment:       16
1990 legalized:       true
1991 regBankSelected: false
1992 registers:
1993   - { id: 0, class: _, preferred-register: '' }
1994   - { id: 1, class: _, preferred-register: '' }
1995 body:             |
1996   bb.1.entry:
1997     liveins: $xmm0
1999     ; FAST-LABEL: name: test_fpext
2000     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2001     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2002     ; FAST: [[FPEXT:%[0-9]+]]:vecr(s64) = G_FPEXT [[TRUNC]](s32)
2003     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPEXT]](s64)
2004     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2005     ; FAST: RET 0, implicit $xmm0
2006     ; GREEDY-LABEL: name: test_fpext
2007     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2008     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2009     ; GREEDY: [[FPEXT:%[0-9]+]]:vecr(s64) = G_FPEXT [[TRUNC]](s32)
2010     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPEXT]](s64)
2011     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2012     ; GREEDY: RET 0, implicit $xmm0
2013     %1:_(s128) = COPY $xmm0
2014     %0:_(s32) = G_TRUNC %1(s128)
2015     %2:_(s64) = G_FPEXT %0(s32)
2016     %3:_(s128) = G_ANYEXT %2(s64)
2017     $xmm0 = COPY %3(s128)
2018     RET 0, implicit $xmm0
2022 name:            test_fptrunc
2023 alignment:       16
2024 legalized:       true
2025 tracksRegLiveness: true
2026 registers:
2027   - { id: 0, class: _ }
2028   - { id: 1, class: _ }
2029   - { id: 2, class: _ }
2030   - { id: 3, class: _ }
2031 body:             |
2032   bb.1.entry:
2033     liveins: $xmm0
2035     ; FAST-LABEL: name: test_fptrunc
2036     ; FAST: liveins: $xmm0
2037     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2038     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2039     ; FAST: [[FPTRUNC:%[0-9]+]]:vecr(s32) = G_FPTRUNC [[TRUNC]](s64)
2040     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPTRUNC]](s32)
2041     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2042     ; FAST: RET 0, implicit $xmm0
2043     ; GREEDY-LABEL: name: test_fptrunc
2044     ; GREEDY: liveins: $xmm0
2045     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2046     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2047     ; GREEDY: [[FPTRUNC:%[0-9]+]]:vecr(s32) = G_FPTRUNC [[TRUNC]](s64)
2048     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[FPTRUNC]](s32)
2049     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2050     ; GREEDY: RET 0, implicit $xmm0
2051     %1:_(s128) = COPY $xmm0
2052     %0:_(s64) = G_TRUNC %1(s128)
2053     %2:_(s32) = G_FPTRUNC %0(s64)
2054     %3:_(s128) = G_ANYEXT %2(s32)
2055     $xmm0 = COPY %3(s128)
2056     RET 0, implicit $xmm0
2060 name:            test_fconstant
2061 # ALL-LABEL: name:            test_fconstant
2062 legalized:       true
2063 registers:
2064   - { id: 0, class: _ }
2065   - { id: 1, class: _ }
2066 body: |
2067   bb.0:
2068     ; FAST-LABEL: name: test_fconstant
2069     ; FAST: [[C:%[0-9]+]]:vecr(s32) = G_FCONSTANT float 1.000000e+00
2070     ; FAST: [[C1:%[0-9]+]]:vecr(s64) = G_FCONSTANT double 2.000000e+00
2071     ; GREEDY-LABEL: name: test_fconstant
2072     ; GREEDY: [[C:%[0-9]+]]:vecr(s32) = G_FCONSTANT float 1.000000e+00
2073     ; GREEDY: [[C1:%[0-9]+]]:vecr(s64) = G_FCONSTANT double 2.000000e+00
2074     %0(s32) = G_FCONSTANT float 1.0
2075     %1(s64) = G_FCONSTANT double 2.0
2079 name:            int32_to_float
2080 alignment:       16
2081 legalized:       true
2082 tracksRegLiveness: true
2083 registers:
2084   - { id: 0, class: _ }
2085   - { id: 1, class: _ }
2086   - { id: 2, class: _ }
2087 body:             |
2088   bb.1.entry:
2089     liveins: $edi
2091     ; FAST-LABEL: name: int32_to_float
2092     ; FAST: liveins: $edi
2093     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2094     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s32)
2095     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2096     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2097     ; FAST: RET 0, implicit $xmm0
2098     ; GREEDY-LABEL: name: int32_to_float
2099     ; GREEDY: liveins: $edi
2100     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2101     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s32)
2102     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2103     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2104     ; GREEDY: RET 0, implicit $xmm0
2105     %0:_(s32) = COPY $edi
2106     %1:_(s32) = G_SITOFP %0(s32)
2107     %2:_(s128) = G_ANYEXT %1(s32)
2108     $xmm0 = COPY %2(s128)
2109     RET 0, implicit $xmm0
2113 name:            int64_to_float
2114 alignment:       16
2115 legalized:       true
2116 tracksRegLiveness: true
2117 registers:
2118   - { id: 0, class: _ }
2119   - { id: 1, class: _ }
2120   - { id: 2, class: _ }
2121 body:             |
2122   bb.1.entry:
2123     liveins: $rdi
2125     ; FAST-LABEL: name: int64_to_float
2126     ; FAST: liveins: $rdi
2127     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2128     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s64)
2129     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2130     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2131     ; FAST: RET 0, implicit $xmm0
2132     ; GREEDY-LABEL: name: int64_to_float
2133     ; GREEDY: liveins: $rdi
2134     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2135     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s32) = G_SITOFP [[COPY]](s64)
2136     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s32)
2137     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2138     ; GREEDY: RET 0, implicit $xmm0
2139     %0:_(s64) = COPY $rdi
2140     %1:_(s32) = G_SITOFP %0(s64)
2141     %2:_(s128) = G_ANYEXT %1(s32)
2142     $xmm0 = COPY %2(s128)
2143     RET 0, implicit $xmm0
2147 name:            int32_to_double
2148 alignment:       16
2149 legalized:       true
2150 tracksRegLiveness: true
2151 registers:
2152   - { id: 0, class: _ }
2153   - { id: 1, class: _ }
2154   - { id: 2, class: _ }
2155 body:             |
2156   bb.1.entry:
2157     liveins: $edi
2159     ; FAST-LABEL: name: int32_to_double
2160     ; FAST: liveins: $edi
2161     ; FAST: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2162     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s32)
2163     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2164     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2165     ; FAST: RET 0, implicit $xmm0
2166     ; GREEDY-LABEL: name: int32_to_double
2167     ; GREEDY: liveins: $edi
2168     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s32) = COPY $edi
2169     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s32)
2170     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2171     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2172     ; GREEDY: RET 0, implicit $xmm0
2173     %0:_(s32) = COPY $edi
2174     %1:_(s64) = G_SITOFP %0(s32)
2175     %2:_(s128) = G_ANYEXT %1(s64)
2176     $xmm0 = COPY %2(s128)
2177     RET 0, implicit $xmm0
2181 name:            int64_to_double
2182 alignment:       16
2183 legalized:       true
2184 tracksRegLiveness: true
2185 registers:
2186   - { id: 0, class: _ }
2187   - { id: 1, class: _ }
2188   - { id: 2, class: _ }
2189 body:             |
2190   bb.1.entry:
2191     liveins: $rdi
2193     ; FAST-LABEL: name: int64_to_double
2194     ; FAST: liveins: $rdi
2195     ; FAST: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2196     ; FAST: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s64)
2197     ; FAST: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2198     ; FAST: $xmm0 = COPY [[ANYEXT]](s128)
2199     ; FAST: RET 0, implicit $xmm0
2200     ; GREEDY-LABEL: name: int64_to_double
2201     ; GREEDY: liveins: $rdi
2202     ; GREEDY: [[COPY:%[0-9]+]]:gpr(s64) = COPY $rdi
2203     ; GREEDY: [[SITOFP:%[0-9]+]]:vecr(s64) = G_SITOFP [[COPY]](s64)
2204     ; GREEDY: [[ANYEXT:%[0-9]+]]:vecr(s128) = G_ANYEXT [[SITOFP]](s64)
2205     ; GREEDY: $xmm0 = COPY [[ANYEXT]](s128)
2206     ; GREEDY: RET 0, implicit $xmm0
2207     %0:_(s64) = COPY $rdi
2208     %1:_(s64) = G_SITOFP %0(s64)
2209     %2:_(s128) = G_ANYEXT %1(s64)
2210     $xmm0 = COPY %2(s128)
2211     RET 0, implicit $xmm0
2215 name:            float_to_int8
2216 alignment:       16
2217 legalized:       true
2218 tracksRegLiveness: true
2219 registers:
2220   - { id: 0, class: _ }
2221   - { id: 1, class: _ }
2222   - { id: 2, class: _ }
2223   - { id: 3, class: _ }
2224 body:             |
2225   bb.1.entry:
2226     liveins: $xmm0
2228     ; FAST-LABEL: name: float_to_int8
2229     ; FAST: liveins: $xmm0
2230     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2231     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2232     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2233     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2234     ; FAST: $al = COPY [[TRUNC1]](s8)
2235     ; FAST: RET 0, implicit $al
2236     ; GREEDY-LABEL: name: float_to_int8
2237     ; GREEDY: liveins: $xmm0
2238     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2239     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2240     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2241     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2242     ; GREEDY: $al = COPY [[TRUNC1]](s8)
2243     ; GREEDY: RET 0, implicit $al
2244     %1:_(s128) = COPY $xmm0
2245     %0:_(s32) = G_TRUNC %1(s128)
2246     %3:_(s32) = G_FPTOSI %0(s32)
2247     %2:_(s8) = G_TRUNC %3(s32)
2248     $al = COPY %2(s8)
2249     RET 0, implicit $al
2253 name:            float_to_int16
2254 alignment:       16
2255 legalized:       true
2256 tracksRegLiveness: true
2257 registers:
2258   - { id: 0, class: _ }
2259   - { id: 1, class: _ }
2260   - { id: 2, class: _ }
2261   - { id: 3, class: _ }
2262 body:             |
2263   bb.1.entry:
2264     liveins: $xmm0
2266     ; FAST-LABEL: name: float_to_int16
2267     ; FAST: liveins: $xmm0
2268     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2269     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2270     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2271     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2272     ; FAST: $ax = COPY [[TRUNC1]](s16)
2273     ; FAST: RET 0, implicit $ax
2274     ; GREEDY-LABEL: name: float_to_int16
2275     ; GREEDY: liveins: $xmm0
2276     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2277     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2278     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2279     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2280     ; GREEDY: $ax = COPY [[TRUNC1]](s16)
2281     ; GREEDY: RET 0, implicit $ax
2282     %1:_(s128) = COPY $xmm0
2283     %0:_(s32) = G_TRUNC %1(s128)
2284     %3:_(s32) = G_FPTOSI %0(s32)
2285     %2:_(s16) = G_TRUNC %3(s32)
2286     $ax = COPY %2(s16)
2287     RET 0, implicit $ax
2291 name:            float_to_int32
2292 alignment:       16
2293 legalized:       true
2294 tracksRegLiveness: true
2295 registers:
2296   - { id: 0, class: _ }
2297   - { id: 1, class: _ }
2298   - { id: 2, class: _ }
2299 body:             |
2300   bb.1.entry:
2301     liveins: $xmm0
2303     ; FAST-LABEL: name: float_to_int32
2304     ; FAST: liveins: $xmm0
2305     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2306     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2307     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2308     ; FAST: $eax = COPY [[FPTOSI]](s32)
2309     ; FAST: RET 0, implicit $eax
2310     ; GREEDY-LABEL: name: float_to_int32
2311     ; GREEDY: liveins: $xmm0
2312     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2313     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2314     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s32)
2315     ; GREEDY: $eax = COPY [[FPTOSI]](s32)
2316     ; GREEDY: RET 0, implicit $eax
2317     %1:_(s128) = COPY $xmm0
2318     %0:_(s32) = G_TRUNC %1(s128)
2319     %2:_(s32) = G_FPTOSI %0(s32)
2320     $eax = COPY %2(s32)
2321     RET 0, implicit $eax
2325 name:            float_to_int64
2326 alignment:       16
2327 legalized:       true
2328 tracksRegLiveness: true
2329 registers:
2330   - { id: 0, class: _ }
2331   - { id: 1, class: _ }
2332   - { id: 2, class: _ }
2333 body:             |
2334   bb.1.entry:
2335     liveins: $xmm0
2337     ; FAST-LABEL: name: float_to_int64
2338     ; FAST: liveins: $xmm0
2339     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2340     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2341     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s32)
2342     ; FAST: $rax = COPY [[FPTOSI]](s64)
2343     ; FAST: RET 0, implicit $rax
2344     ; GREEDY-LABEL: name: float_to_int64
2345     ; GREEDY: liveins: $xmm0
2346     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2347     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2348     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s32)
2349     ; GREEDY: $rax = COPY [[FPTOSI]](s64)
2350     ; GREEDY: RET 0, implicit $rax
2351     %1:_(s128) = COPY $xmm0
2352     %0:_(s32) = G_TRUNC %1(s128)
2353     %2:_(s64) = G_FPTOSI %0(s32)
2354     $rax = COPY %2(s64)
2355     RET 0, implicit $rax
2359 name:            double_to_int8
2360 alignment:       16
2361 legalized:       true
2362 tracksRegLiveness: true
2363 registers:
2364   - { id: 0, class: _ }
2365   - { id: 1, class: _ }
2366   - { id: 2, class: _ }
2367   - { id: 3, class: _ }
2368 body:             |
2369   bb.1.entry:
2370     liveins: $xmm0
2372     ; FAST-LABEL: name: double_to_int8
2373     ; FAST: liveins: $xmm0
2374     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2375     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2376     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2377     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2378     ; FAST: $al = COPY [[TRUNC1]](s8)
2379     ; FAST: RET 0, implicit $al
2380     ; GREEDY-LABEL: name: double_to_int8
2381     ; GREEDY: liveins: $xmm0
2382     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2383     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2384     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2385     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s8) = G_TRUNC [[FPTOSI]](s32)
2386     ; GREEDY: $al = COPY [[TRUNC1]](s8)
2387     ; GREEDY: RET 0, implicit $al
2388     %1:_(s128) = COPY $xmm0
2389     %0:_(s64) = G_TRUNC %1(s128)
2390     %3:_(s32) = G_FPTOSI %0(s64)
2391     %2:_(s8) = G_TRUNC %3(s32)
2392     $al = COPY %2(s8)
2393     RET 0, implicit $al
2397 name:            double_to_int16
2398 alignment:       16
2399 legalized:       true
2400 tracksRegLiveness: true
2401 registers:
2402   - { id: 0, class: _ }
2403   - { id: 1, class: _ }
2404   - { id: 2, class: _ }
2405   - { id: 3, class: _ }
2406 body:             |
2407   bb.1.entry:
2408     liveins: $xmm0
2410     ; FAST-LABEL: name: double_to_int16
2411     ; FAST: liveins: $xmm0
2412     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2413     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2414     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2415     ; FAST: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2416     ; FAST: $ax = COPY [[TRUNC1]](s16)
2417     ; FAST: RET 0, implicit $ax
2418     ; GREEDY-LABEL: name: double_to_int16
2419     ; GREEDY: liveins: $xmm0
2420     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2421     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2422     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2423     ; GREEDY: [[TRUNC1:%[0-9]+]]:gpr(s16) = G_TRUNC [[FPTOSI]](s32)
2424     ; GREEDY: $ax = COPY [[TRUNC1]](s16)
2425     ; GREEDY: RET 0, implicit $ax
2426     %1:_(s128) = COPY $xmm0
2427     %0:_(s64) = G_TRUNC %1(s128)
2428     %3:_(s32) = G_FPTOSI %0(s64)
2429     %2:_(s16) = G_TRUNC %3(s32)
2430     $ax = COPY %2(s16)
2431     RET 0, implicit $ax
2435 name:            double_to_int32
2436 alignment:       16
2437 legalized:       true
2438 tracksRegLiveness: true
2439 registers:
2440   - { id: 0, class: _ }
2441   - { id: 1, class: _ }
2442   - { id: 2, class: _ }
2443 body:             |
2444   bb.1.entry:
2445     liveins: $xmm0
2447     ; FAST-LABEL: name: double_to_int32
2448     ; FAST: liveins: $xmm0
2449     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2450     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2451     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2452     ; FAST: $eax = COPY [[FPTOSI]](s32)
2453     ; FAST: RET 0, implicit $eax
2454     ; GREEDY-LABEL: name: double_to_int32
2455     ; GREEDY: liveins: $xmm0
2456     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2457     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2458     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s32) = G_FPTOSI [[TRUNC]](s64)
2459     ; GREEDY: $eax = COPY [[FPTOSI]](s32)
2460     ; GREEDY: RET 0, implicit $eax
2461     %1:_(s128) = COPY $xmm0
2462     %0:_(s64) = G_TRUNC %1(s128)
2463     %2:_(s32) = G_FPTOSI %0(s64)
2464     $eax = COPY %2(s32)
2465     RET 0, implicit $eax
2469 name:            double_to_int64
2470 alignment:       16
2471 legalized:       true
2472 tracksRegLiveness: true
2473 registers:
2474   - { id: 0, class: _ }
2475   - { id: 1, class: _ }
2476   - { id: 2, class: _ }
2477 body:             |
2478   bb.1.entry:
2479     liveins: $xmm0
2481     ; FAST-LABEL: name: double_to_int64
2482     ; FAST: liveins: $xmm0
2483     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2484     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2485     ; FAST: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s64)
2486     ; FAST: $rax = COPY [[FPTOSI]](s64)
2487     ; FAST: RET 0, implicit $rax
2488     ; GREEDY-LABEL: name: double_to_int64
2489     ; GREEDY: liveins: $xmm0
2490     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2491     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
2492     ; GREEDY: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[TRUNC]](s64)
2493     ; GREEDY: $rax = COPY [[FPTOSI]](s64)
2494     ; GREEDY: RET 0, implicit $rax
2495     %1:_(s128) = COPY $xmm0
2496     %0:_(s64) = G_TRUNC %1(s128)
2497     %2:_(s64) = G_FPTOSI %0(s64)
2498     $rax = COPY %2(s64)
2499     RET 0, implicit $rax
2503 name:            fcmp_float_oeq
2504 alignment:       16
2505 legalized:       true
2506 tracksRegLiveness: true
2507 registers:
2508   - { id: 0, class: _ }
2509   - { id: 1, class: _ }
2510   - { id: 2, class: _ }
2511   - { id: 3, class: _ }
2512   - { id: 4, class: _ }
2513   - { id: 5, class: _ }
2514   - { id: 6, class: _ }
2515 body:             |
2516   bb.1 (%ir-block.0):
2517     liveins: $xmm0, $xmm1
2519     ; FAST-LABEL: name: fcmp_float_oeq
2520     ; FAST: liveins: $xmm0, $xmm1
2521     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2522     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2523     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2524     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2525     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s32), [[TRUNC1]]
2526     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2527     ; FAST: $al = COPY [[COPY2]](s8)
2528     ; FAST: RET 0, implicit $al
2529     ; GREEDY-LABEL: name: fcmp_float_oeq
2530     ; GREEDY: liveins: $xmm0, $xmm1
2531     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2532     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2533     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2534     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2535     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s32), [[TRUNC1]]
2536     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2537     ; GREEDY: $al = COPY [[COPY2]](s8)
2538     ; GREEDY: RET 0, implicit $al
2539     %2:_(s128) = COPY $xmm0
2540     %0:_(s32) = G_TRUNC %2(s128)
2541     %3:_(s128) = COPY $xmm1
2542     %1:_(s32) = G_TRUNC %3(s128)
2543     %6:_(s8) = G_FCMP floatpred(oeq), %0(s32), %1
2544     %5:_(s8) = COPY %6(s8)
2545     $al = COPY %5(s8)
2546     RET 0, implicit $al
2550 name:            fcmp_float_ogt
2551 alignment:       16
2552 legalized:       true
2553 tracksRegLiveness: true
2554 registers:
2555   - { id: 0, class: _ }
2556   - { id: 1, class: _ }
2557   - { id: 2, class: _ }
2558   - { id: 3, class: _ }
2559   - { id: 4, class: _ }
2560   - { id: 5, class: _ }
2561   - { id: 6, class: _ }
2562 body:             |
2563   bb.1 (%ir-block.0):
2564     liveins: $xmm0, $xmm1
2566     ; FAST-LABEL: name: fcmp_float_ogt
2567     ; FAST: liveins: $xmm0, $xmm1
2568     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2569     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2570     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2571     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2572     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s32), [[TRUNC1]]
2573     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2574     ; FAST: $al = COPY [[COPY2]](s8)
2575     ; FAST: RET 0, implicit $al
2576     ; GREEDY-LABEL: name: fcmp_float_ogt
2577     ; GREEDY: liveins: $xmm0, $xmm1
2578     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2579     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2580     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2581     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2582     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s32), [[TRUNC1]]
2583     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2584     ; GREEDY: $al = COPY [[COPY2]](s8)
2585     ; GREEDY: RET 0, implicit $al
2586     %2:_(s128) = COPY $xmm0
2587     %0:_(s32) = G_TRUNC %2(s128)
2588     %3:_(s128) = COPY $xmm1
2589     %1:_(s32) = G_TRUNC %3(s128)
2590     %6:_(s8) = G_FCMP floatpred(ogt), %0(s32), %1
2591     %5:_(s8) = COPY %6(s8)
2592     $al = COPY %5(s8)
2593     RET 0, implicit $al
2597 name:            fcmp_float_oge
2598 alignment:       16
2599 legalized:       true
2600 tracksRegLiveness: true
2601 registers:
2602   - { id: 0, class: _ }
2603   - { id: 1, class: _ }
2604   - { id: 2, class: _ }
2605   - { id: 3, class: _ }
2606   - { id: 4, class: _ }
2607   - { id: 5, class: _ }
2608   - { id: 6, class: _ }
2609 body:             |
2610   bb.1 (%ir-block.0):
2611     liveins: $xmm0, $xmm1
2613     ; FAST-LABEL: name: fcmp_float_oge
2614     ; FAST: liveins: $xmm0, $xmm1
2615     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2616     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2617     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2618     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2619     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s32), [[TRUNC1]]
2620     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2621     ; FAST: $al = COPY [[COPY2]](s8)
2622     ; FAST: RET 0, implicit $al
2623     ; GREEDY-LABEL: name: fcmp_float_oge
2624     ; GREEDY: liveins: $xmm0, $xmm1
2625     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2626     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2627     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2628     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2629     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s32), [[TRUNC1]]
2630     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2631     ; GREEDY: $al = COPY [[COPY2]](s8)
2632     ; GREEDY: RET 0, implicit $al
2633     %2:_(s128) = COPY $xmm0
2634     %0:_(s32) = G_TRUNC %2(s128)
2635     %3:_(s128) = COPY $xmm1
2636     %1:_(s32) = G_TRUNC %3(s128)
2637     %6:_(s8) = G_FCMP floatpred(oge), %0(s32), %1
2638     %5:_(s8) = COPY %6(s8)
2639     $al = COPY %5(s8)
2640     RET 0, implicit $al
2644 name:            fcmp_float_olt
2645 alignment:       16
2646 legalized:       true
2647 tracksRegLiveness: true
2648 registers:
2649   - { id: 0, class: _ }
2650   - { id: 1, class: _ }
2651   - { id: 2, class: _ }
2652   - { id: 3, class: _ }
2653   - { id: 4, class: _ }
2654   - { id: 5, class: _ }
2655   - { id: 6, class: _ }
2656 body:             |
2657   bb.1 (%ir-block.0):
2658     liveins: $xmm0, $xmm1
2660     ; FAST-LABEL: name: fcmp_float_olt
2661     ; FAST: liveins: $xmm0, $xmm1
2662     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2663     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2664     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2665     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2666     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s32), [[TRUNC1]]
2667     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2668     ; FAST: $al = COPY [[COPY2]](s8)
2669     ; FAST: RET 0, implicit $al
2670     ; GREEDY-LABEL: name: fcmp_float_olt
2671     ; GREEDY: liveins: $xmm0, $xmm1
2672     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2673     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2674     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2675     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2676     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s32), [[TRUNC1]]
2677     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2678     ; GREEDY: $al = COPY [[COPY2]](s8)
2679     ; GREEDY: RET 0, implicit $al
2680     %2:_(s128) = COPY $xmm0
2681     %0:_(s32) = G_TRUNC %2(s128)
2682     %3:_(s128) = COPY $xmm1
2683     %1:_(s32) = G_TRUNC %3(s128)
2684     %6:_(s8) = G_FCMP floatpred(olt), %0(s32), %1
2685     %5:_(s8) = COPY %6(s8)
2686     $al = COPY %5(s8)
2687     RET 0, implicit $al
2691 name:            fcmp_float_ole
2692 alignment:       16
2693 legalized:       true
2694 tracksRegLiveness: true
2695 registers:
2696   - { id: 0, class: _ }
2697   - { id: 1, class: _ }
2698   - { id: 2, class: _ }
2699   - { id: 3, class: _ }
2700   - { id: 4, class: _ }
2701   - { id: 5, class: _ }
2702   - { id: 6, class: _ }
2703 body:             |
2704   bb.1 (%ir-block.0):
2705     liveins: $xmm0, $xmm1
2707     ; FAST-LABEL: name: fcmp_float_ole
2708     ; FAST: liveins: $xmm0, $xmm1
2709     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2710     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2711     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2712     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2713     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s32), [[TRUNC1]]
2714     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2715     ; FAST: $al = COPY [[COPY2]](s8)
2716     ; FAST: RET 0, implicit $al
2717     ; GREEDY-LABEL: name: fcmp_float_ole
2718     ; GREEDY: liveins: $xmm0, $xmm1
2719     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2720     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2721     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2722     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2723     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s32), [[TRUNC1]]
2724     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2725     ; GREEDY: $al = COPY [[COPY2]](s8)
2726     ; GREEDY: RET 0, implicit $al
2727     %2:_(s128) = COPY $xmm0
2728     %0:_(s32) = G_TRUNC %2(s128)
2729     %3:_(s128) = COPY $xmm1
2730     %1:_(s32) = G_TRUNC %3(s128)
2731     %6:_(s8) = G_FCMP floatpred(ole), %0(s32), %1
2732     %5:_(s8) = COPY %6(s8)
2733     $al = COPY %5(s8)
2734     RET 0, implicit $al
2738 name:            fcmp_float_one
2739 alignment:       16
2740 legalized:       true
2741 tracksRegLiveness: true
2742 registers:
2743   - { id: 0, class: _ }
2744   - { id: 1, class: _ }
2745   - { id: 2, class: _ }
2746   - { id: 3, class: _ }
2747   - { id: 4, class: _ }
2748   - { id: 5, class: _ }
2749   - { id: 6, class: _ }
2750 body:             |
2751   bb.1 (%ir-block.0):
2752     liveins: $xmm0, $xmm1
2754     ; FAST-LABEL: name: fcmp_float_one
2755     ; FAST: liveins: $xmm0, $xmm1
2756     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2757     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2758     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2759     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2760     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s32), [[TRUNC1]]
2761     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2762     ; FAST: $al = COPY [[COPY2]](s8)
2763     ; FAST: RET 0, implicit $al
2764     ; GREEDY-LABEL: name: fcmp_float_one
2765     ; GREEDY: liveins: $xmm0, $xmm1
2766     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2767     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2768     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2769     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2770     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s32), [[TRUNC1]]
2771     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2772     ; GREEDY: $al = COPY [[COPY2]](s8)
2773     ; GREEDY: RET 0, implicit $al
2774     %2:_(s128) = COPY $xmm0
2775     %0:_(s32) = G_TRUNC %2(s128)
2776     %3:_(s128) = COPY $xmm1
2777     %1:_(s32) = G_TRUNC %3(s128)
2778     %6:_(s8) = G_FCMP floatpred(one), %0(s32), %1
2779     %5:_(s8) = COPY %6(s8)
2780     $al = COPY %5(s8)
2781     RET 0, implicit $al
2785 name:            fcmp_float_ord
2786 alignment:       16
2787 legalized:       true
2788 tracksRegLiveness: true
2789 registers:
2790   - { id: 0, class: _ }
2791   - { id: 1, class: _ }
2792   - { id: 2, class: _ }
2793   - { id: 3, class: _ }
2794   - { id: 4, class: _ }
2795   - { id: 5, class: _ }
2796   - { id: 6, class: _ }
2797 body:             |
2798   bb.1 (%ir-block.0):
2799     liveins: $xmm0, $xmm1
2801     ; FAST-LABEL: name: fcmp_float_ord
2802     ; FAST: liveins: $xmm0, $xmm1
2803     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2804     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2805     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2806     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2807     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s32), [[TRUNC1]]
2808     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2809     ; FAST: $al = COPY [[COPY2]](s8)
2810     ; FAST: RET 0, implicit $al
2811     ; GREEDY-LABEL: name: fcmp_float_ord
2812     ; GREEDY: liveins: $xmm0, $xmm1
2813     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2814     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2815     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2816     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2817     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s32), [[TRUNC1]]
2818     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2819     ; GREEDY: $al = COPY [[COPY2]](s8)
2820     ; GREEDY: RET 0, implicit $al
2821     %2:_(s128) = COPY $xmm0
2822     %0:_(s32) = G_TRUNC %2(s128)
2823     %3:_(s128) = COPY $xmm1
2824     %1:_(s32) = G_TRUNC %3(s128)
2825     %6:_(s8) = G_FCMP floatpred(ord), %0(s32), %1
2826     %5:_(s8) = COPY %6(s8)
2827     $al = COPY %5(s8)
2828     RET 0, implicit $al
2832 name:            fcmp_float_uno
2833 alignment:       16
2834 legalized:       true
2835 tracksRegLiveness: true
2836 registers:
2837   - { id: 0, class: _ }
2838   - { id: 1, class: _ }
2839   - { id: 2, class: _ }
2840   - { id: 3, class: _ }
2841   - { id: 4, class: _ }
2842   - { id: 5, class: _ }
2843   - { id: 6, class: _ }
2844 body:             |
2845   bb.1 (%ir-block.0):
2846     liveins: $xmm0, $xmm1
2848     ; FAST-LABEL: name: fcmp_float_uno
2849     ; FAST: liveins: $xmm0, $xmm1
2850     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2851     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2852     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2853     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2854     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s32), [[TRUNC1]]
2855     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2856     ; FAST: $al = COPY [[COPY2]](s8)
2857     ; FAST: RET 0, implicit $al
2858     ; GREEDY-LABEL: name: fcmp_float_uno
2859     ; GREEDY: liveins: $xmm0, $xmm1
2860     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2861     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2862     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2863     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2864     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s32), [[TRUNC1]]
2865     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2866     ; GREEDY: $al = COPY [[COPY2]](s8)
2867     ; GREEDY: RET 0, implicit $al
2868     %2:_(s128) = COPY $xmm0
2869     %0:_(s32) = G_TRUNC %2(s128)
2870     %3:_(s128) = COPY $xmm1
2871     %1:_(s32) = G_TRUNC %3(s128)
2872     %6:_(s8) = G_FCMP floatpred(uno), %0(s32), %1
2873     %5:_(s8) = COPY %6(s8)
2874     $al = COPY %5(s8)
2875     RET 0, implicit $al
2879 name:            fcmp_float_ueq
2880 alignment:       16
2881 legalized:       true
2882 tracksRegLiveness: true
2883 registers:
2884   - { id: 0, class: _ }
2885   - { id: 1, class: _ }
2886   - { id: 2, class: _ }
2887   - { id: 3, class: _ }
2888   - { id: 4, class: _ }
2889   - { id: 5, class: _ }
2890   - { id: 6, class: _ }
2891 body:             |
2892   bb.1 (%ir-block.0):
2893     liveins: $xmm0, $xmm1
2895     ; FAST-LABEL: name: fcmp_float_ueq
2896     ; FAST: liveins: $xmm0, $xmm1
2897     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2898     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2899     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2900     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2901     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s32), [[TRUNC1]]
2902     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2903     ; FAST: $al = COPY [[COPY2]](s8)
2904     ; FAST: RET 0, implicit $al
2905     ; GREEDY-LABEL: name: fcmp_float_ueq
2906     ; GREEDY: liveins: $xmm0, $xmm1
2907     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2908     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2909     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2910     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2911     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s32), [[TRUNC1]]
2912     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2913     ; GREEDY: $al = COPY [[COPY2]](s8)
2914     ; GREEDY: RET 0, implicit $al
2915     %2:_(s128) = COPY $xmm0
2916     %0:_(s32) = G_TRUNC %2(s128)
2917     %3:_(s128) = COPY $xmm1
2918     %1:_(s32) = G_TRUNC %3(s128)
2919     %6:_(s8) = G_FCMP floatpred(ueq), %0(s32), %1
2920     %5:_(s8) = COPY %6(s8)
2921     $al = COPY %5(s8)
2922     RET 0, implicit $al
2926 name:            fcmp_float_ugt
2927 alignment:       16
2928 legalized:       true
2929 tracksRegLiveness: true
2930 registers:
2931   - { id: 0, class: _ }
2932   - { id: 1, class: _ }
2933   - { id: 2, class: _ }
2934   - { id: 3, class: _ }
2935   - { id: 4, class: _ }
2936   - { id: 5, class: _ }
2937   - { id: 6, class: _ }
2938 body:             |
2939   bb.1 (%ir-block.0):
2940     liveins: $xmm0, $xmm1
2942     ; FAST-LABEL: name: fcmp_float_ugt
2943     ; FAST: liveins: $xmm0, $xmm1
2944     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2945     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2946     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2947     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2948     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s32), [[TRUNC1]]
2949     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2950     ; FAST: $al = COPY [[COPY2]](s8)
2951     ; FAST: RET 0, implicit $al
2952     ; GREEDY-LABEL: name: fcmp_float_ugt
2953     ; GREEDY: liveins: $xmm0, $xmm1
2954     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2955     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2956     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2957     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2958     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s32), [[TRUNC1]]
2959     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2960     ; GREEDY: $al = COPY [[COPY2]](s8)
2961     ; GREEDY: RET 0, implicit $al
2962     %2:_(s128) = COPY $xmm0
2963     %0:_(s32) = G_TRUNC %2(s128)
2964     %3:_(s128) = COPY $xmm1
2965     %1:_(s32) = G_TRUNC %3(s128)
2966     %6:_(s8) = G_FCMP floatpred(ugt), %0(s32), %1
2967     %5:_(s8) = COPY %6(s8)
2968     $al = COPY %5(s8)
2969     RET 0, implicit $al
2973 name:            fcmp_float_uge
2974 alignment:       16
2975 legalized:       true
2976 tracksRegLiveness: true
2977 registers:
2978   - { id: 0, class: _ }
2979   - { id: 1, class: _ }
2980   - { id: 2, class: _ }
2981   - { id: 3, class: _ }
2982   - { id: 4, class: _ }
2983   - { id: 5, class: _ }
2984   - { id: 6, class: _ }
2985 body:             |
2986   bb.1 (%ir-block.0):
2987     liveins: $xmm0, $xmm1
2989     ; FAST-LABEL: name: fcmp_float_uge
2990     ; FAST: liveins: $xmm0, $xmm1
2991     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
2992     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
2993     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
2994     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
2995     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s32), [[TRUNC1]]
2996     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
2997     ; FAST: $al = COPY [[COPY2]](s8)
2998     ; FAST: RET 0, implicit $al
2999     ; GREEDY-LABEL: name: fcmp_float_uge
3000     ; GREEDY: liveins: $xmm0, $xmm1
3001     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3002     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3003     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3004     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3005     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s32), [[TRUNC1]]
3006     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3007     ; GREEDY: $al = COPY [[COPY2]](s8)
3008     ; GREEDY: RET 0, implicit $al
3009     %2:_(s128) = COPY $xmm0
3010     %0:_(s32) = G_TRUNC %2(s128)
3011     %3:_(s128) = COPY $xmm1
3012     %1:_(s32) = G_TRUNC %3(s128)
3013     %6:_(s8) = G_FCMP floatpred(uge), %0(s32), %1
3014     %5:_(s8) = COPY %6(s8)
3015     $al = COPY %5(s8)
3016     RET 0, implicit $al
3020 name:            fcmp_float_ult
3021 alignment:       16
3022 legalized:       true
3023 tracksRegLiveness: true
3024 registers:
3025   - { id: 0, class: _ }
3026   - { id: 1, class: _ }
3027   - { id: 2, class: _ }
3028   - { id: 3, class: _ }
3029   - { id: 4, class: _ }
3030   - { id: 5, class: _ }
3031   - { id: 6, class: _ }
3032 body:             |
3033   bb.1 (%ir-block.0):
3034     liveins: $xmm0, $xmm1
3036     ; FAST-LABEL: name: fcmp_float_ult
3037     ; FAST: liveins: $xmm0, $xmm1
3038     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3039     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3040     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3041     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3042     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s32), [[TRUNC1]]
3043     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3044     ; FAST: $al = COPY [[COPY2]](s8)
3045     ; FAST: RET 0, implicit $al
3046     ; GREEDY-LABEL: name: fcmp_float_ult
3047     ; GREEDY: liveins: $xmm0, $xmm1
3048     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3049     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3050     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3051     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3052     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s32), [[TRUNC1]]
3053     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3054     ; GREEDY: $al = COPY [[COPY2]](s8)
3055     ; GREEDY: RET 0, implicit $al
3056     %2:_(s128) = COPY $xmm0
3057     %0:_(s32) = G_TRUNC %2(s128)
3058     %3:_(s128) = COPY $xmm1
3059     %1:_(s32) = G_TRUNC %3(s128)
3060     %6:_(s8) = G_FCMP floatpred(ult), %0(s32), %1
3061     %5:_(s8) = COPY %6(s8)
3062     $al = COPY %5(s8)
3063     RET 0, implicit $al
3067 name:            fcmp_float_ule
3068 alignment:       16
3069 legalized:       true
3070 tracksRegLiveness: true
3071 registers:
3072   - { id: 0, class: _ }
3073   - { id: 1, class: _ }
3074   - { id: 2, class: _ }
3075   - { id: 3, class: _ }
3076   - { id: 4, class: _ }
3077   - { id: 5, class: _ }
3078   - { id: 6, class: _ }
3079 body:             |
3080   bb.1 (%ir-block.0):
3081     liveins: $xmm0, $xmm1
3083     ; FAST-LABEL: name: fcmp_float_ule
3084     ; FAST: liveins: $xmm0, $xmm1
3085     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3086     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3087     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3088     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3089     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s32), [[TRUNC1]]
3090     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3091     ; FAST: $al = COPY [[COPY2]](s8)
3092     ; FAST: RET 0, implicit $al
3093     ; GREEDY-LABEL: name: fcmp_float_ule
3094     ; GREEDY: liveins: $xmm0, $xmm1
3095     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3096     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3097     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3098     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3099     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s32), [[TRUNC1]]
3100     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3101     ; GREEDY: $al = COPY [[COPY2]](s8)
3102     ; GREEDY: RET 0, implicit $al
3103     %2:_(s128) = COPY $xmm0
3104     %0:_(s32) = G_TRUNC %2(s128)
3105     %3:_(s128) = COPY $xmm1
3106     %1:_(s32) = G_TRUNC %3(s128)
3107     %6:_(s8) = G_FCMP floatpred(ule), %0(s32), %1
3108     %5:_(s8) = COPY %6(s8)
3109     $al = COPY %5(s8)
3110     RET 0, implicit $al
3114 name:            fcmp_float_une
3115 alignment:       16
3116 legalized:       true
3117 tracksRegLiveness: true
3118 registers:
3119   - { id: 0, class: _ }
3120   - { id: 1, class: _ }
3121   - { id: 2, class: _ }
3122   - { id: 3, class: _ }
3123   - { id: 4, class: _ }
3124   - { id: 5, class: _ }
3125   - { id: 6, class: _ }
3126 body:             |
3127   bb.1 (%ir-block.0):
3128     liveins: $xmm0, $xmm1
3130     ; FAST-LABEL: name: fcmp_float_une
3131     ; FAST: liveins: $xmm0, $xmm1
3132     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3133     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3134     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3135     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3136     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s32), [[TRUNC1]]
3137     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3138     ; FAST: $al = COPY [[COPY2]](s8)
3139     ; FAST: RET 0, implicit $al
3140     ; GREEDY-LABEL: name: fcmp_float_une
3141     ; GREEDY: liveins: $xmm0, $xmm1
3142     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3143     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY]](s128)
3144     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3145     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s32) = G_TRUNC [[COPY1]](s128)
3146     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s32), [[TRUNC1]]
3147     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3148     ; GREEDY: $al = COPY [[COPY2]](s8)
3149     ; GREEDY: RET 0, implicit $al
3150     %2:_(s128) = COPY $xmm0
3151     %0:_(s32) = G_TRUNC %2(s128)
3152     %3:_(s128) = COPY $xmm1
3153     %1:_(s32) = G_TRUNC %3(s128)
3154     %6:_(s8) = G_FCMP floatpred(une), %0(s32), %1
3155     %5:_(s8) = COPY %6(s8)
3156     $al = COPY %5(s8)
3157     RET 0, implicit $al
3161 name:            fcmp_double_oeq
3162 alignment:       16
3163 legalized:       true
3164 tracksRegLiveness: true
3165 registers:
3166   - { id: 0, class: _ }
3167   - { id: 1, class: _ }
3168   - { id: 2, class: _ }
3169   - { id: 3, class: _ }
3170   - { id: 4, class: _ }
3171   - { id: 5, class: _ }
3172   - { id: 6, class: _ }
3173 body:             |
3174   bb.1 (%ir-block.0):
3175     liveins: $xmm0, $xmm1
3177     ; FAST-LABEL: name: fcmp_double_oeq
3178     ; FAST: liveins: $xmm0, $xmm1
3179     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3180     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3181     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3182     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3183     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s64), [[TRUNC1]]
3184     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3185     ; FAST: $al = COPY [[COPY2]](s8)
3186     ; FAST: RET 0, implicit $al
3187     ; GREEDY-LABEL: name: fcmp_double_oeq
3188     ; GREEDY: liveins: $xmm0, $xmm1
3189     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3190     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3191     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3192     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3193     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oeq), [[TRUNC]](s64), [[TRUNC1]]
3194     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3195     ; GREEDY: $al = COPY [[COPY2]](s8)
3196     ; GREEDY: RET 0, implicit $al
3197     %2:_(s128) = COPY $xmm0
3198     %0:_(s64) = G_TRUNC %2(s128)
3199     %3:_(s128) = COPY $xmm1
3200     %1:_(s64) = G_TRUNC %3(s128)
3201     %6:_(s8) = G_FCMP floatpred(oeq), %0(s64), %1
3202     %5:_(s8) = COPY %6(s8)
3203     $al = COPY %5(s8)
3204     RET 0, implicit $al
3208 name:            fcmp_double_ogt
3209 alignment:       16
3210 legalized:       true
3211 tracksRegLiveness: true
3212 registers:
3213   - { id: 0, class: _ }
3214   - { id: 1, class: _ }
3215   - { id: 2, class: _ }
3216   - { id: 3, class: _ }
3217   - { id: 4, class: _ }
3218   - { id: 5, class: _ }
3219   - { id: 6, class: _ }
3220 body:             |
3221   bb.1 (%ir-block.0):
3222     liveins: $xmm0, $xmm1
3224     ; FAST-LABEL: name: fcmp_double_ogt
3225     ; FAST: liveins: $xmm0, $xmm1
3226     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3227     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3228     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3229     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3230     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s64), [[TRUNC1]]
3231     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3232     ; FAST: $al = COPY [[COPY2]](s8)
3233     ; FAST: RET 0, implicit $al
3234     ; GREEDY-LABEL: name: fcmp_double_ogt
3235     ; GREEDY: liveins: $xmm0, $xmm1
3236     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3237     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3238     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3239     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3240     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ogt), [[TRUNC]](s64), [[TRUNC1]]
3241     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3242     ; GREEDY: $al = COPY [[COPY2]](s8)
3243     ; GREEDY: RET 0, implicit $al
3244     %2:_(s128) = COPY $xmm0
3245     %0:_(s64) = G_TRUNC %2(s128)
3246     %3:_(s128) = COPY $xmm1
3247     %1:_(s64) = G_TRUNC %3(s128)
3248     %6:_(s8) = G_FCMP floatpred(ogt), %0(s64), %1
3249     %5:_(s8) = COPY %6(s8)
3250     $al = COPY %5(s8)
3251     RET 0, implicit $al
3255 name:            fcmp_double_oge
3256 alignment:       16
3257 legalized:       true
3258 tracksRegLiveness: true
3259 registers:
3260   - { id: 0, class: _ }
3261   - { id: 1, class: _ }
3262   - { id: 2, class: _ }
3263   - { id: 3, class: _ }
3264   - { id: 4, class: _ }
3265   - { id: 5, class: _ }
3266   - { id: 6, class: _ }
3267 body:             |
3268   bb.1 (%ir-block.0):
3269     liveins: $xmm0, $xmm1
3271     ; FAST-LABEL: name: fcmp_double_oge
3272     ; FAST: liveins: $xmm0, $xmm1
3273     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3274     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3275     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3276     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3277     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s64), [[TRUNC1]]
3278     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3279     ; FAST: $al = COPY [[COPY2]](s8)
3280     ; FAST: RET 0, implicit $al
3281     ; GREEDY-LABEL: name: fcmp_double_oge
3282     ; GREEDY: liveins: $xmm0, $xmm1
3283     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3284     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3285     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3286     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3287     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(oge), [[TRUNC]](s64), [[TRUNC1]]
3288     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3289     ; GREEDY: $al = COPY [[COPY2]](s8)
3290     ; GREEDY: RET 0, implicit $al
3291     %2:_(s128) = COPY $xmm0
3292     %0:_(s64) = G_TRUNC %2(s128)
3293     %3:_(s128) = COPY $xmm1
3294     %1:_(s64) = G_TRUNC %3(s128)
3295     %6:_(s8) = G_FCMP floatpred(oge), %0(s64), %1
3296     %5:_(s8) = COPY %6(s8)
3297     $al = COPY %5(s8)
3298     RET 0, implicit $al
3302 name:            fcmp_double_olt
3303 alignment:       16
3304 legalized:       true
3305 tracksRegLiveness: true
3306 registers:
3307   - { id: 0, class: _ }
3308   - { id: 1, class: _ }
3309   - { id: 2, class: _ }
3310   - { id: 3, class: _ }
3311   - { id: 4, class: _ }
3312   - { id: 5, class: _ }
3313   - { id: 6, class: _ }
3314 body:             |
3315   bb.1 (%ir-block.0):
3316     liveins: $xmm0, $xmm1
3318     ; FAST-LABEL: name: fcmp_double_olt
3319     ; FAST: liveins: $xmm0, $xmm1
3320     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3321     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3322     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3323     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3324     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s64), [[TRUNC1]]
3325     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3326     ; FAST: $al = COPY [[COPY2]](s8)
3327     ; FAST: RET 0, implicit $al
3328     ; GREEDY-LABEL: name: fcmp_double_olt
3329     ; GREEDY: liveins: $xmm0, $xmm1
3330     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3331     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3332     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3333     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3334     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(olt), [[TRUNC]](s64), [[TRUNC1]]
3335     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3336     ; GREEDY: $al = COPY [[COPY2]](s8)
3337     ; GREEDY: RET 0, implicit $al
3338     %2:_(s128) = COPY $xmm0
3339     %0:_(s64) = G_TRUNC %2(s128)
3340     %3:_(s128) = COPY $xmm1
3341     %1:_(s64) = G_TRUNC %3(s128)
3342     %6:_(s8) = G_FCMP floatpred(olt), %0(s64), %1
3343     %5:_(s8) = COPY %6(s8)
3344     $al = COPY %5(s8)
3345     RET 0, implicit $al
3349 name:            fcmp_double_ole
3350 alignment:       16
3351 legalized:       true
3352 tracksRegLiveness: true
3353 registers:
3354   - { id: 0, class: _ }
3355   - { id: 1, class: _ }
3356   - { id: 2, class: _ }
3357   - { id: 3, class: _ }
3358   - { id: 4, class: _ }
3359   - { id: 5, class: _ }
3360   - { id: 6, class: _ }
3361 body:             |
3362   bb.1 (%ir-block.0):
3363     liveins: $xmm0, $xmm1
3365     ; FAST-LABEL: name: fcmp_double_ole
3366     ; FAST: liveins: $xmm0, $xmm1
3367     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3368     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3369     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3370     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3371     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s64), [[TRUNC1]]
3372     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3373     ; FAST: $al = COPY [[COPY2]](s8)
3374     ; FAST: RET 0, implicit $al
3375     ; GREEDY-LABEL: name: fcmp_double_ole
3376     ; GREEDY: liveins: $xmm0, $xmm1
3377     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3378     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3379     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3380     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3381     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ole), [[TRUNC]](s64), [[TRUNC1]]
3382     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3383     ; GREEDY: $al = COPY [[COPY2]](s8)
3384     ; GREEDY: RET 0, implicit $al
3385     %2:_(s128) = COPY $xmm0
3386     %0:_(s64) = G_TRUNC %2(s128)
3387     %3:_(s128) = COPY $xmm1
3388     %1:_(s64) = G_TRUNC %3(s128)
3389     %6:_(s8) = G_FCMP floatpred(ole), %0(s64), %1
3390     %5:_(s8) = COPY %6(s8)
3391     $al = COPY %5(s8)
3392     RET 0, implicit $al
3396 name:            fcmp_double_one
3397 alignment:       16
3398 legalized:       true
3399 tracksRegLiveness: true
3400 registers:
3401   - { id: 0, class: _ }
3402   - { id: 1, class: _ }
3403   - { id: 2, class: _ }
3404   - { id: 3, class: _ }
3405   - { id: 4, class: _ }
3406   - { id: 5, class: _ }
3407   - { id: 6, class: _ }
3408 body:             |
3409   bb.1 (%ir-block.0):
3410     liveins: $xmm0, $xmm1
3412     ; FAST-LABEL: name: fcmp_double_one
3413     ; FAST: liveins: $xmm0, $xmm1
3414     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3415     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3416     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3417     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3418     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s64), [[TRUNC1]]
3419     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3420     ; FAST: $al = COPY [[COPY2]](s8)
3421     ; FAST: RET 0, implicit $al
3422     ; GREEDY-LABEL: name: fcmp_double_one
3423     ; GREEDY: liveins: $xmm0, $xmm1
3424     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3425     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3426     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3427     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3428     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(one), [[TRUNC]](s64), [[TRUNC1]]
3429     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3430     ; GREEDY: $al = COPY [[COPY2]](s8)
3431     ; GREEDY: RET 0, implicit $al
3432     %2:_(s128) = COPY $xmm0
3433     %0:_(s64) = G_TRUNC %2(s128)
3434     %3:_(s128) = COPY $xmm1
3435     %1:_(s64) = G_TRUNC %3(s128)
3436     %6:_(s8) = G_FCMP floatpred(one), %0(s64), %1
3437     %5:_(s8) = COPY %6(s8)
3438     $al = COPY %5(s8)
3439     RET 0, implicit $al
3443 name:            fcmp_double_ord
3444 alignment:       16
3445 legalized:       true
3446 tracksRegLiveness: true
3447 registers:
3448   - { id: 0, class: _ }
3449   - { id: 1, class: _ }
3450   - { id: 2, class: _ }
3451   - { id: 3, class: _ }
3452   - { id: 4, class: _ }
3453   - { id: 5, class: _ }
3454   - { id: 6, class: _ }
3455 body:             |
3456   bb.1 (%ir-block.0):
3457     liveins: $xmm0, $xmm1
3459     ; FAST-LABEL: name: fcmp_double_ord
3460     ; FAST: liveins: $xmm0, $xmm1
3461     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3462     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3463     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3464     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3465     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s64), [[TRUNC1]]
3466     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3467     ; FAST: $al = COPY [[COPY2]](s8)
3468     ; FAST: RET 0, implicit $al
3469     ; GREEDY-LABEL: name: fcmp_double_ord
3470     ; GREEDY: liveins: $xmm0, $xmm1
3471     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3472     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3473     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3474     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3475     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ord), [[TRUNC]](s64), [[TRUNC1]]
3476     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3477     ; GREEDY: $al = COPY [[COPY2]](s8)
3478     ; GREEDY: RET 0, implicit $al
3479     %2:_(s128) = COPY $xmm0
3480     %0:_(s64) = G_TRUNC %2(s128)
3481     %3:_(s128) = COPY $xmm1
3482     %1:_(s64) = G_TRUNC %3(s128)
3483     %6:_(s8) = G_FCMP floatpred(ord), %0(s64), %1
3484     %5:_(s8) = COPY %6(s8)
3485     $al = COPY %5(s8)
3486     RET 0, implicit $al
3490 name:            fcmp_double_uno
3491 alignment:       16
3492 legalized:       true
3493 tracksRegLiveness: true
3494 registers:
3495   - { id: 0, class: _ }
3496   - { id: 1, class: _ }
3497   - { id: 2, class: _ }
3498   - { id: 3, class: _ }
3499   - { id: 4, class: _ }
3500   - { id: 5, class: _ }
3501   - { id: 6, class: _ }
3502 body:             |
3503   bb.1 (%ir-block.0):
3504     liveins: $xmm0, $xmm1
3506     ; FAST-LABEL: name: fcmp_double_uno
3507     ; FAST: liveins: $xmm0, $xmm1
3508     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3509     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3510     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3511     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3512     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s64), [[TRUNC1]]
3513     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3514     ; FAST: $al = COPY [[COPY2]](s8)
3515     ; FAST: RET 0, implicit $al
3516     ; GREEDY-LABEL: name: fcmp_double_uno
3517     ; GREEDY: liveins: $xmm0, $xmm1
3518     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3519     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3520     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3521     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3522     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uno), [[TRUNC]](s64), [[TRUNC1]]
3523     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3524     ; GREEDY: $al = COPY [[COPY2]](s8)
3525     ; GREEDY: RET 0, implicit $al
3526     %2:_(s128) = COPY $xmm0
3527     %0:_(s64) = G_TRUNC %2(s128)
3528     %3:_(s128) = COPY $xmm1
3529     %1:_(s64) = G_TRUNC %3(s128)
3530     %6:_(s8) = G_FCMP floatpred(uno), %0(s64), %1
3531     %5:_(s8) = COPY %6(s8)
3532     $al = COPY %5(s8)
3533     RET 0, implicit $al
3537 name:            fcmp_double_ueq
3538 alignment:       16
3539 legalized:       true
3540 tracksRegLiveness: true
3541 registers:
3542   - { id: 0, class: _ }
3543   - { id: 1, class: _ }
3544   - { id: 2, class: _ }
3545   - { id: 3, class: _ }
3546   - { id: 4, class: _ }
3547   - { id: 5, class: _ }
3548   - { id: 6, class: _ }
3549 body:             |
3550   bb.1 (%ir-block.0):
3551     liveins: $xmm0, $xmm1
3553     ; FAST-LABEL: name: fcmp_double_ueq
3554     ; FAST: liveins: $xmm0, $xmm1
3555     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3556     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3557     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3558     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3559     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s64), [[TRUNC1]]
3560     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3561     ; FAST: $al = COPY [[COPY2]](s8)
3562     ; FAST: RET 0, implicit $al
3563     ; GREEDY-LABEL: name: fcmp_double_ueq
3564     ; GREEDY: liveins: $xmm0, $xmm1
3565     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3566     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3567     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3568     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3569     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ueq), [[TRUNC]](s64), [[TRUNC1]]
3570     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3571     ; GREEDY: $al = COPY [[COPY2]](s8)
3572     ; GREEDY: RET 0, implicit $al
3573     %2:_(s128) = COPY $xmm0
3574     %0:_(s64) = G_TRUNC %2(s128)
3575     %3:_(s128) = COPY $xmm1
3576     %1:_(s64) = G_TRUNC %3(s128)
3577     %6:_(s8) = G_FCMP floatpred(ueq), %0(s64), %1
3578     %5:_(s8) = COPY %6(s8)
3579     $al = COPY %5(s8)
3580     RET 0, implicit $al
3584 name:            fcmp_double_ugt
3585 alignment:       16
3586 legalized:       true
3587 tracksRegLiveness: true
3588 registers:
3589   - { id: 0, class: _ }
3590   - { id: 1, class: _ }
3591   - { id: 2, class: _ }
3592   - { id: 3, class: _ }
3593   - { id: 4, class: _ }
3594   - { id: 5, class: _ }
3595   - { id: 6, class: _ }
3596 body:             |
3597   bb.1 (%ir-block.0):
3598     liveins: $xmm0, $xmm1
3600     ; FAST-LABEL: name: fcmp_double_ugt
3601     ; FAST: liveins: $xmm0, $xmm1
3602     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3603     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3604     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3605     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3606     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s64), [[TRUNC1]]
3607     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3608     ; FAST: $al = COPY [[COPY2]](s8)
3609     ; FAST: RET 0, implicit $al
3610     ; GREEDY-LABEL: name: fcmp_double_ugt
3611     ; GREEDY: liveins: $xmm0, $xmm1
3612     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3613     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3614     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3615     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3616     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ugt), [[TRUNC]](s64), [[TRUNC1]]
3617     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3618     ; GREEDY: $al = COPY [[COPY2]](s8)
3619     ; GREEDY: RET 0, implicit $al
3620     %2:_(s128) = COPY $xmm0
3621     %0:_(s64) = G_TRUNC %2(s128)
3622     %3:_(s128) = COPY $xmm1
3623     %1:_(s64) = G_TRUNC %3(s128)
3624     %6:_(s8) = G_FCMP floatpred(ugt), %0(s64), %1
3625     %5:_(s8) = COPY %6(s8)
3626     $al = COPY %5(s8)
3627     RET 0, implicit $al
3631 name:            fcmp_double_uge
3632 alignment:       16
3633 legalized:       true
3634 tracksRegLiveness: true
3635 registers:
3636   - { id: 0, class: _ }
3637   - { id: 1, class: _ }
3638   - { id: 2, class: _ }
3639   - { id: 3, class: _ }
3640   - { id: 4, class: _ }
3641   - { id: 5, class: _ }
3642   - { id: 6, class: _ }
3643 body:             |
3644   bb.1 (%ir-block.0):
3645     liveins: $xmm0, $xmm1
3647     ; FAST-LABEL: name: fcmp_double_uge
3648     ; FAST: liveins: $xmm0, $xmm1
3649     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3650     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3651     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3652     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3653     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s64), [[TRUNC1]]
3654     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3655     ; FAST: $al = COPY [[COPY2]](s8)
3656     ; FAST: RET 0, implicit $al
3657     ; GREEDY-LABEL: name: fcmp_double_uge
3658     ; GREEDY: liveins: $xmm0, $xmm1
3659     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3660     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3661     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3662     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3663     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(uge), [[TRUNC]](s64), [[TRUNC1]]
3664     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3665     ; GREEDY: $al = COPY [[COPY2]](s8)
3666     ; GREEDY: RET 0, implicit $al
3667     %2:_(s128) = COPY $xmm0
3668     %0:_(s64) = G_TRUNC %2(s128)
3669     %3:_(s128) = COPY $xmm1
3670     %1:_(s64) = G_TRUNC %3(s128)
3671     %6:_(s8) = G_FCMP floatpred(uge), %0(s64), %1
3672     %5:_(s8) = COPY %6(s8)
3673     $al = COPY %5(s8)
3674     RET 0, implicit $al
3678 name:            fcmp_double_ult
3679 alignment:       16
3680 legalized:       true
3681 tracksRegLiveness: true
3682 registers:
3683   - { id: 0, class: _ }
3684   - { id: 1, class: _ }
3685   - { id: 2, class: _ }
3686   - { id: 3, class: _ }
3687   - { id: 4, class: _ }
3688   - { id: 5, class: _ }
3689   - { id: 6, class: _ }
3690 body:             |
3691   bb.1 (%ir-block.0):
3692     liveins: $xmm0, $xmm1
3694     ; FAST-LABEL: name: fcmp_double_ult
3695     ; FAST: liveins: $xmm0, $xmm1
3696     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3697     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3698     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3699     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3700     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s64), [[TRUNC1]]
3701     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3702     ; FAST: $al = COPY [[COPY2]](s8)
3703     ; FAST: RET 0, implicit $al
3704     ; GREEDY-LABEL: name: fcmp_double_ult
3705     ; GREEDY: liveins: $xmm0, $xmm1
3706     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3707     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3708     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3709     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3710     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ult), [[TRUNC]](s64), [[TRUNC1]]
3711     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3712     ; GREEDY: $al = COPY [[COPY2]](s8)
3713     ; GREEDY: RET 0, implicit $al
3714     %2:_(s128) = COPY $xmm0
3715     %0:_(s64) = G_TRUNC %2(s128)
3716     %3:_(s128) = COPY $xmm1
3717     %1:_(s64) = G_TRUNC %3(s128)
3718     %6:_(s8) = G_FCMP floatpred(ult), %0(s64), %1
3719     %5:_(s8) = COPY %6(s8)
3720     $al = COPY %5(s8)
3721     RET 0, implicit $al
3725 name:            fcmp_double_ule
3726 alignment:       16
3727 legalized:       true
3728 tracksRegLiveness: true
3729 registers:
3730   - { id: 0, class: _ }
3731   - { id: 1, class: _ }
3732   - { id: 2, class: _ }
3733   - { id: 3, class: _ }
3734   - { id: 4, class: _ }
3735   - { id: 5, class: _ }
3736   - { id: 6, class: _ }
3737 body:             |
3738   bb.1 (%ir-block.0):
3739     liveins: $xmm0, $xmm1
3741     ; FAST-LABEL: name: fcmp_double_ule
3742     ; FAST: liveins: $xmm0, $xmm1
3743     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3744     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3745     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3746     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3747     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s64), [[TRUNC1]]
3748     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3749     ; FAST: $al = COPY [[COPY2]](s8)
3750     ; FAST: RET 0, implicit $al
3751     ; GREEDY-LABEL: name: fcmp_double_ule
3752     ; GREEDY: liveins: $xmm0, $xmm1
3753     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3754     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3755     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3756     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3757     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(ule), [[TRUNC]](s64), [[TRUNC1]]
3758     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3759     ; GREEDY: $al = COPY [[COPY2]](s8)
3760     ; GREEDY: RET 0, implicit $al
3761     %2:_(s128) = COPY $xmm0
3762     %0:_(s64) = G_TRUNC %2(s128)
3763     %3:_(s128) = COPY $xmm1
3764     %1:_(s64) = G_TRUNC %3(s128)
3765     %6:_(s8) = G_FCMP floatpred(ule), %0(s64), %1
3766     %5:_(s8) = COPY %6(s8)
3767     $al = COPY %5(s8)
3768     RET 0, implicit $al
3772 name:            fcmp_double_une
3773 alignment:       16
3774 legalized:       true
3775 tracksRegLiveness: true
3776 registers:
3777   - { id: 0, class: _ }
3778   - { id: 1, class: _ }
3779   - { id: 2, class: _ }
3780   - { id: 3, class: _ }
3781   - { id: 4, class: _ }
3782   - { id: 5, class: _ }
3783   - { id: 6, class: _ }
3784 body:             |
3785   bb.1 (%ir-block.0):
3786     liveins: $xmm0, $xmm1
3788     ; FAST-LABEL: name: fcmp_double_une
3789     ; FAST: liveins: $xmm0, $xmm1
3790     ; FAST: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3791     ; FAST: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3792     ; FAST: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3793     ; FAST: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3794     ; FAST: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s64), [[TRUNC1]]
3795     ; FAST: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3796     ; FAST: $al = COPY [[COPY2]](s8)
3797     ; FAST: RET 0, implicit $al
3798     ; GREEDY-LABEL: name: fcmp_double_une
3799     ; GREEDY: liveins: $xmm0, $xmm1
3800     ; GREEDY: [[COPY:%[0-9]+]]:vecr(s128) = COPY $xmm0
3801     ; GREEDY: [[TRUNC:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY]](s128)
3802     ; GREEDY: [[COPY1:%[0-9]+]]:vecr(s128) = COPY $xmm1
3803     ; GREEDY: [[TRUNC1:%[0-9]+]]:vecr(s64) = G_TRUNC [[COPY1]](s128)
3804     ; GREEDY: [[FCMP:%[0-9]+]]:gpr(s8) = G_FCMP floatpred(une), [[TRUNC]](s64), [[TRUNC1]]
3805     ; GREEDY: [[COPY2:%[0-9]+]]:gpr(s8) = COPY [[FCMP]](s8)
3806     ; GREEDY: $al = COPY [[COPY2]](s8)
3807     ; GREEDY: RET 0, implicit $al
3808     %2:_(s128) = COPY $xmm0
3809     %0:_(s64) = G_TRUNC %2(s128)
3810     %3:_(s128) = COPY $xmm1
3811     %1:_(s64) = G_TRUNC %3(s128)
3812     %6:_(s8) = G_FCMP floatpred(une), %0(s64), %1
3813     %5:_(s8) = COPY %6(s8)
3814     $al = COPY %5(s8)
3815     RET 0, implicit $al