[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / regbankselect-default.mir
blobe226c0fbae7d32d9c6b5294fca2993f74a31d27f
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple arm64-- -run-pass=regbankselect %s -o - | FileCheck %s
4 # Check the default mappings for various instructions.
6 --- |
7   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
9   define void @test_add_s32() { ret void }
10   define void @test_add_v4s32() { ret void }
11   define void @test_sub_s32() { ret void }
12   define void @test_sub_v4s32() { ret void }
13   define void @test_mul_s32() { ret void }
14   define void @test_mul_v4s32() { ret void }
16   define void @test_and_s32() { ret void }
17   define void @test_and_v4s32() { ret void }
18   define void @test_or_s32() { ret void }
19   define void @test_or_v4s32() { ret void }
20   define void @test_xor_s32() { ret void }
21   define void @test_xor_v4s32() { ret void }
23   define void @test_shl_s32() { ret void }
24   define void @test_shl_v4s32() { ret void }
25   define void @test_lshr_s32() { ret void }
26   define void @test_ashr_s32() { ret void }
28   define void @test_sdiv_s32() { ret void }
29   define void @test_udiv_s32() { ret void }
31   define void @test_anyext_s64_s32() { ret void }
32   define void @test_sext_s64_s32() { ret void }
33   define void @test_zext_s64_s32() { ret void }
34   define void @test_trunc_s32_s64() { ret void }
36   define void @test_constant_s32() { ret void }
37   define void @test_constant_p0() { ret void }
39   define void @test_icmp_s32() { ret void }
40   define void @test_icmp_p0() { ret void }
42   define void @test_frame_index_p0() {
43     %ptr0 = alloca i64
44     ret void
45   }
47   define void @test_ptrtoint_s64_p0() { ret void }
48   define void @test_inttoptr_p0_s64() { ret void }
50   define void @test_load_s32_p0() { ret void }
51   define void @test_store_s32_p0() { ret void }
53   define void @test_fadd_s32() { ret void }
54   define void @test_fsub_s32() { ret void }
55   define void @test_fmul_s32() { ret void }
56   define void @test_fdiv_s32() { ret void }
58   define void @test_fpext_s64_s32() { ret void }
59   define void @test_fptrunc_s32_s64() { ret void }
61   define void @test_fconstant_s32() { ret void }
62   define void @test_fneg_s32() { ret void }
64   define void @test_fcmp_s32() { ret void }
66   define void @test_sitofp_s64_s32() { ret void }
67   define void @test_sitofp_v4s32() { ret void }
68   define void @test_uitofp_s32_s64() { ret void }
69   define void @test_uitofp_v4s32() { ret void }
71   define void @test_fptosi_s64_s32() { ret void }
72   define void @test_fptosi_v4s32() { ret void }
73   define void @test_fptoui_s32_s64() { ret void }
74   define void @test_fptoui_v4s32() { ret void }
76   define void @test_gphi_ptr() { ret void }
78 ...
80 ---
81 name:            test_add_s32
82 legalized:       true
83 registers:
84   - { id: 0, class: _ }
85   - { id: 1, class: _ }
86 body: |
87   bb.0:
88     liveins: $w0
89     ; CHECK-LABEL: name: test_add_s32
90     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
91     ; CHECK: [[ADD:%[0-9]+]]:gpr(s32) = G_ADD [[COPY]], [[COPY]]
92     %0(s32) = COPY $w0
93     %1(s32) = G_ADD %0, %0
94 ...
96 ---
97 name:            test_add_v4s32
98 legalized:       true
99 registers:
100   - { id: 0, class: _ }
101   - { id: 1, class: _ }
102 body: |
103   bb.0:
104     liveins: $q0
105     ; CHECK-LABEL: name: test_add_v4s32
106     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
107     ; CHECK: [[ADD:%[0-9]+]]:fpr(<4 x s32>) = G_ADD [[COPY]], [[COPY]]
108     %0(<4 x s32>) = COPY $q0
109     %1(<4 x s32>) = G_ADD %0, %0
113 name:            test_sub_s32
114 legalized:       true
115 registers:
116   - { id: 0, class: _ }
117   - { id: 1, class: _ }
118 body: |
119   bb.0:
120     liveins: $w0
121     ; CHECK-LABEL: name: test_sub_s32
122     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
123     ; CHECK: [[SUB:%[0-9]+]]:gpr(s32) = G_SUB [[COPY]], [[COPY]]
124     %0(s32) = COPY $w0
125     %1(s32) = G_SUB %0, %0
129 name:            test_sub_v4s32
130 legalized:       true
131 registers:
132   - { id: 0, class: _ }
133   - { id: 1, class: _ }
134 body: |
135   bb.0:
136     liveins: $q0
137     ; CHECK-LABEL: name: test_sub_v4s32
138     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
139     ; CHECK: [[SUB:%[0-9]+]]:fpr(<4 x s32>) = G_SUB [[COPY]], [[COPY]]
140     %0(<4 x s32>) = COPY $q0
141     %1(<4 x s32>) = G_SUB %0, %0
145 name:            test_mul_s32
146 legalized:       true
147 registers:
148   - { id: 0, class: _ }
149   - { id: 1, class: _ }
150 body: |
151   bb.0:
152     liveins: $w0
153     ; CHECK-LABEL: name: test_mul_s32
154     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
155     ; CHECK: [[MUL:%[0-9]+]]:gpr(s32) = G_MUL [[COPY]], [[COPY]]
156     %0(s32) = COPY $w0
157     %1(s32) = G_MUL %0, %0
161 name:            test_mul_v4s32
162 legalized:       true
163 registers:
164   - { id: 0, class: _ }
165   - { id: 1, class: _ }
166 body: |
167   bb.0:
168     liveins: $q0
169     ; CHECK-LABEL: name: test_mul_v4s32
170     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
171     ; CHECK: [[MUL:%[0-9]+]]:fpr(<4 x s32>) = G_MUL [[COPY]], [[COPY]]
172     %0(<4 x s32>) = COPY $q0
173     %1(<4 x s32>) = G_MUL %0, %0
177 name:            test_and_s32
178 legalized:       true
179 registers:
180   - { id: 0, class: _ }
181   - { id: 1, class: _ }
182 body: |
183   bb.0:
184     liveins: $w0
185     ; CHECK-LABEL: name: test_and_s32
186     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
187     ; CHECK: [[AND:%[0-9]+]]:gpr(s32) = G_AND [[COPY]], [[COPY]]
188     %0(s32) = COPY $w0
189     %1(s32) = G_AND %0, %0
193 name:            test_and_v4s32
194 legalized:       true
195 registers:
196   - { id: 0, class: _ }
197   - { id: 1, class: _ }
198 body: |
199   bb.0:
200     liveins: $q0
201     ; CHECK-LABEL: name: test_and_v4s32
202     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
203     ; CHECK: [[AND:%[0-9]+]]:fpr(<4 x s32>) = G_AND [[COPY]], [[COPY]]
204     %0(<4 x s32>) = COPY $q0
205     %1(<4 x s32>) = G_AND %0, %0
209 name:            test_or_s32
210 legalized:       true
211 registers:
212   - { id: 0, class: _ }
213   - { id: 1, class: _ }
214 body: |
215   bb.0:
216     liveins: $w0
217     ; CHECK-LABEL: name: test_or_s32
218     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
219     ; CHECK: [[OR:%[0-9]+]]:gpr(s32) = G_OR [[COPY]], [[COPY]]
220     %0(s32) = COPY $w0
221     %1(s32) = G_OR %0, %0
225 name:            test_or_v4s32
226 legalized:       true
227 registers:
228   - { id: 0, class: _ }
229   - { id: 1, class: _ }
230 body: |
231   bb.0:
232     liveins: $q0
233     ; CHECK-LABEL: name: test_or_v4s32
234     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
235     ; CHECK: [[OR:%[0-9]+]]:fpr(<4 x s32>) = G_OR [[COPY]], [[COPY]]
236     %0(<4 x s32>) = COPY $q0
237     %1(<4 x s32>) = G_OR %0, %0
241 name:            test_xor_s32
242 legalized:       true
243 registers:
244   - { id: 0, class: _ }
245   - { id: 1, class: _ }
246 body: |
247   bb.0:
248     liveins: $w0
249     ; CHECK-LABEL: name: test_xor_s32
250     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
251     ; CHECK: [[XOR:%[0-9]+]]:gpr(s32) = G_XOR [[COPY]], [[COPY]]
252     %0(s32) = COPY $w0
253     %1(s32) = G_XOR %0, %0
257 name:            test_xor_v4s32
258 legalized:       true
259 registers:
260   - { id: 0, class: _ }
261   - { id: 1, class: _ }
262 body: |
263   bb.0:
264     liveins: $q0
265     ; CHECK-LABEL: name: test_xor_v4s32
266     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
267     ; CHECK: [[XOR:%[0-9]+]]:fpr(<4 x s32>) = G_XOR [[COPY]], [[COPY]]
268     %0(<4 x s32>) = COPY $q0
269     %1(<4 x s32>) = G_XOR %0, %0
273 name:            test_shl_s32
274 legalized:       true
275 registers:
276   - { id: 0, class: _ }
277   - { id: 1, class: _ }
278 body: |
279   bb.0:
280     liveins: $w0
281     ; CHECK-LABEL: name: test_shl_s32
282     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
283     ; CHECK: [[SHL:%[0-9]+]]:gpr(s32) = G_SHL [[COPY]], [[COPY]](s32)
284     %0(s32) = COPY $w0
285     %1(s32) = G_SHL %0, %0
289 name:            test_shl_v4s32
290 legalized:       true
291 registers:
292   - { id: 0, class: _ }
293   - { id: 1, class: _ }
294 body: |
295   bb.0:
296     liveins: $q0
297     ; CHECK-LABEL: name: test_shl_v4s32
298     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
299     ; CHECK: [[SHL:%[0-9]+]]:fpr(<4 x s32>) = G_SHL [[COPY]], [[COPY]](<4 x s32>)
300     %0(<4 x s32>) = COPY $q0
301     %1(<4 x s32>) = G_SHL %0, %0
305 name:            test_lshr_s32
306 legalized:       true
307 registers:
308   - { id: 0, class: _ }
309   - { id: 1, class: _ }
310 body: |
311   bb.0:
312     liveins: $w0
313     ; CHECK-LABEL: name: test_lshr_s32
314     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
315     ; CHECK: [[LSHR:%[0-9]+]]:gpr(s32) = G_LSHR [[COPY]], [[COPY]](s32)
316     %0(s32) = COPY $w0
317     %1(s32) = G_LSHR %0, %0
321 name:            test_ashr_s32
322 legalized:       true
323 registers:
324   - { id: 0, class: _ }
325   - { id: 1, class: _ }
326 body: |
327   bb.0:
328     liveins: $w0
329     ; CHECK-LABEL: name: test_ashr_s32
330     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
331     ; CHECK: [[ASHR:%[0-9]+]]:gpr(s32) = G_ASHR [[COPY]], [[COPY]](s32)
332     %0(s32) = COPY $w0
333     %1(s32) = G_ASHR %0, %0
337 name:            test_sdiv_s32
338 legalized:       true
339 registers:
340   - { id: 0, class: _ }
341   - { id: 1, class: _ }
342 body: |
343   bb.0:
344     liveins: $w0
345     ; CHECK-LABEL: name: test_sdiv_s32
346     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
347     ; CHECK: [[SDIV:%[0-9]+]]:gpr(s32) = G_SDIV [[COPY]], [[COPY]]
348     %0(s32) = COPY $w0
349     %1(s32) = G_SDIV %0, %0
353 name:            test_udiv_s32
354 legalized:       true
355 registers:
356   - { id: 0, class: _ }
357   - { id: 1, class: _ }
358 body: |
359   bb.0:
360     liveins: $w0
361     ; CHECK-LABEL: name: test_udiv_s32
362     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
363     ; CHECK: [[UDIV:%[0-9]+]]:gpr(s32) = G_UDIV [[COPY]], [[COPY]]
364     %0(s32) = COPY $w0
365     %1(s32) = G_UDIV %0, %0
369 name:            test_anyext_s64_s32
370 legalized:       true
371 registers:
372   - { id: 0, class: _ }
373   - { id: 1, class: _ }
374 body: |
375   bb.0:
376     liveins: $w0
377     ; CHECK-LABEL: name: test_anyext_s64_s32
378     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
379     ; CHECK: [[ANYEXT:%[0-9]+]]:gpr(s64) = G_ANYEXT [[COPY]](s32)
380     %0(s32) = COPY $w0
381     %1(s64) = G_ANYEXT %0
385 name:            test_sext_s64_s32
386 legalized:       true
387 registers:
388   - { id: 0, class: _ }
389   - { id: 1, class: _ }
390 body: |
391   bb.0:
392     liveins: $w0
393     ; CHECK-LABEL: name: test_sext_s64_s32
394     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
395     ; CHECK: [[SEXT:%[0-9]+]]:gpr(s64) = G_SEXT [[COPY]](s32)
396     %0(s32) = COPY $w0
397     %1(s64) = G_SEXT %0
401 name:            test_zext_s64_s32
402 legalized:       true
403 registers:
404   - { id: 0, class: _ }
405   - { id: 1, class: _ }
406 body: |
407   bb.0:
408     liveins: $w0
409     ; CHECK-LABEL: name: test_zext_s64_s32
410     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
411     ; CHECK: [[ZEXT:%[0-9]+]]:gpr(s64) = G_ZEXT [[COPY]](s32)
412     %0(s32) = COPY $w0
413     %1(s64) = G_ZEXT %0
417 name:            test_trunc_s32_s64
418 legalized:       true
419 registers:
420   - { id: 0, class: _ }
421   - { id: 1, class: _ }
422 body: |
423   bb.0:
424     liveins: $x0
425     ; CHECK-LABEL: name: test_trunc_s32_s64
426     ; CHECK: [[COPY:%[0-9]+]]:gpr(s64) = COPY $x0
427     ; CHECK: [[TRUNC:%[0-9]+]]:gpr(s32) = G_TRUNC [[COPY]](s64)
428     %0(s64) = COPY $x0
429     %1(s32) = G_TRUNC %0
433 name:            test_constant_s32
434 legalized:       true
435 registers:
436   - { id: 0, class: _ }
437 body: |
438   bb.0:
439     ; CHECK-LABEL: name: test_constant_s32
440     ; CHECK: [[C:%[0-9]+]]:gpr(s32) = G_CONSTANT i32 123
441     %0(s32) = G_CONSTANT i32 123
445 name:            test_constant_p0
446 legalized:       true
447 registers:
448   - { id: 0, class: _ }
449 body: |
450   bb.0:
451     ; CHECK-LABEL: name: test_constant_p0
452     ; CHECK: [[C:%[0-9]+]]:gpr(p0) = G_CONSTANT i64 0
453     %0(p0) = G_CONSTANT i64 0
457 name:            test_icmp_s32
458 legalized:       true
459 registers:
460   - { id: 0, class: _ }
461   - { id: 1, class: _ }
462   - { id: 2, class: _ }
463 body: |
464   bb.0:
465     liveins: $w0
466     ; CHECK-LABEL: name: test_icmp_s32
467     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
468     ; CHECK: [[ICMP:%[0-9]+]]:gpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY]]
469     ; CHECK: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[ICMP]](s32)
470     %0(s32) = COPY $w0
471     %1(s32) = G_ICMP intpred(ne), %0, %0
472     %2(s1) = G_TRUNC %1(s32)
476 name:            test_icmp_p0
477 legalized:       true
478 registers:
479   - { id: 0, class: _ }
480   - { id: 1, class: _ }
481   - { id: 2, class: _ }
482 body: |
483   bb.0:
484     liveins: $x0
485     ; CHECK-LABEL: name: test_icmp_p0
486     ; CHECK: [[COPY:%[0-9]+]]:gpr(p0) = COPY $x0
487     ; CHECK: [[ICMP:%[0-9]+]]:gpr(s32) = G_ICMP intpred(ne), [[COPY]](p0), [[COPY]]
488     ; CHECK: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[ICMP]](s32)
489     %0(p0) = COPY $x0
490     %1(s32) = G_ICMP intpred(ne), %0, %0
491     %2(s1) = G_TRUNC %1(s32)
495 name:            test_frame_index_p0
496 legalized:       true
497 registers:
498   - { id: 0, class: _ }
499 stack:
500   - { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
501 body: |
502   bb.0:
503     ; CHECK-LABEL: name: test_frame_index_p0
504     ; CHECK: [[FRAME_INDEX:%[0-9]+]]:gpr(p0) = G_FRAME_INDEX %stack.0.ptr0
505     %0(p0) = G_FRAME_INDEX %stack.0.ptr0
509 name:            test_ptrtoint_s64_p0
510 legalized:       true
511 registers:
512   - { id: 0, class: _ }
513   - { id: 1, class: _ }
514 body: |
515   bb.0:
516     liveins: $x0
517     ; CHECK-LABEL: name: test_ptrtoint_s64_p0
518     ; CHECK: [[COPY:%[0-9]+]]:gpr(p0) = COPY $x0
519     ; CHECK: [[PTRTOINT:%[0-9]+]]:gpr(s64) = G_PTRTOINT [[COPY]](p0)
520     %0(p0) = COPY $x0
521     %1(s64) = G_PTRTOINT %0
525 name:            test_inttoptr_p0_s64
526 legalized:       true
527 registers:
528   - { id: 0, class: _ }
529   - { id: 1, class: _ }
530 body: |
531   bb.0:
532     liveins: $x0
533     ; CHECK-LABEL: name: test_inttoptr_p0_s64
534     ; CHECK: [[COPY:%[0-9]+]]:gpr(s64) = COPY $x0
535     ; CHECK: [[INTTOPTR:%[0-9]+]]:gpr(p0) = G_INTTOPTR [[COPY]](s64)
536     %0(s64) = COPY $x0
537     %1(p0) = G_INTTOPTR %0
541 name:            test_load_s32_p0
542 legalized:       true
543 registers:
544   - { id: 0, class: _ }
545   - { id: 1, class: _ }
546 body: |
547   bb.0:
548     liveins: $x0
549     ; CHECK-LABEL: name: test_load_s32_p0
550     ; CHECK: [[COPY:%[0-9]+]]:gpr(p0) = COPY $x0
551     ; CHECK: [[LOAD:%[0-9]+]]:gpr(s32) = G_LOAD [[COPY]](p0) :: (load 4)
552     %0(p0) = COPY $x0
553     %1(s32) = G_LOAD %0 :: (load 4)
557 name:            test_store_s32_p0
558 legalized:       true
559 registers:
560   - { id: 0, class: _ }
561   - { id: 1, class: _ }
562 body: |
563   bb.0:
564     liveins: $x0, $w1
565     ; CHECK-LABEL: name: test_store_s32_p0
566     ; CHECK: [[COPY:%[0-9]+]]:gpr(p0) = COPY $x0
567     ; CHECK: [[COPY1:%[0-9]+]]:gpr(s32) = COPY $w1
568     ; CHECK: G_STORE [[COPY1]](s32), [[COPY]](p0) :: (store 4)
569     %0(p0) = COPY $x0
570     %1(s32) = COPY $w1
571     G_STORE %1, %0 :: (store 4)
575 name:            test_fadd_s32
576 legalized:       true
577 registers:
578   - { id: 0, class: _ }
579   - { id: 1, class: _ }
580 body: |
581   bb.0:
582     liveins: $s0
583     ; CHECK-LABEL: name: test_fadd_s32
584     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
585     ; CHECK: [[FADD:%[0-9]+]]:fpr(s32) = G_FADD [[COPY]], [[COPY]]
586     %0(s32) = COPY $s0
587     %1(s32) = G_FADD %0, %0
591 name:            test_fsub_s32
592 legalized:       true
593 registers:
594   - { id: 0, class: _ }
595   - { id: 1, class: _ }
596 body: |
597   bb.0:
598     liveins: $s0
599     ; CHECK-LABEL: name: test_fsub_s32
600     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
601     ; CHECK: [[FSUB:%[0-9]+]]:fpr(s32) = G_FSUB [[COPY]], [[COPY]]
602     %0(s32) = COPY $s0
603     %1(s32) = G_FSUB %0, %0
607 name:            test_fmul_s32
608 legalized:       true
609 registers:
610   - { id: 0, class: _ }
611   - { id: 1, class: _ }
612 body: |
613   bb.0:
614     liveins: $s0
615     ; CHECK-LABEL: name: test_fmul_s32
616     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
617     ; CHECK: [[FMUL:%[0-9]+]]:fpr(s32) = G_FMUL [[COPY]], [[COPY]]
618     %0(s32) = COPY $s0
619     %1(s32) = G_FMUL %0, %0
623 name:            test_fdiv_s32
624 legalized:       true
625 registers:
626   - { id: 0, class: _ }
627   - { id: 1, class: _ }
628 body: |
629   bb.0:
630     liveins: $s0
631     ; CHECK-LABEL: name: test_fdiv_s32
632     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
633     ; CHECK: [[FDIV:%[0-9]+]]:fpr(s32) = G_FDIV [[COPY]], [[COPY]]
634     %0(s32) = COPY $s0
635     %1(s32) = G_FDIV %0, %0
639 name:            test_fpext_s64_s32
640 legalized:       true
641 registers:
642   - { id: 0, class: _ }
643   - { id: 1, class: _ }
644 body: |
645   bb.0:
646     liveins: $s0
647     ; CHECK-LABEL: name: test_fpext_s64_s32
648     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
649     ; CHECK: [[FPEXT:%[0-9]+]]:fpr(s64) = G_FPEXT [[COPY]](s32)
650     %0(s32) = COPY $s0
651     %1(s64) = G_FPEXT %0
655 name:            test_fptrunc_s32_s64
656 legalized:       true
657 registers:
658   - { id: 0, class: _ }
659   - { id: 1, class: _ }
660 body: |
661   bb.0:
662     liveins: $d0
663     ; CHECK-LABEL: name: test_fptrunc_s32_s64
664     ; CHECK: [[COPY:%[0-9]+]]:fpr(s64) = COPY $d0
665     ; CHECK: [[FPTRUNC:%[0-9]+]]:fpr(s32) = G_FPTRUNC [[COPY]](s64)
666     %0(s64) = COPY $d0
667     %1(s32) = G_FPTRUNC %0
671 name:            test_fconstant_s32
672 legalized:       true
673 registers:
674   - { id: 0, class: _ }
675 body: |
676   bb.0:
677     ; CHECK-LABEL: name: test_fconstant_s32
678     ; CHECK: [[C:%[0-9]+]]:fpr(s32) = G_FCONSTANT float 1.000000e+00
679     %0(s32) = G_FCONSTANT float 1.0
683 name:            test_fneg_s32
684 legalized:       true
685 body: |
686   bb.0:
687   liveins: $s0
688     ; CHECK-LABEL: name: test_fneg_s32
689     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
690     ; CHECK: [[FNEG:%[0-9]+]]:fpr(s32) = G_FNEG [[COPY]]
691     %0:_(s32) = COPY $s0
692     %1:_(s32) = G_FNEG %0(s32)
696 name:            test_fcmp_s32
697 legalized:       true
698 registers:
699   - { id: 0, class: _ }
700   - { id: 1, class: _ }
701   - { id: 2, class: _ }
702 body: |
703   bb.0:
704     liveins: $s0
705     ; CHECK-LABEL: name: test_fcmp_s32
706     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
707     ; CHECK: [[FCMP:%[0-9]+]]:gpr(s32) = G_FCMP floatpred(olt), [[COPY]](s32), [[COPY]]
708     ; CHECK: [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[FCMP]](s32)
709     %0(s32) = COPY $s0
710     %1(s32) = G_FCMP floatpred(olt), %0, %0
711     %2(s1) = G_TRUNC %1(s32)
715 name:            test_sitofp_s64_s32
716 legalized:       true
717 registers:
718   - { id: 0, class: _ }
719   - { id: 1, class: _ }
720 body: |
721   bb.0:
722     liveins: $w0
723     ; CHECK-LABEL: name: test_sitofp_s64_s32
724     ; CHECK: [[COPY:%[0-9]+]]:gpr(s32) = COPY $w0
725     ; CHECK: [[SITOFP:%[0-9]+]]:fpr(s64) = G_SITOFP [[COPY]](s32)
726     %0(s32) = COPY $w0
727     %1(s64) = G_SITOFP %0
731 name:            test_sitofp_v4s32
732 legalized:       true
733 registers:
734   - { id: 0, class: _ }
735   - { id: 1, class: _ }
736 body: |
737   bb.0:
738     liveins: $q0
739     ; CHECK-LABEL: name: test_sitofp_v4s32
740     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
741     ; CHECK: [[SITOFP:%[0-9]+]]:fpr(<4 x s32>) = G_SITOFP [[COPY]](<4 x s32>)
742     %0(<4 x s32>) = COPY $q0
743     %1(<4 x s32>) = G_SITOFP %0
747 name:            test_uitofp_s32_s64
748 legalized:       true
749 registers:
750   - { id: 0, class: _ }
751   - { id: 1, class: _ }
752 body: |
753   bb.0:
754     liveins: $x0
755     ; CHECK-LABEL: name: test_uitofp_s32_s64
756     ; CHECK: [[COPY:%[0-9]+]]:gpr(s64) = COPY $x0
757     ; CHECK: [[UITOFP:%[0-9]+]]:fpr(s32) = G_UITOFP [[COPY]](s64)
758     %0(s64) = COPY $x0
759     %1(s32) = G_UITOFP %0
763 name:            test_uitofp_v4s32
764 legalized:       true
765 registers:
766   - { id: 0, class: _ }
767   - { id: 1, class: _ }
768 body: |
769   bb.0:
770     liveins: $q0
771     ; CHECK-LABEL: name: test_uitofp_v4s32
772     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
773     ; CHECK: [[UITOFP:%[0-9]+]]:fpr(<4 x s32>) = G_UITOFP [[COPY]](<4 x s32>)
774     %0(<4 x s32>) = COPY $q0
775     %1(<4 x s32>) = G_UITOFP %0
779 name:            test_fptosi_s64_s32
780 legalized:       true
781 registers:
782   - { id: 0, class: _ }
783   - { id: 1, class: _ }
784 body: |
785   bb.0:
786     liveins: $s0
787     ; CHECK-LABEL: name: test_fptosi_s64_s32
788     ; CHECK: [[COPY:%[0-9]+]]:fpr(s32) = COPY $s0
789     ; CHECK: [[FPTOSI:%[0-9]+]]:gpr(s64) = G_FPTOSI [[COPY]](s32)
790     %0(s32) = COPY $s0
791     %1(s64) = G_FPTOSI %0
795 name:            test_fptosi_v4s32
796 legalized:       true
797 registers:
798   - { id: 0, class: _ }
799   - { id: 1, class: _ }
800 body: |
801   bb.0:
802     liveins: $q0
803     ; CHECK-LABEL: name: test_fptosi_v4s32
804     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
805     ; CHECK: [[FPTOSI:%[0-9]+]]:fpr(<4 x s32>) = G_FPTOSI [[COPY]](<4 x s32>)
806     %0(<4 x s32>) = COPY $q0
807     %1(<4 x s32>) = G_FPTOSI %0
811 name:            test_fptoui_s32_s64
812 legalized:       true
813 registers:
814   - { id: 0, class: _ }
815   - { id: 1, class: _ }
816 body: |
817   bb.0:
818     liveins: $d0
819     ; CHECK-LABEL: name: test_fptoui_s32_s64
820     ; CHECK: [[COPY:%[0-9]+]]:fpr(s64) = COPY $d0
821     ; CHECK: [[FPTOUI:%[0-9]+]]:gpr(s32) = G_FPTOUI [[COPY]](s64)
822     %0(s64) = COPY $d0
823     %1(s32) = G_FPTOUI %0
827 name:            test_fptoui_v4s32
828 legalized:       true
829 registers:
830   - { id: 0, class: _ }
831   - { id: 1, class: _ }
832 body: |
833   bb.0:
834     liveins: $q0
835     ; CHECK-LABEL: name: test_fptoui_v4s32
836     ; CHECK: [[COPY:%[0-9]+]]:fpr(<4 x s32>) = COPY $q0
837     ; CHECK: [[FPTOUI:%[0-9]+]]:fpr(<4 x s32>) = G_FPTOUI [[COPY]](<4 x s32>)
838     %0(<4 x s32>) = COPY $q0
839     %1(<4 x s32>) = G_FPTOUI %0
843 name:            test_gphi_ptr
844 legalized:       true
845 tracksRegLiveness: true
846 registers:
847   - { id: 0, class: _, preferred-register: '' }
848   - { id: 1, class: _, preferred-register: '' }
849   - { id: 2, class: _, preferred-register: '' }
850   - { id: 3, class: _, preferred-register: '' }
851   - { id: 4, class: _, preferred-register: '' }
852   - { id: 5, class: _, preferred-register: '' }
853 body:             |
854   ; CHECK-LABEL: name: test_gphi_ptr
855   ; CHECK: bb.0:
856   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
857   ; CHECK:   liveins: $w2, $x0, $x1
858   ; CHECK:   [[COPY:%[0-9]+]]:gpr(p0) = COPY $x0
859   ; CHECK:   [[COPY1:%[0-9]+]]:gpr(p0) = COPY $x1
860   ; CHECK:   [[COPY2:%[0-9]+]]:gpr(s32) = COPY $w2
861   ; CHECK:   [[TRUNC:%[0-9]+]]:gpr(s1) = G_TRUNC [[COPY2]](s32)
862   ; CHECK:   G_BRCOND [[TRUNC]](s1), %bb.1
863   ; CHECK:   G_BR %bb.2
864   ; CHECK: bb.1:
865   ; CHECK:   successors: %bb.2(0x80000000)
866   ; CHECK: bb.2:
867   ; CHECK:   [[PHI:%[0-9]+]]:gpr(p0) = G_PHI [[COPY]](p0), %bb.0, [[COPY1]](p0), %bb.1
868   ; CHECK:   $x0 = COPY [[PHI]](p0)
869   ; CHECK:   RET_ReallyLR implicit $x0
870   bb.0:
871     successors: %bb.1, %bb.2
872     liveins: $w2, $x0, $x1
874     %0(p0) = COPY $x0
875     %1(p0) = COPY $x1
876     %4(s32) = COPY $w2
877     %2(s1) = G_TRUNC %4(s32)
878     G_BRCOND %2(s1), %bb.1
879     G_BR %bb.2
881   bb.1:
882     successors: %bb.2
885   bb.2:
886     %3(p0) = G_PHI %0(p0), %bb.0, %1(p0), %bb.1
887     $x0 = COPY %3(p0)
888     RET_ReallyLR implicit $x0