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
4 name: test_scalar_add_big
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)
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)
29 name: test_scalar_add_big_nonpow2
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)
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)
57 name: test_scalar_add_small
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)
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)
78 name: test_scalar_add_narrowing
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)
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)
106 name: test_scalar_add_narrowing_s65
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)
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)
134 name: test_vector_add
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
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
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
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>)
228 tracksRegLiveness: true
229 machineFunctionInfo: {}
234 ; CHECK-LABEL: name: add_v8i16
235 ; CHECK: liveins: $q0, $q1
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
252 tracksRegLiveness: true
253 machineFunctionInfo: {}
258 ; CHECK-LABEL: name: add_v16i8
259 ; CHECK: liveins: $q0, $q1
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
276 tracksRegLiveness: true
277 machineFunctionInfo: {}
282 ; CHECK-LABEL: name: add_v4i16
283 ; CHECK: liveins: $d0, $d1
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
298 tracksRegLiveness: true
303 ; CHECK-LABEL: name: add_v8s8
304 ; CHECK: liveins: $d0, $d1
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
320 tracksRegLiveness: true
323 liveins: $d0, $d1, $d2, $d3
325 ; CHECK-LABEL: name: add_v2s1
326 ; CHECK: liveins: $d0, $d1, $d2, $d3
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
350 tracksRegLiveness: true
353 liveins: $b0, $b1, $b2
355 ; CHECK-LABEL: name: add_v3s1
356 ; CHECK: liveins: $b0, $b1, $b2
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
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>)
380 RET_ReallyLR implicit $b0
384 tracksRegLiveness: true
387 liveins: $d0, $d1, $d2, $d3
389 ; CHECK-LABEL: name: add_v4s1
390 ; CHECK: liveins: $d0, $d1, $d2, $d3
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
414 tracksRegLiveness: true
417 liveins: $d0, $d1, $d2, $d3
419 ; CHECK-LABEL: name: add_v8s1
420 ; CHECK: liveins: $d0, $d1, $d2, $d3
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
444 tracksRegLiveness: true
447 liveins: $q0, $q1, $q2, $q3
449 ; CHECK-LABEL: name: add_v16s1
450 ; CHECK: liveins: $q0, $q1, $q2, $q3
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