[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / artifact-find-value.mir
blobb5c8d8bdf136cbe26967f46df67c6dcce578998e
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64 -O0 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s
3 ---
4 name:            combine_unmerge_from_unmerge_of_concat_tree
5 alignment:       4
6 tracksRegLiveness: true
7 body:             |
8   bb.1:
9   liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
10     ; CHECK-LABEL: name: combine_unmerge_from_unmerge_of_concat_tree
11     ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
12     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
13     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
14     ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2
15     ; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0
16     ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1
17     ; CHECK: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2
18     ; CHECK: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3
19     ; CHECK: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4
20     ; CHECK: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5
21     ; CHECK: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)
22     ; CHECK: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)
23     ; CHECK: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
24     ; CHECK: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
25     ; CHECK: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
26     ; CHECK: RET_ReallyLR
27   %0:_(s64)  = COPY $x0
28   %1:_(s64)  = COPY $x1
29   %2:_(p0)  = COPY $x2
30   %3:_(s64) = COPY $d0
31   %4:_(s64) = COPY $d1
32   %5:_(s64) = COPY $d2
33   %6:_(s64) = COPY $d3
34   %7:_(s64) = COPY $d4
35   %8:_(s64) = COPY $d5
36   %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)
37   %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)
38   %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)
39   %v4s64_val2:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val2:_(<2 x s64>), %v2s64_val:_(<2 x s64>)
40   %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF
41   %concat1:_(<8 x s64>) = G_CONCAT_VECTORS %v4s64_val1:_(<4 x s64>), %v4s64_val2:_(<4 x s64>)
42   %bigconcat:_(<24 x s64>) = G_CONCAT_VECTORS %concat1:_(<8 x s64>), %v8s64_undef:_(<8 x s64>), %v8s64_undef:_(<8 x s64>)
44   %unmerge1:_(<6 x s64>), %deaddef1:_(<6 x s64>), %deaddef2:_(<6 x s64>), %deaddef3:_(<6 x s64>) = G_UNMERGE_VALUES %bigconcat:_(<24 x s64>)
45   %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>) = G_UNMERGE_VALUES %unmerge1:_(<6 x s64>)
47   G_STORE %val1:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
48   G_STORE %val2:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
49   G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
50   RET_ReallyLR
52 ...
54 ---
55 name:            combine_unmerge_from_unmerge_of_concat_tree_high_bits
56 alignment:       4
57 tracksRegLiveness: true
58 body:             |
59   bb.1:
60   liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
61     ; CHECK-LABEL: name: combine_unmerge_from_unmerge_of_concat_tree_high_bits
62     ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
63     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
64     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
65     ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2
66     ; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0
67     ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1
68     ; CHECK: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2
69     ; CHECK: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3
70     ; CHECK: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4
71     ; CHECK: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5
72     ; CHECK: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)
73     ; CHECK: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)
74     ; CHECK: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
75     ; CHECK: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
76     ; CHECK: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
77     ; CHECK: RET_ReallyLR
78   %0:_(s64)  = COPY $x0
79   %1:_(s64)  = COPY $x1
80   %2:_(p0)  = COPY $x2
81   %3:_(s64) = COPY $d0
82   %4:_(s64) = COPY $d1
83   %5:_(s64) = COPY $d2
84   %6:_(s64) = COPY $d3
85   %7:_(s64) = COPY $d4
86   %8:_(s64) = COPY $d5
87   %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)
88   %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)
89   %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)
90   %v4s64_val2:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val2:_(<2 x s64>), %v2s64_val:_(<2 x s64>)
91   %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF
92   %concat1:_(<8 x s64>) = G_CONCAT_VECTORS %v4s64_val1:_(<4 x s64>), %v4s64_val2:_(<4 x s64>)
93   %bigconcat:_(<24 x s64>) = G_CONCAT_VECTORS %v8s64_undef:_(<8 x s64>), %v8s64_undef:_(<8 x s64>), %concat1:_(<8 x s64>)
95   %deaddef1:_(<6 x s64>), %deaddef2:_(<6 x s64>), %deaddef3:_(<6 x s64>), %unmerge1:_(<6 x s64>) = G_UNMERGE_VALUES %bigconcat:_(<24 x s64>)
96   %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>) = G_UNMERGE_VALUES %unmerge1:_(<6 x s64>)
98   G_STORE %val1:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
99   G_STORE %val2:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
100   G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
101   RET_ReallyLR
105 name:            combine_unmerge_from_insert_into_low
106 alignment:       4
107 tracksRegLiveness: true
108 body:             |
109   bb.1:
110   liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
111     ; CHECK-LABEL: name: combine_unmerge_from_insert_into_low
112     ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
113     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
114     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
115     ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2
116     ; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0
117     ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1
118     ; CHECK: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2
119     ; CHECK: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3
120     ; CHECK: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4
121     ; CHECK: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5
122     ; CHECK: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)
123     ; CHECK: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)
124     ; CHECK: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
125     ; CHECK: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
126     ; CHECK: RET_ReallyLR
127   %0:_(s64)  = COPY $x0
128   %1:_(s64)  = COPY $x1
129   %2:_(p0)  = COPY $x2
130   %3:_(s64) = COPY $d0
131   %4:_(s64) = COPY $d1
132   %5:_(s64) = COPY $d2
133   %6:_(s64) = COPY $d3
134   %7:_(s64) = COPY $d4
135   %8:_(s64) = COPY $d5
136   %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)
137   %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)
138   %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)
139   %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF
140   %insert:_(<8 x s64>) = G_INSERT %v8s64_undef:_(<8 x s64>), %v4s64_val1:_(<4 x s64>), 0
141   %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>), %val4:_(<2 x s64>) = G_UNMERGE_VALUES %insert:_(<8 x s64>)
143   ; val1 should be <%5, %6>
144   G_STORE %val1:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
145   ; val2 should be <%6, %8>
146   G_STORE %val2:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
147   RET_ReallyLR
151 name:            combine_unmerge_from_insert_into_high
152 alignment:       4
153 tracksRegLiveness: true
154 body:             |
155   bb.1:
156   liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
157     ; CHECK-LABEL: name: combine_unmerge_from_insert_into_high
158     ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
159     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
160     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
161     ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2
162     ; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0
163     ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1
164     ; CHECK: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2
165     ; CHECK: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3
166     ; CHECK: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4
167     ; CHECK: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5
168     ; CHECK: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)
169     ; CHECK: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)
170     ; CHECK: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
171     ; CHECK: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
172     ; CHECK: RET_ReallyLR
173   %0:_(s64)  = COPY $x0
174   %1:_(s64)  = COPY $x1
175   %2:_(p0)  = COPY $x2
176   %3:_(s64) = COPY $d0
177   %4:_(s64) = COPY $d1
178   %5:_(s64) = COPY $d2
179   %6:_(s64) = COPY $d3
180   %7:_(s64) = COPY $d4
181   %8:_(s64) = COPY $d5
182   %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)
183   %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)
184   %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)
185   %v8s64_undef:_(<8 x s64>) = G_IMPLICIT_DEF
186   %insert:_(<8 x s64>) = G_INSERT %v8s64_undef:_(<8 x s64>), %v4s64_val1:_(<4 x s64>), 256
187   %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>), %val4:_(<2 x s64>) = G_UNMERGE_VALUES %insert:_(<8 x s64>)
189   ; val3 should be <%5, %6>
190   G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
191   ; val4 should be <%6, %8>
192   G_STORE %val4:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
193   RET_ReallyLR
197 name:            combine_unmerge_from_insert_look_into_container
198 alignment:       4
199 tracksRegLiveness: true
200 body:             |
201   bb.1:
202   liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
203     ; CHECK-LABEL: name: combine_unmerge_from_insert_look_into_container
204     ; CHECK: liveins: $x0, $x1, $x2, $d0, $d1, $d2, $d3, $d4, $d5, $d6, $d7, $x0
205     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
206     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
207     ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x2
208     ; CHECK: [[COPY3:%[0-9]+]]:_(s64) = COPY $d0
209     ; CHECK: [[COPY4:%[0-9]+]]:_(s64) = COPY $d1
210     ; CHECK: [[COPY5:%[0-9]+]]:_(s64) = COPY $d2
211     ; CHECK: [[COPY6:%[0-9]+]]:_(s64) = COPY $d3
212     ; CHECK: [[COPY7:%[0-9]+]]:_(s64) = COPY $d4
213     ; CHECK: [[COPY8:%[0-9]+]]:_(s64) = COPY $d5
214     ; CHECK: %v2s64_val:_(<2 x s64>) = G_BUILD_VECTOR [[COPY5]](s64), [[COPY6]](s64)
215     ; CHECK: %v2s64_val2:_(<2 x s64>) = G_BUILD_VECTOR [[COPY6]](s64), [[COPY8]](s64)
216     ; CHECK: G_STORE %v2s64_val(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
217     ; CHECK: G_STORE %v2s64_val2(<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>))
218     ; CHECK: RET_ReallyLR
219   %0:_(s64)  = COPY $x0
220   %1:_(s64)  = COPY $x1
221   %2:_(p0)  = COPY $x2
222   %3:_(s64) = COPY $d0
223   %4:_(s64) = COPY $d1
224   %5:_(s64) = COPY $d2
225   %6:_(s64) = COPY $d3
226   %7:_(s64) = COPY $d4
227   %8:_(s64) = COPY $d5
228   %v2s64_val = G_BUILD_VECTOR %5:_(s64), %6:_(s64)
229   %v2s64_val2 = G_BUILD_VECTOR %6:_(s64), %8:_(s64)
230   %v4s64_undef:_(<4 x s64>) = G_IMPLICIT_DEF
231   %v4s64_val1:_(<4 x s64>) = G_CONCAT_VECTORS %v2s64_val:_(<2 x s64>), %v2s64_val2:_(<2 x s64>)
232   %v8s64_val1:_(<8 x s64>) = G_CONCAT_VECTORS %v4s64_undef:_(<4 x s64>), %v4s64_val1:_(<4 x s64>)
233   %insert:_(<8 x s64>) = G_INSERT %v8s64_val1:_(<8 x s64>), %v4s64_undef:_(<4 x s64>), 0
234   ; The values we're interested in are in bits 256-512 of the insert container.
235   %val1:_(<2 x s64>), %val2:_(<2 x s64>), %val3:_(<2 x s64>), %val4:_(<2 x s64>) = G_UNMERGE_VALUES %insert:_(<8 x s64>)
237   ; val3 should be <%5, %6>
238   G_STORE %val3:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
239   ; val4 should be <%6, %8>
240   G_STORE %val4:_(<2 x s64>), %2:_(p0) :: (store (<2 x s64>))
241   RET_ReallyLR