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]+]]:_(s8) = G_IMPLICIT_DEF
59 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8)
60 ; CHECK-NEXT: [[SMIN:%[0-9]+]]:_(<16 x s8>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
61 ; CHECK-NEXT: [[SMIN1:%[0-9]+]]:_(<16 x s8>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
62 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
63 ; CHECK-NEXT: G_STORE [[SMIN]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
64 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
65 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
66 ; CHECK-NEXT: G_STORE [[SMIN1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
67 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
68 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
69 %smin:_(<32 x s8>) = G_SMIN %vec, %vec1
71 G_STORE %smin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
76 tracksRegLiveness: true
81 ; CHECK-LABEL: name: v4s16_smin
84 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
85 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
86 ; CHECK-NEXT: %smin:_(<4 x s16>) = G_SMIN %vec, %vec1
87 ; CHECK-NEXT: $x0 = COPY %smin(<4 x s16>)
88 ; CHECK-NEXT: RET_ReallyLR implicit $x0
89 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
90 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
91 %smin:_(<4 x s16>) = G_SMIN %vec, %vec1
93 RET_ReallyLR implicit $x0
98 tracksRegLiveness: true
103 ; CHECK-LABEL: name: v8s16_smin
104 ; CHECK: liveins: $q0
106 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
107 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
108 ; CHECK-NEXT: %smin:_(<8 x s16>) = G_SMIN %vec, %vec1
109 ; CHECK-NEXT: $q0 = COPY %smin(<8 x s16>)
110 ; CHECK-NEXT: RET_ReallyLR implicit $q0
111 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
112 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
113 %smin:_(<8 x s16>) = G_SMIN %vec, %vec1
115 RET_ReallyLR implicit $q0
120 tracksRegLiveness: true
123 liveins: $x0, $q0, $q1
125 ; CHECK-LABEL: name: v16s16_smin
126 ; CHECK: liveins: $x0, $q0, $q1
128 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
129 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
130 ; CHECK-NEXT: [[SMIN:%[0-9]+]]:_(<8 x s16>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
131 ; CHECK-NEXT: [[SMIN1:%[0-9]+]]:_(<8 x s16>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
132 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
133 ; CHECK-NEXT: G_STORE [[SMIN]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
134 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
135 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
136 ; CHECK-NEXT: G_STORE [[SMIN1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
137 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
138 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
139 %smin:_(<16 x s16>) = G_SMIN %vec, %vec1
141 G_STORE %smin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
146 tracksRegLiveness: true
151 ; CHECK-LABEL: name: v2s32_smin
152 ; CHECK: liveins: $x0
154 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
155 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
156 ; CHECK-NEXT: %smin:_(<2 x s32>) = G_SMIN %vec, %vec1
157 ; CHECK-NEXT: $x0 = COPY %smin(<2 x s32>)
158 ; CHECK-NEXT: RET_ReallyLR implicit $x0
159 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
160 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
161 %smin:_(<2 x s32>) = G_SMIN %vec, %vec1
163 RET_ReallyLR implicit $x0
168 tracksRegLiveness: true
173 ; CHECK-LABEL: name: v4s32_smin
174 ; CHECK: liveins: $q0
176 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
177 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
178 ; CHECK-NEXT: %smin:_(<4 x s32>) = G_SMIN %vec, %vec1
179 ; CHECK-NEXT: $q0 = COPY %smin(<4 x s32>)
180 ; CHECK-NEXT: RET_ReallyLR implicit $q0
181 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
182 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
183 %smin:_(<4 x s32>) = G_SMIN %vec, %vec1
185 RET_ReallyLR implicit $q0
190 tracksRegLiveness: true
193 liveins: $x0, $q0, $q1
195 ; CHECK-LABEL: name: v8s32_smin
196 ; CHECK: liveins: $x0, $q0, $q1
198 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
199 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
200 ; CHECK-NEXT: [[SMIN:%[0-9]+]]:_(<4 x s32>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
201 ; CHECK-NEXT: [[SMIN1:%[0-9]+]]:_(<4 x s32>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
202 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
203 ; CHECK-NEXT: G_STORE [[SMIN]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
204 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
205 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
206 ; CHECK-NEXT: G_STORE [[SMIN1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
207 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
208 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
209 %smin:_(<8 x s32>) = G_SMIN %vec, %vec1
211 G_STORE %smin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
216 tracksRegLiveness: true
221 ; CHECK-LABEL: name: v2s64_smin
222 ; CHECK: liveins: $q0
224 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
225 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
226 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), %vec(<2 x s64>), %vec1
227 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
228 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
229 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
230 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
231 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[SEXT_INREG]]
232 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
233 ; CHECK-NEXT: %smin:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
234 ; CHECK-NEXT: $q0 = COPY %smin(<2 x s64>)
235 ; CHECK-NEXT: RET_ReallyLR implicit $q0
236 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
237 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
238 %smin:_(<2 x s64>) = G_SMIN %vec, %vec1
240 RET_ReallyLR implicit $q0
245 tracksRegLiveness: true
248 liveins: $x0, $q0, $q1
250 ; CHECK-LABEL: name: v4s64_smin
251 ; CHECK: liveins: $x0, $q0, $q1
253 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
254 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), [[DEF]](<2 x s64>), [[DEF]]
255 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
256 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
257 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
258 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
259 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG]]
260 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
261 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
262 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), [[DEF]](<2 x s64>), [[DEF]]
263 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP1]], 1
264 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG1]], [[BUILD_VECTOR]]
265 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG1]]
266 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
267 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
268 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
269 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
270 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
271 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
272 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
273 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
274 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
275 %smin:_(<4 x s64>) = G_SMIN %vec, %vec1
277 G_STORE %smin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
282 tracksRegLiveness: true
287 ; CHECK-LABEL: name: v8s8_umin
288 ; CHECK: liveins: $x0
290 ; CHECK-NEXT: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
291 ; CHECK-NEXT: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
292 ; CHECK-NEXT: %umin:_(<8 x s8>) = G_UMIN %vec, %vec1
293 ; CHECK-NEXT: $x0 = COPY %umin(<8 x s8>)
294 ; CHECK-NEXT: RET_ReallyLR implicit $x0
295 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
296 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
297 %umin:_(<8 x s8>) = G_UMIN %vec, %vec1
299 RET_ReallyLR implicit $x0
304 tracksRegLiveness: true
309 ; CHECK-LABEL: name: v16s8_umin
310 ; CHECK: liveins: $q0
312 ; CHECK-NEXT: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
313 ; CHECK-NEXT: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
314 ; CHECK-NEXT: %umin:_(<16 x s8>) = G_UMIN %vec, %vec1
315 ; CHECK-NEXT: $q0 = COPY %umin(<16 x s8>)
316 ; CHECK-NEXT: RET_ReallyLR implicit $q0
317 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
318 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
319 %umin:_(<16 x s8>) = G_UMIN %vec, %vec1
321 RET_ReallyLR implicit $q0
326 tracksRegLiveness: true
329 liveins: $x0, $q0, $q1
331 ; CHECK-LABEL: name: v32s8_umin
332 ; CHECK: liveins: $x0, $q0, $q1
334 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
335 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8)
336 ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(<16 x s8>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
337 ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(<16 x s8>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
338 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
339 ; CHECK-NEXT: G_STORE [[UMIN]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
340 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
341 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
342 ; CHECK-NEXT: G_STORE [[UMIN1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
343 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
344 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
345 %umin:_(<32 x s8>) = G_UMIN %vec, %vec1
347 G_STORE %umin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
352 tracksRegLiveness: true
357 ; CHECK-LABEL: name: v4s16_umin
358 ; CHECK: liveins: $x0
360 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
361 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
362 ; CHECK-NEXT: %umin:_(<4 x s16>) = G_UMIN %vec, %vec1
363 ; CHECK-NEXT: $x0 = COPY %umin(<4 x s16>)
364 ; CHECK-NEXT: RET_ReallyLR implicit $x0
365 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
366 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
367 %umin:_(<4 x s16>) = G_UMIN %vec, %vec1
369 RET_ReallyLR implicit $x0
374 tracksRegLiveness: true
379 ; CHECK-LABEL: name: v8s16_umin
380 ; CHECK: liveins: $q0
382 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
383 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
384 ; CHECK-NEXT: %umin:_(<8 x s16>) = G_UMIN %vec, %vec1
385 ; CHECK-NEXT: $q0 = COPY %umin(<8 x s16>)
386 ; CHECK-NEXT: RET_ReallyLR implicit $q0
387 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
388 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
389 %umin:_(<8 x s16>) = G_UMIN %vec, %vec1
391 RET_ReallyLR implicit $q0
396 tracksRegLiveness: true
399 liveins: $x0, $q0, $q1
401 ; CHECK-LABEL: name: v16s16_umin
402 ; CHECK: liveins: $x0, $q0, $q1
404 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
405 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
406 ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(<8 x s16>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
407 ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(<8 x s16>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
408 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
409 ; CHECK-NEXT: G_STORE [[UMIN]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
410 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
411 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
412 ; CHECK-NEXT: G_STORE [[UMIN1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
413 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
414 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
415 %umin:_(<16 x s16>) = G_UMIN %vec, %vec1
417 G_STORE %umin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
422 tracksRegLiveness: true
427 ; CHECK-LABEL: name: v2s32_umin
428 ; CHECK: liveins: $x0
430 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
431 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
432 ; CHECK-NEXT: %umin:_(<2 x s32>) = G_UMIN %vec, %vec1
433 ; CHECK-NEXT: $x0 = COPY %umin(<2 x s32>)
434 ; CHECK-NEXT: RET_ReallyLR implicit $x0
435 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
436 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
437 %umin:_(<2 x s32>) = G_UMIN %vec, %vec1
439 RET_ReallyLR implicit $x0
444 tracksRegLiveness: true
449 ; CHECK-LABEL: name: v4s32_umin
450 ; CHECK: liveins: $q0
452 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
453 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
454 ; CHECK-NEXT: %umin:_(<4 x s32>) = G_UMIN %vec, %vec1
455 ; CHECK-NEXT: $q0 = COPY %umin(<4 x s32>)
456 ; CHECK-NEXT: RET_ReallyLR implicit $q0
457 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
458 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
459 %umin:_(<4 x s32>) = G_UMIN %vec, %vec1
461 RET_ReallyLR implicit $q0
466 tracksRegLiveness: true
469 liveins: $x0, $q0, $q1
471 ; CHECK-LABEL: name: v8s32_umin
472 ; CHECK: liveins: $x0, $q0, $q1
474 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
475 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
476 ; CHECK-NEXT: [[UMIN:%[0-9]+]]:_(<4 x s32>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
477 ; CHECK-NEXT: [[UMIN1:%[0-9]+]]:_(<4 x s32>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR]]
478 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
479 ; CHECK-NEXT: G_STORE [[UMIN]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
480 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
481 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
482 ; CHECK-NEXT: G_STORE [[UMIN1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
483 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
484 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
485 %umin:_(<8 x s32>) = G_UMIN %vec, %vec1
487 G_STORE %umin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
492 tracksRegLiveness: true
497 ; CHECK-LABEL: name: v2s64_umin
498 ; CHECK: liveins: $q0
500 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
501 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
502 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), %vec(<2 x s64>), %vec1
503 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
504 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
505 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
506 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
507 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[SEXT_INREG]]
508 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
509 ; CHECK-NEXT: %umin:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
510 ; CHECK-NEXT: $q0 = COPY %umin(<2 x s64>)
511 ; CHECK-NEXT: RET_ReallyLR implicit $q0
512 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
513 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
514 %umin:_(<2 x s64>) = G_UMIN %vec, %vec1
516 RET_ReallyLR implicit $q0
521 tracksRegLiveness: true
524 liveins: $x0, $q0, $q1
526 ; CHECK-LABEL: name: v4s64_umin
527 ; CHECK: liveins: $x0, $q0, $q1
529 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
530 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), [[DEF]](<2 x s64>), [[DEF]]
531 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
532 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
533 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
534 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
535 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG]]
536 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
537 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
538 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), [[DEF]](<2 x s64>), [[DEF]]
539 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP1]], 1
540 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG1]], [[BUILD_VECTOR]]
541 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG1]]
542 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
543 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
544 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
545 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
546 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
547 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
548 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
549 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
550 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
551 %umin:_(<4 x s64>) = G_UMIN %vec, %vec1
553 G_STORE %umin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
558 tracksRegLiveness: true
563 ; CHECK-LABEL: name: v8s8_smax
564 ; CHECK: liveins: $x0
566 ; CHECK-NEXT: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
567 ; CHECK-NEXT: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
568 ; CHECK-NEXT: %smax:_(<8 x s8>) = G_SMAX %vec, %vec1
569 ; CHECK-NEXT: $x0 = COPY %smax(<8 x s8>)
570 ; CHECK-NEXT: RET_ReallyLR implicit $x0
571 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
572 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
573 %smax:_(<8 x s8>) = G_SMAX %vec, %vec1
575 RET_ReallyLR implicit $x0
580 tracksRegLiveness: true
585 ; CHECK-LABEL: name: v16s8_smax
586 ; CHECK: liveins: $q0
588 ; CHECK-NEXT: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
589 ; CHECK-NEXT: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
590 ; CHECK-NEXT: %smax:_(<16 x s8>) = G_SMAX %vec, %vec1
591 ; CHECK-NEXT: $q0 = COPY %smax(<16 x s8>)
592 ; CHECK-NEXT: RET_ReallyLR implicit $q0
593 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
594 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
595 %smax:_(<16 x s8>) = G_SMAX %vec, %vec1
597 RET_ReallyLR implicit $q0
602 tracksRegLiveness: true
607 ; CHECK-LABEL: name: v4s16_smax
608 ; CHECK: liveins: $x0
610 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
611 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
612 ; CHECK-NEXT: %smax:_(<4 x s16>) = G_SMAX %vec, %vec1
613 ; CHECK-NEXT: $x0 = COPY %smax(<4 x s16>)
614 ; CHECK-NEXT: RET_ReallyLR implicit $x0
615 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
616 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
617 %smax:_(<4 x s16>) = G_SMAX %vec, %vec1
619 RET_ReallyLR implicit $x0
624 tracksRegLiveness: true
627 liveins: $x0, $q0, $q1
629 ; CHECK-LABEL: name: v32s8_smax
630 ; CHECK: liveins: $x0, $q0, $q1
632 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
633 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8)
634 ; CHECK-NEXT: [[SMAX:%[0-9]+]]:_(<16 x s8>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
635 ; CHECK-NEXT: [[SMAX1:%[0-9]+]]:_(<16 x s8>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
636 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
637 ; CHECK-NEXT: G_STORE [[SMAX]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
638 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
639 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
640 ; CHECK-NEXT: G_STORE [[SMAX1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
641 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
642 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
643 %smax:_(<32 x s8>) = G_SMAX %vec, %vec1
645 G_STORE %smax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
650 tracksRegLiveness: true
655 ; CHECK-LABEL: name: v8s16_smax
656 ; CHECK: liveins: $q0
658 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
659 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
660 ; CHECK-NEXT: %smax:_(<8 x s16>) = G_SMAX %vec, %vec1
661 ; CHECK-NEXT: $q0 = COPY %smax(<8 x s16>)
662 ; CHECK-NEXT: RET_ReallyLR implicit $q0
663 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
664 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
665 %smax:_(<8 x s16>) = G_SMAX %vec, %vec1
667 RET_ReallyLR implicit $q0
672 tracksRegLiveness: true
675 liveins: $x0, $q0, $q1
677 ; CHECK-LABEL: name: v16s16_smax
678 ; CHECK: liveins: $x0, $q0, $q1
680 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
681 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
682 ; CHECK-NEXT: [[SMAX:%[0-9]+]]:_(<8 x s16>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
683 ; CHECK-NEXT: [[SMAX1:%[0-9]+]]:_(<8 x s16>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
684 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
685 ; CHECK-NEXT: G_STORE [[SMAX]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
686 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
687 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
688 ; CHECK-NEXT: G_STORE [[SMAX1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
689 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
690 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
691 %smax:_(<16 x s16>) = G_SMAX %vec, %vec1
693 G_STORE %smax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
698 tracksRegLiveness: true
703 ; CHECK-LABEL: name: v2s32_smax
704 ; CHECK: liveins: $x0
706 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
707 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
708 ; CHECK-NEXT: %smax:_(<2 x s32>) = G_SMAX %vec, %vec1
709 ; CHECK-NEXT: $x0 = COPY %smax(<2 x s32>)
710 ; CHECK-NEXT: RET_ReallyLR implicit $x0
711 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
712 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
713 %smax:_(<2 x s32>) = G_SMAX %vec, %vec1
715 RET_ReallyLR implicit $x0
720 tracksRegLiveness: true
725 ; CHECK-LABEL: name: v4s32_smax
726 ; CHECK: liveins: $q0
728 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
729 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
730 ; CHECK-NEXT: %smax:_(<4 x s32>) = G_SMAX %vec, %vec1
731 ; CHECK-NEXT: $q0 = COPY %smax(<4 x s32>)
732 ; CHECK-NEXT: RET_ReallyLR implicit $q0
733 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
734 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
735 %smax:_(<4 x s32>) = G_SMAX %vec, %vec1
737 RET_ReallyLR implicit $q0
742 tracksRegLiveness: true
745 liveins: $x0, $q0, $q1
747 ; CHECK-LABEL: name: v8s32_smax
748 ; CHECK: liveins: $x0, $q0, $q1
750 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
751 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
752 ; CHECK-NEXT: [[SMAX:%[0-9]+]]:_(<4 x s32>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
753 ; CHECK-NEXT: [[SMAX1:%[0-9]+]]:_(<4 x s32>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
754 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
755 ; CHECK-NEXT: G_STORE [[SMAX]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
756 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
757 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
758 ; CHECK-NEXT: G_STORE [[SMAX1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
759 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
760 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
761 %smax:_(<8 x s32>) = G_SMAX %vec, %vec1
763 G_STORE %smax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
768 tracksRegLiveness: true
773 ; CHECK-LABEL: name: v2s64_smax
774 ; CHECK: liveins: $q0
776 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
777 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
778 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), %vec(<2 x s64>), %vec1
779 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
780 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
781 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
782 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
783 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[SEXT_INREG]]
784 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
785 ; CHECK-NEXT: %smax:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
786 ; CHECK-NEXT: $q0 = COPY %smax(<2 x s64>)
787 ; CHECK-NEXT: RET_ReallyLR implicit $q0
788 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
789 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
790 %smax:_(<2 x s64>) = G_SMAX %vec, %vec1
792 RET_ReallyLR implicit $q0
797 tracksRegLiveness: true
800 liveins: $x0, $q0, $q1
802 ; CHECK-LABEL: name: v4s64_smax
803 ; CHECK: liveins: $x0, $q0, $q1
805 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
806 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), [[DEF]](<2 x s64>), [[DEF]]
807 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
808 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
809 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
810 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
811 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG]]
812 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
813 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
814 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), [[DEF]](<2 x s64>), [[DEF]]
815 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP1]], 1
816 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG1]], [[BUILD_VECTOR]]
817 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG1]]
818 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
819 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
820 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
821 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
822 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
823 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
824 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
825 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
826 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
827 %smax:_(<4 x s64>) = G_SMAX %vec, %vec1
829 G_STORE %smax(<4 x s64>), %1(p0) :: (store (<4 x s64>))
834 tracksRegLiveness: true
839 ; CHECK-LABEL: name: v8s8_umax
840 ; CHECK: liveins: $x0
842 ; CHECK-NEXT: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
843 ; CHECK-NEXT: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
844 ; CHECK-NEXT: %umax:_(<8 x s8>) = G_UMAX %vec, %vec1
845 ; CHECK-NEXT: $x0 = COPY %umax(<8 x s8>)
846 ; CHECK-NEXT: RET_ReallyLR implicit $x0
847 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
848 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
849 %umax:_(<8 x s8>) = G_UMAX %vec, %vec1
851 RET_ReallyLR implicit $x0
856 tracksRegLiveness: true
861 ; CHECK-LABEL: name: v16s8_umax
862 ; CHECK: liveins: $q0
864 ; CHECK-NEXT: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
865 ; CHECK-NEXT: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
866 ; CHECK-NEXT: %umax:_(<16 x s8>) = G_UMAX %vec, %vec1
867 ; CHECK-NEXT: $q0 = COPY %umax(<16 x s8>)
868 ; CHECK-NEXT: RET_ReallyLR implicit $q0
869 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
870 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
871 %umax:_(<16 x s8>) = G_UMAX %vec, %vec1
873 RET_ReallyLR implicit $q0
878 tracksRegLiveness: true
881 liveins: $x0, $q0, $q1
883 ; CHECK-LABEL: name: v32s8_umax
884 ; CHECK: liveins: $x0, $q0, $q1
886 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
887 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8)
888 ; CHECK-NEXT: [[UMAX:%[0-9]+]]:_(<16 x s8>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
889 ; CHECK-NEXT: [[UMAX1:%[0-9]+]]:_(<16 x s8>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
890 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
891 ; CHECK-NEXT: G_STORE [[UMAX]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
892 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
893 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
894 ; CHECK-NEXT: G_STORE [[UMAX1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
895 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
896 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
897 %umax:_(<32 x s8>) = G_UMAX %vec, %vec1
899 G_STORE %umax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
904 tracksRegLiveness: true
909 ; CHECK-LABEL: name: v4s16_umax
910 ; CHECK: liveins: $x0
912 ; CHECK-NEXT: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
913 ; CHECK-NEXT: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
914 ; CHECK-NEXT: %umax:_(<4 x s16>) = G_UMAX %vec, %vec1
915 ; CHECK-NEXT: $x0 = COPY %umax(<4 x s16>)
916 ; CHECK-NEXT: RET_ReallyLR implicit $x0
917 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
918 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
919 %umax:_(<4 x s16>) = G_UMAX %vec, %vec1
921 RET_ReallyLR implicit $x0
926 tracksRegLiveness: true
931 ; CHECK-LABEL: name: v8s16_umax
932 ; CHECK: liveins: $q0
934 ; CHECK-NEXT: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
935 ; CHECK-NEXT: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
936 ; CHECK-NEXT: %umax:_(<8 x s16>) = G_UMAX %vec, %vec1
937 ; CHECK-NEXT: $q0 = COPY %umax(<8 x s16>)
938 ; CHECK-NEXT: RET_ReallyLR implicit $q0
939 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
940 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
941 %umax:_(<8 x s16>) = G_UMAX %vec, %vec1
943 RET_ReallyLR implicit $q0
948 tracksRegLiveness: true
951 liveins: $x0, $q0, $q1
953 ; CHECK-LABEL: name: v16s16_umax
954 ; CHECK: liveins: $x0, $q0, $q1
956 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
957 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
958 ; CHECK-NEXT: [[UMAX:%[0-9]+]]:_(<8 x s16>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
959 ; CHECK-NEXT: [[UMAX1:%[0-9]+]]:_(<8 x s16>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
960 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
961 ; CHECK-NEXT: G_STORE [[UMAX]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
962 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
963 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
964 ; CHECK-NEXT: G_STORE [[UMAX1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
965 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
966 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
967 %umax:_(<16 x s16>) = G_UMAX %vec, %vec1
969 G_STORE %umax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
974 tracksRegLiveness: true
979 ; CHECK-LABEL: name: v2s32_umax
980 ; CHECK: liveins: $x0
982 ; CHECK-NEXT: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
983 ; CHECK-NEXT: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
984 ; CHECK-NEXT: %umax:_(<2 x s32>) = G_UMAX %vec, %vec1
985 ; CHECK-NEXT: $x0 = COPY %umax(<2 x s32>)
986 ; CHECK-NEXT: RET_ReallyLR implicit $x0
987 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
988 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
989 %umax:_(<2 x s32>) = G_UMAX %vec, %vec1
991 RET_ReallyLR implicit $x0
996 tracksRegLiveness: true
1001 ; CHECK-LABEL: name: v4s32_umax
1002 ; CHECK: liveins: $q0
1003 ; CHECK-NEXT: {{ $}}
1004 ; CHECK-NEXT: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
1005 ; CHECK-NEXT: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
1006 ; CHECK-NEXT: %umax:_(<4 x s32>) = G_UMAX %vec, %vec1
1007 ; CHECK-NEXT: $q0 = COPY %umax(<4 x s32>)
1008 ; CHECK-NEXT: RET_ReallyLR implicit $q0
1009 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
1010 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
1011 %umax:_(<4 x s32>) = G_UMAX %vec, %vec1
1013 RET_ReallyLR implicit $q0
1018 tracksRegLiveness: true
1021 liveins: $x0, $q0, $q1
1023 ; CHECK-LABEL: name: v8s32_umax
1024 ; CHECK: liveins: $x0, $q0, $q1
1025 ; CHECK-NEXT: {{ $}}
1026 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1027 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
1028 ; CHECK-NEXT: [[UMAX:%[0-9]+]]:_(<4 x s32>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
1029 ; CHECK-NEXT: [[UMAX1:%[0-9]+]]:_(<4 x s32>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR]]
1030 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
1031 ; CHECK-NEXT: G_STORE [[UMAX]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
1032 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
1033 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
1034 ; CHECK-NEXT: G_STORE [[UMAX1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
1035 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
1036 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
1037 %umax:_(<8 x s32>) = G_UMAX %vec, %vec1
1039 G_STORE %umax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
1044 tracksRegLiveness: true
1049 ; CHECK-LABEL: name: v2s64_umax
1050 ; CHECK: liveins: $q0
1051 ; CHECK-NEXT: {{ $}}
1052 ; CHECK-NEXT: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
1053 ; CHECK-NEXT: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
1054 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), %vec(<2 x s64>), %vec1
1055 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
1056 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
1057 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
1058 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
1059 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[SEXT_INREG]]
1060 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
1061 ; CHECK-NEXT: %umax:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
1062 ; CHECK-NEXT: $q0 = COPY %umax(<2 x s64>)
1063 ; CHECK-NEXT: RET_ReallyLR implicit $q0
1064 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
1065 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
1066 %umax:_(<2 x s64>) = G_UMAX %vec, %vec1
1068 RET_ReallyLR implicit $q0
1073 tracksRegLiveness: true
1076 liveins: $x0, $q0, $q1
1078 ; CHECK-LABEL: name: v4s64_umax
1079 ; CHECK: liveins: $x0, $q0, $q1
1080 ; CHECK-NEXT: {{ $}}
1081 ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
1082 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), [[DEF]](<2 x s64>), [[DEF]]
1083 ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP]], 1
1084 ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
1085 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
1086 ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG]], [[BUILD_VECTOR]]
1087 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG]]
1088 ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
1089 ; CHECK-NEXT: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
1090 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), [[DEF]](<2 x s64>), [[DEF]]
1091 ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(<2 x s64>) = G_SEXT_INREG [[ICMP1]], 1
1092 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[SEXT_INREG1]], [[BUILD_VECTOR]]
1093 ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[SEXT_INREG1]]
1094 ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
1095 ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
1096 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
1097 ; CHECK-NEXT: G_STORE [[OR]](<2 x s64>), [[COPY]](p0) :: (store (<2 x s64>), align 32)
1098 ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
1099 ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C1]](s64)
1100 ; CHECK-NEXT: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
1101 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
1102 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
1103 %umax:_(<4 x s64>) = G_UMAX %vec, %vec1
1105 G_STORE %umax(<4 x s64>), %1(p0) :: (store (<4 x s64>))