1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=aarch64-- -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s
6 tracksRegLiveness: true
11 ; CHECK-LABEL: name: v8s8_smin
14 ; CHECK-NEXT: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
15 ; CHECK-NEXT: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
16 ; CHECK-NEXT: %smin:_(<8 x s8>) = G_SMIN %vec, %vec1
17 ; CHECK-NEXT: $x0 = COPY %smin(<8 x s8>)
18 ; CHECK-NEXT: RET_ReallyLR implicit $x0
19 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
20 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
21 %smin:_(<8 x s8>) = G_SMIN %vec, %vec1
23 RET_ReallyLR implicit $x0
28 tracksRegLiveness: true
33 ; CHECK-LABEL: name: v16s8_smin
36 ; CHECK-NEXT: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
37 ; CHECK-NEXT: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
38 ; CHECK-NEXT: %smin:_(<16 x s8>) = G_SMIN %vec, %vec1
39 ; CHECK-NEXT: $q0 = COPY %smin(<16 x s8>)
40 ; CHECK-NEXT: RET_ReallyLR implicit $q0
41 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
42 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
43 %smin:_(<16 x s8>) = G_SMIN %vec, %vec1
45 RET_ReallyLR implicit $q0
50 tracksRegLiveness: true
53 liveins: $x0, $q0, $q1
55 ; CHECK-LABEL: name: v32s8_smin
56 ; CHECK: liveins: $x0, $q0, $q1
58 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<16 x s8>) = G_IMPLICIT_DEF
59 ; CHECK-NEXT: [[SMIN:%[0-9]+]]:_(<16 x s8>) = G_SMIN [[DEF]], [[DEF]]
60 ; CHECK-NEXT: [[SMIN1:%[0-9]+]]:_(<16 x s8>) = G_SMIN [[DEF]], [[DEF]]
61 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
62 ; CHECK-NEXT: G_STORE [[SMIN]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
63 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
64 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
65 ; CHECK-NEXT: G_STORE [[SMIN1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
66 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
67 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
68 %smin:_(<32 x s8>) = G_SMIN %vec, %vec1
70 G_STORE %smin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
75 tracksRegLiveness: true
80 ; CHECK-LABEL: name: v4s16_smin
83 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
84 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
85 ; CHECK-NEXT: %smin:_(<4 x s16>) = G_SMIN %vec, %vec1
86 ; CHECK-NEXT: $x0 = COPY %smin(<4 x s16>)
87 ; CHECK-NEXT: RET_ReallyLR implicit $x0
88 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
89 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
90 %smin:_(<4 x s16>) = G_SMIN %vec, %vec1
92 RET_ReallyLR implicit $x0
97 tracksRegLiveness: true
102 ; CHECK-LABEL: name: v8s16_smin
103 ; CHECK: liveins: $q0
105 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
106 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
107 ; CHECK-NEXT: %smin:_(<8 x s16>) = G_SMIN %vec, %vec1
108 ; CHECK-NEXT: $q0 = COPY %smin(<8 x s16>)
109 ; CHECK-NEXT: RET_ReallyLR implicit $q0
110 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
111 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
112 %smin:_(<8 x s16>) = G_SMIN %vec, %vec1
114 RET_ReallyLR implicit $q0
119 tracksRegLiveness: true
122 liveins: $x0, $q0, $q1
124 ; CHECK-LABEL: name: v16s16_smin
125 ; CHECK: liveins: $x0, $q0, $q1
127 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<8 x s16>) = G_IMPLICIT_DEF
128 ; CHECK-NEXT: [[SMIN:%[0-9]+]]:_(<8 x s16>) = G_SMIN [[DEF]], [[DEF]]
129 ; CHECK-NEXT: [[SMIN1:%[0-9]+]]:_(<8 x s16>) = G_SMIN [[DEF]], [[DEF]]
130 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
131 ; CHECK-NEXT: G_STORE [[SMIN]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
132 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
133 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
134 ; CHECK-NEXT: G_STORE [[SMIN1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
135 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
136 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
137 %smin:_(<16 x s16>) = G_SMIN %vec, %vec1
139 G_STORE %smin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
144 tracksRegLiveness: true
149 ; CHECK-LABEL: name: v2s32_smin
150 ; CHECK: liveins: $x0
152 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
153 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
154 ; CHECK-NEXT: %smin:_(<2 x s32>) = G_SMIN %vec, %vec1
155 ; CHECK-NEXT: $x0 = COPY %smin(<2 x s32>)
156 ; CHECK-NEXT: RET_ReallyLR implicit $x0
157 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
158 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
159 %smin:_(<2 x s32>) = G_SMIN %vec, %vec1
161 RET_ReallyLR implicit $x0
166 tracksRegLiveness: true
171 ; CHECK-LABEL: name: v4s32_smin
172 ; CHECK: liveins: $q0
174 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
175 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
176 ; CHECK-NEXT: %smin:_(<4 x s32>) = G_SMIN %vec, %vec1
177 ; CHECK-NEXT: $q0 = COPY %smin(<4 x s32>)
178 ; CHECK-NEXT: RET_ReallyLR implicit $q0
179 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
180 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
181 %smin:_(<4 x s32>) = G_SMIN %vec, %vec1
183 RET_ReallyLR implicit $q0
188 tracksRegLiveness: true
191 liveins: $x0, $q0, $q1
193 ; CHECK-LABEL: name: v8s32_smin
194 ; CHECK: liveins: $x0, $q0, $q1
196 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF
197 ; CHECK-NEXT: [[SMIN:%[0-9]+]]:_(<4 x s32>) = G_SMIN [[DEF]], [[DEF]]
198 ; CHECK-NEXT: [[SMIN1:%[0-9]+]]:_(<4 x s32>) = G_SMIN [[DEF]], [[DEF]]
199 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
200 ; CHECK-NEXT: G_STORE [[SMIN]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
201 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
202 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
203 ; CHECK-NEXT: G_STORE [[SMIN1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
204 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
205 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
206 %smin:_(<8 x s32>) = G_SMIN %vec, %vec1
208 G_STORE %smin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
213 tracksRegLiveness: true
218 ; CHECK-LABEL: name: v2s64_smin
219 ; CHECK: liveins: $q0
221 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
222 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
223 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), %vec(<2 x s64>), %vec1
224 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
225 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
226 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
227 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ICMP]]
228 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
229 ; CHECK-NEXT: %smin:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
230 ; CHECK-NEXT: $q0 = COPY %smin(<2 x s64>)
231 ; CHECK-NEXT: RET_ReallyLR implicit $q0
232 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
233 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
234 %smin:_(<2 x s64>) = G_SMIN %vec, %vec1
236 RET_ReallyLR implicit $q0
241 tracksRegLiveness: true
244 liveins: $x0, $q0, $q1
246 ; CHECK-LABEL: name: v4s64_smin
247 ; CHECK: liveins: $x0, $q0, $q1
249 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
250 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), [[DEF]](<2 x s64>), [[DEF]]
251 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
252 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
253 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
254 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP]]
255 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
256 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
257 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), [[DEF]](<2 x s64>), [[DEF]]
258 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP1]], [[BUILD_VECTOR]]
259 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP1]]
260 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
261 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
262 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
263 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
264 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
265 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
266 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
267 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
268 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
269 %smin:_(<4 x s64>) = G_SMIN %vec, %vec1
271 G_STORE %smin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
276 tracksRegLiveness: true
281 ; CHECK-LABEL: name: v8s8_umin
282 ; CHECK: liveins: $x0
284 ; CHECK-NEXT: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
285 ; CHECK-NEXT: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
286 ; CHECK-NEXT: %umin:_(<8 x s8>) = G_UMIN %vec, %vec1
287 ; CHECK-NEXT: $x0 = COPY %umin(<8 x s8>)
288 ; CHECK-NEXT: RET_ReallyLR implicit $x0
289 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
290 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
291 %umin:_(<8 x s8>) = G_UMIN %vec, %vec1
293 RET_ReallyLR implicit $x0
298 tracksRegLiveness: true
303 ; CHECK-LABEL: name: v16s8_umin
304 ; CHECK: liveins: $q0
306 ; CHECK-NEXT: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
307 ; CHECK-NEXT: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
308 ; CHECK-NEXT: %umin:_(<16 x s8>) = G_UMIN %vec, %vec1
309 ; CHECK-NEXT: $q0 = COPY %umin(<16 x s8>)
310 ; CHECK-NEXT: RET_ReallyLR implicit $q0
311 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
312 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
313 %umin:_(<16 x s8>) = G_UMIN %vec, %vec1
315 RET_ReallyLR implicit $q0
320 tracksRegLiveness: true
323 liveins: $x0, $q0, $q1
325 ; CHECK-LABEL: name: v32s8_umin
326 ; CHECK: liveins: $x0, $q0, $q1
328 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<16 x s8>) = G_IMPLICIT_DEF
329 ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(<16 x s8>) = G_UMIN [[DEF]], [[DEF]]
330 ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(<16 x s8>) = G_UMIN [[DEF]], [[DEF]]
331 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
332 ; CHECK-NEXT: G_STORE [[UMIN]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
333 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
334 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
335 ; CHECK-NEXT: G_STORE [[UMIN1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
336 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
337 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
338 %umin:_(<32 x s8>) = G_UMIN %vec, %vec1
340 G_STORE %umin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
345 tracksRegLiveness: true
350 ; CHECK-LABEL: name: v4s16_umin
351 ; CHECK: liveins: $x0
353 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
354 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
355 ; CHECK-NEXT: %umin:_(<4 x s16>) = G_UMIN %vec, %vec1
356 ; CHECK-NEXT: $x0 = COPY %umin(<4 x s16>)
357 ; CHECK-NEXT: RET_ReallyLR implicit $x0
358 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
359 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
360 %umin:_(<4 x s16>) = G_UMIN %vec, %vec1
362 RET_ReallyLR implicit $x0
367 tracksRegLiveness: true
372 ; CHECK-LABEL: name: v8s16_umin
373 ; CHECK: liveins: $q0
375 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
376 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
377 ; CHECK-NEXT: %umin:_(<8 x s16>) = G_UMIN %vec, %vec1
378 ; CHECK-NEXT: $q0 = COPY %umin(<8 x s16>)
379 ; CHECK-NEXT: RET_ReallyLR implicit $q0
380 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
381 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
382 %umin:_(<8 x s16>) = G_UMIN %vec, %vec1
384 RET_ReallyLR implicit $q0
389 tracksRegLiveness: true
392 liveins: $x0, $q0, $q1
394 ; CHECK-LABEL: name: v16s16_umin
395 ; CHECK: liveins: $x0, $q0, $q1
397 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<8 x s16>) = G_IMPLICIT_DEF
398 ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(<8 x s16>) = G_UMIN [[DEF]], [[DEF]]
399 ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(<8 x s16>) = G_UMIN [[DEF]], [[DEF]]
400 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
401 ; CHECK-NEXT: G_STORE [[UMIN]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
402 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
403 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
404 ; CHECK-NEXT: G_STORE [[UMIN1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
405 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
406 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
407 %umin:_(<16 x s16>) = G_UMIN %vec, %vec1
409 G_STORE %umin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
414 tracksRegLiveness: true
419 ; CHECK-LABEL: name: v2s32_umin
420 ; CHECK: liveins: $x0
422 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
423 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
424 ; CHECK-NEXT: %umin:_(<2 x s32>) = G_UMIN %vec, %vec1
425 ; CHECK-NEXT: $x0 = COPY %umin(<2 x s32>)
426 ; CHECK-NEXT: RET_ReallyLR implicit $x0
427 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
428 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
429 %umin:_(<2 x s32>) = G_UMIN %vec, %vec1
431 RET_ReallyLR implicit $x0
436 tracksRegLiveness: true
441 ; CHECK-LABEL: name: v4s32_umin
442 ; CHECK: liveins: $q0
444 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
445 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
446 ; CHECK-NEXT: %umin:_(<4 x s32>) = G_UMIN %vec, %vec1
447 ; CHECK-NEXT: $q0 = COPY %umin(<4 x s32>)
448 ; CHECK-NEXT: RET_ReallyLR implicit $q0
449 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
450 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
451 %umin:_(<4 x s32>) = G_UMIN %vec, %vec1
453 RET_ReallyLR implicit $q0
458 tracksRegLiveness: true
461 liveins: $x0, $q0, $q1
463 ; CHECK-LABEL: name: v8s32_umin
464 ; CHECK: liveins: $x0, $q0, $q1
466 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF
467 ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(<4 x s32>) = G_UMIN [[DEF]], [[DEF]]
468 ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(<4 x s32>) = G_UMIN [[DEF]], [[DEF]]
469 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
470 ; CHECK-NEXT: G_STORE [[UMIN]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
471 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
472 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
473 ; CHECK-NEXT: G_STORE [[UMIN1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
474 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
475 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
476 %umin:_(<8 x s32>) = G_UMIN %vec, %vec1
478 G_STORE %umin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
483 tracksRegLiveness: true
488 ; CHECK-LABEL: name: v2s64_umin
489 ; CHECK: liveins: $q0
491 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
492 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
493 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), %vec(<2 x s64>), %vec1
494 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
495 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
496 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
497 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ICMP]]
498 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
499 ; CHECK-NEXT: %umin:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
500 ; CHECK-NEXT: $q0 = COPY %umin(<2 x s64>)
501 ; CHECK-NEXT: RET_ReallyLR implicit $q0
502 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
503 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
504 %umin:_(<2 x s64>) = G_UMIN %vec, %vec1
506 RET_ReallyLR implicit $q0
511 tracksRegLiveness: true
514 liveins: $x0, $q0, $q1
516 ; CHECK-LABEL: name: v4s64_umin
517 ; CHECK: liveins: $x0, $q0, $q1
519 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
520 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), [[DEF]](<2 x s64>), [[DEF]]
521 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
522 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
523 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
524 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP]]
525 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
526 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
527 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), [[DEF]](<2 x s64>), [[DEF]]
528 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP1]], [[BUILD_VECTOR]]
529 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP1]]
530 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
531 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
532 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
533 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
534 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
535 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
536 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
537 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
538 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
539 %umin:_(<4 x s64>) = G_UMIN %vec, %vec1
541 G_STORE %umin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
546 tracksRegLiveness: true
551 ; CHECK-LABEL: name: v8s8_smax
552 ; CHECK: liveins: $x0
554 ; CHECK-NEXT: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
555 ; CHECK-NEXT: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
556 ; CHECK-NEXT: %smax:_(<8 x s8>) = G_SMAX %vec, %vec1
557 ; CHECK-NEXT: $x0 = COPY %smax(<8 x s8>)
558 ; CHECK-NEXT: RET_ReallyLR implicit $x0
559 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
560 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
561 %smax:_(<8 x s8>) = G_SMAX %vec, %vec1
563 RET_ReallyLR implicit $x0
568 tracksRegLiveness: true
573 ; CHECK-LABEL: name: v16s8_smax
574 ; CHECK: liveins: $q0
576 ; CHECK-NEXT: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
577 ; CHECK-NEXT: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
578 ; CHECK-NEXT: %smax:_(<16 x s8>) = G_SMAX %vec, %vec1
579 ; CHECK-NEXT: $q0 = COPY %smax(<16 x s8>)
580 ; CHECK-NEXT: RET_ReallyLR implicit $q0
581 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
582 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
583 %smax:_(<16 x s8>) = G_SMAX %vec, %vec1
585 RET_ReallyLR implicit $q0
590 tracksRegLiveness: true
595 ; CHECK-LABEL: name: v4s16_smax
596 ; CHECK: liveins: $x0
598 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
599 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
600 ; CHECK-NEXT: %smax:_(<4 x s16>) = G_SMAX %vec, %vec1
601 ; CHECK-NEXT: $x0 = COPY %smax(<4 x s16>)
602 ; CHECK-NEXT: RET_ReallyLR implicit $x0
603 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
604 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
605 %smax:_(<4 x s16>) = G_SMAX %vec, %vec1
607 RET_ReallyLR implicit $x0
612 tracksRegLiveness: true
615 liveins: $x0, $q0, $q1
617 ; CHECK-LABEL: name: v32s8_smax
618 ; CHECK: liveins: $x0, $q0, $q1
620 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<16 x s8>) = G_IMPLICIT_DEF
621 ; CHECK-NEXT: [[SMAX:%[0-9]+]]:_(<16 x s8>) = G_SMAX [[DEF]], [[DEF]]
622 ; CHECK-NEXT: [[SMAX1:%[0-9]+]]:_(<16 x s8>) = G_SMAX [[DEF]], [[DEF]]
623 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
624 ; CHECK-NEXT: G_STORE [[SMAX]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
625 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
626 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
627 ; CHECK-NEXT: G_STORE [[SMAX1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
628 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
629 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
630 %smax:_(<32 x s8>) = G_SMAX %vec, %vec1
632 G_STORE %smax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
637 tracksRegLiveness: true
642 ; CHECK-LABEL: name: v8s16_smax
643 ; CHECK: liveins: $q0
645 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
646 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
647 ; CHECK-NEXT: %smax:_(<8 x s16>) = G_SMAX %vec, %vec1
648 ; CHECK-NEXT: $q0 = COPY %smax(<8 x s16>)
649 ; CHECK-NEXT: RET_ReallyLR implicit $q0
650 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
651 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
652 %smax:_(<8 x s16>) = G_SMAX %vec, %vec1
654 RET_ReallyLR implicit $q0
659 tracksRegLiveness: true
662 liveins: $x0, $q0, $q1
664 ; CHECK-LABEL: name: v16s16_smax
665 ; CHECK: liveins: $x0, $q0, $q1
667 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<8 x s16>) = G_IMPLICIT_DEF
668 ; CHECK-NEXT: [[SMAX:%[0-9]+]]:_(<8 x s16>) = G_SMAX [[DEF]], [[DEF]]
669 ; CHECK-NEXT: [[SMAX1:%[0-9]+]]:_(<8 x s16>) = G_SMAX [[DEF]], [[DEF]]
670 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
671 ; CHECK-NEXT: G_STORE [[SMAX]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
672 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
673 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
674 ; CHECK-NEXT: G_STORE [[SMAX1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
675 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
676 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
677 %smax:_(<16 x s16>) = G_SMAX %vec, %vec1
679 G_STORE %smax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
684 tracksRegLiveness: true
689 ; CHECK-LABEL: name: v2s32_smax
690 ; CHECK: liveins: $x0
692 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
693 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
694 ; CHECK-NEXT: %smax:_(<2 x s32>) = G_SMAX %vec, %vec1
695 ; CHECK-NEXT: $x0 = COPY %smax(<2 x s32>)
696 ; CHECK-NEXT: RET_ReallyLR implicit $x0
697 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
698 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
699 %smax:_(<2 x s32>) = G_SMAX %vec, %vec1
701 RET_ReallyLR implicit $x0
706 tracksRegLiveness: true
711 ; CHECK-LABEL: name: v4s32_smax
712 ; CHECK: liveins: $q0
714 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
715 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
716 ; CHECK-NEXT: %smax:_(<4 x s32>) = G_SMAX %vec, %vec1
717 ; CHECK-NEXT: $q0 = COPY %smax(<4 x s32>)
718 ; CHECK-NEXT: RET_ReallyLR implicit $q0
719 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
720 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
721 %smax:_(<4 x s32>) = G_SMAX %vec, %vec1
723 RET_ReallyLR implicit $q0
728 tracksRegLiveness: true
731 liveins: $x0, $q0, $q1
733 ; CHECK-LABEL: name: v8s32_smax
734 ; CHECK: liveins: $x0, $q0, $q1
736 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF
737 ; CHECK-NEXT: [[SMAX:%[0-9]+]]:_(<4 x s32>) = G_SMAX [[DEF]], [[DEF]]
738 ; CHECK-NEXT: [[SMAX1:%[0-9]+]]:_(<4 x s32>) = G_SMAX [[DEF]], [[DEF]]
739 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
740 ; CHECK-NEXT: G_STORE [[SMAX]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
741 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
742 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
743 ; CHECK-NEXT: G_STORE [[SMAX1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
744 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
745 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
746 %smax:_(<8 x s32>) = G_SMAX %vec, %vec1
748 G_STORE %smax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
753 tracksRegLiveness: true
758 ; CHECK-LABEL: name: v2s64_smax
759 ; CHECK: liveins: $q0
761 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
762 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
763 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), %vec(<2 x s64>), %vec1
764 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
765 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
766 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
767 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ICMP]]
768 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
769 ; CHECK-NEXT: %smax:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
770 ; CHECK-NEXT: $q0 = COPY %smax(<2 x s64>)
771 ; CHECK-NEXT: RET_ReallyLR implicit $q0
772 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
773 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
774 %smax:_(<2 x s64>) = G_SMAX %vec, %vec1
776 RET_ReallyLR implicit $q0
781 tracksRegLiveness: true
784 liveins: $x0, $q0, $q1
786 ; CHECK-LABEL: name: v4s64_smax
787 ; CHECK: liveins: $x0, $q0, $q1
789 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
790 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), [[DEF]](<2 x s64>), [[DEF]]
791 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
792 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
793 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
794 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP]]
795 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
796 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
797 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), [[DEF]](<2 x s64>), [[DEF]]
798 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP1]], [[BUILD_VECTOR]]
799 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP1]]
800 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
801 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
802 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
803 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
804 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
805 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
806 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
807 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
808 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
809 %smax:_(<4 x s64>) = G_SMAX %vec, %vec1
811 G_STORE %smax(<4 x s64>), %1(p0) :: (store (<4 x s64>))
816 tracksRegLiveness: true
821 ; CHECK-LABEL: name: v8s8_umax
822 ; CHECK: liveins: $x0
824 ; CHECK-NEXT: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
825 ; CHECK-NEXT: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
826 ; CHECK-NEXT: %umax:_(<8 x s8>) = G_UMAX %vec, %vec1
827 ; CHECK-NEXT: $x0 = COPY %umax(<8 x s8>)
828 ; CHECK-NEXT: RET_ReallyLR implicit $x0
829 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
830 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
831 %umax:_(<8 x s8>) = G_UMAX %vec, %vec1
833 RET_ReallyLR implicit $x0
838 tracksRegLiveness: true
843 ; CHECK-LABEL: name: v16s8_umax
844 ; CHECK: liveins: $q0
846 ; CHECK-NEXT: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
847 ; CHECK-NEXT: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
848 ; CHECK-NEXT: %umax:_(<16 x s8>) = G_UMAX %vec, %vec1
849 ; CHECK-NEXT: $q0 = COPY %umax(<16 x s8>)
850 ; CHECK-NEXT: RET_ReallyLR implicit $q0
851 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
852 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
853 %umax:_(<16 x s8>) = G_UMAX %vec, %vec1
855 RET_ReallyLR implicit $q0
860 tracksRegLiveness: true
863 liveins: $x0, $q0, $q1
865 ; CHECK-LABEL: name: v32s8_umax
866 ; CHECK: liveins: $x0, $q0, $q1
868 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<16 x s8>) = G_IMPLICIT_DEF
869 ; CHECK-NEXT: [[UMAX:%[0-9]+]]:_(<16 x s8>) = G_UMAX [[DEF]], [[DEF]]
870 ; CHECK-NEXT: [[UMAX1:%[0-9]+]]:_(<16 x s8>) = G_UMAX [[DEF]], [[DEF]]
871 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
872 ; CHECK-NEXT: G_STORE [[UMAX]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
873 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
874 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
875 ; CHECK-NEXT: G_STORE [[UMAX1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
876 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
877 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
878 %umax:_(<32 x s8>) = G_UMAX %vec, %vec1
880 G_STORE %umax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
885 tracksRegLiveness: true
890 ; CHECK-LABEL: name: v4s16_umax
891 ; CHECK: liveins: $x0
893 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
894 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
895 ; CHECK-NEXT: %umax:_(<4 x s16>) = G_UMAX %vec, %vec1
896 ; CHECK-NEXT: $x0 = COPY %umax(<4 x s16>)
897 ; CHECK-NEXT: RET_ReallyLR implicit $x0
898 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
899 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
900 %umax:_(<4 x s16>) = G_UMAX %vec, %vec1
902 RET_ReallyLR implicit $x0
907 tracksRegLiveness: true
912 ; CHECK-LABEL: name: v8s16_umax
913 ; CHECK: liveins: $q0
915 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
916 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
917 ; CHECK-NEXT: %umax:_(<8 x s16>) = G_UMAX %vec, %vec1
918 ; CHECK-NEXT: $q0 = COPY %umax(<8 x s16>)
919 ; CHECK-NEXT: RET_ReallyLR implicit $q0
920 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
921 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
922 %umax:_(<8 x s16>) = G_UMAX %vec, %vec1
924 RET_ReallyLR implicit $q0
929 tracksRegLiveness: true
932 liveins: $x0, $q0, $q1
934 ; CHECK-LABEL: name: v16s16_umax
935 ; CHECK: liveins: $x0, $q0, $q1
937 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<8 x s16>) = G_IMPLICIT_DEF
938 ; CHECK-NEXT: [[UMAX:%[0-9]+]]:_(<8 x s16>) = G_UMAX [[DEF]], [[DEF]]
939 ; CHECK-NEXT: [[UMAX1:%[0-9]+]]:_(<8 x s16>) = G_UMAX [[DEF]], [[DEF]]
940 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
941 ; CHECK-NEXT: G_STORE [[UMAX]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
942 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
943 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
944 ; CHECK-NEXT: G_STORE [[UMAX1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
945 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
946 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
947 %umax:_(<16 x s16>) = G_UMAX %vec, %vec1
949 G_STORE %umax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
954 tracksRegLiveness: true
959 ; CHECK-LABEL: name: v2s32_umax
960 ; CHECK: liveins: $x0
962 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
963 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
964 ; CHECK-NEXT: %umax:_(<2 x s32>) = G_UMAX %vec, %vec1
965 ; CHECK-NEXT: $x0 = COPY %umax(<2 x s32>)
966 ; CHECK-NEXT: RET_ReallyLR implicit $x0
967 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
968 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
969 %umax:_(<2 x s32>) = G_UMAX %vec, %vec1
971 RET_ReallyLR implicit $x0
976 tracksRegLiveness: true
981 ; CHECK-LABEL: name: v4s32_umax
982 ; CHECK: liveins: $q0
984 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
985 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
986 ; CHECK-NEXT: %umax:_(<4 x s32>) = G_UMAX %vec, %vec1
987 ; CHECK-NEXT: $q0 = COPY %umax(<4 x s32>)
988 ; CHECK-NEXT: RET_ReallyLR implicit $q0
989 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
990 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
991 %umax:_(<4 x s32>) = G_UMAX %vec, %vec1
993 RET_ReallyLR implicit $q0
998 tracksRegLiveness: true
1001 liveins: $x0, $q0, $q1
1003 ; CHECK-LABEL: name: v8s32_umax
1004 ; CHECK: liveins: $x0, $q0, $q1
1005 ; CHECK-NEXT: {{ $}}
1006 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s32>) = G_IMPLICIT_DEF
1007 ; CHECK-NEXT: [[UMAX:%[0-9]+]]:_(<4 x s32>) = G_UMAX [[DEF]], [[DEF]]
1008 ; CHECK-NEXT: [[UMAX1:%[0-9]+]]:_(<4 x s32>) = G_UMAX [[DEF]], [[DEF]]
1009 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
1010 ; CHECK-NEXT: G_STORE [[UMAX]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
1011 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
1012 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
1013 ; CHECK-NEXT: G_STORE [[UMAX1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
1014 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
1015 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
1016 %umax:_(<8 x s32>) = G_UMAX %vec, %vec1
1018 G_STORE %umax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
1023 tracksRegLiveness: true
1028 ; CHECK-LABEL: name: v2s64_umax
1029 ; CHECK: liveins: $q0
1030 ; CHECK-NEXT: {{ $}}
1031 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
1032 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
1033 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), %vec(<2 x s64>), %vec1
1034 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
1035 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
1036 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
1037 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ICMP]]
1038 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
1039 ; CHECK-NEXT: %umax:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
1040 ; CHECK-NEXT: $q0 = COPY %umax(<2 x s64>)
1041 ; CHECK-NEXT: RET_ReallyLR implicit $q0
1042 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
1043 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
1044 %umax:_(<2 x s64>) = G_UMAX %vec, %vec1
1046 RET_ReallyLR implicit $q0
1051 tracksRegLiveness: true
1054 liveins: $x0, $q0, $q1
1056 ; CHECK-LABEL: name: v4s64_umax
1057 ; CHECK: liveins: $x0, $q0, $q1
1058 ; CHECK-NEXT: {{ $}}
1059 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
1060 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), [[DEF]](<2 x s64>), [[DEF]]
1061 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
1062 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
1063 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP]], [[BUILD_VECTOR]]
1064 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP]]
1065 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
1066 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
1067 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), [[DEF]](<2 x s64>), [[DEF]]
1068 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ICMP1]], [[BUILD_VECTOR]]
1069 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ICMP1]]
1070 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
1071 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
1072 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
1073 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
1074 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
1075 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
1076 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
1077 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
1078 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
1079 %umax:_(<4 x s64>) = G_UMAX %vec, %vec1
1081 G_STORE %umax(<4 x s64>), %1(p0) :: (store (<4 x s64>))