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
13 ; CHECK: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
14 ; CHECK: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
15 ; CHECK: %smin:_(<8 x s8>) = G_SMIN %vec, %vec1
16 ; CHECK: $x0 = COPY %smin(<8 x s8>)
17 ; CHECK: RET_ReallyLR implicit $x0
18 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
19 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
20 %smin:_(<8 x s8>) = G_SMIN %vec, %vec1
22 RET_ReallyLR implicit $x0
27 tracksRegLiveness: true
32 ; CHECK-LABEL: name: v16s8_smin
34 ; CHECK: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
35 ; CHECK: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
36 ; CHECK: %smin:_(<16 x s8>) = G_SMIN %vec, %vec1
37 ; CHECK: $q0 = COPY %smin(<16 x s8>)
38 ; CHECK: RET_ReallyLR implicit $q0
39 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
40 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
41 %smin:_(<16 x s8>) = G_SMIN %vec, %vec1
43 RET_ReallyLR implicit $q0
48 tracksRegLiveness: true
51 liveins: $x0, $q0, $q1
53 ; CHECK-LABEL: name: v32s8_smin
54 ; CHECK: liveins: $x0, $q0, $q1
55 ; CHECK: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
56 ; CHECK: [[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)
57 ; CHECK: [[BUILD_VECTOR1:%[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)
58 ; CHECK: [[BUILD_VECTOR2:%[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)
59 ; CHECK: [[BUILD_VECTOR3:%[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: [[SMIN:%[0-9]+]]:_(<16 x s8>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
61 ; CHECK: [[SMIN1:%[0-9]+]]:_(<16 x s8>) = G_SMIN [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
62 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
63 ; CHECK: G_STORE [[SMIN]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
64 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
65 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
66 ; CHECK: 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
83 ; CHECK: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
84 ; CHECK: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
85 ; CHECK: %smin:_(<4 x s16>) = G_SMIN %vec, %vec1
86 ; CHECK: $x0 = COPY %smin(<4 x s16>)
87 ; CHECK: 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
104 ; CHECK: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
105 ; CHECK: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
106 ; CHECK: %smin:_(<8 x s16>) = G_SMIN %vec, %vec1
107 ; CHECK: $q0 = COPY %smin(<8 x s16>)
108 ; CHECK: RET_ReallyLR implicit $q0
109 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
110 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
111 %smin:_(<8 x s16>) = G_SMIN %vec, %vec1
113 RET_ReallyLR implicit $q0
118 tracksRegLiveness: true
121 liveins: $x0, $q0, $q1
123 ; CHECK-LABEL: name: v16s16_smin
124 ; CHECK: liveins: $x0, $q0, $q1
125 ; CHECK: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
126 ; CHECK: [[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)
127 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
128 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
129 ; CHECK: [[BUILD_VECTOR3:%[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: [[SMIN:%[0-9]+]]:_(<8 x s16>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
131 ; CHECK: [[SMIN1:%[0-9]+]]:_(<8 x s16>) = G_SMIN [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
132 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
133 ; CHECK: G_STORE [[SMIN]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
134 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
135 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
136 ; CHECK: 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
153 ; CHECK: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
154 ; CHECK: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
155 ; CHECK: %smin:_(<2 x s32>) = G_SMIN %vec, %vec1
156 ; CHECK: $x0 = COPY %smin(<2 x s32>)
157 ; CHECK: RET_ReallyLR implicit $x0
158 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
159 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
160 %smin:_(<2 x s32>) = G_SMIN %vec, %vec1
162 RET_ReallyLR implicit $x0
167 tracksRegLiveness: true
172 ; CHECK-LABEL: name: v4s32_smin
173 ; CHECK: liveins: $q0
174 ; CHECK: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
175 ; CHECK: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
176 ; CHECK: %smin:_(<4 x s32>) = G_SMIN %vec, %vec1
177 ; CHECK: $q0 = COPY %smin(<4 x s32>)
178 ; CHECK: 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
195 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
196 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
197 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
198 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
199 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
200 ; CHECK: [[SMIN:%[0-9]+]]:_(<4 x s32>) = G_SMIN [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
201 ; CHECK: [[SMIN1:%[0-9]+]]:_(<4 x s32>) = G_SMIN [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
202 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
203 ; CHECK: G_STORE [[SMIN]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
204 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
205 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
206 ; CHECK: 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
223 ; CHECK: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
224 ; CHECK: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
225 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), %vec(<2 x s64>), %vec1
226 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
227 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
228 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
229 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
230 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
231 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
232 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
233 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
234 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ASHR]]
235 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
236 ; CHECK: %smin:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
237 ; CHECK: $q0 = COPY %smin(<2 x s64>)
238 ; CHECK: RET_ReallyLR implicit $q0
239 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
240 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
241 %smin:_(<2 x s64>) = G_SMIN %vec, %vec1
243 RET_ReallyLR implicit $q0
248 tracksRegLiveness: true
251 liveins: $x0, $q0, $q1
253 ; CHECK-LABEL: name: v4s64_smin
254 ; CHECK: liveins: $x0, $q0, $q1
255 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
256 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), [[DEF]](<2 x s64>), [[DEF]]
257 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
258 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
259 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
260 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
261 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
262 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
263 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
264 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
265 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR]]
266 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
267 ; CHECK: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
268 ; CHECK: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(slt), [[DEF]](<2 x s64>), [[DEF]]
269 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP1]](<2 x s64>)
270 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
271 ; CHECK: [[SHL1:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY1]], [[BUILD_VECTOR2]](<2 x s64>)
272 ; CHECK: [[ASHR1:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL1]], [[BUILD_VECTOR2]](<2 x s64>)
273 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
274 ; CHECK: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR1]], [[BUILD_VECTOR3]]
275 ; CHECK: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR1]]
276 ; CHECK: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
277 ; CHECK: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
278 ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x0
279 ; CHECK: G_STORE [[OR]](<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>), align 32)
280 ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
281 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C2]](s64)
282 ; CHECK: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
283 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
284 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
285 %smin:_(<4 x s64>) = G_SMIN %vec, %vec1
287 G_STORE %smin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
292 tracksRegLiveness: true
297 ; CHECK-LABEL: name: v8s8_umin
298 ; CHECK: liveins: $x0
299 ; CHECK: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
300 ; CHECK: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
301 ; CHECK: %umin:_(<8 x s8>) = G_UMIN %vec, %vec1
302 ; CHECK: $x0 = COPY %umin(<8 x s8>)
303 ; CHECK: RET_ReallyLR implicit $x0
304 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
305 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
306 %umin:_(<8 x s8>) = G_UMIN %vec, %vec1
308 RET_ReallyLR implicit $x0
313 tracksRegLiveness: true
318 ; CHECK-LABEL: name: v16s8_umin
319 ; CHECK: liveins: $q0
320 ; CHECK: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
321 ; CHECK: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
322 ; CHECK: %umin:_(<16 x s8>) = G_UMIN %vec, %vec1
323 ; CHECK: $q0 = COPY %umin(<16 x s8>)
324 ; CHECK: RET_ReallyLR implicit $q0
325 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
326 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
327 %umin:_(<16 x s8>) = G_UMIN %vec, %vec1
329 RET_ReallyLR implicit $q0
334 tracksRegLiveness: true
337 liveins: $x0, $q0, $q1
339 ; CHECK-LABEL: name: v32s8_umin
340 ; CHECK: liveins: $x0, $q0, $q1
341 ; CHECK: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
342 ; CHECK: [[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)
343 ; CHECK: [[BUILD_VECTOR1:%[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)
344 ; CHECK: [[BUILD_VECTOR2:%[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)
345 ; CHECK: [[BUILD_VECTOR3:%[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)
346 ; CHECK: [[UMIN:%[0-9]+]]:_(<16 x s8>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
347 ; CHECK: [[UMIN1:%[0-9]+]]:_(<16 x s8>) = G_UMIN [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
348 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
349 ; CHECK: G_STORE [[UMIN]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
350 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
351 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
352 ; CHECK: G_STORE [[UMIN1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
353 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
354 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
355 %umin:_(<32 x s8>) = G_UMIN %vec, %vec1
357 G_STORE %umin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
362 tracksRegLiveness: true
367 ; CHECK-LABEL: name: v4s16_umin
368 ; CHECK: liveins: $x0
369 ; CHECK: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
370 ; CHECK: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
371 ; CHECK: %umin:_(<4 x s16>) = G_UMIN %vec, %vec1
372 ; CHECK: $x0 = COPY %umin(<4 x s16>)
373 ; CHECK: RET_ReallyLR implicit $x0
374 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
375 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
376 %umin:_(<4 x s16>) = G_UMIN %vec, %vec1
378 RET_ReallyLR implicit $x0
383 tracksRegLiveness: true
388 ; CHECK-LABEL: name: v8s16_umin
389 ; CHECK: liveins: $q0
390 ; CHECK: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
391 ; CHECK: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
392 ; CHECK: %umin:_(<8 x s16>) = G_UMIN %vec, %vec1
393 ; CHECK: $q0 = COPY %umin(<8 x s16>)
394 ; CHECK: RET_ReallyLR implicit $q0
395 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
396 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
397 %umin:_(<8 x s16>) = G_UMIN %vec, %vec1
399 RET_ReallyLR implicit $q0
404 tracksRegLiveness: true
407 liveins: $x0, $q0, $q1
409 ; CHECK-LABEL: name: v16s16_umin
410 ; CHECK: liveins: $x0, $q0, $q1
411 ; CHECK: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
412 ; CHECK: [[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)
413 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
414 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
415 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
416 ; CHECK: [[UMIN:%[0-9]+]]:_(<8 x s16>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
417 ; CHECK: [[UMIN1:%[0-9]+]]:_(<8 x s16>) = G_UMIN [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
418 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
419 ; CHECK: G_STORE [[UMIN]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
420 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
421 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
422 ; CHECK: G_STORE [[UMIN1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
423 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
424 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
425 %umin:_(<16 x s16>) = G_UMIN %vec, %vec1
427 G_STORE %umin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
432 tracksRegLiveness: true
437 ; CHECK-LABEL: name: v2s32_umin
438 ; CHECK: liveins: $x0
439 ; CHECK: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
440 ; CHECK: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
441 ; CHECK: %umin:_(<2 x s32>) = G_UMIN %vec, %vec1
442 ; CHECK: $x0 = COPY %umin(<2 x s32>)
443 ; CHECK: RET_ReallyLR implicit $x0
444 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
445 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
446 %umin:_(<2 x s32>) = G_UMIN %vec, %vec1
448 RET_ReallyLR implicit $x0
453 tracksRegLiveness: true
458 ; CHECK-LABEL: name: v4s32_umin
459 ; CHECK: liveins: $q0
460 ; CHECK: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
461 ; CHECK: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
462 ; CHECK: %umin:_(<4 x s32>) = G_UMIN %vec, %vec1
463 ; CHECK: $q0 = COPY %umin(<4 x s32>)
464 ; CHECK: RET_ReallyLR implicit $q0
465 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
466 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
467 %umin:_(<4 x s32>) = G_UMIN %vec, %vec1
469 RET_ReallyLR implicit $q0
474 tracksRegLiveness: true
477 liveins: $x0, $q0, $q1
479 ; CHECK-LABEL: name: v8s32_umin
480 ; CHECK: liveins: $x0, $q0, $q1
481 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
482 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
483 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
484 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
485 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
486 ; CHECK: [[UMIN:%[0-9]+]]:_(<4 x s32>) = G_UMIN [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
487 ; CHECK: [[UMIN1:%[0-9]+]]:_(<4 x s32>) = G_UMIN [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
488 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
489 ; CHECK: G_STORE [[UMIN]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
490 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
491 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
492 ; CHECK: G_STORE [[UMIN1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
493 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
494 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
495 %umin:_(<8 x s32>) = G_UMIN %vec, %vec1
497 G_STORE %umin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
502 tracksRegLiveness: true
507 ; CHECK-LABEL: name: v2s64_umin
508 ; CHECK: liveins: $q0
509 ; CHECK: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
510 ; CHECK: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
511 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), %vec(<2 x s64>), %vec1
512 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
513 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
514 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
515 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
516 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
517 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
518 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
519 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
520 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ASHR]]
521 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
522 ; CHECK: %umin:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
523 ; CHECK: $q0 = COPY %umin(<2 x s64>)
524 ; CHECK: RET_ReallyLR implicit $q0
525 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
526 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
527 %umin:_(<2 x s64>) = G_UMIN %vec, %vec1
529 RET_ReallyLR implicit $q0
534 tracksRegLiveness: true
537 liveins: $x0, $q0, $q1
539 ; CHECK-LABEL: name: v4s64_umin
540 ; CHECK: liveins: $x0, $q0, $q1
541 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
542 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), [[DEF]](<2 x s64>), [[DEF]]
543 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
544 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
545 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
546 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
547 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
548 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
549 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
550 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
551 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR]]
552 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
553 ; CHECK: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
554 ; CHECK: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ult), [[DEF]](<2 x s64>), [[DEF]]
555 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP1]](<2 x s64>)
556 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
557 ; CHECK: [[SHL1:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY1]], [[BUILD_VECTOR2]](<2 x s64>)
558 ; CHECK: [[ASHR1:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL1]], [[BUILD_VECTOR2]](<2 x s64>)
559 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
560 ; CHECK: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR1]], [[BUILD_VECTOR3]]
561 ; CHECK: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR1]]
562 ; CHECK: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
563 ; CHECK: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
564 ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x0
565 ; CHECK: G_STORE [[OR]](<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>), align 32)
566 ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
567 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C2]](s64)
568 ; CHECK: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
569 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
570 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
571 %umin:_(<4 x s64>) = G_UMIN %vec, %vec1
573 G_STORE %umin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
578 tracksRegLiveness: true
583 ; CHECK-LABEL: name: v8s8_smax
584 ; CHECK: liveins: $x0
585 ; CHECK: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
586 ; CHECK: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
587 ; CHECK: %smax:_(<8 x s8>) = G_SMAX %vec, %vec1
588 ; CHECK: $x0 = COPY %smax(<8 x s8>)
589 ; CHECK: RET_ReallyLR implicit $x0
590 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
591 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
592 %smax:_(<8 x s8>) = G_SMAX %vec, %vec1
594 RET_ReallyLR implicit $x0
599 tracksRegLiveness: true
604 ; CHECK-LABEL: name: v16s8_smax
605 ; CHECK: liveins: $q0
606 ; CHECK: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
607 ; CHECK: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
608 ; CHECK: %smax:_(<16 x s8>) = G_SMAX %vec, %vec1
609 ; CHECK: $q0 = COPY %smax(<16 x s8>)
610 ; CHECK: RET_ReallyLR implicit $q0
611 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
612 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
613 %smax:_(<16 x s8>) = G_SMAX %vec, %vec1
615 RET_ReallyLR implicit $q0
620 tracksRegLiveness: true
625 ; CHECK-LABEL: name: v4s16_smax
626 ; CHECK: liveins: $x0
627 ; CHECK: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
628 ; CHECK: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
629 ; CHECK: %smax:_(<4 x s16>) = G_SMAX %vec, %vec1
630 ; CHECK: $x0 = COPY %smax(<4 x s16>)
631 ; CHECK: RET_ReallyLR implicit $x0
632 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
633 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
634 %smax:_(<4 x s16>) = G_SMAX %vec, %vec1
636 RET_ReallyLR implicit $x0
641 tracksRegLiveness: true
644 liveins: $x0, $q0, $q1
646 ; CHECK-LABEL: name: v32s8_smax
647 ; CHECK: liveins: $x0, $q0, $q1
648 ; CHECK: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
649 ; CHECK: [[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)
650 ; CHECK: [[BUILD_VECTOR1:%[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)
651 ; CHECK: [[BUILD_VECTOR2:%[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)
652 ; CHECK: [[BUILD_VECTOR3:%[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)
653 ; CHECK: [[SMAX:%[0-9]+]]:_(<16 x s8>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
654 ; CHECK: [[SMAX1:%[0-9]+]]:_(<16 x s8>) = G_SMAX [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
655 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
656 ; CHECK: G_STORE [[SMAX]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
657 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
658 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
659 ; CHECK: G_STORE [[SMAX1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
660 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
661 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
662 %smax:_(<32 x s8>) = G_SMAX %vec, %vec1
664 G_STORE %smax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
669 tracksRegLiveness: true
674 ; CHECK-LABEL: name: v8s16_smax
675 ; CHECK: liveins: $q0
676 ; CHECK: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
677 ; CHECK: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
678 ; CHECK: %smax:_(<8 x s16>) = G_SMAX %vec, %vec1
679 ; CHECK: $q0 = COPY %smax(<8 x s16>)
680 ; CHECK: RET_ReallyLR implicit $q0
681 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
682 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
683 %smax:_(<8 x s16>) = G_SMAX %vec, %vec1
685 RET_ReallyLR implicit $q0
690 tracksRegLiveness: true
693 liveins: $x0, $q0, $q1
695 ; CHECK-LABEL: name: v16s16_smax
696 ; CHECK: liveins: $x0, $q0, $q1
697 ; CHECK: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
698 ; CHECK: [[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)
699 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
700 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
701 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
702 ; CHECK: [[SMAX:%[0-9]+]]:_(<8 x s16>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
703 ; CHECK: [[SMAX1:%[0-9]+]]:_(<8 x s16>) = G_SMAX [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
704 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
705 ; CHECK: G_STORE [[SMAX]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
706 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
707 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
708 ; CHECK: G_STORE [[SMAX1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
709 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
710 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
711 %smax:_(<16 x s16>) = G_SMAX %vec, %vec1
713 G_STORE %smax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
718 tracksRegLiveness: true
723 ; CHECK-LABEL: name: v2s32_smax
724 ; CHECK: liveins: $x0
725 ; CHECK: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
726 ; CHECK: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
727 ; CHECK: %smax:_(<2 x s32>) = G_SMAX %vec, %vec1
728 ; CHECK: $x0 = COPY %smax(<2 x s32>)
729 ; CHECK: RET_ReallyLR implicit $x0
730 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
731 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
732 %smax:_(<2 x s32>) = G_SMAX %vec, %vec1
734 RET_ReallyLR implicit $x0
739 tracksRegLiveness: true
744 ; CHECK-LABEL: name: v4s32_smax
745 ; CHECK: liveins: $q0
746 ; CHECK: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
747 ; CHECK: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
748 ; CHECK: %smax:_(<4 x s32>) = G_SMAX %vec, %vec1
749 ; CHECK: $q0 = COPY %smax(<4 x s32>)
750 ; CHECK: RET_ReallyLR implicit $q0
751 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
752 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
753 %smax:_(<4 x s32>) = G_SMAX %vec, %vec1
755 RET_ReallyLR implicit $q0
760 tracksRegLiveness: true
763 liveins: $x0, $q0, $q1
765 ; CHECK-LABEL: name: v8s32_smax
766 ; CHECK: liveins: $x0, $q0, $q1
767 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
768 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
769 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
770 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
771 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
772 ; CHECK: [[SMAX:%[0-9]+]]:_(<4 x s32>) = G_SMAX [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
773 ; CHECK: [[SMAX1:%[0-9]+]]:_(<4 x s32>) = G_SMAX [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
774 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
775 ; CHECK: G_STORE [[SMAX]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
776 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
777 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
778 ; CHECK: G_STORE [[SMAX1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
779 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
780 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
781 %smax:_(<8 x s32>) = G_SMAX %vec, %vec1
783 G_STORE %smax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
788 tracksRegLiveness: true
793 ; CHECK-LABEL: name: v2s64_smax
794 ; CHECK: liveins: $q0
795 ; CHECK: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
796 ; CHECK: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
797 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), %vec(<2 x s64>), %vec1
798 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
799 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
800 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
801 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
802 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
803 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
804 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
805 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
806 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ASHR]]
807 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
808 ; CHECK: %smax:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
809 ; CHECK: $q0 = COPY %smax(<2 x s64>)
810 ; CHECK: RET_ReallyLR implicit $q0
811 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
812 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
813 %smax:_(<2 x s64>) = G_SMAX %vec, %vec1
815 RET_ReallyLR implicit $q0
820 tracksRegLiveness: true
823 liveins: $x0, $q0, $q1
825 ; CHECK-LABEL: name: v4s64_smax
826 ; CHECK: liveins: $x0, $q0, $q1
827 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
828 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), [[DEF]](<2 x s64>), [[DEF]]
829 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
830 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
831 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
832 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
833 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
834 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
835 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
836 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
837 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR]]
838 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
839 ; CHECK: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
840 ; CHECK: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(sgt), [[DEF]](<2 x s64>), [[DEF]]
841 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP1]](<2 x s64>)
842 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
843 ; CHECK: [[SHL1:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY1]], [[BUILD_VECTOR2]](<2 x s64>)
844 ; CHECK: [[ASHR1:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL1]], [[BUILD_VECTOR2]](<2 x s64>)
845 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
846 ; CHECK: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR1]], [[BUILD_VECTOR3]]
847 ; CHECK: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR1]]
848 ; CHECK: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
849 ; CHECK: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
850 ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x0
851 ; CHECK: G_STORE [[OR]](<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>), align 32)
852 ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
853 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C2]](s64)
854 ; CHECK: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
855 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
856 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
857 %smax:_(<4 x s64>) = G_SMAX %vec, %vec1
859 G_STORE %smax(<4 x s64>), %1(p0) :: (store (<4 x s64>))
864 tracksRegLiveness: true
869 ; CHECK-LABEL: name: v8s8_umax
870 ; CHECK: liveins: $x0
871 ; CHECK: %vec:_(<8 x s8>) = G_IMPLICIT_DEF
872 ; CHECK: %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
873 ; CHECK: %umax:_(<8 x s8>) = G_UMAX %vec, %vec1
874 ; CHECK: $x0 = COPY %umax(<8 x s8>)
875 ; CHECK: RET_ReallyLR implicit $x0
876 %vec:_(<8 x s8>) = G_IMPLICIT_DEF
877 %vec1:_(<8 x s8>) = G_IMPLICIT_DEF
878 %umax:_(<8 x s8>) = G_UMAX %vec, %vec1
880 RET_ReallyLR implicit $x0
885 tracksRegLiveness: true
890 ; CHECK-LABEL: name: v16s8_umax
891 ; CHECK: liveins: $q0
892 ; CHECK: %vec:_(<16 x s8>) = G_IMPLICIT_DEF
893 ; CHECK: %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
894 ; CHECK: %umax:_(<16 x s8>) = G_UMAX %vec, %vec1
895 ; CHECK: $q0 = COPY %umax(<16 x s8>)
896 ; CHECK: RET_ReallyLR implicit $q0
897 %vec:_(<16 x s8>) = G_IMPLICIT_DEF
898 %vec1:_(<16 x s8>) = G_IMPLICIT_DEF
899 %umax:_(<16 x s8>) = G_UMAX %vec, %vec1
901 RET_ReallyLR implicit $q0
906 tracksRegLiveness: true
909 liveins: $x0, $q0, $q1
911 ; CHECK-LABEL: name: v32s8_umax
912 ; CHECK: liveins: $x0, $q0, $q1
913 ; CHECK: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
914 ; CHECK: [[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)
915 ; CHECK: [[BUILD_VECTOR1:%[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)
916 ; CHECK: [[BUILD_VECTOR2:%[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)
917 ; CHECK: [[BUILD_VECTOR3:%[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)
918 ; CHECK: [[UMAX:%[0-9]+]]:_(<16 x s8>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
919 ; CHECK: [[UMAX1:%[0-9]+]]:_(<16 x s8>) = G_UMAX [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
920 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
921 ; CHECK: G_STORE [[UMAX]](<16 x s8>), [[COPY]](p0) :: (store (<16 x s8>), align 32)
922 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
923 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
924 ; CHECK: G_STORE [[UMAX1]](<16 x s8>), [[PTR_ADD]](p0) :: (store (<16 x s8>) into unknown-address + 16)
925 %vec:_(<32 x s8>) = G_IMPLICIT_DEF
926 %vec1:_(<32 x s8>) = G_IMPLICIT_DEF
927 %umax:_(<32 x s8>) = G_UMAX %vec, %vec1
929 G_STORE %umax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
934 tracksRegLiveness: true
939 ; CHECK-LABEL: name: v4s16_umax
940 ; CHECK: liveins: $x0
941 ; CHECK: %vec:_(<4 x s16>) = G_IMPLICIT_DEF
942 ; CHECK: %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
943 ; CHECK: %umax:_(<4 x s16>) = G_UMAX %vec, %vec1
944 ; CHECK: $x0 = COPY %umax(<4 x s16>)
945 ; CHECK: RET_ReallyLR implicit $x0
946 %vec:_(<4 x s16>) = G_IMPLICIT_DEF
947 %vec1:_(<4 x s16>) = G_IMPLICIT_DEF
948 %umax:_(<4 x s16>) = G_UMAX %vec, %vec1
950 RET_ReallyLR implicit $x0
955 tracksRegLiveness: true
960 ; CHECK-LABEL: name: v8s16_umax
961 ; CHECK: liveins: $q0
962 ; CHECK: %vec:_(<8 x s16>) = G_IMPLICIT_DEF
963 ; CHECK: %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
964 ; CHECK: %umax:_(<8 x s16>) = G_UMAX %vec, %vec1
965 ; CHECK: $q0 = COPY %umax(<8 x s16>)
966 ; CHECK: RET_ReallyLR implicit $q0
967 %vec:_(<8 x s16>) = G_IMPLICIT_DEF
968 %vec1:_(<8 x s16>) = G_IMPLICIT_DEF
969 %umax:_(<8 x s16>) = G_UMAX %vec, %vec1
971 RET_ReallyLR implicit $q0
976 tracksRegLiveness: true
979 liveins: $x0, $q0, $q1
981 ; CHECK-LABEL: name: v16s16_umax
982 ; CHECK: liveins: $x0, $q0, $q1
983 ; CHECK: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
984 ; CHECK: [[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)
985 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
986 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
987 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
988 ; CHECK: [[UMAX:%[0-9]+]]:_(<8 x s16>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
989 ; CHECK: [[UMAX1:%[0-9]+]]:_(<8 x s16>) = G_UMAX [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
990 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
991 ; CHECK: G_STORE [[UMAX]](<8 x s16>), [[COPY]](p0) :: (store (<8 x s16>), align 32)
992 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
993 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
994 ; CHECK: G_STORE [[UMAX1]](<8 x s16>), [[PTR_ADD]](p0) :: (store (<8 x s16>) into unknown-address + 16)
995 %vec:_(<16 x s16>) = G_IMPLICIT_DEF
996 %vec1:_(<16 x s16>) = G_IMPLICIT_DEF
997 %umax:_(<16 x s16>) = G_UMAX %vec, %vec1
999 G_STORE %umax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
1004 tracksRegLiveness: true
1009 ; CHECK-LABEL: name: v2s32_umax
1010 ; CHECK: liveins: $x0
1011 ; CHECK: %vec:_(<2 x s32>) = G_IMPLICIT_DEF
1012 ; CHECK: %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
1013 ; CHECK: %umax:_(<2 x s32>) = G_UMAX %vec, %vec1
1014 ; CHECK: $x0 = COPY %umax(<2 x s32>)
1015 ; CHECK: RET_ReallyLR implicit $x0
1016 %vec:_(<2 x s32>) = G_IMPLICIT_DEF
1017 %vec1:_(<2 x s32>) = G_IMPLICIT_DEF
1018 %umax:_(<2 x s32>) = G_UMAX %vec, %vec1
1020 RET_ReallyLR implicit $x0
1025 tracksRegLiveness: true
1030 ; CHECK-LABEL: name: v4s32_umax
1031 ; CHECK: liveins: $q0
1032 ; CHECK: %vec:_(<4 x s32>) = G_IMPLICIT_DEF
1033 ; CHECK: %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
1034 ; CHECK: %umax:_(<4 x s32>) = G_UMAX %vec, %vec1
1035 ; CHECK: $q0 = COPY %umax(<4 x s32>)
1036 ; CHECK: RET_ReallyLR implicit $q0
1037 %vec:_(<4 x s32>) = G_IMPLICIT_DEF
1038 %vec1:_(<4 x s32>) = G_IMPLICIT_DEF
1039 %umax:_(<4 x s32>) = G_UMAX %vec, %vec1
1041 RET_ReallyLR implicit $q0
1046 tracksRegLiveness: true
1049 liveins: $x0, $q0, $q1
1051 ; CHECK-LABEL: name: v8s32_umax
1052 ; CHECK: liveins: $x0, $q0, $q1
1053 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
1054 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
1055 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
1056 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
1057 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
1058 ; CHECK: [[UMAX:%[0-9]+]]:_(<4 x s32>) = G_UMAX [[BUILD_VECTOR]], [[BUILD_VECTOR2]]
1059 ; CHECK: [[UMAX1:%[0-9]+]]:_(<4 x s32>) = G_UMAX [[BUILD_VECTOR1]], [[BUILD_VECTOR3]]
1060 ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
1061 ; CHECK: G_STORE [[UMAX]](<4 x s32>), [[COPY]](p0) :: (store (<4 x s32>), align 32)
1062 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
1063 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
1064 ; CHECK: G_STORE [[UMAX1]](<4 x s32>), [[PTR_ADD]](p0) :: (store (<4 x s32>) into unknown-address + 16)
1065 %vec:_(<8 x s32>) = G_IMPLICIT_DEF
1066 %vec1:_(<8 x s32>) = G_IMPLICIT_DEF
1067 %umax:_(<8 x s32>) = G_UMAX %vec, %vec1
1069 G_STORE %umax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
1074 tracksRegLiveness: true
1079 ; CHECK-LABEL: name: v2s64_umax
1080 ; CHECK: liveins: $q0
1081 ; CHECK: %vec:_(<2 x s64>) = G_IMPLICIT_DEF
1082 ; CHECK: %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
1083 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), %vec(<2 x s64>), %vec1
1084 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
1085 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
1086 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
1087 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
1088 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
1089 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
1090 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
1091 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
1092 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND %vec, [[ASHR]]
1093 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND %vec1, [[XOR]]
1094 ; CHECK: %umax:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
1095 ; CHECK: $q0 = COPY %umax(<2 x s64>)
1096 ; CHECK: RET_ReallyLR implicit $q0
1097 %vec:_(<2 x s64>) = G_IMPLICIT_DEF
1098 %vec1:_(<2 x s64>) = G_IMPLICIT_DEF
1099 %umax:_(<2 x s64>) = G_UMAX %vec, %vec1
1101 RET_ReallyLR implicit $q0
1106 tracksRegLiveness: true
1109 liveins: $x0, $q0, $q1
1111 ; CHECK-LABEL: name: v4s64_umax
1112 ; CHECK: liveins: $x0, $q0, $q1
1113 ; CHECK: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
1114 ; CHECK: [[ICMP:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), [[DEF]](<2 x s64>), [[DEF]]
1115 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP]](<2 x s64>)
1116 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 63
1117 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
1118 ; CHECK: [[SHL:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY]], [[BUILD_VECTOR]](<2 x s64>)
1119 ; CHECK: [[ASHR:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL]], [[BUILD_VECTOR]](<2 x s64>)
1120 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
1121 ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
1122 ; CHECK: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR]], [[BUILD_VECTOR1]]
1123 ; CHECK: [[AND:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR]]
1124 ; CHECK: [[AND1:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR]]
1125 ; CHECK: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND]], [[AND1]]
1126 ; CHECK: [[ICMP1:%[0-9]+]]:_(<2 x s64>) = G_ICMP intpred(ugt), [[DEF]](<2 x s64>), [[DEF]]
1127 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY [[ICMP1]](<2 x s64>)
1128 ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C]](s64), [[C]](s64)
1129 ; CHECK: [[SHL1:%[0-9]+]]:_(<2 x s64>) = G_SHL [[COPY1]], [[BUILD_VECTOR2]](<2 x s64>)
1130 ; CHECK: [[ASHR1:%[0-9]+]]:_(<2 x s64>) = G_ASHR [[SHL1]], [[BUILD_VECTOR2]](<2 x s64>)
1131 ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[C1]](s64), [[C1]](s64)
1132 ; CHECK: [[XOR1:%[0-9]+]]:_(<2 x s64>) = G_XOR [[ASHR1]], [[BUILD_VECTOR3]]
1133 ; CHECK: [[AND2:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[ASHR1]]
1134 ; CHECK: [[AND3:%[0-9]+]]:_(<2 x s64>) = G_AND [[DEF]], [[XOR1]]
1135 ; CHECK: [[OR1:%[0-9]+]]:_(<2 x s64>) = G_OR [[AND2]], [[AND3]]
1136 ; CHECK: [[COPY2:%[0-9]+]]:_(p0) = COPY $x0
1137 ; CHECK: G_STORE [[OR]](<2 x s64>), [[COPY2]](p0) :: (store (<2 x s64>), align 32)
1138 ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
1139 ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY2]], [[C2]](s64)
1140 ; CHECK: G_STORE [[OR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
1141 %vec:_(<4 x s64>) = G_IMPLICIT_DEF
1142 %vec1:_(<4 x s64>) = G_IMPLICIT_DEF
1143 %umax:_(<4 x s64>) = G_UMAX %vec, %vec1
1145 G_STORE %umax(<4 x s64>), %1(p0) :: (store (<4 x s64>))