Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-min-max.mir
blob403c12d1f42352a936dc1c494e338be5e94e76de
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
4 ---
5 name:            v8s8_smin
6 tracksRegLiveness: true
7 body: |
8   bb.0:
9     liveins: $x0
11     ; CHECK-LABEL: name: v8s8_smin
12     ; CHECK: liveins: $x0
13     ; CHECK-NEXT: {{  $}}
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
22     $x0 = COPY %smin
23     RET_ReallyLR implicit $x0
25 ...
26 ---
27 name:            v16s8_smin
28 tracksRegLiveness: true
29 body: |
30   bb.0:
31     liveins: $q0
33     ; CHECK-LABEL: name: v16s8_smin
34     ; CHECK: liveins: $q0
35     ; CHECK-NEXT: {{  $}}
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
44     $q0 = COPY %smin
45     RET_ReallyLR implicit $q0
47 ...
48 ---
49 name:            v32s8_smin
50 tracksRegLiveness: true
51 body: |
52   bb.0:
53     liveins: $x0, $q0, $q1
55     ; CHECK-LABEL: name: v32s8_smin
56     ; CHECK: liveins: $x0, $q0, $q1
57     ; CHECK-NEXT: {{  $}}
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
69     %1:_(p0) = COPY $x0
70     G_STORE %smin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
72 ...
73 ---
74 name:            v4s16_smin
75 tracksRegLiveness: true
76 body: |
77   bb.0:
78     liveins: $x0
80     ; CHECK-LABEL: name: v4s16_smin
81     ; CHECK: liveins: $x0
82     ; CHECK-NEXT: {{  $}}
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
91     $x0 = COPY %smin
92     RET_ReallyLR implicit $x0
94 ...
95 ---
96 name:            v8s16_smin
97 tracksRegLiveness: true
98 body: |
99   bb.0:
100     liveins: $q0
102     ; CHECK-LABEL: name: v8s16_smin
103     ; CHECK: liveins: $q0
104     ; CHECK-NEXT: {{  $}}
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
113     $q0 = COPY %smin
114     RET_ReallyLR implicit $q0
118 name:            v16s16_smin
119 tracksRegLiveness: true
120 body: |
121   bb.0:
122     liveins: $x0, $q0, $q1
124     ; CHECK-LABEL: name: v16s16_smin
125     ; CHECK: liveins: $x0, $q0, $q1
126     ; CHECK-NEXT: {{  $}}
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
138     %1:_(p0) = COPY $x0
139     G_STORE %smin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
143 name:            v2s32_smin
144 tracksRegLiveness: true
145 body: |
146   bb.0:
147     liveins: $x0
149     ; CHECK-LABEL: name: v2s32_smin
150     ; CHECK: liveins: $x0
151     ; CHECK-NEXT: {{  $}}
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
160     $x0 = COPY %smin
161     RET_ReallyLR implicit $x0
165 name:            v4s32_smin
166 tracksRegLiveness: true
167 body: |
168   bb.0:
169     liveins: $q0
171     ; CHECK-LABEL: name: v4s32_smin
172     ; CHECK: liveins: $q0
173     ; CHECK-NEXT: {{  $}}
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
182     $q0 = COPY %smin
183     RET_ReallyLR implicit $q0
187 name:            v8s32_smin
188 tracksRegLiveness: true
189 body: |
190   bb.0:
191     liveins: $x0, $q0, $q1
193     ; CHECK-LABEL: name: v8s32_smin
194     ; CHECK: liveins: $x0, $q0, $q1
195     ; CHECK-NEXT: {{  $}}
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
207     %1:_(p0) = COPY $x0
208     G_STORE %smin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
212 name:            v2s64_smin
213 tracksRegLiveness: true
214 body: |
215   bb.0:
216     liveins: $q0
218     ; CHECK-LABEL: name: v2s64_smin
219     ; CHECK: liveins: $q0
220     ; CHECK-NEXT: {{  $}}
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
235     $q0 = COPY %smin
236     RET_ReallyLR implicit $q0
240 name:            v4s64_smin
241 tracksRegLiveness: true
242 body: |
243   bb.0:
244     liveins: $x0, $q0, $q1
246     ; CHECK-LABEL: name: v4s64_smin
247     ; CHECK: liveins: $x0, $q0, $q1
248     ; CHECK-NEXT: {{  $}}
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
270     %1:_(p0) = COPY $x0
271     G_STORE %smin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
275 name:            v8s8_umin
276 tracksRegLiveness: true
277 body: |
278   bb.0:
279     liveins: $x0
281     ; CHECK-LABEL: name: v8s8_umin
282     ; CHECK: liveins: $x0
283     ; CHECK-NEXT: {{  $}}
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
292     $x0 = COPY %umin
293     RET_ReallyLR implicit $x0
297 name:            v16s8_umin
298 tracksRegLiveness: true
299 body: |
300   bb.0:
301     liveins: $q0
303     ; CHECK-LABEL: name: v16s8_umin
304     ; CHECK: liveins: $q0
305     ; CHECK-NEXT: {{  $}}
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
314     $q0 = COPY %umin
315     RET_ReallyLR implicit $q0
319 name:            v32s8_umin
320 tracksRegLiveness: true
321 body: |
322   bb.0:
323     liveins: $x0, $q0, $q1
325     ; CHECK-LABEL: name: v32s8_umin
326     ; CHECK: liveins: $x0, $q0, $q1
327     ; CHECK-NEXT: {{  $}}
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
339     %1:_(p0) = COPY $x0
340     G_STORE %umin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
344 name:            v4s16_umin
345 tracksRegLiveness: true
346 body: |
347   bb.0:
348     liveins: $x0
350     ; CHECK-LABEL: name: v4s16_umin
351     ; CHECK: liveins: $x0
352     ; CHECK-NEXT: {{  $}}
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
361     $x0 = COPY %umin
362     RET_ReallyLR implicit $x0
366 name:            v8s16_umin
367 tracksRegLiveness: true
368 body: |
369   bb.0:
370     liveins: $q0
372     ; CHECK-LABEL: name: v8s16_umin
373     ; CHECK: liveins: $q0
374     ; CHECK-NEXT: {{  $}}
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
383     $q0 = COPY %umin
384     RET_ReallyLR implicit $q0
388 name:            v16s16_umin
389 tracksRegLiveness: true
390 body: |
391   bb.0:
392     liveins: $x0, $q0, $q1
394     ; CHECK-LABEL: name: v16s16_umin
395     ; CHECK: liveins: $x0, $q0, $q1
396     ; CHECK-NEXT: {{  $}}
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
408     %1:_(p0) = COPY $x0
409     G_STORE %umin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
413 name:            v2s32_umin
414 tracksRegLiveness: true
415 body: |
416   bb.0:
417     liveins: $x0
419     ; CHECK-LABEL: name: v2s32_umin
420     ; CHECK: liveins: $x0
421     ; CHECK-NEXT: {{  $}}
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
430     $x0 = COPY %umin
431     RET_ReallyLR implicit $x0
435 name:            v4s32_umin
436 tracksRegLiveness: true
437 body: |
438   bb.0:
439     liveins: $q0
441     ; CHECK-LABEL: name: v4s32_umin
442     ; CHECK: liveins: $q0
443     ; CHECK-NEXT: {{  $}}
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
452     $q0 = COPY %umin
453     RET_ReallyLR implicit $q0
457 name:            v8s32_umin
458 tracksRegLiveness: true
459 body: |
460   bb.0:
461     liveins: $x0, $q0, $q1
463     ; CHECK-LABEL: name: v8s32_umin
464     ; CHECK: liveins: $x0, $q0, $q1
465     ; CHECK-NEXT: {{  $}}
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
477     %1:_(p0) = COPY $x0
478     G_STORE %umin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
482 name:            v2s64_umin
483 tracksRegLiveness: true
484 body: |
485   bb.0:
486     liveins: $q0
488     ; CHECK-LABEL: name: v2s64_umin
489     ; CHECK: liveins: $q0
490     ; CHECK-NEXT: {{  $}}
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
505     $q0 = COPY %umin
506     RET_ReallyLR implicit $q0
510 name:            v4s64_umin
511 tracksRegLiveness: true
512 body: |
513   bb.0:
514     liveins: $x0, $q0, $q1
516     ; CHECK-LABEL: name: v4s64_umin
517     ; CHECK: liveins: $x0, $q0, $q1
518     ; CHECK-NEXT: {{  $}}
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
540     %1:_(p0) = COPY $x0
541     G_STORE %umin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
545 name:            v8s8_smax
546 tracksRegLiveness: true
547 body: |
548   bb.0:
549     liveins: $x0
551     ; CHECK-LABEL: name: v8s8_smax
552     ; CHECK: liveins: $x0
553     ; CHECK-NEXT: {{  $}}
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
562     $x0 = COPY %smax
563     RET_ReallyLR implicit $x0
567 name:            v16s8_smax
568 tracksRegLiveness: true
569 body: |
570   bb.0:
571     liveins: $q0
573     ; CHECK-LABEL: name: v16s8_smax
574     ; CHECK: liveins: $q0
575     ; CHECK-NEXT: {{  $}}
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
584     $q0 = COPY %smax
585     RET_ReallyLR implicit $q0
589 name:            v4s16_smax
590 tracksRegLiveness: true
591 body: |
592   bb.0:
593     liveins: $x0
595     ; CHECK-LABEL: name: v4s16_smax
596     ; CHECK: liveins: $x0
597     ; CHECK-NEXT: {{  $}}
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
606     $x0 = COPY %smax
607     RET_ReallyLR implicit $x0
611 name:            v32s8_smax
612 tracksRegLiveness: true
613 body: |
614   bb.0:
615     liveins: $x0, $q0, $q1
617     ; CHECK-LABEL: name: v32s8_smax
618     ; CHECK: liveins: $x0, $q0, $q1
619     ; CHECK-NEXT: {{  $}}
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
631     %1:_(p0) = COPY $x0
632     G_STORE %smax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
636 name:            v8s16_smax
637 tracksRegLiveness: true
638 body: |
639   bb.0:
640     liveins: $q0
642     ; CHECK-LABEL: name: v8s16_smax
643     ; CHECK: liveins: $q0
644     ; CHECK-NEXT: {{  $}}
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
653     $q0 = COPY %smax
654     RET_ReallyLR implicit $q0
658 name:            v16s16_smax
659 tracksRegLiveness: true
660 body: |
661   bb.0:
662     liveins: $x0, $q0, $q1
664     ; CHECK-LABEL: name: v16s16_smax
665     ; CHECK: liveins: $x0, $q0, $q1
666     ; CHECK-NEXT: {{  $}}
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
678     %1:_(p0) = COPY $x0
679     G_STORE %smax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
683 name:            v2s32_smax
684 tracksRegLiveness: true
685 body: |
686   bb.0:
687     liveins: $x0
689     ; CHECK-LABEL: name: v2s32_smax
690     ; CHECK: liveins: $x0
691     ; CHECK-NEXT: {{  $}}
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
700     $x0 = COPY %smax
701     RET_ReallyLR implicit $x0
705 name:            v4s32_smax
706 tracksRegLiveness: true
707 body: |
708   bb.0:
709     liveins: $q0
711     ; CHECK-LABEL: name: v4s32_smax
712     ; CHECK: liveins: $q0
713     ; CHECK-NEXT: {{  $}}
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
722     $q0 = COPY %smax
723     RET_ReallyLR implicit $q0
727 name:            v8s32_smax
728 tracksRegLiveness: true
729 body: |
730   bb.0:
731     liveins: $x0, $q0, $q1
733     ; CHECK-LABEL: name: v8s32_smax
734     ; CHECK: liveins: $x0, $q0, $q1
735     ; CHECK-NEXT: {{  $}}
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
747     %1:_(p0) = COPY $x0
748     G_STORE %smax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
752 name:            v2s64_smax
753 tracksRegLiveness: true
754 body: |
755   bb.0:
756     liveins: $q0
758     ; CHECK-LABEL: name: v2s64_smax
759     ; CHECK: liveins: $q0
760     ; CHECK-NEXT: {{  $}}
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
775     $q0 = COPY %smax
776     RET_ReallyLR implicit $q0
780 name:            v4s64_smax
781 tracksRegLiveness: true
782 body: |
783   bb.0:
784     liveins: $x0, $q0, $q1
786     ; CHECK-LABEL: name: v4s64_smax
787     ; CHECK: liveins: $x0, $q0, $q1
788     ; CHECK-NEXT: {{  $}}
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
810     %1:_(p0) = COPY $x0
811     G_STORE %smax(<4 x s64>), %1(p0) :: (store (<4 x s64>))
815 name:            v8s8_umax
816 tracksRegLiveness: true
817 body: |
818   bb.0:
819     liveins: $x0
821     ; CHECK-LABEL: name: v8s8_umax
822     ; CHECK: liveins: $x0
823     ; CHECK-NEXT: {{  $}}
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
832     $x0 = COPY %umax
833     RET_ReallyLR implicit $x0
837 name:            v16s8_umax
838 tracksRegLiveness: true
839 body: |
840   bb.0:
841     liveins: $q0
843     ; CHECK-LABEL: name: v16s8_umax
844     ; CHECK: liveins: $q0
845     ; CHECK-NEXT: {{  $}}
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
854     $q0 = COPY %umax
855     RET_ReallyLR implicit $q0
859 name:            v32s8_umax
860 tracksRegLiveness: true
861 body: |
862   bb.0:
863     liveins: $x0, $q0, $q1
865     ; CHECK-LABEL: name: v32s8_umax
866     ; CHECK: liveins: $x0, $q0, $q1
867     ; CHECK-NEXT: {{  $}}
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
879     %1:_(p0) = COPY $x0
880     G_STORE %umax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
884 name:            v4s16_umax
885 tracksRegLiveness: true
886 body: |
887   bb.0:
888     liveins: $x0
890     ; CHECK-LABEL: name: v4s16_umax
891     ; CHECK: liveins: $x0
892     ; CHECK-NEXT: {{  $}}
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
901     $x0 = COPY %umax
902     RET_ReallyLR implicit $x0
906 name:            v8s16_umax
907 tracksRegLiveness: true
908 body: |
909   bb.0:
910     liveins: $q0
912     ; CHECK-LABEL: name: v8s16_umax
913     ; CHECK: liveins: $q0
914     ; CHECK-NEXT: {{  $}}
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
923     $q0 = COPY %umax
924     RET_ReallyLR implicit $q0
928 name:            v16s16_umax
929 tracksRegLiveness: true
930 body: |
931   bb.0:
932     liveins: $x0, $q0, $q1
934     ; CHECK-LABEL: name: v16s16_umax
935     ; CHECK: liveins: $x0, $q0, $q1
936     ; CHECK-NEXT: {{  $}}
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
948     %1:_(p0) = COPY $x0
949     G_STORE %umax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
953 name:            v2s32_umax
954 tracksRegLiveness: true
955 body: |
956   bb.0:
957     liveins: $x0
959     ; CHECK-LABEL: name: v2s32_umax
960     ; CHECK: liveins: $x0
961     ; CHECK-NEXT: {{  $}}
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
970     $x0 = COPY %umax
971     RET_ReallyLR implicit $x0
975 name:            v4s32_umax
976 tracksRegLiveness: true
977 body: |
978   bb.0:
979     liveins: $q0
981     ; CHECK-LABEL: name: v4s32_umax
982     ; CHECK: liveins: $q0
983     ; CHECK-NEXT: {{  $}}
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
992     $q0 = COPY %umax
993     RET_ReallyLR implicit $q0
997 name:            v8s32_umax
998 tracksRegLiveness: true
999 body: |
1000   bb.0:
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
1017     %1:_(p0) = COPY $x0
1018     G_STORE %umax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
1022 name:            v2s64_umax
1023 tracksRegLiveness: true
1024 body: |
1025   bb.0:
1026     liveins: $q0
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
1045     $q0 = COPY %umax
1046     RET_ReallyLR implicit $q0
1050 name:            v4s64_umax
1051 tracksRegLiveness: true
1052 body: |
1053   bb.0:
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
1080     %1:_(p0) = COPY $x0
1081     G_STORE %umax(<4 x s64>), %1(p0) :: (store (<4 x s64>))