[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-add.mir
blob02f96cbe997898b690204a72f70c54590a0b4d0b
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64 -run-pass=legalizer %s -o - | FileCheck %s
3 ---
4 name:            test_scalar_add_big
5 body:             |
6   bb.0.entry:
7     ; CHECK-LABEL: name: test_scalar_add_big
8     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
9     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
10     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
11     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
12     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]]
13     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
14     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UADDO1]], [[C]]
15     ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[AND]]
16     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
17     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
18     %0:_(s64) = COPY $x0
19     %1:_(s64) = COPY $x1
20     %2:_(s64) = COPY $x2
21     %3:_(s64) = COPY $x3
22     %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64)
23     %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64)
24     %6:_(s128) = G_ADD %4, %5
25     %7:_(s64), %8:_(s64) = G_UNMERGE_VALUES %6(s128)
26     $x0 = COPY %7(s64)
27     $x1 = COPY %8(s64)
29 ...
30 ---
31 name:            test_scalar_add_big_nonpow2
32 body:             |
33   bb.0.entry:
34     ; CHECK-LABEL: name: test_scalar_add_big_nonpow2
35     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
36     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
37     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
38     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
39     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY1]]
40     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
41     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UADDO1]], [[C]]
42     ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY2]], [[AND]]
43     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[UADDE1]], [[C]]
44     ; CHECK-NEXT: [[UADDE2:%[0-9]+]]:_(s64), [[UADDE3:%[0-9]+]]:_(s32) = G_UADDE [[COPY2]], [[COPY3]], [[AND1]]
45     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
46     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
47     ; CHECK-NEXT: $x2 = COPY [[UADDE2]](s64)
48     %0:_(s64) = COPY $x0
49     %1:_(s64) = COPY $x1
50     %2:_(s64) = COPY $x2
51     %3:_(s64) = COPY $x3
52     %4:_(s192) = G_MERGE_VALUES %0(s64), %1(s64), %2(s64)
53     %5:_(s192) = G_MERGE_VALUES %1(s64), %2(s64), %3(s64)
54     %6:_(s192) = G_ADD %4, %5
55     %7:_(s64), %8:_(s64), %9:_(s64) = G_UNMERGE_VALUES %6(s192)
56     $x0 = COPY %7(s64)
57     $x1 = COPY %8(s64)
58     $x2 = COPY %9(s64)
60 ...
61 ---
62 name:            test_scalar_add_small
63 body:             |
64   bb.0.entry:
65     ; CHECK-LABEL: name: test_scalar_add_small
66     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
67     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
68     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
69     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
70     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[TRUNC]], [[TRUNC1]]
71     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ADD]](s32)
72     ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)
73     %0:_(s64) = COPY $x0
74     %1:_(s64) = COPY $x1
75     %2:_(s8) = G_TRUNC %0(s64)
76     %3:_(s8) = G_TRUNC %1(s64)
77     %4:_(s8) = G_ADD %2, %3
78     %5:_(s64) = G_ANYEXT %4(s8)
79     $x0 = COPY %5(s64)
81 ...
82 ---
83 name:            test_scalar_add_narrowing
84 body:             |
85   bb.0.entry:
86     ; CHECK-LABEL: name: test_scalar_add_narrowing
87     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
88     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
89     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
90     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
91     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]]
92     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
93     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UADDO1]], [[C]]
94     ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[AND]]
95     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
96     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
97     %0:_(s64) = COPY $x0
98     %1:_(s64) = COPY $x1
99     %2:_(s64) = COPY $x2
100     %3:_(s64) = COPY $x3
101     %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64)
102     %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64)
103     %6:_(s96) = G_TRUNC %4(s128)
104     %7:_(s96) = G_TRUNC %5(s128)
105     %8:_(s96) = G_ADD %6, %7
106     %9:_(s128) = G_ANYEXT %8(s96)
107     %10:_(s64), %11:_(s64) = G_UNMERGE_VALUES %9(s128)
108     $x0 = COPY %10(s64)
109     $x1 = COPY %11(s64)
113 name:            test_scalar_add_narrowing_s65
114 body:             |
115   bb.0.entry:
116     ; CHECK-LABEL: name: test_scalar_add_narrowing_s65
117     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
118     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
119     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
120     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
121     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]]
122     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
123     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[UADDO1]], [[C]]
124     ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[AND]]
125     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
126     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
127     %0:_(s64) = COPY $x0
128     %1:_(s64) = COPY $x1
129     %2:_(s64) = COPY $x2
130     %3:_(s64) = COPY $x3
131     %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64)
132     %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64)
133     %6:_(s65) = G_TRUNC %4(s128)
134     %7:_(s65) = G_TRUNC %5(s128)
135     %8:_(s65) = G_ADD %6, %7
136     %9:_(s128) = G_ANYEXT %8(s65)
137     %10:_(s64), %11:_(s64) = G_UNMERGE_VALUES %9(s128)
138     $x0 = COPY %10(s64)
139     $x1 = COPY %11(s64)
143 name:            test_vector_add
144 body:             |
145   bb.0.entry:
146     ; CHECK-LABEL: name: test_vector_add
147     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
148     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
149     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $q2
150     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s64>) = COPY $q3
151     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY]], [[COPY2]]
152     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY1]], [[COPY3]]
153     ; CHECK-NEXT: $q0 = COPY [[ADD]](<2 x s64>)
154     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<2 x s64>)
155     %0:_(<2 x s64>) = COPY $q0
156     %1:_(<2 x s64>) = COPY $q1
157     %2:_(<2 x s64>) = COPY $q2
158     %3:_(<2 x s64>) = COPY $q3
159     %4:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1
160     %5:_(<4 x s64>) = G_CONCAT_VECTORS %2, %3
161     %6:_(<4 x s64>) = G_ADD %4, %5
162     %7:_(<2 x s64>), %8:_(<2 x s64>) = G_UNMERGE_VALUES %6(<4 x s64>)
163     $q0 = COPY %7(<2 x s64>)
164     $q1 = COPY %8(<2 x s64>)
168 name:            test_vector_add_v16s16
169 body:             |
170   bb.0.entry:
171     ; CHECK-LABEL: name: test_vector_add_v16s16
172     ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
173     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
174     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY]], [[COPY]]
175     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY1]], [[COPY1]]
176     ; CHECK-NEXT: $q0 = COPY [[ADD]](<8 x s16>)
177     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<8 x s16>)
178     %1:_(<8 x s16>) = COPY $q0
179     %2:_(<8 x s16>) = COPY $q1
180     %0:_(<16 x s16>) = G_CONCAT_VECTORS %1(<8 x s16>), %2(<8 x s16>)
181     %3:_(<16 x s16>) = G_ADD %0, %0
182     %4:_(<8 x s16>), %5:_(<8 x s16>) = G_UNMERGE_VALUES %3(<16 x s16>)
183     $q0 = COPY %4(<8 x s16>)
184     $q1 = COPY %5(<8 x s16>)
188 name:            test_vector_add_v32s8
189 body:             |
190   bb.0.entry:
191     ; CHECK-LABEL: name: test_vector_add_v32s8
192     ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
193     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
194     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY]], [[COPY]]
195     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY1]], [[COPY1]]
196     ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>)
197     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<16 x s8>)
198     %0:_(<16 x s8>) = COPY $q0
199     %1:_(<16 x s8>) = COPY $q1
200     %2:_(<32 x s8>) = G_CONCAT_VECTORS %0, %1
201     %3:_(<32 x s8>) = G_ADD %2, %2
202     %7:_(<16 x s8>), %8:_(<16 x s8>) = G_UNMERGE_VALUES %3(<32 x s8>)
203     $q0 = COPY %7(<16 x s8>)
204     $q1 = COPY %8(<16 x s8>)
208 name:            test_vector_add_nonpow2
209 body:             |
210   bb.0.entry:
211     ; CHECK-LABEL: name: test_vector_add_nonpow2
212     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
213     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
214     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $q2
215     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s64>) = COPY $q3
216     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY]], [[COPY1]]
217     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY1]], [[COPY2]]
218     ; CHECK-NEXT: [[ADD2:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY2]], [[COPY3]]
219     ; CHECK-NEXT: $q0 = COPY [[ADD]](<2 x s64>)
220     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<2 x s64>)
221     ; CHECK-NEXT: $q2 = COPY [[ADD2]](<2 x s64>)
222     %0:_(<2 x s64>) = COPY $q0
223     %1:_(<2 x s64>) = COPY $q1
224     %2:_(<2 x s64>) = COPY $q2
225     %3:_(<2 x s64>) = COPY $q3
226     %4:_(<6 x s64>) = G_CONCAT_VECTORS %0(<2 x s64>), %1(<2 x s64>), %2(<2 x s64>)
227     %5:_(<6 x s64>) = G_CONCAT_VECTORS %1(<2 x s64>), %2(<2 x s64>), %3(<2 x s64>)
228     %6:_(<6 x s64>) = G_ADD %4, %5
229     %7:_(<2 x s64>), %8:_(<2 x s64>), %9:_(<2 x s64>) = G_UNMERGE_VALUES %6(<6 x s64>)
230     $q0 = COPY %7(<2 x s64>)
231     $q1 = COPY %8(<2 x s64>)
232     $q2 = COPY %9(<2 x s64>)
235 name:            add_v8i16
236 alignment:       4
237 tracksRegLiveness: true
238 machineFunctionInfo: {}
239 body:             |
240   bb.1:
241     liveins: $q0, $q1
243     ; CHECK-LABEL: name: add_v8i16
244     ; CHECK: liveins: $q0, $q1
245     ; CHECK-NEXT: {{  $}}
246     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
247     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
248     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY]], [[COPY1]]
249     ; CHECK-NEXT: $q0 = COPY [[ADD]](<8 x s16>)
250     ; CHECK-NEXT: RET_ReallyLR implicit $q0
251     %0:_(<8 x s16>) = COPY $q0
252     %1:_(<8 x s16>) = COPY $q1
253     %2:_(<8 x s16>) = G_ADD %0, %1
254     $q0 = COPY %2(<8 x s16>)
255     RET_ReallyLR implicit $q0
259 name:            add_v16i8
260 alignment:       4
261 tracksRegLiveness: true
262 machineFunctionInfo: {}
263 body:             |
264   bb.1:
265     liveins: $q0, $q1
267     ; CHECK-LABEL: name: add_v16i8
268     ; CHECK: liveins: $q0, $q1
269     ; CHECK-NEXT: {{  $}}
270     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
271     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
272     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY]], [[COPY1]]
273     ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>)
274     ; CHECK-NEXT: RET_ReallyLR implicit $q0
275     %0:_(<16 x s8>) = COPY $q0
276     %1:_(<16 x s8>) = COPY $q1
277     %2:_(<16 x s8>) = G_ADD %0, %1
278     $q0 = COPY %2(<16 x s8>)
279     RET_ReallyLR implicit $q0
283 name:            add_v4i16
284 alignment:       4
285 tracksRegLiveness: true
286 machineFunctionInfo: {}
287 body:             |
288   bb.1:
289     liveins: $d0, $d1
291     ; CHECK-LABEL: name: add_v4i16
292     ; CHECK: liveins: $d0, $d1
293     ; CHECK-NEXT: {{  $}}
294     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
295     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
296     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[COPY]], [[COPY1]]
297     ; CHECK-NEXT: $d0 = COPY [[ADD]](<4 x s16>)
298     ; CHECK-NEXT: RET_ReallyLR implicit $d0
299     %0:_(<4 x s16>) = COPY $d0
300     %1:_(<4 x s16>) = COPY $d1
301     %2:_(<4 x s16>) = G_ADD %0, %1
302     $d0 = COPY %2(<4 x s16>)
303     RET_ReallyLR implicit $d0
306 name:            add_v8s8
307 tracksRegLiveness: true
308 body:             |
309   bb.1:
310     liveins: $d0, $d1
312     ; CHECK-LABEL: name: add_v8s8
313     ; CHECK: liveins: $d0, $d1
314     ; CHECK-NEXT: {{  $}}
315     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
316     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
317     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s8>) = G_ADD [[COPY]], [[COPY1]]
318     ; CHECK-NEXT: $d0 = COPY [[ADD]](<8 x s8>)
319     ; CHECK-NEXT: RET_ReallyLR implicit $d0
320     %0:_(<8 x s8>) = COPY $d0
321     %1:_(<8 x s8>) = COPY $d1
322     %2:_(<8 x s8>) = G_ADD %0, %1
323     $d0 = COPY %2(<8 x s8>)
324     RET_ReallyLR implicit $d0
328 name:            add_v2s1
329 tracksRegLiveness: true
330 body:             |
331   bb.1:
332     liveins: $d0, $d1, $d2, $d3
334     ; CHECK-LABEL: name: add_v2s1
335     ; CHECK: liveins: $d0, $d1, $d2, $d3
336     ; CHECK-NEXT: {{  $}}
337     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
338     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1
339     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $d2
340     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $d3
341     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY]](<2 x s32>), [[COPY1]]
342     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY2]](<2 x s32>), [[COPY3]]
343     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s32>) = G_ADD [[ICMP]], [[ICMP1]]
344     ; CHECK-NEXT: $d0 = COPY [[ADD]](<2 x s32>)
345     ; CHECK-NEXT: RET_ReallyLR implicit $d0
346     %0:_(<2 x s32>) = COPY $d0
347     %1:_(<2 x s32>) = COPY $d1
348     %2:_(<2 x s32>) = COPY $d2
349     %3:_(<2 x s32>) = COPY $d3
350     %4:_(<2 x s1>) = G_ICMP intpred(eq), %0(<2 x s32>), %1
351     %5:_(<2 x s1>) = G_ICMP intpred(eq), %2(<2 x s32>), %3
352     %6:_(<2 x s1>) = G_ADD %4, %5
353     %7:_(<2 x s32>) = G_ANYEXT %6
354     $d0 = COPY %7:_(<2 x s32>)
355     RET_ReallyLR implicit $d0
358 name:            add_v3s1
359 tracksRegLiveness: true
360 body:             |
361   bb.1:
362     liveins: $b0, $b1, $b2
364     ; CHECK-LABEL: name: add_v3s1
365     ; CHECK: liveins: $b0, $b1, $b2
366     ; CHECK-NEXT: {{  $}}
367     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $b0
368     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s8) = COPY $b1
369     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s8) = COPY $b2
370     ; CHECK-NEXT: [[ANYEXT0:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY]](s8)
371     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY1]](s8)
372     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY2]](s8)
373     ; CHECK-NEXT: [[IMPLICIT_DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
374     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[ANYEXT0]](s16), [[ANYEXT1]](s16), [[ANYEXT2]](s16), [[IMPLICIT_DEF]](s16)
375     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[BUILD_VECTOR]], [[BUILD_VECTOR]]
376     ; CHECK-NEXT: [[VAL0:%[0-9]+]]:_(s16), [[VAL1:%[0-9]+]]:_(s16), [[VAL2:%[0-9]+]]:_(s16), [[VAL3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[ADD]](<4 x s16>)
377     ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[VAL0]](s16)
378     ; CHECK-NEXT: $b0 = COPY [[TRUNC3]](s8)
379     ; CHECK-NEXT: RET_ReallyLR implicit $b0
380     %1:_(s8) = COPY $b0
381     %2:_(s8) = COPY $b1
382     %3:_(s8) = COPY $b2
383     %4:_(<3 x s8>) = G_BUILD_VECTOR %1(s8), %2(s8), %3(s8)
384     %0:_(<3 x s1>) = G_TRUNC %4(<3 x s8>)
385     %5:_(<3 x s1>) = G_ADD %0, %0
386     %7:_(<3 x s8>) = G_ANYEXT %5(<3 x s1>)
387     %8:_(s8), %9:_(s8), %10:_(s8) = G_UNMERGE_VALUES %7(<3 x s8>)
388     $b0 = COPY %8:_(s8)
389     RET_ReallyLR implicit $b0
392 name:            add_v4s1
393 tracksRegLiveness: true
394 body:             |
395   bb.1:
396     liveins: $d0, $d1, $d2, $d3
398     ; CHECK-LABEL: name: add_v4s1
399     ; CHECK: liveins: $d0, $d1, $d2, $d3
400     ; CHECK-NEXT: {{  $}}
401     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
402     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
403     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $d2
404     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<4 x s16>) = COPY $d3
405     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY]](<4 x s16>), [[COPY1]]
406     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY2]](<4 x s16>), [[COPY3]]
407     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[ICMP]], [[ICMP1]]
408     ; CHECK-NEXT: $d0 = COPY [[ADD]](<4 x s16>)
409     ; CHECK-NEXT: RET_ReallyLR implicit $d0
410     %0:_(<4 x s16>) = COPY $d0
411     %1:_(<4 x s16>) = COPY $d1
412     %2:_(<4 x s16>) = COPY $d2
413     %3:_(<4 x s16>) = COPY $d3
414     %4:_(<4 x s1>) = G_ICMP intpred(eq), %0(<4 x s16>), %1
415     %5:_(<4 x s1>) = G_ICMP intpred(eq), %2(<4 x s16>), %3
416     %6:_(<4 x s1>) = G_ADD %4, %5
417     %7:_(<4 x s16>) = G_ANYEXT %6
418     $d0 = COPY %7:_(<4 x s16>)
419     RET_ReallyLR implicit $d0
422 name:            add_v8s1
423 tracksRegLiveness: true
424 body:             |
425   bb.1:
426     liveins: $d0, $d1, $d2, $d3
428     ; CHECK-LABEL: name: add_v8s1
429     ; CHECK: liveins: $d0, $d1, $d2, $d3
430     ; CHECK-NEXT: {{  $}}
431     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
432     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
433     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<8 x s8>) = COPY $d2
434     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<8 x s8>) = COPY $d3
435     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY]](<8 x s8>), [[COPY1]]
436     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY2]](<8 x s8>), [[COPY3]]
437     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s8>) = G_ADD [[ICMP]], [[ICMP1]]
438     ; CHECK-NEXT: $d0 = COPY [[ADD]](<8 x s8>)
439     ; CHECK-NEXT: RET_ReallyLR implicit $d0
440     %0:_(<8 x s8>) = COPY $d0
441     %1:_(<8 x s8>) = COPY $d1
442     %2:_(<8 x s8>) = COPY $d2
443     %3:_(<8 x s8>) = COPY $d3
444     %4:_(<8 x s1>) = G_ICMP intpred(eq), %0(<8 x s8>), %1
445     %5:_(<8 x s1>) = G_ICMP intpred(eq), %2(<8 x s8>), %3
446     %6:_(<8 x s1>) = G_ADD %4, %5
447     %7:_(<8 x s8>) = G_ANYEXT %6
448     $d0 = COPY %7:_(<8 x s8>)
449     RET_ReallyLR implicit $d0
452 name:            add_v16s1
453 tracksRegLiveness: true
454 body:             |
455   bb.1:
456     liveins: $q0, $q1, $q2, $q3
458     ; CHECK-LABEL: name: add_v16s1
459     ; CHECK: liveins: $q0, $q1, $q2, $q3
460     ; CHECK-NEXT: {{  $}}
461     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
462     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
463     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<16 x s8>) = COPY $q2
464     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<16 x s8>) = COPY $q3
465     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY]](<16 x s8>), [[COPY1]]
466     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY2]](<16 x s8>), [[COPY3]]
467     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[ICMP]], [[ICMP1]]
468     ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>)
469     ; CHECK-NEXT: RET_ReallyLR implicit $q0
470     %0:_(<16 x s8>) = COPY $q0
471     %1:_(<16 x s8>) = COPY $q1
472     %2:_(<16 x s8>) = COPY $q2
473     %3:_(<16 x s8>) = COPY $q3
474     %4:_(<16 x s1>) = G_ICMP intpred(eq), %0(<16 x s8>), %1
475     %5:_(<16 x s1>) = G_ICMP intpred(eq), %2(<16 x s8>), %3
476     %6:_(<16 x s1>) = G_ADD %4, %5
477     %7:_(<16 x s8>) = G_ANYEXT %6
478     $q0 = COPY %7:_(<16 x s8>)
479     RET_ReallyLR implicit $q0