Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-add.mir
blobceddb4bca7255967fafbc77cef7eea43438ec4ca
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: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[UADDO1]]
14     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
15     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
16     %0:_(s64) = COPY $x0
17     %1:_(s64) = COPY $x1
18     %2:_(s64) = COPY $x2
19     %3:_(s64) = COPY $x3
20     %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64)
21     %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64)
22     %6:_(s128) = G_ADD %4, %5
23     %7:_(s64), %8:_(s64) = G_UNMERGE_VALUES %6(s128)
24     $x0 = COPY %7(s64)
25     $x1 = COPY %8(s64)
27 ...
28 ---
29 name:            test_scalar_add_big_nonpow2
30 body:             |
31   bb.0.entry:
32     ; CHECK-LABEL: name: test_scalar_add_big_nonpow2
33     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
34     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
35     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
36     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
37     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY1]]
38     ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY2]], [[UADDO1]]
39     ; CHECK-NEXT: [[UADDE2:%[0-9]+]]:_(s64), [[UADDE3:%[0-9]+]]:_(s32) = G_UADDE [[COPY2]], [[COPY3]], [[UADDE1]]
40     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
41     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
42     ; CHECK-NEXT: $x2 = COPY [[UADDE2]](s64)
43     %0:_(s64) = COPY $x0
44     %1:_(s64) = COPY $x1
45     %2:_(s64) = COPY $x2
46     %3:_(s64) = COPY $x3
47     %4:_(s192) = G_MERGE_VALUES %0(s64), %1(s64), %2(s64)
48     %5:_(s192) = G_MERGE_VALUES %1(s64), %2(s64), %3(s64)
49     %6:_(s192) = G_ADD %4, %5
50     %7:_(s64), %8:_(s64), %9:_(s64) = G_UNMERGE_VALUES %6(s192)
51     $x0 = COPY %7(s64)
52     $x1 = COPY %8(s64)
53     $x2 = COPY %9(s64)
55 ...
56 ---
57 name:            test_scalar_add_small
58 body:             |
59   bb.0.entry:
60     ; CHECK-LABEL: name: test_scalar_add_small
61     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
62     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
63     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[COPY]](s64)
64     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[COPY1]](s64)
65     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(s32) = G_ADD [[TRUNC]], [[TRUNC1]]
66     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ADD]](s32)
67     ; CHECK-NEXT: $x0 = COPY [[ANYEXT]](s64)
68     %0:_(s64) = COPY $x0
69     %1:_(s64) = COPY $x1
70     %2:_(s8) = G_TRUNC %0(s64)
71     %3:_(s8) = G_TRUNC %1(s64)
72     %4:_(s8) = G_ADD %2, %3
73     %5:_(s64) = G_ANYEXT %4(s8)
74     $x0 = COPY %5(s64)
76 ...
77 ---
78 name:            test_scalar_add_narrowing
79 body:             |
80   bb.0.entry:
81     ; CHECK-LABEL: name: test_scalar_add_narrowing
82     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
83     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
84     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
85     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
86     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]]
87     ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[UADDO1]]
88     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
89     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
90     %0:_(s64) = COPY $x0
91     %1:_(s64) = COPY $x1
92     %2:_(s64) = COPY $x2
93     %3:_(s64) = COPY $x3
94     %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64)
95     %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64)
96     %6:_(s96) = G_TRUNC %4(s128)
97     %7:_(s96) = G_TRUNC %5(s128)
98     %8:_(s96) = G_ADD %6, %7
99     %9:_(s128) = G_ANYEXT %8(s96)
100     %10:_(s64), %11:_(s64) = G_UNMERGE_VALUES %9(s128)
101     $x0 = COPY %10(s64)
102     $x1 = COPY %11(s64)
106 name:            test_scalar_add_narrowing_s65
107 body:             |
108   bb.0.entry:
109     ; CHECK-LABEL: name: test_scalar_add_narrowing_s65
110     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
111     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
112     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY $x2
113     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s64) = COPY $x3
114     ; CHECK-NEXT: [[UADDO:%[0-9]+]]:_(s64), [[UADDO1:%[0-9]+]]:_(s32) = G_UADDO [[COPY]], [[COPY2]]
115     ; CHECK-NEXT: [[UADDE:%[0-9]+]]:_(s64), [[UADDE1:%[0-9]+]]:_(s32) = G_UADDE [[COPY1]], [[COPY3]], [[UADDO1]]
116     ; CHECK-NEXT: $x0 = COPY [[UADDO]](s64)
117     ; CHECK-NEXT: $x1 = COPY [[UADDE]](s64)
118     %0:_(s64) = COPY $x0
119     %1:_(s64) = COPY $x1
120     %2:_(s64) = COPY $x2
121     %3:_(s64) = COPY $x3
122     %4:_(s128) = G_MERGE_VALUES %0(s64), %1(s64)
123     %5:_(s128) = G_MERGE_VALUES %2(s64), %3(s64)
124     %6:_(s65) = G_TRUNC %4(s128)
125     %7:_(s65) = G_TRUNC %5(s128)
126     %8:_(s65) = G_ADD %6, %7
127     %9:_(s128) = G_ANYEXT %8(s65)
128     %10:_(s64), %11:_(s64) = G_UNMERGE_VALUES %9(s128)
129     $x0 = COPY %10(s64)
130     $x1 = COPY %11(s64)
134 name:            test_vector_add
135 body:             |
136   bb.0.entry:
137     ; CHECK-LABEL: name: test_vector_add
138     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
139     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
140     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $q2
141     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s64>) = COPY $q3
142     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY]], [[COPY2]]
143     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY1]], [[COPY3]]
144     ; CHECK-NEXT: $q0 = COPY [[ADD]](<2 x s64>)
145     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<2 x s64>)
146     %0:_(<2 x s64>) = COPY $q0
147     %1:_(<2 x s64>) = COPY $q1
148     %2:_(<2 x s64>) = COPY $q2
149     %3:_(<2 x s64>) = COPY $q3
150     %4:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1
151     %5:_(<4 x s64>) = G_CONCAT_VECTORS %2, %3
152     %6:_(<4 x s64>) = G_ADD %4, %5
153     %7:_(<2 x s64>), %8:_(<2 x s64>) = G_UNMERGE_VALUES %6(<4 x s64>)
154     $q0 = COPY %7(<2 x s64>)
155     $q1 = COPY %8(<2 x s64>)
159 name:            test_vector_add_v16s16
160 body:             |
161   bb.0.entry:
162     ; CHECK-LABEL: name: test_vector_add_v16s16
163     ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
164     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
165     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY]], [[COPY]]
166     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY1]], [[COPY1]]
167     ; CHECK-NEXT: $q0 = COPY [[ADD]](<8 x s16>)
168     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<8 x s16>)
169     %1:_(<8 x s16>) = COPY $q0
170     %2:_(<8 x s16>) = COPY $q1
171     %0:_(<16 x s16>) = G_CONCAT_VECTORS %1(<8 x s16>), %2(<8 x s16>)
172     %3:_(<16 x s16>) = G_ADD %0, %0
173     %4:_(<8 x s16>), %5:_(<8 x s16>) = G_UNMERGE_VALUES %3(<16 x s16>)
174     $q0 = COPY %4(<8 x s16>)
175     $q1 = COPY %5(<8 x s16>)
179 name:            test_vector_add_v32s8
180 body:             |
181   bb.0.entry:
182     ; CHECK-LABEL: name: test_vector_add_v32s8
183     ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
184     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
185     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY]], [[COPY]]
186     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY1]], [[COPY1]]
187     ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>)
188     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<16 x s8>)
189     %0:_(<16 x s8>) = COPY $q0
190     %1:_(<16 x s8>) = COPY $q1
191     %2:_(<32 x s8>) = G_CONCAT_VECTORS %0, %1
192     %3:_(<32 x s8>) = G_ADD %2, %2
193     %7:_(<16 x s8>), %8:_(<16 x s8>) = G_UNMERGE_VALUES %3(<32 x s8>)
194     $q0 = COPY %7(<16 x s8>)
195     $q1 = COPY %8(<16 x s8>)
199 name:            test_vector_add_nonpow2
200 body:             |
201   bb.0.entry:
202     ; CHECK-LABEL: name: test_vector_add_nonpow2
203     ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
204     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
205     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s64>) = COPY $q2
206     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s64>) = COPY $q3
207     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY]], [[COPY1]]
208     ; CHECK-NEXT: [[ADD1:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY1]], [[COPY2]]
209     ; CHECK-NEXT: [[ADD2:%[0-9]+]]:_(<2 x s64>) = G_ADD [[COPY2]], [[COPY3]]
210     ; CHECK-NEXT: $q0 = COPY [[ADD]](<2 x s64>)
211     ; CHECK-NEXT: $q1 = COPY [[ADD1]](<2 x s64>)
212     ; CHECK-NEXT: $q2 = COPY [[ADD2]](<2 x s64>)
213     %0:_(<2 x s64>) = COPY $q0
214     %1:_(<2 x s64>) = COPY $q1
215     %2:_(<2 x s64>) = COPY $q2
216     %3:_(<2 x s64>) = COPY $q3
217     %4:_(<6 x s64>) = G_CONCAT_VECTORS %0(<2 x s64>), %1(<2 x s64>), %2(<2 x s64>)
218     %5:_(<6 x s64>) = G_CONCAT_VECTORS %1(<2 x s64>), %2(<2 x s64>), %3(<2 x s64>)
219     %6:_(<6 x s64>) = G_ADD %4, %5
220     %7:_(<2 x s64>), %8:_(<2 x s64>), %9:_(<2 x s64>) = G_UNMERGE_VALUES %6(<6 x s64>)
221     $q0 = COPY %7(<2 x s64>)
222     $q1 = COPY %8(<2 x s64>)
223     $q2 = COPY %9(<2 x s64>)
226 name:            add_v8i16
227 alignment:       4
228 tracksRegLiveness: true
229 machineFunctionInfo: {}
230 body:             |
231   bb.1:
232     liveins: $q0, $q1
234     ; CHECK-LABEL: name: add_v8i16
235     ; CHECK: liveins: $q0, $q1
236     ; CHECK-NEXT: {{  $}}
237     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
238     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
239     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[COPY]], [[COPY1]]
240     ; CHECK-NEXT: $q0 = COPY [[ADD]](<8 x s16>)
241     ; CHECK-NEXT: RET_ReallyLR implicit $q0
242     %0:_(<8 x s16>) = COPY $q0
243     %1:_(<8 x s16>) = COPY $q1
244     %2:_(<8 x s16>) = G_ADD %0, %1
245     $q0 = COPY %2(<8 x s16>)
246     RET_ReallyLR implicit $q0
250 name:            add_v16i8
251 alignment:       4
252 tracksRegLiveness: true
253 machineFunctionInfo: {}
254 body:             |
255   bb.1:
256     liveins: $q0, $q1
258     ; CHECK-LABEL: name: add_v16i8
259     ; CHECK: liveins: $q0, $q1
260     ; CHECK-NEXT: {{  $}}
261     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
262     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
263     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[COPY]], [[COPY1]]
264     ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>)
265     ; CHECK-NEXT: RET_ReallyLR implicit $q0
266     %0:_(<16 x s8>) = COPY $q0
267     %1:_(<16 x s8>) = COPY $q1
268     %2:_(<16 x s8>) = G_ADD %0, %1
269     $q0 = COPY %2(<16 x s8>)
270     RET_ReallyLR implicit $q0
274 name:            add_v4i16
275 alignment:       4
276 tracksRegLiveness: true
277 machineFunctionInfo: {}
278 body:             |
279   bb.1:
280     liveins: $d0, $d1
282     ; CHECK-LABEL: name: add_v4i16
283     ; CHECK: liveins: $d0, $d1
284     ; CHECK-NEXT: {{  $}}
285     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
286     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
287     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[COPY]], [[COPY1]]
288     ; CHECK-NEXT: $d0 = COPY [[ADD]](<4 x s16>)
289     ; CHECK-NEXT: RET_ReallyLR implicit $d0
290     %0:_(<4 x s16>) = COPY $d0
291     %1:_(<4 x s16>) = COPY $d1
292     %2:_(<4 x s16>) = G_ADD %0, %1
293     $d0 = COPY %2(<4 x s16>)
294     RET_ReallyLR implicit $d0
297 name:            add_v8s8
298 tracksRegLiveness: true
299 body:             |
300   bb.1:
301     liveins: $d0, $d1
303     ; CHECK-LABEL: name: add_v8s8
304     ; CHECK: liveins: $d0, $d1
305     ; CHECK-NEXT: {{  $}}
306     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
307     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
308     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s8>) = G_ADD [[COPY]], [[COPY1]]
309     ; CHECK-NEXT: $d0 = COPY [[ADD]](<8 x s8>)
310     ; CHECK-NEXT: RET_ReallyLR implicit $d0
311     %0:_(<8 x s8>) = COPY $d0
312     %1:_(<8 x s8>) = COPY $d1
313     %2:_(<8 x s8>) = G_ADD %0, %1
314     $d0 = COPY %2(<8 x s8>)
315     RET_ReallyLR implicit $d0
319 name:            add_v2s1
320 tracksRegLiveness: true
321 body:             |
322   bb.1:
323     liveins: $d0, $d1, $d2, $d3
325     ; CHECK-LABEL: name: add_v2s1
326     ; CHECK: liveins: $d0, $d1, $d2, $d3
327     ; CHECK-NEXT: {{  $}}
328     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
329     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $d1
330     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $d2
331     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $d3
332     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY]](<2 x s32>), [[COPY1]]
333     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s32>) = G_ICMP intpred(eq), [[COPY2]](<2 x s32>), [[COPY3]]
334     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<2 x s32>) = G_ADD [[ICMP]], [[ICMP1]]
335     ; CHECK-NEXT: $d0 = COPY [[ADD]](<2 x s32>)
336     ; CHECK-NEXT: RET_ReallyLR implicit $d0
337     %0:_(<2 x s32>) = COPY $d0
338     %1:_(<2 x s32>) = COPY $d1
339     %2:_(<2 x s32>) = COPY $d2
340     %3:_(<2 x s32>) = COPY $d3
341     %4:_(<2 x s1>) = G_ICMP intpred(eq), %0(<2 x s32>), %1
342     %5:_(<2 x s1>) = G_ICMP intpred(eq), %2(<2 x s32>), %3
343     %6:_(<2 x s1>) = G_ADD %4, %5
344     %7:_(<2 x s32>) = G_ANYEXT %6
345     $d0 = COPY %7:_(<2 x s32>)
346     RET_ReallyLR implicit $d0
349 name:            add_v3s1
350 tracksRegLiveness: true
351 body:             |
352   bb.1:
353     liveins: $b0, $b1, $b2
355     ; CHECK-LABEL: name: add_v3s1
356     ; CHECK: liveins: $b0, $b1, $b2
357     ; CHECK-NEXT: {{  $}}
358     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY $b0
359     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s8) = COPY $b1
360     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s8) = COPY $b2
361     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY]](s8)
362     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY1]](s8)
363     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s16) = G_ANYEXT [[COPY2]](s8)
364     ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
365     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s16>) = G_BUILD_VECTOR [[ANYEXT]](s16), [[ANYEXT1]](s16), [[ANYEXT2]](s16), [[DEF]](s16)
366     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[BUILD_VECTOR]], [[BUILD_VECTOR]]
367     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[ADD]](<4 x s16>)
368     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV]](s16)
369     ; CHECK-NEXT: $b0 = COPY [[TRUNC]](s8)
370     ; CHECK-NEXT: RET_ReallyLR implicit $b0
371     %1:_(s8) = COPY $b0
372     %2:_(s8) = COPY $b1
373     %3:_(s8) = COPY $b2
374     %4:_(<3 x s8>) = G_BUILD_VECTOR %1(s8), %2(s8), %3(s8)
375     %0:_(<3 x s1>) = G_TRUNC %4(<3 x s8>)
376     %5:_(<3 x s1>) = G_ADD %0, %0
377     %7:_(<3 x s8>) = G_ANYEXT %5(<3 x s1>)
378     %8:_(s8), %9:_(s8), %10:_(s8) = G_UNMERGE_VALUES %7(<3 x s8>)
379     $b0 = COPY %8:_(s8)
380     RET_ReallyLR implicit $b0
383 name:            add_v4s1
384 tracksRegLiveness: true
385 body:             |
386   bb.1:
387     liveins: $d0, $d1, $d2, $d3
389     ; CHECK-LABEL: name: add_v4s1
390     ; CHECK: liveins: $d0, $d1, $d2, $d3
391     ; CHECK-NEXT: {{  $}}
392     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
393     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $d1
394     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $d2
395     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<4 x s16>) = COPY $d3
396     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY]](<4 x s16>), [[COPY1]]
397     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<4 x s16>) = G_ICMP intpred(eq), [[COPY2]](<4 x s16>), [[COPY3]]
398     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s16>) = G_ADD [[ICMP]], [[ICMP1]]
399     ; CHECK-NEXT: $d0 = COPY [[ADD]](<4 x s16>)
400     ; CHECK-NEXT: RET_ReallyLR implicit $d0
401     %0:_(<4 x s16>) = COPY $d0
402     %1:_(<4 x s16>) = COPY $d1
403     %2:_(<4 x s16>) = COPY $d2
404     %3:_(<4 x s16>) = COPY $d3
405     %4:_(<4 x s1>) = G_ICMP intpred(eq), %0(<4 x s16>), %1
406     %5:_(<4 x s1>) = G_ICMP intpred(eq), %2(<4 x s16>), %3
407     %6:_(<4 x s1>) = G_ADD %4, %5
408     %7:_(<4 x s16>) = G_ANYEXT %6
409     $d0 = COPY %7:_(<4 x s16>)
410     RET_ReallyLR implicit $d0
413 name:            add_v8s1
414 tracksRegLiveness: true
415 body:             |
416   bb.1:
417     liveins: $d0, $d1, $d2, $d3
419     ; CHECK-LABEL: name: add_v8s1
420     ; CHECK: liveins: $d0, $d1, $d2, $d3
421     ; CHECK-NEXT: {{  $}}
422     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
423     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s8>) = COPY $d1
424     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<8 x s8>) = COPY $d2
425     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<8 x s8>) = COPY $d3
426     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY]](<8 x s8>), [[COPY1]]
427     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<8 x s8>) = G_ICMP intpred(eq), [[COPY2]](<8 x s8>), [[COPY3]]
428     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s8>) = G_ADD [[ICMP]], [[ICMP1]]
429     ; CHECK-NEXT: $d0 = COPY [[ADD]](<8 x s8>)
430     ; CHECK-NEXT: RET_ReallyLR implicit $d0
431     %0:_(<8 x s8>) = COPY $d0
432     %1:_(<8 x s8>) = COPY $d1
433     %2:_(<8 x s8>) = COPY $d2
434     %3:_(<8 x s8>) = COPY $d3
435     %4:_(<8 x s1>) = G_ICMP intpred(eq), %0(<8 x s8>), %1
436     %5:_(<8 x s1>) = G_ICMP intpred(eq), %2(<8 x s8>), %3
437     %6:_(<8 x s1>) = G_ADD %4, %5
438     %7:_(<8 x s8>) = G_ANYEXT %6
439     $d0 = COPY %7:_(<8 x s8>)
440     RET_ReallyLR implicit $d0
443 name:            add_v16s1
444 tracksRegLiveness: true
445 body:             |
446   bb.1:
447     liveins: $q0, $q1, $q2, $q3
449     ; CHECK-LABEL: name: add_v16s1
450     ; CHECK: liveins: $q0, $q1, $q2, $q3
451     ; CHECK-NEXT: {{  $}}
452     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
453     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
454     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<16 x s8>) = COPY $q2
455     ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<16 x s8>) = COPY $q3
456     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY]](<16 x s8>), [[COPY1]]
457     ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<16 x s8>) = G_ICMP intpred(eq), [[COPY2]](<16 x s8>), [[COPY3]]
458     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<16 x s8>) = G_ADD [[ICMP]], [[ICMP1]]
459     ; CHECK-NEXT: $q0 = COPY [[ADD]](<16 x s8>)
460     ; CHECK-NEXT: RET_ReallyLR implicit $q0
461     %0:_(<16 x s8>) = COPY $q0
462     %1:_(<16 x s8>) = COPY $q1
463     %2:_(<16 x s8>) = COPY $q2
464     %3:_(<16 x s8>) = COPY $q3
465     %4:_(<16 x s1>) = G_ICMP intpred(eq), %0(<16 x s8>), %1
466     %5:_(<16 x s1>) = G_ICMP intpred(eq), %2(<16 x s8>), %3
467     %6:_(<16 x s1>) = G_ADD %4, %5
468     %7:_(<16 x s8>) = G_ANYEXT %6
469     $q0 = COPY %7:_(<16 x s8>)
470     RET_ReallyLR implicit $q0