]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/AArch64/GlobalISel/arm64-instructionselect.mir
Vendor import of llvm trunk r291274:
[FreeBSD/FreeBSD.git] / test / CodeGen / AArch64 / GlobalISel / arm64-instructionselect.mir
1 # RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=IOS
2 # RUN: llc -O0 -mtriple=aarch64-linux-gnu -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=LINUX-DEFAULT
3 # RUN: llc -O0 -mtriple=aarch64-linux-gnu -relocation-model=pic -run-pass=instruction-select -verify-machineinstrs -global-isel %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=LINUX-PIC
4
5 # Test the instruction selector.
6 # As we support more instructions, we need to split this up.
7
8 --- |
9   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
10
11   define void @add_s8_gpr() { ret void }
12   define void @add_s16_gpr() { ret void }
13   define void @add_s32_gpr() { ret void }
14   define void @add_s64_gpr() { ret void }
15
16   define void @sub_s8_gpr() { ret void }
17   define void @sub_s16_gpr() { ret void }
18   define void @sub_s32_gpr() { ret void }
19   define void @sub_s64_gpr() { ret void }
20
21   define void @or_s1_gpr() { ret void }
22   define void @or_s16_gpr() { ret void }
23   define void @or_s32_gpr() { ret void }
24   define void @or_s64_gpr() { ret void }
25   define void @or_v2s32_fpr() { ret void }
26
27   define void @xor_s8_gpr() { ret void }
28   define void @xor_s16_gpr() { ret void }
29   define void @xor_s32_gpr() { ret void }
30   define void @xor_s64_gpr() { ret void }
31
32   define void @and_s8_gpr() { ret void }
33   define void @and_s16_gpr() { ret void }
34   define void @and_s32_gpr() { ret void }
35   define void @and_s64_gpr() { ret void }
36
37   define void @shl_s8_gpr() { ret void }
38   define void @shl_s16_gpr() { ret void }
39   define void @shl_s32_gpr() { ret void }
40   define void @shl_s64_gpr() { ret void }
41
42   define void @lshr_s32_gpr() { ret void }
43   define void @lshr_s64_gpr() { ret void }
44
45   define void @ashr_s32_gpr() { ret void }
46   define void @ashr_s64_gpr() { ret void }
47
48   define void @mul_s8_gpr() { ret void }
49   define void @mul_s16_gpr() { ret void }
50   define void @mul_s32_gpr() { ret void }
51   define void @mul_s64_gpr() { ret void }
52
53   define void @sdiv_s32_gpr() { ret void }
54   define void @sdiv_s64_gpr() { ret void }
55
56   define void @udiv_s32_gpr() { ret void }
57   define void @udiv_s64_gpr() { ret void }
58
59   define void @fadd_s32_gpr() { ret void }
60   define void @fadd_s64_gpr() { ret void }
61
62   define void @fsub_s32_gpr() { ret void }
63   define void @fsub_s64_gpr() { ret void }
64
65   define void @fmul_s32_gpr() { ret void }
66   define void @fmul_s64_gpr() { ret void }
67
68   define void @fdiv_s32_gpr() { ret void }
69   define void @fdiv_s64_gpr() { ret void }
70
71   define void @sitofp_s32_s32_fpr() { ret void }
72   define void @sitofp_s32_s64_fpr() { ret void }
73   define void @sitofp_s64_s32_fpr() { ret void }
74   define void @sitofp_s64_s64_fpr() { ret void }
75
76   define void @uitofp_s32_s32_fpr() { ret void }
77   define void @uitofp_s32_s64_fpr() { ret void }
78   define void @uitofp_s64_s32_fpr() { ret void }
79   define void @uitofp_s64_s64_fpr() { ret void }
80
81   define void @fptosi_s32_s32_gpr() { ret void }
82   define void @fptosi_s32_s64_gpr() { ret void }
83   define void @fptosi_s64_s32_gpr() { ret void }
84   define void @fptosi_s64_s64_gpr() { ret void }
85
86   define void @fptoui_s32_s32_gpr() { ret void }
87   define void @fptoui_s32_s64_gpr() { ret void }
88   define void @fptoui_s64_s32_gpr() { ret void }
89   define void @fptoui_s64_s64_gpr() { ret void }
90
91   define void @fptrunc() { ret void }
92   define void @fpext() { ret void }
93
94   define void @unconditional_br() { ret void }
95   define void @conditional_br() { ret void }
96
97   define void @load_s64_gpr(i64* %addr) { ret void }
98   define void @load_s32_gpr(i32* %addr) { ret void }
99   define void @load_s16_gpr(i16* %addr) { ret void }
100   define void @load_s8_gpr(i8* %addr) { ret void }
101   define void @load_s64_fpr(i64* %addr) { ret void }
102   define void @load_s32_fpr(i32* %addr) { ret void }
103   define void @load_s16_fpr(i16* %addr) { ret void }
104   define void @load_s8_fpr(i8* %addr) { ret void }
105
106   define void @store_s64_gpr(i64* %addr) { ret void }
107   define void @store_s32_gpr(i32* %addr) { ret void }
108   define void @store_s16_gpr(i16* %addr) { ret void }
109   define void @store_s8_gpr(i8* %addr) { ret void }
110   define void @store_s64_fpr(i64* %addr) { ret void }
111   define void @store_s32_fpr(i32* %addr) { ret void }
112
113   define void @frame_index() {
114     %ptr0 = alloca i64
115     ret void
116   }
117
118   define void @selected_property() { ret void }
119
120   define i32 @const_s32() { ret i32 42 }
121   define i64 @const_s64() { ret i64 1234567890123 }
122
123   define i32 @fconst_s32() { ret i32 42 }
124   define i64 @fconst_s64() { ret i64 1234567890123 }
125
126   define i8* @gep(i8* %in) { ret i8* undef }
127
128   @var_local = global i8 0
129   define i8* @global_local() { ret i8* undef }
130
131   @var_got = external global i8
132   define i8* @global_got() { ret i8* undef }
133
134   define void @trunc() { ret void }
135
136   define void @anyext_gpr() { ret void }
137   define void @zext_gpr() { ret void }
138   define void @sext_gpr() { ret void }
139
140   define void @casts() { ret void }
141
142   define void @bitcast_s32_gpr() { ret void }
143   define void @bitcast_s32_fpr() { ret void }
144   define void @bitcast_s32_gpr_fpr() { ret void }
145   define void @bitcast_s32_fpr_gpr() { ret void }
146   define void @bitcast_s64_gpr() { ret void }
147   define void @bitcast_s64_fpr() { ret void }
148   define void @bitcast_s64_gpr_fpr() { ret void }
149   define void @bitcast_s64_fpr_gpr() { ret void }
150
151   define void @icmp() { ret void }
152   define void @fcmp() { ret void }
153
154   define void @phi() { ret void }
155
156   define void @select() { ret void }
157 ...
158
159 ---
160 # CHECK-LABEL: name: add_s8_gpr
161 name:            add_s8_gpr
162 legalized:       true
163 regBankSelected: true
164
165 # CHECK:      registers:
166 # CHECK-NEXT:  - { id: 0, class: gpr32 }
167 # CHECK-NEXT:  - { id: 1, class: gpr32 }
168 # CHECK-NEXT:  - { id: 2, class: gpr32 }
169 registers:
170   - { id: 0, class: gpr }
171   - { id: 1, class: gpr }
172   - { id: 2, class: gpr }
173
174 # CHECK:  body:
175 # CHECK:    %0 = COPY %w0
176 # CHECK:    %1 = COPY %w1
177 # CHECK:    %2 = ADDWrr %0, %1
178 body:             |
179   bb.0:
180     liveins: %w0, %w1
181
182     %0(s8) = COPY %w0
183     %1(s8) = COPY %w1
184     %2(s8) = G_ADD %0, %1
185 ...
186
187 ---
188 # CHECK-LABEL: name: add_s16_gpr
189 name:            add_s16_gpr
190 legalized:       true
191 regBankSelected: true
192
193 # CHECK:      registers:
194 # CHECK-NEXT:  - { id: 0, class: gpr32 }
195 # CHECK-NEXT:  - { id: 1, class: gpr32 }
196 # CHECK-NEXT:  - { id: 2, class: gpr32 }
197 registers:
198   - { id: 0, class: gpr }
199   - { id: 1, class: gpr }
200   - { id: 2, class: gpr }
201
202 # CHECK:  body:
203 # CHECK:    %0 = COPY %w0
204 # CHECK:    %1 = COPY %w1
205 # CHECK:    %2 = ADDWrr %0, %1
206 body:             |
207   bb.0:
208     liveins: %w0, %w1
209
210     %0(s16) = COPY %w0
211     %1(s16) = COPY %w1
212     %2(s16) = G_ADD %0, %1
213 ...
214
215 ---
216 # Check that we select a 32-bit GPR G_ADD into ADDWrr on GPR32.
217 # Also check that we constrain the register class of the COPY to GPR32.
218 # CHECK-LABEL: name: add_s32_gpr
219 name:            add_s32_gpr
220 legalized:       true
221 regBankSelected: true
222
223 # CHECK:      registers:
224 # CHECK-NEXT:  - { id: 0, class: gpr32 }
225 # CHECK-NEXT:  - { id: 1, class: gpr32 }
226 # CHECK-NEXT:  - { id: 2, class: gpr32 }
227 registers:
228   - { id: 0, class: gpr }
229   - { id: 1, class: gpr }
230   - { id: 2, class: gpr }
231
232 # CHECK:  body:
233 # CHECK:    %0 = COPY %w0
234 # CHECK:    %1 = COPY %w1
235 # CHECK:    %2 = ADDWrr %0, %1
236 body:             |
237   bb.0:
238     liveins: %w0, %w1
239
240     %0(s32) = COPY %w0
241     %1(s32) = COPY %w1
242     %2(s32) = G_ADD %0, %1
243 ...
244
245 ---
246 # Same as add_s32_gpr, for 64-bit operations.
247 # CHECK-LABEL: name: add_s64_gpr
248 name:            add_s64_gpr
249 legalized:       true
250 regBankSelected: true
251
252 # CHECK:      registers:
253 # CHECK-NEXT:  - { id: 0, class: gpr64 }
254 # CHECK-NEXT:  - { id: 1, class: gpr64 }
255 # CHECK-NEXT:  - { id: 2, class: gpr64 }
256 registers:
257   - { id: 0, class: gpr }
258   - { id: 1, class: gpr }
259   - { id: 2, class: gpr }
260
261 # CHECK:  body:
262 # CHECK:    %0 = COPY %x0
263 # CHECK:    %1 = COPY %x1
264 # CHECK:    %2 = ADDXrr %0, %1
265 body:             |
266   bb.0:
267     liveins: %x0, %x1
268
269     %0(s64) = COPY %x0
270     %1(s64) = COPY %x1
271     %2(s64) = G_ADD %0, %1
272 ...
273
274 ---
275 # CHECK-LABEL: name: sub_s8_gpr
276 name:            sub_s8_gpr
277 legalized:       true
278 regBankSelected: true
279
280 # CHECK:      registers:
281 # CHECK-NEXT:  - { id: 0, class: gpr32 }
282 # CHECK-NEXT:  - { id: 1, class: gpr32 }
283 # CHECK-NEXT:  - { id: 2, class: gpr32 }
284 registers:
285   - { id: 0, class: gpr }
286   - { id: 1, class: gpr }
287   - { id: 2, class: gpr }
288
289 # CHECK:  body:
290 # CHECK:    %0 = COPY %w0
291 # CHECK:    %1 = COPY %w1
292 # CHECK:    %2 = SUBWrr %0, %1
293 body:             |
294   bb.0:
295     liveins: %w0, %w1
296
297     %0(s8) = COPY %w0
298     %1(s8) = COPY %w1
299     %2(s8) = G_SUB %0, %1
300 ...
301
302 ---
303 # CHECK-LABEL: name: sub_s16_gpr
304 name:            sub_s16_gpr
305 legalized:       true
306 regBankSelected: true
307
308 # CHECK:      registers:
309 # CHECK-NEXT:  - { id: 0, class: gpr32 }
310 # CHECK-NEXT:  - { id: 1, class: gpr32 }
311 # CHECK-NEXT:  - { id: 2, class: gpr32 }
312 registers:
313   - { id: 0, class: gpr }
314   - { id: 1, class: gpr }
315   - { id: 2, class: gpr }
316
317 # CHECK:  body:
318 # CHECK:    %0 = COPY %w0
319 # CHECK:    %1 = COPY %w1
320 # CHECK:    %2 = SUBWrr %0, %1
321 body:             |
322   bb.0:
323     liveins: %w0, %w1
324
325     %0(s16) = COPY %w0
326     %1(s16) = COPY %w1
327     %2(s16) = G_SUB %0, %1
328 ...
329
330 ---
331 # Same as add_s32_gpr, for G_SUB operations.
332 # CHECK-LABEL: name: sub_s32_gpr
333 name:            sub_s32_gpr
334 legalized:       true
335 regBankSelected: true
336
337 # CHECK:      registers:
338 # CHECK-NEXT:  - { id: 0, class: gpr32 }
339 # CHECK-NEXT:  - { id: 1, class: gpr32 }
340 # CHECK-NEXT:  - { id: 2, class: gpr32 }
341 registers:
342   - { id: 0, class: gpr }
343   - { id: 1, class: gpr }
344   - { id: 2, class: gpr }
345
346 # CHECK:  body:
347 # CHECK:    %0 = COPY %w0
348 # CHECK:    %1 = COPY %w1
349 # CHECK:    %2 = SUBWrr %0, %1
350 body:             |
351   bb.0:
352     liveins: %w0, %w1
353
354     %0(s32) = COPY %w0
355     %1(s32) = COPY %w1
356     %2(s32) = G_SUB %0, %1
357 ...
358
359 ---
360 # Same as add_s64_gpr, for G_SUB operations.
361 # CHECK-LABEL: name: sub_s64_gpr
362 name:            sub_s64_gpr
363 legalized:       true
364 regBankSelected: true
365
366 # CHECK:      registers:
367 # CHECK-NEXT:  - { id: 0, class: gpr64 }
368 # CHECK-NEXT:  - { id: 1, class: gpr64 }
369 # CHECK-NEXT:  - { id: 2, class: gpr64 }
370 registers:
371   - { id: 0, class: gpr }
372   - { id: 1, class: gpr }
373   - { id: 2, class: gpr }
374
375 # CHECK:  body:
376 # CHECK:    %0 = COPY %x0
377 # CHECK:    %1 = COPY %x1
378 # CHECK:    %2 = SUBXrr %0, %1
379 body:             |
380   bb.0:
381     liveins: %x0, %x1
382
383     %0(s64) = COPY %x0
384     %1(s64) = COPY %x1
385     %2(s64) = G_SUB %0, %1
386 ...
387
388 ---
389 # CHECK-LABEL: name: or_s1_gpr
390 name:            or_s1_gpr
391 legalized:       true
392 regBankSelected: true
393
394 # CHECK:      registers:
395 # CHECK-NEXT:  - { id: 0, class: gpr32 }
396 # CHECK-NEXT:  - { id: 1, class: gpr32 }
397 # CHECK-NEXT:  - { id: 2, class: gpr32 }
398 registers:
399   - { id: 0, class: gpr }
400   - { id: 1, class: gpr }
401   - { id: 2, class: gpr }
402
403 # CHECK:  body:
404 # CHECK:    %0 = COPY %w0
405 # CHECK:    %1 = COPY %w1
406 # CHECK:    %2 = ORRWrr %0, %1
407 body:             |
408   bb.0:
409     liveins: %w0, %w1
410
411     %0(s1) = COPY %w0
412     %1(s1) = COPY %w1
413     %2(s1) = G_OR %0, %1
414 ...
415
416 ---
417 # CHECK-LABEL: name: or_s16_gpr
418 name:            or_s16_gpr
419 legalized:       true
420 regBankSelected: true
421
422 # CHECK:      registers:
423 # CHECK-NEXT:  - { id: 0, class: gpr32 }
424 # CHECK-NEXT:  - { id: 1, class: gpr32 }
425 # CHECK-NEXT:  - { id: 2, class: gpr32 }
426 registers:
427   - { id: 0, class: gpr }
428   - { id: 1, class: gpr }
429   - { id: 2, class: gpr }
430
431 # CHECK:  body:
432 # CHECK:    %0 = COPY %w0
433 # CHECK:    %1 = COPY %w1
434 # CHECK:    %2 = ORRWrr %0, %1
435 body:             |
436   bb.0:
437     liveins: %w0, %w1
438
439     %0(s16) = COPY %w0
440     %1(s16) = COPY %w1
441     %2(s16) = G_OR %0, %1
442 ...
443
444 ---
445 # Same as add_s32_gpr, for G_OR operations.
446 # CHECK-LABEL: name: or_s32_gpr
447 name:            or_s32_gpr
448 legalized:       true
449 regBankSelected: true
450
451 # CHECK:      registers:
452 # CHECK-NEXT:  - { id: 0, class: gpr32 }
453 # CHECK-NEXT:  - { id: 1, class: gpr32 }
454 # CHECK-NEXT:  - { id: 2, class: gpr32 }
455 registers:
456   - { id: 0, class: gpr }
457   - { id: 1, class: gpr }
458   - { id: 2, class: gpr }
459
460 # CHECK:  body:
461 # CHECK:    %0 = COPY %w0
462 # CHECK:    %1 = COPY %w1
463 # CHECK:    %2 = ORRWrr %0, %1
464 body:             |
465   bb.0:
466     liveins: %w0, %w1
467
468     %0(s32) = COPY %w0
469     %1(s32) = COPY %w1
470     %2(s32) = G_OR %0, %1
471 ...
472
473 ---
474 # Same as add_s64_gpr, for G_OR operations.
475 # CHECK-LABEL: name: or_s64_gpr
476 name:            or_s64_gpr
477 legalized:       true
478 regBankSelected: true
479
480 # CHECK:      registers:
481 # CHECK-NEXT:  - { id: 0, class: gpr64 }
482 # CHECK-NEXT:  - { id: 1, class: gpr64 }
483 # CHECK-NEXT:  - { id: 2, class: gpr64 }
484 registers:
485   - { id: 0, class: gpr }
486   - { id: 1, class: gpr }
487   - { id: 2, class: gpr }
488
489 # CHECK:  body:
490 # CHECK:    %0 = COPY %x0
491 # CHECK:    %1 = COPY %x1
492 # CHECK:    %2 = ORRXrr %0, %1
493 body:             |
494   bb.0:
495     liveins: %x0, %x1
496
497     %0(s64) = COPY %x0
498     %1(s64) = COPY %x1
499     %2(s64) = G_OR %0, %1
500 ...
501
502 ---
503 # 64-bit G_OR on vector registers.
504 # CHECK-LABEL: name: or_v2s32_fpr
505 name:            or_v2s32_fpr
506 legalized:       true
507 regBankSelected: true
508 #
509 # CHECK:      registers:
510 # CHECK-NEXT:  - { id: 0, class: fpr64 }
511 # CHECK-NEXT:  - { id: 1, class: fpr64 }
512 # CHECK-NEXT:  - { id: 2, class: fpr64 }
513 registers:
514   - { id: 0, class: fpr }
515   - { id: 1, class: fpr }
516   - { id: 2, class: fpr }
517
518 # CHECK:  body:
519 # CHECK:    %0 = COPY %d0
520 # CHECK:    %1 = COPY %d1
521 # The actual OR does not matter as long as it is operating
522 # on 64-bit width vector.
523 # CHECK:    %2 = ORRv8i8 %0, %1
524 body:             |
525   bb.0:
526     liveins: %d0, %d1
527
528       %0(<2 x s32>) = COPY %d0
529       %1(<2 x s32>) = COPY %d1
530       %2(<2 x s32>) = G_OR %0, %1
531 ...
532
533 ---
534 # CHECK-LABEL: name: xor_s8_gpr
535 name:            xor_s8_gpr
536 legalized:       true
537 regBankSelected: true
538
539 # CHECK:      registers:
540 # CHECK-NEXT:  - { id: 0, class: gpr32 }
541 # CHECK-NEXT:  - { id: 1, class: gpr32 }
542 # CHECK-NEXT:  - { id: 2, class: gpr32 }
543 registers:
544   - { id: 0, class: gpr }
545   - { id: 1, class: gpr }
546   - { id: 2, class: gpr }
547
548 # CHECK:  body:
549 # CHECK:    %0 = COPY %w0
550 # CHECK:    %1 = COPY %w1
551 # CHECK:    %2 = EORWrr %0, %1
552 body:             |
553   bb.0:
554     liveins: %w0, %w1
555
556     %0(s8) = COPY %w0
557     %1(s8) = COPY %w1
558     %2(s8) = G_XOR %0, %1
559 ...
560
561 ---
562 # CHECK-LABEL: name: xor_s16_gpr
563 name:            xor_s16_gpr
564 legalized:       true
565 regBankSelected: true
566
567 # CHECK:      registers:
568 # CHECK-NEXT:  - { id: 0, class: gpr32 }
569 # CHECK-NEXT:  - { id: 1, class: gpr32 }
570 # CHECK-NEXT:  - { id: 2, class: gpr32 }
571 registers:
572   - { id: 0, class: gpr }
573   - { id: 1, class: gpr }
574   - { id: 2, class: gpr }
575
576 # CHECK:  body:
577 # CHECK:    %0 = COPY %w0
578 # CHECK:    %1 = COPY %w1
579 # CHECK:    %2 = EORWrr %0, %1
580 body:             |
581   bb.0:
582     liveins: %w0, %w1
583
584     %0(s16) = COPY %w0
585     %1(s16) = COPY %w1
586     %2(s16) = G_XOR %0, %1
587 ...
588
589 ---
590 # Same as add_s32_gpr, for G_XOR operations.
591 # CHECK-LABEL: name: xor_s32_gpr
592 name:            xor_s32_gpr
593 legalized:       true
594 regBankSelected: true
595
596 # CHECK:      registers:
597 # CHECK-NEXT:  - { id: 0, class: gpr32 }
598 # CHECK-NEXT:  - { id: 1, class: gpr32 }
599 # CHECK-NEXT:  - { id: 2, class: gpr32 }
600 registers:
601   - { id: 0, class: gpr }
602   - { id: 1, class: gpr }
603   - { id: 2, class: gpr }
604
605 # CHECK:  body:
606 # CHECK:    %0 = COPY %w0
607 # CHECK:    %1 = COPY %w1
608 # CHECK:    %2 = EORWrr %0, %1
609 body:             |
610   bb.0:
611     liveins: %w0, %w1
612
613     %0(s32) = COPY %w0
614     %1(s32) = COPY %w1
615     %2(s32) = G_XOR %0, %1
616 ...
617
618 ---
619 # Same as add_s64_gpr, for G_XOR operations.
620 # CHECK-LABEL: name: xor_s64_gpr
621 name:            xor_s64_gpr
622 legalized:       true
623 regBankSelected: true
624
625 # CHECK:      registers:
626 # CHECK-NEXT:  - { id: 0, class: gpr64 }
627 # CHECK-NEXT:  - { id: 1, class: gpr64 }
628 # CHECK-NEXT:  - { id: 2, class: gpr64 }
629 registers:
630   - { id: 0, class: gpr }
631   - { id: 1, class: gpr }
632   - { id: 2, class: gpr }
633
634 # CHECK:  body:
635 # CHECK:    %0 = COPY %x0
636 # CHECK:    %1 = COPY %x1
637 # CHECK:    %2 = EORXrr %0, %1
638 body:             |
639   bb.0:
640     liveins: %x0, %x1
641
642     %0(s64) = COPY %x0
643     %1(s64) = COPY %x1
644     %2(s64) = G_XOR %0, %1
645 ...
646
647 ---
648 # CHECK-LABEL: name: and_s8_gpr
649 name:            and_s8_gpr
650 legalized:       true
651 regBankSelected: true
652
653 # CHECK:      registers:
654 # CHECK-NEXT:  - { id: 0, class: gpr32 }
655 # CHECK-NEXT:  - { id: 1, class: gpr32 }
656 # CHECK-NEXT:  - { id: 2, class: gpr32 }
657 registers:
658   - { id: 0, class: gpr }
659   - { id: 1, class: gpr }
660   - { id: 2, class: gpr }
661
662 # CHECK:  body:
663 # CHECK:    %0 = COPY %w0
664 # CHECK:    %1 = COPY %w1
665 # CHECK:    %2 = ANDWrr %0, %1
666 body:             |
667   bb.0:
668     liveins: %w0, %w1
669
670     %0(s8) = COPY %w0
671     %1(s8) = COPY %w1
672     %2(s8) = G_AND %0, %1
673 ...
674
675 ---
676 # CHECK-LABEL: name: and_s16_gpr
677 name:            and_s16_gpr
678 legalized:       true
679 regBankSelected: true
680
681 # CHECK:      registers:
682 # CHECK-NEXT:  - { id: 0, class: gpr32 }
683 # CHECK-NEXT:  - { id: 1, class: gpr32 }
684 # CHECK-NEXT:  - { id: 2, class: gpr32 }
685 registers:
686   - { id: 0, class: gpr }
687   - { id: 1, class: gpr }
688   - { id: 2, class: gpr }
689
690 # CHECK:  body:
691 # CHECK:    %0 = COPY %w0
692 # CHECK:    %1 = COPY %w1
693 # CHECK:    %2 = ANDWrr %0, %1
694 body:             |
695   bb.0:
696     liveins: %w0, %w1
697
698     %0(s16) = COPY %w0
699     %1(s16) = COPY %w1
700     %2(s16) = G_AND %0, %1
701 ...
702
703 ---
704 # Same as add_s32_gpr, for G_AND operations.
705 # CHECK-LABEL: name: and_s32_gpr
706 name:            and_s32_gpr
707 legalized:       true
708 regBankSelected: true
709
710 # CHECK:      registers:
711 # CHECK-NEXT:  - { id: 0, class: gpr32 }
712 # CHECK-NEXT:  - { id: 1, class: gpr32 }
713 # CHECK-NEXT:  - { id: 2, class: gpr32 }
714 registers:
715   - { id: 0, class: gpr }
716   - { id: 1, class: gpr }
717   - { id: 2, class: gpr }
718
719 # CHECK:  body:
720 # CHECK:    %0 = COPY %w0
721 # CHECK:    %1 = COPY %w1
722 # CHECK:    %2 = ANDWrr %0, %1
723 body:             |
724   bb.0:
725     liveins: %w0, %w1
726
727     %0(s32) = COPY %w0
728     %1(s32) = COPY %w1
729     %2(s32) = G_AND %0, %1
730 ...
731
732 ---
733 # Same as add_s64_gpr, for G_AND operations.
734 # CHECK-LABEL: name: and_s64_gpr
735 name:            and_s64_gpr
736 legalized:       true
737 regBankSelected: true
738
739 # CHECK:      registers:
740 # CHECK-NEXT:  - { id: 0, class: gpr64 }
741 # CHECK-NEXT:  - { id: 1, class: gpr64 }
742 # CHECK-NEXT:  - { id: 2, class: gpr64 }
743 registers:
744   - { id: 0, class: gpr }
745   - { id: 1, class: gpr }
746   - { id: 2, class: gpr }
747
748 # CHECK:  body:
749 # CHECK:    %0 = COPY %x0
750 # CHECK:    %1 = COPY %x1
751 # CHECK:    %2 = ANDXrr %0, %1
752 body:             |
753   bb.0:
754     liveins: %x0, %x1
755
756     %0(s64) = COPY %x0
757     %1(s64) = COPY %x1
758     %2(s64) = G_AND %0, %1
759 ...
760
761 ---
762 # CHECK-LABEL: name: shl_s8_gpr
763 name:            shl_s8_gpr
764 legalized:       true
765 regBankSelected: true
766
767 # CHECK:      registers:
768 # CHECK-NEXT:  - { id: 0, class: gpr32 }
769 # CHECK-NEXT:  - { id: 1, class: gpr32 }
770 # CHECK-NEXT:  - { id: 2, class: gpr32 }
771 registers:
772   - { id: 0, class: gpr }
773   - { id: 1, class: gpr }
774   - { id: 2, class: gpr }
775
776 # CHECK:  body:
777 # CHECK:    %0 = COPY %w0
778 # CHECK:    %1 = COPY %w1
779 # CHECK:    %2 = LSLVWr %0, %1
780 body:             |
781   bb.0:
782     liveins: %w0, %w1
783
784     %0(s8) = COPY %w0
785     %1(s8) = COPY %w1
786     %2(s8) = G_SHL %0, %1
787 ...
788
789 ---
790 # CHECK-LABEL: name: shl_s16_gpr
791 name:            shl_s16_gpr
792 legalized:       true
793 regBankSelected: true
794
795 # CHECK:      registers:
796 # CHECK-NEXT:  - { id: 0, class: gpr32 }
797 # CHECK-NEXT:  - { id: 1, class: gpr32 }
798 # CHECK-NEXT:  - { id: 2, class: gpr32 }
799 registers:
800   - { id: 0, class: gpr }
801   - { id: 1, class: gpr }
802   - { id: 2, class: gpr }
803
804 # CHECK:  body:
805 # CHECK:    %0 = COPY %w0
806 # CHECK:    %1 = COPY %w1
807 # CHECK:    %2 = LSLVWr %0, %1
808 body:             |
809   bb.0:
810     liveins: %w0, %w1
811
812     %0(s16) = COPY %w0
813     %1(s16) = COPY %w1
814     %2(s16) = G_SHL %0, %1
815 ...
816
817 ---
818 # Same as add_s32_gpr, for G_SHL operations.
819 # CHECK-LABEL: name: shl_s32_gpr
820 name:            shl_s32_gpr
821 legalized:       true
822 regBankSelected: true
823
824 # CHECK:      registers:
825 # CHECK-NEXT:  - { id: 0, class: gpr32 }
826 # CHECK-NEXT:  - { id: 1, class: gpr32 }
827 # CHECK-NEXT:  - { id: 2, class: gpr32 }
828 registers:
829   - { id: 0, class: gpr }
830   - { id: 1, class: gpr }
831   - { id: 2, class: gpr }
832
833 # CHECK:  body:
834 # CHECK:    %0 = COPY %w0
835 # CHECK:    %1 = COPY %w1
836 # CHECK:    %2 = LSLVWr %0, %1
837 body:             |
838   bb.0:
839     liveins: %w0, %w1
840
841     %0(s32) = COPY %w0
842     %1(s32) = COPY %w1
843     %2(s32) = G_SHL %0, %1
844 ...
845
846 ---
847 # Same as add_s64_gpr, for G_SHL operations.
848 # CHECK-LABEL: name: shl_s64_gpr
849 name:            shl_s64_gpr
850 legalized:       true
851 regBankSelected: true
852
853 # CHECK:      registers:
854 # CHECK-NEXT:  - { id: 0, class: gpr64 }
855 # CHECK-NEXT:  - { id: 1, class: gpr64 }
856 # CHECK-NEXT:  - { id: 2, class: gpr64 }
857 registers:
858   - { id: 0, class: gpr }
859   - { id: 1, class: gpr }
860   - { id: 2, class: gpr }
861
862 # CHECK:  body:
863 # CHECK:    %0 = COPY %x0
864 # CHECK:    %1 = COPY %x1
865 # CHECK:    %2 = LSLVXr %0, %1
866 body:             |
867   bb.0:
868     liveins: %x0, %x1
869
870     %0(s64) = COPY %x0
871     %1(s64) = COPY %x1
872     %2(s64) = G_SHL %0, %1
873 ...
874
875 ---
876 # Same as add_s32_gpr, for G_LSHR operations.
877 # CHECK-LABEL: name: lshr_s32_gpr
878 name:            lshr_s32_gpr
879 legalized:       true
880 regBankSelected: true
881
882 # CHECK:      registers:
883 # CHECK-NEXT:  - { id: 0, class: gpr32 }
884 # CHECK-NEXT:  - { id: 1, class: gpr32 }
885 # CHECK-NEXT:  - { id: 2, class: gpr32 }
886 registers:
887   - { id: 0, class: gpr }
888   - { id: 1, class: gpr }
889   - { id: 2, class: gpr }
890
891 # CHECK:  body:
892 # CHECK:    %0 = COPY %w0
893 # CHECK:    %1 = COPY %w1
894 # CHECK:    %2 = LSRVWr %0, %1
895 body:             |
896   bb.0:
897     liveins: %w0, %w1
898
899     %0(s32) = COPY %w0
900     %1(s32) = COPY %w1
901     %2(s32) = G_LSHR %0, %1
902 ...
903
904 ---
905 # Same as add_s64_gpr, for G_LSHR operations.
906 # CHECK-LABEL: name: lshr_s64_gpr
907 name:            lshr_s64_gpr
908 legalized:       true
909 regBankSelected: true
910
911 # CHECK:      registers:
912 # CHECK-NEXT:  - { id: 0, class: gpr64 }
913 # CHECK-NEXT:  - { id: 1, class: gpr64 }
914 # CHECK-NEXT:  - { id: 2, class: gpr64 }
915 registers:
916   - { id: 0, class: gpr }
917   - { id: 1, class: gpr }
918   - { id: 2, class: gpr }
919
920 # CHECK:  body:
921 # CHECK:    %0 = COPY %x0
922 # CHECK:    %1 = COPY %x1
923 # CHECK:    %2 = LSRVXr %0, %1
924 body:             |
925   bb.0:
926     liveins: %x0, %x1
927
928     %0(s64) = COPY %x0
929     %1(s64) = COPY %x1
930     %2(s64) = G_LSHR %0, %1
931 ...
932
933 ---
934 # Same as add_s32_gpr, for G_ASHR operations.
935 # CHECK-LABEL: name: ashr_s32_gpr
936 name:            ashr_s32_gpr
937 legalized:       true
938 regBankSelected: true
939
940 # CHECK:      registers:
941 # CHECK-NEXT:  - { id: 0, class: gpr32 }
942 # CHECK-NEXT:  - { id: 1, class: gpr32 }
943 # CHECK-NEXT:  - { id: 2, class: gpr32 }
944 registers:
945   - { id: 0, class: gpr }
946   - { id: 1, class: gpr }
947   - { id: 2, class: gpr }
948
949 # CHECK:  body:
950 # CHECK:    %0 = COPY %w0
951 # CHECK:    %1 = COPY %w1
952 # CHECK:    %2 = ASRVWr %0, %1
953 body:             |
954   bb.0:
955     liveins: %w0, %w1
956
957     %0(s32) = COPY %w0
958     %1(s32) = COPY %w1
959     %2(s32) = G_ASHR %0, %1
960 ...
961
962 ---
963 # Same as add_s64_gpr, for G_ASHR operations.
964 # CHECK-LABEL: name: ashr_s64_gpr
965 name:            ashr_s64_gpr
966 legalized:       true
967 regBankSelected: true
968
969 # CHECK:      registers:
970 # CHECK-NEXT:  - { id: 0, class: gpr64 }
971 # CHECK-NEXT:  - { id: 1, class: gpr64 }
972 # CHECK-NEXT:  - { id: 2, class: gpr64 }
973 registers:
974   - { id: 0, class: gpr }
975   - { id: 1, class: gpr }
976   - { id: 2, class: gpr }
977
978 # CHECK:  body:
979 # CHECK:    %0 = COPY %x0
980 # CHECK:    %1 = COPY %x1
981 # CHECK:    %2 = ASRVXr %0, %1
982 body:             |
983   bb.0:
984     liveins: %x0, %x1
985
986     %0(s64) = COPY %x0
987     %1(s64) = COPY %x1
988     %2(s64) = G_ASHR %0, %1
989 ...
990
991 ---
992 # CHECK-LABEL: name: mul_s8_gpr
993 name:            mul_s8_gpr
994 legalized:       true
995 regBankSelected: true
996
997 # CHECK:      registers:
998 # CHECK-NEXT:  - { id: 0, class: gpr32 }
999 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1000 # CHECK-NEXT:  - { id: 2, class: gpr32 }
1001 registers:
1002   - { id: 0, class: gpr }
1003   - { id: 1, class: gpr }
1004   - { id: 2, class: gpr }
1005
1006 # CHECK:  body:
1007 # CHECK:    %0 = COPY %w0
1008 # CHECK:    %1 = COPY %w1
1009 # CHECK:    %2 = MADDWrrr %0, %1, %wzr
1010 body:             |
1011   bb.0:
1012     liveins: %w0, %w1
1013
1014     %0(s8) = COPY %w0
1015     %1(s8) = COPY %w1
1016     %2(s8) = G_MUL %0, %1
1017 ...
1018
1019 ---
1020 # CHECK-LABEL: name: mul_s16_gpr
1021 name:            mul_s16_gpr
1022 legalized:       true
1023 regBankSelected: true
1024
1025 # CHECK:      registers:
1026 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1027 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1028 # CHECK-NEXT:  - { id: 2, class: gpr32 }
1029 registers:
1030   - { id: 0, class: gpr }
1031   - { id: 1, class: gpr }
1032   - { id: 2, class: gpr }
1033
1034 # CHECK:  body:
1035 # CHECK:    %0 = COPY %w0
1036 # CHECK:    %1 = COPY %w1
1037 # CHECK:    %2 = MADDWrrr %0, %1, %wzr
1038 body:             |
1039   bb.0:
1040     liveins: %w0, %w1
1041
1042     %0(s16) = COPY %w0
1043     %1(s16) = COPY %w1
1044     %2(s16) = G_MUL %0, %1
1045 ...
1046
1047 ---
1048 # Check that we select s32 GPR G_MUL. This is trickier than other binops because
1049 # there is only MADDWrrr, and we have to use the WZR physreg.
1050 # CHECK-LABEL: name: mul_s32_gpr
1051 name:            mul_s32_gpr
1052 legalized:       true
1053 regBankSelected: true
1054
1055 # CHECK:      registers:
1056 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1057 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1058 # CHECK-NEXT:  - { id: 2, class: gpr32 }
1059 registers:
1060   - { id: 0, class: gpr }
1061   - { id: 1, class: gpr }
1062   - { id: 2, class: gpr }
1063
1064 # CHECK:  body:
1065 # CHECK:    %0 = COPY %w0
1066 # CHECK:    %1 = COPY %w1
1067 # CHECK:    %2 = MADDWrrr %0, %1, %wzr
1068 body:             |
1069   bb.0:
1070     liveins: %w0, %w1
1071
1072     %0(s32) = COPY %w0
1073     %1(s32) = COPY %w1
1074     %2(s32) = G_MUL %0, %1
1075 ...
1076
1077 ---
1078 # Same as mul_s32_gpr for the s64 type.
1079 # CHECK-LABEL: name: mul_s64_gpr
1080 name:            mul_s64_gpr
1081 legalized:       true
1082 regBankSelected: true
1083
1084 # CHECK:      registers:
1085 # CHECK-NEXT:  - { id: 0, class: gpr64 }
1086 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1087 # CHECK-NEXT:  - { id: 2, class: gpr64 }
1088 registers:
1089   - { id: 0, class: gpr }
1090   - { id: 1, class: gpr }
1091   - { id: 2, class: gpr }
1092
1093 # CHECK:  body:
1094 # CHECK:    %0 = COPY %x0
1095 # CHECK:    %1 = COPY %x1
1096 # CHECK:    %2 = MADDXrrr %0, %1, %xzr
1097 body:             |
1098   bb.0:
1099     liveins: %x0, %x1
1100
1101     %0(s64) = COPY %x0
1102     %1(s64) = COPY %x1
1103     %2(s64) = G_MUL %0, %1
1104 ...
1105
1106 ---
1107 # Same as add_s32_gpr, for G_SDIV operations.
1108 # CHECK-LABEL: name: sdiv_s32_gpr
1109 name:            sdiv_s32_gpr
1110 legalized:       true
1111 regBankSelected: true
1112
1113 # CHECK:      registers:
1114 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1115 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1116 # CHECK-NEXT:  - { id: 2, class: gpr32 }
1117 registers:
1118   - { id: 0, class: gpr }
1119   - { id: 1, class: gpr }
1120   - { id: 2, class: gpr }
1121
1122 # CHECK:  body:
1123 # CHECK:    %0 = COPY %w0
1124 # CHECK:    %1 = COPY %w1
1125 # CHECK:    %2 = SDIVWr %0, %1
1126 body:             |
1127   bb.0:
1128     liveins: %w0, %w1
1129
1130     %0(s32) = COPY %w0
1131     %1(s32) = COPY %w1
1132     %2(s32) = G_SDIV %0, %1
1133 ...
1134
1135 ---
1136 # Same as add_s64_gpr, for G_SDIV operations.
1137 # CHECK-LABEL: name: sdiv_s64_gpr
1138 name:            sdiv_s64_gpr
1139 legalized:       true
1140 regBankSelected: true
1141
1142 # CHECK:      registers:
1143 # CHECK-NEXT:  - { id: 0, class: gpr64 }
1144 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1145 # CHECK-NEXT:  - { id: 2, class: gpr64 }
1146 registers:
1147   - { id: 0, class: gpr }
1148   - { id: 1, class: gpr }
1149   - { id: 2, class: gpr }
1150
1151 # CHECK:  body:
1152 # CHECK:    %0 = COPY %x0
1153 # CHECK:    %1 = COPY %x1
1154 # CHECK:    %2 = SDIVXr %0, %1
1155 body:             |
1156   bb.0:
1157     liveins: %x0, %x1
1158
1159     %0(s64) = COPY %x0
1160     %1(s64) = COPY %x1
1161     %2(s64) = G_SDIV %0, %1
1162 ...
1163
1164 ---
1165 # Same as add_s32_gpr, for G_UDIV operations.
1166 # CHECK-LABEL: name: udiv_s32_gpr
1167 name:            udiv_s32_gpr
1168 legalized:       true
1169 regBankSelected: true
1170
1171 # CHECK:      registers:
1172 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1173 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1174 # CHECK-NEXT:  - { id: 2, class: gpr32 }
1175 registers:
1176   - { id: 0, class: gpr }
1177   - { id: 1, class: gpr }
1178   - { id: 2, class: gpr }
1179
1180 # CHECK:  body:
1181 # CHECK:    %0 = COPY %w0
1182 # CHECK:    %1 = COPY %w1
1183 # CHECK:    %2 = UDIVWr %0, %1
1184 body:             |
1185   bb.0:
1186     liveins: %w0, %w1
1187
1188     %0(s32) = COPY %w0
1189     %1(s32) = COPY %w1
1190     %2(s32) = G_UDIV %0, %1
1191 ...
1192
1193 ---
1194 # Same as add_s64_gpr, for G_UDIV operations.
1195 # CHECK-LABEL: name: udiv_s64_gpr
1196 name:            udiv_s64_gpr
1197 legalized:       true
1198 regBankSelected: true
1199
1200 # CHECK:      registers:
1201 # CHECK-NEXT:  - { id: 0, class: gpr64 }
1202 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1203 # CHECK-NEXT:  - { id: 2, class: gpr64 }
1204 registers:
1205   - { id: 0, class: gpr }
1206   - { id: 1, class: gpr }
1207   - { id: 2, class: gpr }
1208
1209 # CHECK:  body:
1210 # CHECK:    %0 = COPY %x0
1211 # CHECK:    %1 = COPY %x1
1212 # CHECK:    %2 = UDIVXr %0, %1
1213 body:             |
1214   bb.0:
1215     liveins: %x0, %x1
1216
1217     %0(s64) = COPY %x0
1218     %1(s64) = COPY %x1
1219     %2(s64) = G_UDIV %0, %1
1220 ...
1221
1222 ---
1223 # Check that we select a s32 FPR G_FADD into FADDSrr.
1224 # CHECK-LABEL: name: fadd_s32_gpr
1225 name:            fadd_s32_gpr
1226 legalized:       true
1227 regBankSelected: true
1228
1229 # CHECK:      registers:
1230 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1231 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1232 # CHECK-NEXT:  - { id: 2, class: fpr32 }
1233 registers:
1234   - { id: 0, class: fpr }
1235   - { id: 1, class: fpr }
1236   - { id: 2, class: fpr }
1237
1238 # CHECK:  body:
1239 # CHECK:    %0 = COPY %s0
1240 # CHECK:    %1 = COPY %s1
1241 # CHECK:    %2 = FADDSrr %0, %1
1242 body:             |
1243   bb.0:
1244     liveins: %s0, %s1
1245
1246     %0(s32) = COPY %s0
1247     %1(s32) = COPY %s1
1248     %2(s32) = G_FADD %0, %1
1249 ...
1250
1251 ---
1252 # CHECK-LABEL: name: fadd_s64_gpr
1253 name:            fadd_s64_gpr
1254 legalized:       true
1255 regBankSelected: true
1256
1257 # CHECK:      registers:
1258 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1259 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1260 # CHECK-NEXT:  - { id: 2, class: fpr64 }
1261 registers:
1262   - { id: 0, class: fpr }
1263   - { id: 1, class: fpr }
1264   - { id: 2, class: fpr }
1265
1266 # CHECK:  body:
1267 # CHECK:    %0 = COPY %d0
1268 # CHECK:    %1 = COPY %d1
1269 # CHECK:    %2 = FADDDrr %0, %1
1270 body:             |
1271   bb.0:
1272     liveins: %d0, %d1
1273
1274     %0(s64) = COPY %d0
1275     %1(s64) = COPY %d1
1276     %2(s64) = G_FADD %0, %1
1277 ...
1278
1279 ---
1280 # CHECK-LABEL: name: fsub_s32_gpr
1281 name:            fsub_s32_gpr
1282 legalized:       true
1283 regBankSelected: true
1284
1285 # CHECK:      registers:
1286 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1287 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1288 # CHECK-NEXT:  - { id: 2, class: fpr32 }
1289 registers:
1290   - { id: 0, class: fpr }
1291   - { id: 1, class: fpr }
1292   - { id: 2, class: fpr }
1293
1294 # CHECK:  body:
1295 # CHECK:    %0 = COPY %s0
1296 # CHECK:    %1 = COPY %s1
1297 # CHECK:    %2 = FSUBSrr %0, %1
1298 body:             |
1299   bb.0:
1300     liveins: %s0, %s1
1301
1302     %0(s32) = COPY %s0
1303     %1(s32) = COPY %s1
1304     %2(s32) = G_FSUB %0, %1
1305 ...
1306
1307 ---
1308 # CHECK-LABEL: name: fsub_s64_gpr
1309 name:            fsub_s64_gpr
1310 legalized:       true
1311 regBankSelected: true
1312
1313 # CHECK:      registers:
1314 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1315 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1316 # CHECK-NEXT:  - { id: 2, class: fpr64 }
1317 registers:
1318   - { id: 0, class: fpr }
1319   - { id: 1, class: fpr }
1320   - { id: 2, class: fpr }
1321
1322 # CHECK:  body:
1323 # CHECK:    %0 = COPY %d0
1324 # CHECK:    %1 = COPY %d1
1325 # CHECK:    %2 = FSUBDrr %0, %1
1326 body:             |
1327   bb.0:
1328     liveins: %d0, %d1
1329
1330     %0(s64) = COPY %d0
1331     %1(s64) = COPY %d1
1332     %2(s64) = G_FSUB %0, %1
1333 ...
1334
1335 ---
1336 # CHECK-LABEL: name: fmul_s32_gpr
1337 name:            fmul_s32_gpr
1338 legalized:       true
1339 regBankSelected: true
1340
1341 # CHECK:      registers:
1342 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1343 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1344 # CHECK-NEXT:  - { id: 2, class: fpr32 }
1345 registers:
1346   - { id: 0, class: fpr }
1347   - { id: 1, class: fpr }
1348   - { id: 2, class: fpr }
1349
1350 # CHECK:  body:
1351 # CHECK:    %0 = COPY %s0
1352 # CHECK:    %1 = COPY %s1
1353 # CHECK:    %2 = FMULSrr %0, %1
1354 body:             |
1355   bb.0:
1356     liveins: %s0, %s1
1357
1358     %0(s32) = COPY %s0
1359     %1(s32) = COPY %s1
1360     %2(s32) = G_FMUL %0, %1
1361 ...
1362
1363 ---
1364 # CHECK-LABEL: name: fmul_s64_gpr
1365 name:            fmul_s64_gpr
1366 legalized:       true
1367 regBankSelected: true
1368
1369 # CHECK:      registers:
1370 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1371 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1372 # CHECK-NEXT:  - { id: 2, class: fpr64 }
1373 registers:
1374   - { id: 0, class: fpr }
1375   - { id: 1, class: fpr }
1376   - { id: 2, class: fpr }
1377
1378 # CHECK:  body:
1379 # CHECK:    %0 = COPY %d0
1380 # CHECK:    %1 = COPY %d1
1381 # CHECK:    %2 = FMULDrr %0, %1
1382 body:             |
1383   bb.0:
1384     liveins: %d0, %d1
1385
1386     %0(s64) = COPY %d0
1387     %1(s64) = COPY %d1
1388     %2(s64) = G_FMUL %0, %1
1389 ...
1390
1391 ---
1392 # CHECK-LABEL: name: fdiv_s32_gpr
1393 name:            fdiv_s32_gpr
1394 legalized:       true
1395 regBankSelected: true
1396
1397 # CHECK:      registers:
1398 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1399 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1400 # CHECK-NEXT:  - { id: 2, class: fpr32 }
1401 registers:
1402   - { id: 0, class: fpr }
1403   - { id: 1, class: fpr }
1404   - { id: 2, class: fpr }
1405
1406 # CHECK:  body:
1407 # CHECK:    %0 = COPY %s0
1408 # CHECK:    %1 = COPY %s1
1409 # CHECK:    %2 = FDIVSrr %0, %1
1410 body:             |
1411   bb.0:
1412     liveins: %s0, %s1
1413
1414     %0(s32) = COPY %s0
1415     %1(s32) = COPY %s1
1416     %2(s32) = G_FDIV %0, %1
1417 ...
1418
1419 ---
1420 # CHECK-LABEL: name: fdiv_s64_gpr
1421 name:            fdiv_s64_gpr
1422 legalized:       true
1423 regBankSelected: true
1424
1425 # CHECK:      registers:
1426 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1427 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1428 # CHECK-NEXT:  - { id: 2, class: fpr64 }
1429 registers:
1430   - { id: 0, class: fpr }
1431   - { id: 1, class: fpr }
1432   - { id: 2, class: fpr }
1433
1434 # CHECK:  body:
1435 # CHECK:    %0 = COPY %d0
1436 # CHECK:    %1 = COPY %d1
1437 # CHECK:    %2 = FDIVDrr %0, %1
1438 body:             |
1439   bb.0:
1440     liveins: %d0, %d1
1441
1442     %0(s64) = COPY %d0
1443     %1(s64) = COPY %d1
1444     %2(s64) = G_FDIV %0, %1
1445 ...
1446
1447 ---
1448 # CHECK-LABEL: name: sitofp_s32_s32_fpr
1449 name:            sitofp_s32_s32_fpr
1450 legalized:       true
1451 regBankSelected: true
1452
1453 # CHECK:      registers:
1454 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1455 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1456 registers:
1457   - { id: 0, class: gpr }
1458   - { id: 1, class: fpr }
1459
1460 # CHECK:  body:
1461 # CHECK:    %0 = COPY %w0
1462 # CHECK:    %1 = SCVTFUWSri %0
1463 body:             |
1464   bb.0:
1465     liveins: %w0
1466
1467     %0(s32) = COPY %w0
1468     %1(s32) = G_SITOFP %0
1469 ...
1470
1471 ---
1472 # CHECK-LABEL: name: sitofp_s32_s64_fpr
1473 name:            sitofp_s32_s64_fpr
1474 legalized:       true
1475 regBankSelected: true
1476
1477 # CHECK:      registers:
1478 # CHECK-NEXT:  - { id: 0, class: gpr64 }
1479 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1480 registers:
1481   - { id: 0, class: gpr }
1482   - { id: 1, class: fpr }
1483
1484 # CHECK:  body:
1485 # CHECK:    %0 = COPY %x0
1486 # CHECK:    %1 = SCVTFUXSri %0
1487 body:             |
1488   bb.0:
1489     liveins: %x0
1490
1491     %0(s64) = COPY %x0
1492     %1(s32) = G_SITOFP %0
1493 ...
1494
1495 ---
1496 # CHECK-LABEL: name: sitofp_s64_s32_fpr
1497 name:            sitofp_s64_s32_fpr
1498 legalized:       true
1499 regBankSelected: true
1500
1501 # CHECK:      registers:
1502 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1503 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1504 registers:
1505   - { id: 0, class: gpr }
1506   - { id: 1, class: fpr }
1507
1508 # CHECK:  body:
1509 # CHECK:    %0 = COPY %w0
1510 # CHECK:    %1 = SCVTFUWDri %0
1511 body:             |
1512   bb.0:
1513     liveins: %w0
1514
1515     %0(s32) = COPY %w0
1516     %1(s64) = G_SITOFP %0
1517 ...
1518
1519 ---
1520 # CHECK-LABEL: name: sitofp_s64_s64_fpr
1521 name:            sitofp_s64_s64_fpr
1522 legalized:       true
1523 regBankSelected: true
1524
1525 # CHECK:      registers:
1526 # CHECK-NEXT:  - { id: 0, class: gpr64 }
1527 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1528 registers:
1529   - { id: 0, class: gpr }
1530   - { id: 1, class: fpr }
1531
1532 # CHECK:  body:
1533 # CHECK:    %0 = COPY %x0
1534 # CHECK:    %1 = SCVTFUXDri %0
1535 body:             |
1536   bb.0:
1537     liveins: %x0
1538
1539     %0(s64) = COPY %x0
1540     %1(s64) = G_SITOFP %0
1541 ...
1542
1543 ---
1544 # CHECK-LABEL: name: uitofp_s32_s32_fpr
1545 name:            uitofp_s32_s32_fpr
1546 legalized:       true
1547 regBankSelected: true
1548
1549 # CHECK:      registers:
1550 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1551 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1552 registers:
1553   - { id: 0, class: gpr }
1554   - { id: 1, class: fpr }
1555
1556 # CHECK:  body:
1557 # CHECK:    %0 = COPY %w0
1558 # CHECK:    %1 = UCVTFUWSri %0
1559 body:             |
1560   bb.0:
1561     liveins: %w0
1562
1563     %0(s32) = COPY %w0
1564     %1(s32) = G_UITOFP %0
1565 ...
1566
1567 ---
1568 # CHECK-LABEL: name: uitofp_s32_s64_fpr
1569 name:            uitofp_s32_s64_fpr
1570 legalized:       true
1571 regBankSelected: true
1572
1573 # CHECK:      registers:
1574 # CHECK-NEXT:  - { id: 0, class: gpr64 }
1575 # CHECK-NEXT:  - { id: 1, class: fpr32 }
1576 registers:
1577   - { id: 0, class: gpr }
1578   - { id: 1, class: fpr }
1579
1580 # CHECK:  body:
1581 # CHECK:    %0 = COPY %x0
1582 # CHECK:    %1 = UCVTFUXSri %0
1583 body:             |
1584   bb.0:
1585     liveins: %x0
1586
1587     %0(s64) = COPY %x0
1588     %1(s32) = G_UITOFP %0
1589 ...
1590
1591 ---
1592 # CHECK-LABEL: name: uitofp_s64_s32_fpr
1593 name:            uitofp_s64_s32_fpr
1594 legalized:       true
1595 regBankSelected: true
1596
1597 # CHECK:      registers:
1598 # CHECK-NEXT:  - { id: 0, class: gpr32 }
1599 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1600 registers:
1601   - { id: 0, class: gpr }
1602   - { id: 1, class: fpr }
1603
1604 # CHECK:  body:
1605 # CHECK:    %0 = COPY %w0
1606 # CHECK:    %1 = UCVTFUWDri %0
1607 body:             |
1608   bb.0:
1609     liveins: %w0
1610
1611     %0(s32) = COPY %w0
1612     %1(s64) = G_UITOFP %0
1613 ...
1614
1615 ---
1616 # CHECK-LABEL: name: uitofp_s64_s64_fpr
1617 name:            uitofp_s64_s64_fpr
1618 legalized:       true
1619 regBankSelected: true
1620
1621 # CHECK:      registers:
1622 # CHECK-NEXT:  - { id: 0, class: gpr64 }
1623 # CHECK-NEXT:  - { id: 1, class: fpr64 }
1624 registers:
1625   - { id: 0, class: gpr }
1626   - { id: 1, class: fpr }
1627
1628 # CHECK:  body:
1629 # CHECK:    %0 = COPY %x0
1630 # CHECK:    %1 = UCVTFUXDri %0
1631 body:             |
1632   bb.0:
1633     liveins: %x0
1634
1635     %0(s64) = COPY %x0
1636     %1(s64) = G_UITOFP %0
1637 ...
1638
1639 ---
1640 # CHECK-LABEL: name: fptosi_s32_s32_gpr
1641 name:            fptosi_s32_s32_gpr
1642 legalized:       true
1643 regBankSelected: true
1644
1645 # CHECK:      registers:
1646 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1647 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1648 registers:
1649   - { id: 0, class: fpr }
1650   - { id: 1, class: gpr }
1651
1652 # CHECK:  body:
1653 # CHECK:    %0 = COPY %s0
1654 # CHECK:    %1 = FCVTZSUWSr %0
1655 body:             |
1656   bb.0:
1657     liveins: %s0
1658
1659     %0(s32) = COPY %s0
1660     %1(s32) = G_FPTOSI %0
1661 ...
1662
1663 ---
1664 # CHECK-LABEL: name: fptosi_s32_s64_gpr
1665 name:            fptosi_s32_s64_gpr
1666 legalized:       true
1667 regBankSelected: true
1668
1669 # CHECK:      registers:
1670 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1671 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1672 registers:
1673   - { id: 0, class: fpr }
1674   - { id: 1, class: gpr }
1675
1676 # CHECK:  body:
1677 # CHECK:    %0 = COPY %d0
1678 # CHECK:    %1 = FCVTZSUWDr %0
1679 body:             |
1680   bb.0:
1681     liveins: %d0
1682
1683     %0(s64) = COPY %d0
1684     %1(s32) = G_FPTOSI %0
1685 ...
1686
1687 ---
1688 # CHECK-LABEL: name: fptosi_s64_s32_gpr
1689 name:            fptosi_s64_s32_gpr
1690 legalized:       true
1691 regBankSelected: true
1692
1693 # CHECK:      registers:
1694 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1695 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1696 registers:
1697   - { id: 0, class: fpr }
1698   - { id: 1, class: gpr }
1699
1700 # CHECK:  body:
1701 # CHECK:    %0 = COPY %s0
1702 # CHECK:    %1 = FCVTZSUXSr %0
1703 body:             |
1704   bb.0:
1705     liveins: %s0
1706
1707     %0(s32) = COPY %s0
1708     %1(s64) = G_FPTOSI %0
1709 ...
1710
1711 ---
1712 # CHECK-LABEL: name: fptosi_s64_s64_gpr
1713 name:            fptosi_s64_s64_gpr
1714 legalized:       true
1715 regBankSelected: true
1716
1717 # CHECK:      registers:
1718 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1719 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1720 registers:
1721   - { id: 0, class: fpr }
1722   - { id: 1, class: gpr }
1723
1724 # CHECK:  body:
1725 # CHECK:    %0 = COPY %d0
1726 # CHECK:    %1 = FCVTZSUXDr %0
1727 body:             |
1728   bb.0:
1729     liveins: %d0
1730
1731     %0(s64) = COPY %d0
1732     %1(s64) = G_FPTOSI %0
1733 ...
1734
1735 ---
1736 # CHECK-LABEL: name: fptoui_s32_s32_gpr
1737 name:            fptoui_s32_s32_gpr
1738 legalized:       true
1739 regBankSelected: true
1740
1741 # CHECK:      registers:
1742 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1743 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1744 registers:
1745   - { id: 0, class: fpr }
1746   - { id: 1, class: gpr }
1747
1748 # CHECK:  body:
1749 # CHECK:    %0 = COPY %s0
1750 # CHECK:    %1 = FCVTZUUWSr %0
1751 body:             |
1752   bb.0:
1753     liveins: %s0
1754
1755     %0(s32) = COPY %s0
1756     %1(s32) = G_FPTOUI %0
1757 ...
1758
1759 ---
1760 # CHECK-LABEL: name: fptoui_s32_s64_gpr
1761 name:            fptoui_s32_s64_gpr
1762 legalized:       true
1763 regBankSelected: true
1764
1765 # CHECK:      registers:
1766 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1767 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1768 registers:
1769   - { id: 0, class: fpr }
1770   - { id: 1, class: gpr }
1771
1772 # CHECK:  body:
1773 # CHECK:    %0 = COPY %d0
1774 # CHECK:    %1 = FCVTZUUWDr %0
1775 body:             |
1776   bb.0:
1777     liveins: %d0
1778
1779     %0(s64) = COPY %d0
1780     %1(s32) = G_FPTOUI %0
1781 ...
1782
1783 ---
1784 # CHECK-LABEL: name: fptoui_s64_s32_gpr
1785 name:            fptoui_s64_s32_gpr
1786 legalized:       true
1787 regBankSelected: true
1788
1789 # CHECK:      registers:
1790 # CHECK-NEXT:  - { id: 0, class: fpr32 }
1791 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1792 registers:
1793   - { id: 0, class: fpr }
1794   - { id: 1, class: gpr }
1795
1796 # CHECK:  body:
1797 # CHECK:    %0 = COPY %s0
1798 # CHECK:    %1 = FCVTZUUXSr %0
1799 body:             |
1800   bb.0:
1801     liveins: %s0
1802
1803     %0(s32) = COPY %s0
1804     %1(s64) = G_FPTOUI %0
1805 ...
1806
1807 ---
1808 # CHECK-LABEL: name: fptoui_s64_s64_gpr
1809 name:            fptoui_s64_s64_gpr
1810 legalized:       true
1811 regBankSelected: true
1812
1813 # CHECK:      registers:
1814 # CHECK-NEXT:  - { id: 0, class: fpr64 }
1815 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1816 registers:
1817   - { id: 0, class: fpr }
1818   - { id: 1, class: gpr }
1819
1820 # CHECK:  body:
1821 # CHECK:    %0 = COPY %d0
1822 # CHECK:    %1 = FCVTZUUXDr %0
1823 body:             |
1824   bb.0:
1825     liveins: %d0
1826
1827     %0(s64) = COPY %d0
1828     %1(s64) = G_FPTOUI %0
1829 ...
1830
1831 ---
1832 # CHECK-LABEL: name: fptrunc
1833 name:            fptrunc
1834 legalized:       true
1835 regBankSelected: true
1836
1837 # CHECK:      registers:
1838 # CHECK: - { id: 0, class: fpr64 }
1839 # CHECK: - { id: 1, class: fpr32 }
1840 registers:
1841   - { id: 0, class: fpr }
1842   - { id: 1, class: fpr }
1843
1844 # CHECK:  body:
1845 # CHECK:    %0 = COPY %d0
1846 # CHECK:    %1 = FCVTSDr %0
1847 body:             |
1848   bb.0:
1849     liveins: %d0
1850
1851     %0(s64) = COPY %d0
1852     %1(s32) = G_FPTRUNC %0
1853 ...
1854
1855 ---
1856 # CHECK-LABEL: name: fpext
1857 name:            fpext
1858 legalized:       true
1859 regBankSelected: true
1860
1861 # CHECK:      registers:
1862 # CHECK: - { id: 0, class: fpr32 }
1863 # CHECK: - { id: 1, class: fpr64 }
1864 registers:
1865   - { id: 0, class: fpr }
1866   - { id: 1, class: fpr }
1867
1868 # CHECK:  body:
1869 # CHECK:    %0 = COPY %s0
1870 # CHECK:    %1 = FCVTDSr %0
1871 body:             |
1872   bb.0:
1873     liveins: %d0
1874
1875     %0(s32) = COPY %s0
1876     %1(s64) = G_FPEXT %0
1877 ...
1878
1879 ---
1880 # CHECK-LABEL: name: unconditional_br
1881 name:            unconditional_br
1882 legalized:       true
1883 regBankSelected: true
1884
1885 # CHECK:  body:
1886 # CHECK:   bb.0:
1887 # CHECK:    successors: %bb.0
1888 # CHECK:    B %bb.0
1889 body:             |
1890   bb.0:
1891     successors: %bb.0
1892
1893     G_BR %bb.0
1894 ...
1895
1896 ---
1897 # CHECK-LABEL: name: conditional_br
1898 name:            conditional_br
1899 legalized:       true
1900 regBankSelected: true
1901
1902 registers:
1903   - { id: 0, class: gpr }
1904
1905 # CHECK:  body:
1906 # CHECK:   bb.0:
1907 # CHECK:    TBNZW %0, 0, %bb.1
1908 # CHECK:    B %bb.0
1909 body:             |
1910   bb.0:
1911     successors: %bb.0, %bb.1
1912     %0(s1) = COPY %w0
1913     G_BRCOND %0(s1), %bb.1
1914     G_BR %bb.0
1915
1916   bb.1:
1917 ...
1918
1919 ---
1920 # CHECK-LABEL: name: load_s64_gpr
1921 name:            load_s64_gpr
1922 legalized:       true
1923 regBankSelected: true
1924
1925 # CHECK:      registers:
1926 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
1927 # CHECK-NEXT:  - { id: 1, class: gpr64 }
1928 registers:
1929   - { id: 0, class: gpr }
1930   - { id: 1, class: gpr }
1931
1932 # CHECK:  body:
1933 # CHECK: %0 = COPY %x0
1934 # CHECK: %1 = LDRXui %0, 0 :: (load 8 from %ir.addr)
1935 body:             |
1936   bb.0:
1937     liveins: %x0
1938
1939     %0(p0) = COPY %x0
1940     %1(s64) = G_LOAD  %0 :: (load 8 from %ir.addr)
1941
1942 ...
1943
1944 ---
1945 # CHECK-LABEL: name: load_s32_gpr
1946 name:            load_s32_gpr
1947 legalized:       true
1948 regBankSelected: true
1949
1950 # CHECK:      registers:
1951 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
1952 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1953 registers:
1954   - { id: 0, class: gpr }
1955   - { id: 1, class: gpr }
1956
1957 # CHECK:  body:
1958 # CHECK: %0 = COPY %x0
1959 # CHECK: %1 = LDRWui %0, 0 :: (load 4 from %ir.addr)
1960 body:             |
1961   bb.0:
1962     liveins: %x0
1963
1964     %0(p0) = COPY %x0
1965     %1(s32) = G_LOAD  %0 :: (load 4 from %ir.addr)
1966
1967 ...
1968
1969 ---
1970 # CHECK-LABEL: name: load_s16_gpr
1971 name:            load_s16_gpr
1972 legalized:       true
1973 regBankSelected: true
1974
1975 # CHECK:      registers:
1976 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
1977 # CHECK-NEXT:  - { id: 1, class: gpr32 }
1978 registers:
1979   - { id: 0, class: gpr }
1980   - { id: 1, class: gpr }
1981
1982 # CHECK:  body:
1983 # CHECK: %0 = COPY %x0
1984 # CHECK: %1 = LDRHHui %0, 0 :: (load 2 from %ir.addr)
1985 body:             |
1986   bb.0:
1987     liveins: %x0
1988
1989     %0(p0) = COPY %x0
1990     %1(s16) = G_LOAD  %0 :: (load 2 from %ir.addr)
1991
1992 ...
1993
1994 ---
1995 # CHECK-LABEL: name: load_s8_gpr
1996 name:            load_s8_gpr
1997 legalized:       true
1998 regBankSelected: true
1999
2000 # CHECK:      registers:
2001 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2002 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2003 registers:
2004   - { id: 0, class: gpr }
2005   - { id: 1, class: gpr }
2006
2007 # CHECK:  body:
2008 # CHECK: %0 = COPY %x0
2009 # CHECK: %1 = LDRBBui %0, 0 :: (load 1 from %ir.addr)
2010 body:             |
2011   bb.0:
2012     liveins: %x0
2013
2014     %0(p0) = COPY %x0
2015     %1(s8) = G_LOAD  %0 :: (load 1 from %ir.addr)
2016
2017 ...
2018
2019 ---
2020 # CHECK-LABEL: name: load_s64_fpr
2021 name:            load_s64_fpr
2022 legalized:       true
2023 regBankSelected: true
2024
2025 # CHECK:      registers:
2026 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2027 # CHECK-NEXT:  - { id: 1, class: fpr64 }
2028 registers:
2029   - { id: 0, class: gpr }
2030   - { id: 1, class: fpr }
2031
2032 # CHECK:  body:
2033 # CHECK: %0 = COPY %x0
2034 # CHECK: %1 = LDRDui %0, 0 :: (load 8 from %ir.addr)
2035 body:             |
2036   bb.0:
2037     liveins: %x0
2038
2039     %0(p0) = COPY %x0
2040     %1(s64) = G_LOAD  %0 :: (load 8 from %ir.addr)
2041
2042 ...
2043
2044 ---
2045 # CHECK-LABEL: name: load_s32_fpr
2046 name:            load_s32_fpr
2047 legalized:       true
2048 regBankSelected: true
2049
2050 # CHECK:      registers:
2051 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2052 # CHECK-NEXT:  - { id: 1, class: fpr32 }
2053 registers:
2054   - { id: 0, class: gpr }
2055   - { id: 1, class: fpr }
2056
2057 # CHECK:  body:
2058 # CHECK: %0 = COPY %x0
2059 # CHECK: %1 = LDRSui %0, 0 :: (load 4 from %ir.addr)
2060 body:             |
2061   bb.0:
2062     liveins: %x0
2063
2064     %0(p0) = COPY %x0
2065     %1(s32) = G_LOAD  %0 :: (load 4 from %ir.addr)
2066
2067 ...
2068
2069 ---
2070 # CHECK-LABEL: name: load_s16_fpr
2071 name:            load_s16_fpr
2072 legalized:       true
2073 regBankSelected: true
2074
2075 # CHECK:      registers:
2076 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2077 # CHECK-NEXT:  - { id: 1, class: fpr16 }
2078 registers:
2079   - { id: 0, class: gpr }
2080   - { id: 1, class: fpr }
2081
2082 # CHECK:  body:
2083 # CHECK: %0 = COPY %x0
2084 # CHECK: %1 = LDRHui %0, 0 :: (load 2 from %ir.addr)
2085 body:             |
2086   bb.0:
2087     liveins: %x0
2088
2089     %0(p0) = COPY %x0
2090     %1(s16) = G_LOAD  %0 :: (load 2 from %ir.addr)
2091
2092 ...
2093
2094 ---
2095 # CHECK-LABEL: name: load_s8_fpr
2096 name:            load_s8_fpr
2097 legalized:       true
2098 regBankSelected: true
2099
2100 # CHECK:      registers:
2101 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2102 # CHECK-NEXT:  - { id: 1, class: fpr8 }
2103 registers:
2104   - { id: 0, class: gpr }
2105   - { id: 1, class: fpr }
2106
2107 # CHECK:  body:
2108 # CHECK: %0 = COPY %x0
2109 # CHECK: %1 = LDRBui %0, 0 :: (load 1 from %ir.addr)
2110 body:             |
2111   bb.0:
2112     liveins: %x0
2113
2114     %0(p0) = COPY %x0
2115     %1(s8) = G_LOAD  %0 :: (load 1 from %ir.addr)
2116
2117 ...
2118
2119 ---
2120 # CHECK-LABEL: name: store_s64_gpr
2121 name:            store_s64_gpr
2122 legalized:       true
2123 regBankSelected: true
2124
2125 # CHECK:      registers:
2126 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2127 # CHECK-NEXT:  - { id: 1, class: gpr64 }
2128 registers:
2129   - { id: 0, class: gpr }
2130   - { id: 1, class: gpr }
2131
2132 # CHECK:  body:
2133 # CHECK: %0 = COPY %x0
2134 # CHECK: %1 = COPY %x1
2135 # CHECK: STRXui %1, %0, 0 :: (store 8 into %ir.addr)
2136 body:             |
2137   bb.0:
2138     liveins: %x0, %x1
2139
2140     %0(p0) = COPY %x0
2141     %1(s64) = COPY %x1
2142     G_STORE  %1, %0 :: (store 8 into %ir.addr)
2143
2144 ...
2145
2146 ---
2147 # CHECK-LABEL: name: store_s32_gpr
2148 name:            store_s32_gpr
2149 legalized:       true
2150 regBankSelected: true
2151
2152 # CHECK:      registers:
2153 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2154 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2155 registers:
2156   - { id: 0, class: gpr }
2157   - { id: 1, class: gpr }
2158
2159 # CHECK:  body:
2160 # CHECK: %0 = COPY %x0
2161 # CHECK: %1 = COPY %w1
2162 # CHECK: STRWui %1, %0, 0 :: (store 4 into %ir.addr)
2163 body:             |
2164   bb.0:
2165     liveins: %x0, %w1
2166
2167     %0(p0) = COPY %x0
2168     %1(s32) = COPY %w1
2169     G_STORE  %1, %0 :: (store 4 into %ir.addr)
2170
2171 ...
2172
2173 ---
2174 # CHECK-LABEL: name: store_s16_gpr
2175 name:            store_s16_gpr
2176 legalized:       true
2177 regBankSelected: true
2178
2179 # CHECK:      registers:
2180 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2181 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2182 registers:
2183   - { id: 0, class: gpr }
2184   - { id: 1, class: gpr }
2185
2186 # CHECK:  body:
2187 # CHECK: %0 = COPY %x0
2188 # CHECK: %1 = COPY %w1
2189 # CHECK: STRHHui %1, %0, 0 :: (store 2 into %ir.addr)
2190 body:             |
2191   bb.0:
2192     liveins: %x0, %w1
2193
2194     %0(p0) = COPY %x0
2195     %1(s16) = COPY %w1
2196     G_STORE  %1, %0 :: (store 2 into %ir.addr)
2197
2198 ...
2199
2200 ---
2201 # CHECK-LABEL: name: store_s8_gpr
2202 name:            store_s8_gpr
2203 legalized:       true
2204 regBankSelected: true
2205
2206 # CHECK:      registers:
2207 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2208 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2209 registers:
2210   - { id: 0, class: gpr }
2211   - { id: 1, class: gpr }
2212
2213 # CHECK:  body:
2214 # CHECK: %0 = COPY %x0
2215 # CHECK: %1 = COPY %w1
2216 # CHECK: STRBBui %1, %0, 0 :: (store 1 into %ir.addr)
2217 body:             |
2218   bb.0:
2219     liveins: %x0, %w1
2220
2221     %0(p0) = COPY %x0
2222     %1(s8) = COPY %w1
2223     G_STORE  %1, %0 :: (store 1 into %ir.addr)
2224
2225 ...
2226
2227 ---
2228 # CHECK-LABEL: name: store_s64_fpr
2229 name:            store_s64_fpr
2230 legalized:       true
2231 regBankSelected: true
2232
2233 # CHECK:      registers:
2234 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2235 # CHECK-NEXT:  - { id: 1, class: fpr64 }
2236 registers:
2237   - { id: 0, class: gpr }
2238   - { id: 1, class: fpr }
2239
2240 # CHECK:  body:
2241 # CHECK: %0 = COPY %x0
2242 # CHECK: %1 = COPY %d1
2243 # CHECK: STRDui %1, %0, 0 :: (store 8 into %ir.addr)
2244 body:             |
2245   bb.0:
2246     liveins: %x0, %d1
2247
2248     %0(p0) = COPY %x0
2249     %1(s64) = COPY %d1
2250     G_STORE  %1, %0 :: (store 8 into %ir.addr)
2251
2252 ...
2253
2254 ---
2255 # CHECK-LABEL: name: store_s32_fpr
2256 name:            store_s32_fpr
2257 legalized:       true
2258 regBankSelected: true
2259
2260 # CHECK:      registers:
2261 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2262 # CHECK-NEXT:  - { id: 1, class: fpr32 }
2263 registers:
2264   - { id: 0, class: gpr }
2265   - { id: 1, class: fpr }
2266
2267 # CHECK:  body:
2268 # CHECK: %0 = COPY %x0
2269 # CHECK: %1 = COPY %s1
2270 # CHECK: STRSui %1, %0, 0 :: (store 4 into %ir.addr)
2271 body:             |
2272   bb.0:
2273     liveins: %x0, %s1
2274
2275     %0(p0) = COPY %x0
2276     %1(s32) = COPY %s1
2277     G_STORE  %1, %0 :: (store 4 into %ir.addr)
2278
2279 ...
2280
2281 ---
2282 # CHECK-LABEL: name: frame_index
2283 name:            frame_index
2284 legalized:       true
2285 regBankSelected: true
2286
2287 # CHECK:      registers:
2288 # CHECK-NEXT:  - { id: 0, class: gpr64sp }
2289 registers:
2290   - { id: 0, class: gpr }
2291
2292 stack:
2293   - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
2294
2295 # CHECK:  body:
2296 # CHECK: %0 = ADDXri %stack.0.ptr0, 0, 0
2297 body:             |
2298   bb.0:
2299     %0(p0) = G_FRAME_INDEX %stack.0.ptr0
2300 ...
2301
2302 ---
2303 # Check that we set the "selected" property.
2304 # CHECK-LABEL: name: selected_property
2305 # CHECK: legalized: true
2306 # CHECK-NEXT: regBankSelected: true
2307 # CHECK-NEXT: selected: true
2308 name:            selected_property
2309 legalized:       true
2310 regBankSelected: true
2311 selected:        false
2312 body:             |
2313   bb.0:
2314 ...
2315
2316 ---
2317 # CHECK-LABEL: name: const_s32
2318 name:            const_s32
2319 legalized:       true
2320 regBankSelected: true
2321 registers:
2322   - { id: 0, class: gpr }
2323
2324 # CHECK:  body:
2325 # CHECK: %0 = MOVi32imm 42
2326 body:             |
2327   bb.0:
2328     %0(s32) = G_CONSTANT i32 42
2329 ...
2330
2331 ---
2332 # CHECK-LABEL: name: const_s64
2333 name:            const_s64
2334 legalized:       true
2335 regBankSelected: true
2336 registers:
2337   - { id: 0, class: gpr }
2338
2339 # CHECK:  body:
2340 # CHECK: %0 = MOVi64imm 1234567890123
2341 body:             |
2342   bb.0:
2343     %0(s64) = G_CONSTANT i64 1234567890123
2344 ...
2345
2346 ---
2347 # CHECK-LABEL: name: fconst_s32
2348 name:            fconst_s32
2349 legalized:       true
2350 regBankSelected: true
2351 registers:
2352   - { id: 0, class: fpr }
2353
2354 # CHECK:  body:
2355 # CHECK: [[TMP:%[0-9]+]] = MOVi32imm 1080033280
2356 # CHECK: %0 = COPY [[TMP]]
2357 body:             |
2358   bb.0:
2359     %0(s32) = G_FCONSTANT float 3.5
2360 ...
2361
2362 ---
2363 # CHECK-LABEL: name: fconst_s64
2364 name:            fconst_s64
2365 legalized:       true
2366 regBankSelected: true
2367 registers:
2368   - { id: 0, class: fpr }
2369
2370 # CHECK:  body:
2371 # CHECK: [[TMP:%[0-9]+]] = MOVi64imm 4607182418800017408
2372 # CHECK: %0 = COPY [[TMP]]
2373 body:             |
2374   bb.0:
2375     %0(s64) = G_FCONSTANT double 1.0
2376 ...
2377
2378 ---
2379 # CHECK-LABEL: name: gep
2380 name:            gep
2381 legalized:       true
2382 regBankSelected: true
2383 registers:
2384   - { id: 0, class: gpr }
2385   - { id: 1, class: gpr }
2386   - { id: 2, class: gpr }
2387
2388 # CHECK:  body:
2389 # CHECK: %1 = MOVi64imm 42
2390 # CHECK: %2 = ADDXrr %0, %1
2391 body:             |
2392   bb.0:
2393       liveins: %x0
2394     %0(p0) = COPY %x0
2395     %1(s64) = G_CONSTANT i64 42
2396     %2(p0) = G_GEP %0, %1(s64)
2397 ...
2398
2399 ---
2400 # Global defined in the same linkage unit so no GOT is needed
2401 # CHECK-LABEL: name: global_local
2402 name:            global_local
2403 legalized:       true
2404 regBankSelected: true
2405 registers:
2406   - { id: 0, class: gpr }
2407
2408 # CHECK:  body:
2409 # IOS: %0 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
2410 # LINUX-DEFAULT: %0 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
2411 # LINUX-PIC: %0 = LOADgot target-flags(aarch64-got) @var_local
2412 body:             |
2413   bb.0:
2414     %0(p0) = G_GLOBAL_VALUE @var_local
2415 ...
2416
2417 ---
2418 # CHECK-LABEL: name: global_got
2419 name:            global_got
2420 legalized:       true
2421 regBankSelected: true
2422 registers:
2423   - { id: 0, class: gpr }
2424
2425 # CHECK:  body:
2426 # IOS: %0 = LOADgot target-flags(aarch64-got) @var_got
2427 # LINUX-DEFAULT: %0 = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got
2428 # LINUX-PIC: %0 = LOADgot target-flags(aarch64-got) @var_got
2429 body:             |
2430   bb.0:
2431     %0(p0) = G_GLOBAL_VALUE @var_got
2432 ...
2433
2434 ---
2435 # CHECK-LABEL: name: trunc
2436 name:            trunc
2437 legalized:       true
2438 regBankSelected: true
2439
2440 # CHECK:      registers:
2441 # CHECK-NEXT:  - { id: 0, class: gpr32 }
2442 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2443 # CHECK-NEXT:  - { id: 2, class: gpr64 }
2444 # CHECK-NEXT:  - { id: 3, class: gpr32 }
2445 # CHECK-NEXT:  - { id: 4, class: gpr32 }
2446 registers:
2447   - { id: 0, class: gpr }
2448   - { id: 1, class: gpr }
2449   - { id: 2, class: gpr }
2450   - { id: 3, class: gpr }
2451   - { id: 4, class: gpr }
2452
2453 # CHECK:  body:
2454 # CHECK:    %1 = COPY %0
2455 # CHECK:    %3 = COPY %2.sub_32
2456 # CHECK:    %4 = COPY %2.sub_32
2457 body:             |
2458   bb.0:
2459     liveins: %w0, %x0
2460
2461     %0(s32) = COPY %w0
2462     %1(s1) = G_TRUNC %0
2463
2464     %2(s64) = COPY %x0
2465     %3(s32) = G_TRUNC %2
2466     %4(s8) = G_TRUNC %2
2467 ...
2468
2469 ---
2470 # CHECK-LABEL: name: anyext_gpr
2471 name:            anyext_gpr
2472 legalized:       true
2473 regBankSelected: true
2474
2475 # CHECK:      registers:
2476 # CHECK-NEXT:  - { id: 0, class: gpr32all }
2477 # CHECK-NEXT:  - { id: 1, class: gpr64all }
2478 # CHECK-NEXT:  - { id: 2, class: gpr32all }
2479 # CHECK-NEXT:  - { id: 3, class: gpr32all }
2480 # CHECK-NEXT:  - { id: 4, class: gpr64all }
2481 registers:
2482   - { id: 0, class: gpr }
2483   - { id: 1, class: gpr }
2484   - { id: 2, class: gpr }
2485   - { id: 3, class: gpr }
2486
2487 # CHECK:  body:
2488 # CHECK:    %0 = COPY %w0
2489 # CHECK:    %4 = SUBREG_TO_REG 0, %0, 15
2490 # CHECK:    %1 = COPY %4
2491 # CHECK:    %2 = COPY %w0
2492 # CHECK:    %3 = COPY %2
2493 body:             |
2494   bb.0:
2495     liveins: %w0
2496
2497     %0(s32) = COPY %w0
2498     %1(s64) = G_ANYEXT %0
2499     %2(s8) = COPY %w0
2500     %3(s32) = G_ANYEXT %2
2501 ...
2502
2503 ---
2504 # CHECK-LABEL: name: zext_gpr
2505 name:            zext_gpr
2506 legalized:       true
2507 regBankSelected: true
2508
2509 # CHECK:      registers:
2510 # CHECK-NEXT:  - { id: 0, class: gpr32 }
2511 # CHECK-NEXT:  - { id: 1, class: gpr64 }
2512 # CHECK-NEXT:  - { id: 2, class: gpr32 }
2513 # CHECK-NEXT:  - { id: 3, class: gpr32 }
2514 # CHECK-NEXT:  - { id: 4, class: gpr32 }
2515 # CHECK-NEXT:  - { id: 5, class: gpr64 }
2516 registers:
2517   - { id: 0, class: gpr }
2518   - { id: 1, class: gpr }
2519   - { id: 2, class: gpr }
2520   - { id: 3, class: gpr }
2521   - { id: 4, class: gpr }
2522
2523 # CHECK:  body:
2524 # CHECK:    %0 = COPY %w0
2525 # CHECK:    %5 = SUBREG_TO_REG 0, %0, 15
2526 # CHECK:    %1 = UBFMXri %5, 0, 31
2527 # CHECK:    %2 = COPY %w0
2528 # CHECK:    %3 = UBFMWri %2, 0, 7
2529 # CHECK:    %4 = UBFMWri %2, 0, 7
2530 body:             |
2531   bb.0:
2532     liveins: %w0
2533
2534     %0(s32) = COPY %w0
2535     %1(s64) = G_ZEXT %0
2536     %2(s8) = COPY %w0
2537     %3(s32) = G_ZEXT %2
2538     %4(s16)= G_ZEXT %2
2539 ...
2540
2541 ---
2542 # CHECK-LABEL: name: sext_gpr
2543 name:            sext_gpr
2544 legalized:       true
2545 regBankSelected: true
2546
2547 # CHECK:      registers:
2548 # CHECK-NEXT:  - { id: 0, class: gpr32 }
2549 # CHECK-NEXT:  - { id: 1, class: gpr64 }
2550 # CHECK-NEXT:  - { id: 2, class: gpr32 }
2551 # CHECK-NEXT:  - { id: 3, class: gpr32 }
2552 # CHECK-NEXT:  - { id: 4, class: gpr32 }
2553 # CHECK-NEXT:  - { id: 5, class: gpr64 }
2554 registers:
2555   - { id: 0, class: gpr }
2556   - { id: 1, class: gpr }
2557   - { id: 2, class: gpr }
2558   - { id: 3, class: gpr }
2559   - { id: 4, class: gpr }
2560
2561 # CHECK:  body:
2562 # CHECK:    %0 = COPY %w0
2563 # CHECK:    %5 = SUBREG_TO_REG 0, %0, 15
2564 # CHECK:    %1 = SBFMXri %5, 0, 31
2565 # CHECK:    %2 = COPY %w0
2566 # CHECK:    %3 = SBFMWri %2, 0, 7
2567 # CHECK:    %4 = SBFMWri %2, 0, 7
2568 body:             |
2569   bb.0:
2570     liveins: %w0
2571
2572     %0(s32) = COPY %w0
2573     %1(s64) = G_SEXT %0
2574     %2(s8) = COPY %w0
2575     %3(s32) = G_SEXT %2
2576     %4(s16) = G_SEXT %2
2577 ...
2578
2579 ---
2580 # CHECK-LABEL: name: casts
2581 name:            casts
2582 legalized:       true
2583 regBankSelected: true
2584
2585 # CHECK:      registers:
2586 # CHECK-NEXT:  - { id: 0, class: gpr64all }
2587 # CHECK-NEXT:  - { id: 1, class: fpr64 }
2588 # CHECK-NEXT:  - { id: 2, class: gpr64 }
2589 # CHECK-NEXT:  - { id: 3, class: gpr64 }
2590 # CHECK-NEXT:  - { id: 4, class: gpr32 }
2591 # CHECK-NEXT:  - { id: 5, class: gpr32 }
2592 # CHECK-NEXT:  - { id: 6, class: gpr32 }
2593 # CHECK-NEXT:  - { id: 7, class: gpr32 }
2594 registers:
2595   - { id: 0, class: gpr }
2596   - { id: 1, class: fpr }
2597   - { id: 2, class: gpr }
2598   - { id: 3, class: gpr }
2599   - { id: 4, class: gpr }
2600   - { id: 5, class: gpr }
2601   - { id: 6, class: gpr }
2602   - { id: 7, class: gpr }
2603 # CHECK:  body:
2604 # CHECK:    %0 = COPY %x0
2605 # CHECK:    %1 = COPY %0
2606 # CHECK:    %2 = COPY %0
2607 # CHECK:    %3 = COPY %2
2608 # CHECK:    %4 = COPY %2.sub_32
2609 # CHECK:    %5 = COPY %2.sub_32
2610 # CHECK:    %6 = COPY %2.sub_32
2611 # CHECK:    %7 = COPY %2.sub_32
2612 body:             |
2613   bb.0:
2614     liveins: %x0
2615     %0(s64) = COPY %x0
2616     %1(<8 x s8>) = G_BITCAST %0(s64)
2617     %2(p0) = G_INTTOPTR %0
2618
2619     %3(s64) = G_PTRTOINT %2
2620     %4(s32) = G_PTRTOINT %2
2621     %5(s16) = G_PTRTOINT %2
2622     %6(s8) = G_PTRTOINT %2
2623     %7(s1) = G_PTRTOINT %2
2624 ...
2625
2626 ---
2627 # CHECK-LABEL: name: bitcast_s32_gpr
2628 name:            bitcast_s32_gpr
2629 legalized:       true
2630 regBankSelected: true
2631 # CHECK:      registers:
2632 # CHECK-NEXT:  - { id: 0, class: gpr32all }
2633 # CHECK-NEXT:  - { id: 1, class: gpr32all }
2634 registers:
2635   - { id: 0, class: gpr }
2636   - { id: 1, class: gpr }
2637
2638 # CHECK:  body:
2639 # CHECK:    %0 = COPY %w0
2640 # CHECK:    %1 = COPY %0
2641 body:             |
2642   bb.0:
2643     liveins: %w0
2644
2645     %0(s32) = COPY %w0
2646     %1(s32) = G_BITCAST %0
2647 ...
2648
2649 ---
2650 # CHECK-LABEL: name: bitcast_s32_fpr
2651 name:            bitcast_s32_fpr
2652 legalized:       true
2653 regBankSelected: true
2654
2655 # CHECK:      registers:
2656 # CHECK-NEXT:  - { id: 0, class: fpr32 }
2657 # CHECK-NEXT:  - { id: 1, class: fpr32 }
2658 registers:
2659   - { id: 0, class: fpr }
2660   - { id: 1, class: fpr }
2661
2662 # CHECK:  body:
2663 # CHECK:    %0 = COPY %s0
2664 # CHECK:    %1 = COPY %0
2665 body:             |
2666   bb.0:
2667     liveins: %s0
2668
2669     %0(s32) = COPY %s0
2670     %1(s32) = G_BITCAST %0
2671 ...
2672
2673 ---
2674 # CHECK-LABEL: name: bitcast_s32_gpr_fpr
2675 name:            bitcast_s32_gpr_fpr
2676 legalized:       true
2677 regBankSelected: true
2678
2679 # CHECK:      registers:
2680 # CHECK-NEXT:  - { id: 0, class: gpr32all }
2681 # CHECK-NEXT:  - { id: 1, class: fpr32 }
2682 registers:
2683   - { id: 0, class: gpr }
2684   - { id: 1, class: fpr }
2685
2686 # CHECK:  body:
2687 # CHECK:    %0 = COPY %w0
2688 # CHECK:    %1 = COPY %0
2689 body:             |
2690   bb.0:
2691     liveins: %w0
2692
2693     %0(s32) = COPY %w0
2694     %1(s32) = G_BITCAST %0
2695 ...
2696
2697 ---
2698 # CHECK-LABEL: name: bitcast_s32_fpr_gpr
2699 name:            bitcast_s32_fpr_gpr
2700 legalized:       true
2701 regBankSelected: true
2702
2703 # CHECK:      registers:
2704 # CHECK-NEXT:  - { id: 0, class: fpr32 }
2705 # CHECK-NEXT:  - { id: 1, class: gpr32all }
2706 registers:
2707   - { id: 0, class: fpr }
2708   - { id: 1, class: gpr }
2709
2710 # CHECK:  body:
2711 # CHECK:    %0 = COPY %s0
2712 # CHECK:    %1 = COPY %0
2713 body:             |
2714   bb.0:
2715     liveins: %s0
2716
2717     %0(s32) = COPY %s0
2718     %1(s32) = G_BITCAST %0
2719 ...
2720
2721 ---
2722 # CHECK-LABEL: name: bitcast_s64_gpr
2723 name:            bitcast_s64_gpr
2724 legalized:       true
2725 regBankSelected: true
2726
2727 # CHECK:      registers:
2728 # CHECK-NEXT:  - { id: 0, class: gpr64all }
2729 # CHECK-NEXT:  - { id: 1, class: gpr64all }
2730 registers:
2731   - { id: 0, class: gpr }
2732   - { id: 1, class: gpr }
2733
2734 # CHECK:  body:
2735 # CHECK:    %0 = COPY %x0
2736 # CHECK:    %1 = COPY %0
2737 body:             |
2738   bb.0:
2739     liveins: %x0
2740
2741     %0(s64) = COPY %x0
2742     %1(s64) = G_BITCAST %0
2743 ...
2744
2745 ---
2746 # CHECK-LABEL: name: bitcast_s64_fpr
2747 name:            bitcast_s64_fpr
2748 legalized:       true
2749 regBankSelected: true
2750
2751 # CHECK:      registers:
2752 # CHECK-NEXT:  - { id: 0, class: fpr64 }
2753 # CHECK-NEXT:  - { id: 1, class: fpr64 }
2754 registers:
2755   - { id: 0, class: fpr }
2756   - { id: 1, class: fpr }
2757
2758 # CHECK:  body:
2759 # CHECK:    %0 = COPY %d0
2760 # CHECK:    %1 = COPY %0
2761 body:             |
2762   bb.0:
2763     liveins: %d0
2764
2765     %0(s64) = COPY %d0
2766     %1(s64) = G_BITCAST %0
2767 ...
2768
2769 ---
2770 # CHECK-LABEL: name: bitcast_s64_gpr_fpr
2771 name:            bitcast_s64_gpr_fpr
2772 legalized:       true
2773 regBankSelected: true
2774
2775 # CHECK:      registers:
2776 # CHECK-NEXT:  - { id: 0, class: gpr64all }
2777 # CHECK-NEXT:  - { id: 1, class: fpr64 }
2778 registers:
2779   - { id: 0, class: gpr }
2780   - { id: 1, class: fpr }
2781 # CHECK:  body:
2782 # CHECK:    %0 = COPY %x0
2783 # CHECK:    %1 = COPY %0
2784 body:             |
2785   bb.0:
2786     liveins: %x0
2787
2788     %0(s64) = COPY %x0
2789     %1(s64) = G_BITCAST %0
2790 ...
2791
2792 ---
2793 # CHECK-LABEL: name: bitcast_s64_fpr_gpr
2794 name:            bitcast_s64_fpr_gpr
2795 legalized:       true
2796 regBankSelected: true
2797
2798 # CHECK:      registers:
2799 # CHECK-NEXT:  - { id: 0, class: fpr64 }
2800 # CHECK-NEXT:  - { id: 1, class: gpr64all }
2801 registers:
2802   - { id: 0, class: fpr }
2803   - { id: 1, class: gpr }
2804
2805 # CHECK:  body:
2806 # CHECK:    %0 = COPY %d0
2807 # CHECK:    %1 = COPY %0
2808 body:             |
2809   bb.0:
2810     liveins: %d0
2811
2812     %0(s64) = COPY %d0
2813     %1(s64) = G_BITCAST %0
2814 ...
2815
2816 ---
2817 # CHECK-LABEL: name: icmp
2818 name:            icmp
2819 legalized:       true
2820 regBankSelected: true
2821
2822 # CHECK:      registers:
2823 # CHECK-NEXT:  - { id: 0, class: gpr32 }
2824 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2825 # CHECK-NEXT:  - { id: 2, class: gpr64 }
2826 # CHECK-NEXT:  - { id: 3, class: gpr32 }
2827 # CHECK-NEXT:  - { id: 4, class: gpr64 }
2828 # CHECK-NEXT:  - { id: 5, class: gpr32 }
2829 registers:
2830   - { id: 0, class: gpr }
2831   - { id: 1, class: gpr }
2832   - { id: 2, class: gpr }
2833   - { id: 3, class: gpr }
2834   - { id: 4, class: gpr }
2835   - { id: 5, class: gpr }
2836
2837 # CHECK:  body:
2838 # CHECK:    %wzr = SUBSWrr %0, %0, implicit-def %nzcv
2839 # CHECK:    %1 = CSINCWr %wzr, %wzr, 1, implicit %nzcv
2840
2841 # CHECK:    %xzr = SUBSXrr %2, %2, implicit-def %nzcv
2842 # CHECK:    %3 = CSINCWr %wzr, %wzr, 3, implicit %nzcv
2843
2844 # CHECK:    %xzr = SUBSXrr %4, %4, implicit-def %nzcv
2845 # CHECK:    %5 = CSINCWr %wzr, %wzr, 0, implicit %nzcv
2846
2847 body:             |
2848   bb.0:
2849     liveins: %w0, %x0
2850
2851     %0(s32) = COPY %w0
2852     %1(s1) = G_ICMP intpred(eq), %0, %0
2853
2854     %2(s64) = COPY %x0
2855     %3(s1) = G_ICMP intpred(uge), %2, %2
2856
2857     %4(p0) = COPY %x0
2858     %5(s1) = G_ICMP intpred(ne), %4, %4
2859 ...
2860
2861 ---
2862 # CHECK-LABEL: name: fcmp
2863 name:            fcmp
2864 legalized:       true
2865 regBankSelected: true
2866
2867 # CHECK:      registers:
2868 # CHECK-NEXT:  - { id: 0, class: fpr32 }
2869 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2870 # CHECK-NEXT:  - { id: 2, class: fpr64 }
2871 # CHECK-NEXT:  - { id: 3, class: gpr32 }
2872 # CHECK-NEXT:  - { id: 4, class: gpr32 }
2873 # CHECK-NEXT:  - { id: 5, class: gpr32 }
2874 registers:
2875   - { id: 0, class: fpr }
2876   - { id: 1, class: gpr }
2877   - { id: 2, class: fpr }
2878   - { id: 3, class: gpr }
2879
2880 # CHECK:  body:
2881 # CHECK:    FCMPSrr %0, %0, implicit-def %nzcv
2882 # CHECK:    [[TST_MI:%[0-9]+]] = CSINCWr %wzr, %wzr, 4, implicit %nzcv
2883 # CHECK:    [[TST_GT:%[0-9]+]] = CSINCWr %wzr, %wzr, 12, implicit %nzcv
2884 # CHECK:    %1 = ORRWrr [[TST_MI]], [[TST_GT]]
2885
2886 # CHECK:    FCMPDrr %2, %2, implicit-def %nzcv
2887 # CHECK:    %3 = CSINCWr %wzr, %wzr, 5, implicit %nzcv
2888
2889 body:             |
2890   bb.0:
2891     liveins: %w0, %x0
2892
2893     %0(s32) = COPY %s0
2894     %1(s1) = G_FCMP floatpred(one), %0, %0
2895
2896     %2(s64) = COPY %d0
2897     %3(s1) = G_FCMP floatpred(uge), %2, %2
2898
2899 ...
2900
2901 ---
2902 # CHECK-LABEL: name: phi
2903 name:            phi
2904 legalized:       true
2905 regBankSelected: true
2906 tracksRegLiveness: true
2907
2908 # CHECK:      registers:
2909 # CHECK-NEXT:  - { id: 0, class: fpr32 }
2910 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2911 # CHECK-NEXT:  - { id: 2, class: fpr32 }
2912 registers:
2913   - { id: 0, class: fpr }
2914   - { id: 1, class: gpr }
2915   - { id: 2, class: fpr }
2916
2917 # CHECK:  body:
2918 # CHECK:    bb.1:
2919 # CHECK:      %2 = PHI %0, %bb.0, %2, %bb.1
2920
2921 body:             |
2922   bb.0:
2923     liveins: %s0, %w0
2924     successors: %bb.1
2925     %0(s32) = COPY %s0
2926     %1(s1) = COPY %w0
2927
2928   bb.1:
2929     successors: %bb.1, %bb.2
2930     %2(s32) = PHI %0, %bb.0, %2, %bb.1
2931     G_BRCOND %1, %bb.1
2932
2933   bb.2:
2934     %s0 = COPY %2
2935     RET_ReallyLR implicit %s0
2936 ...
2937
2938 ---
2939 # CHECK-LABEL: name: select
2940 name:            select
2941 legalized:       true
2942 regBankSelected: true
2943 tracksRegLiveness: true
2944
2945 # CHECK:      registers:
2946 # CHECK-NEXT:  - { id: 0, class: gpr32 }
2947 # CHECK-NEXT:  - { id: 1, class: gpr32 }
2948 # CHECK-NEXT:  - { id: 2, class: gpr32 }
2949 # CHECK-NEXT:  - { id: 3, class: gpr32 }
2950 # CHECK-NEXT:  - { id: 4, class: gpr64 }
2951 # CHECK-NEXT:  - { id: 5, class: gpr64 }
2952 # CHECK-NEXT:  - { id: 6, class: gpr64 }
2953 registers:
2954   - { id: 0, class: gpr }
2955   - { id: 1, class: gpr }
2956   - { id: 2, class: gpr }
2957   - { id: 3, class: gpr }
2958   - { id: 4, class: gpr }
2959   - { id: 5, class: gpr }
2960   - { id: 6, class: gpr }
2961
2962 # CHECK:  body:
2963 # CHECK:      %wzr = ANDSWri %0, 0, implicit-def %nzcv
2964 # CHECK:      %3 = CSELWr %1, %2, 1, implicit %nzcv
2965 # CHECK:      %wzr = ANDSWri %0, 0, implicit-def %nzcv
2966 # CHECK:      %6 = CSELXr %4, %5, 1, implicit %nzcv
2967 body:             |
2968   bb.0:
2969     liveins: %w0, %w1, %w2
2970     %0(s1) = COPY %w0
2971
2972     %1(s32) = COPY %w1
2973     %2(s32) = COPY %w2
2974     %3(s32) = G_SELECT %0, %1, %2
2975
2976     %4(s64) = COPY %x0
2977     %5(s64) = COPY %x1
2978     %6(s64) = G_SELECT %0, %4, %5
2979 ...