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