[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / postlegalizer-combiner-merge.mir
blob86dd0a5ebfd66100c1f6b1ed419be1a8f84dd3b7
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64 -run-pass=aarch64-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
4 ---
5 name:            merge_unmerge
6 alignment:       4
7 legalized:       true
8 liveins:
9   - { reg: '$w0' }
10 body:             |
11   bb.1.entry:
12     liveins: $x0
14     ; CHECK-LABEL: name: merge_unmerge
15     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
16     ; CHECK: $x0 = COPY [[COPY]](s64)
17     ; CHECK: RET_ReallyLR implicit $x0
18     %0:_(s64) = COPY $x0
19     %a:_(s32), %b:_(s32) = G_UNMERGE_VALUES %0
20     %merge:_(s64) = G_MERGE_VALUES %a, %b
21     $x0 = COPY %merge(s64)
22     RET_ReallyLR implicit $x0
24 ...
25 ---
26 name:            merge_unmerge_mismatched_order
27 alignment:       4
28 legalized:       true
29 liveins:
30   - { reg: '$w0' }
31 body:             |
32   bb.1.entry:
33     liveins: $x0
35     ; CHECK-LABEL: name: merge_unmerge_mismatched_order
36     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
37     ; CHECK: %b:_(s32), %a:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
38     ; CHECK: %merge:_(s64) = G_MERGE_VALUES %a(s32), %b(s32)
39     ; CHECK: $x0 = COPY %merge(s64)
40     ; CHECK: RET_ReallyLR implicit $x0
41     %0:_(s64) = COPY $x0
42     %b:_(s32), %a:_(s32) = G_UNMERGE_VALUES %0
43     %merge:_(s64) = G_MERGE_VALUES %a, %b
44     $x0 = COPY %merge(s64)
45     RET_ReallyLR implicit $x0
47 ...
48 ---
49 name:            merge_unmerge_mismatched_num_defs
50 alignment:       4
51 legalized:       true
52 liveins:
53   - { reg: '$w0' }
54 body:             |
55   bb.1.entry:
56     liveins: $q0
58     ; CHECK-LABEL: name: merge_unmerge_mismatched_num_defs
59     ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $q0
60     ; CHECK: %a:_(s32), %b:_(s32), %c:_(s32), %d:_(s32) = G_UNMERGE_VALUES [[COPY]](s128)
61     ; CHECK: %merge:_(s64) = G_MERGE_VALUES %a(s32), %b(s32)
62     ; CHECK: $x0 = COPY %merge(s64)
63     ; CHECK: RET_ReallyLR implicit $x0
64     %0:_(s128) = COPY $q0
65     %a:_(s32), %b:_(s32), %c:_(s32), %d:_(s32) = G_UNMERGE_VALUES %0
66     %merge:_(s64) = G_MERGE_VALUES %a, %b
67     $x0 = COPY %merge(s64)
68     RET_ReallyLR implicit $x0
70 ...
71 ---
72 name:            merge_to_zext
73 alignment:       4
74 legalized:       true
75 liveins:
76   - { reg: '$w0' }
77 body:             |
78   bb.1.entry:
79     liveins: $w0
81     ; CHECK-LABEL: name: merge_to_zext
82     ; CHECK: %v:_(s32) = COPY $w0
83     ; CHECK: %merge:_(s64) = G_ZEXT %v(s32)
84     ; CHECK: $x0 = COPY %merge(s64)
85     ; CHECK: RET_ReallyLR implicit $x0
86     %v:_(s32) = COPY $w0
87     %zero:_(s32) = G_CONSTANT i32 0
88     %merge:_(s64) = G_MERGE_VALUES %v, %zero
89     $x0 = COPY %merge(s64)
90     RET_ReallyLR implicit $x0
92 ...