[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-min-max.mir
blobcab8a91e447e4e753545e1262326dc4e71ba0be0
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]+]]:_(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
70     %1:_(p0) = COPY $x0
71     G_STORE %smin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
73 ...
74 ---
75 name:            v4s16_smin
76 tracksRegLiveness: true
77 body: |
78   bb.0:
79     liveins: $x0
81     ; CHECK-LABEL: name: v4s16_smin
82     ; CHECK: liveins: $x0
83     ; CHECK-NEXT: {{  $}}
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
92     $x0 = COPY %smin
93     RET_ReallyLR implicit $x0
95 ...
96 ---
97 name:            v8s16_smin
98 tracksRegLiveness: true
99 body: |
100   bb.0:
101     liveins: $q0
103     ; CHECK-LABEL: name: v8s16_smin
104     ; CHECK: liveins: $q0
105     ; CHECK-NEXT: {{  $}}
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
114     $q0 = COPY %smin
115     RET_ReallyLR implicit $q0
119 name:            v16s16_smin
120 tracksRegLiveness: true
121 body: |
122   bb.0:
123     liveins: $x0, $q0, $q1
125     ; CHECK-LABEL: name: v16s16_smin
126     ; CHECK: liveins: $x0, $q0, $q1
127     ; CHECK-NEXT: {{  $}}
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
140     %1:_(p0) = COPY $x0
141     G_STORE %smin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
145 name:            v2s32_smin
146 tracksRegLiveness: true
147 body: |
148   bb.0:
149     liveins: $x0
151     ; CHECK-LABEL: name: v2s32_smin
152     ; CHECK: liveins: $x0
153     ; CHECK-NEXT: {{  $}}
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
162     $x0 = COPY %smin
163     RET_ReallyLR implicit $x0
167 name:            v4s32_smin
168 tracksRegLiveness: true
169 body: |
170   bb.0:
171     liveins: $q0
173     ; CHECK-LABEL: name: v4s32_smin
174     ; CHECK: liveins: $q0
175     ; CHECK-NEXT: {{  $}}
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
184     $q0 = COPY %smin
185     RET_ReallyLR implicit $q0
189 name:            v8s32_smin
190 tracksRegLiveness: true
191 body: |
192   bb.0:
193     liveins: $x0, $q0, $q1
195     ; CHECK-LABEL: name: v8s32_smin
196     ; CHECK: liveins: $x0, $q0, $q1
197     ; CHECK-NEXT: {{  $}}
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
210     %1:_(p0) = COPY $x0
211     G_STORE %smin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
215 name:            v2s64_smin
216 tracksRegLiveness: true
217 body: |
218   bb.0:
219     liveins: $q0
221     ; CHECK-LABEL: name: v2s64_smin
222     ; CHECK: liveins: $q0
223     ; CHECK-NEXT: {{  $}}
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
239     $q0 = COPY %smin
240     RET_ReallyLR implicit $q0
244 name:            v4s64_smin
245 tracksRegLiveness: true
246 body: |
247   bb.0:
248     liveins: $x0, $q0, $q1
250     ; CHECK-LABEL: name: v4s64_smin
251     ; CHECK: liveins: $x0, $q0, $q1
252     ; CHECK-NEXT: {{  $}}
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
276     %1:_(p0) = COPY $x0
277     G_STORE %smin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
281 name:            v8s8_umin
282 tracksRegLiveness: true
283 body: |
284   bb.0:
285     liveins: $x0
287     ; CHECK-LABEL: name: v8s8_umin
288     ; CHECK: liveins: $x0
289     ; CHECK-NEXT: {{  $}}
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
298     $x0 = COPY %umin
299     RET_ReallyLR implicit $x0
303 name:            v16s8_umin
304 tracksRegLiveness: true
305 body: |
306   bb.0:
307     liveins: $q0
309     ; CHECK-LABEL: name: v16s8_umin
310     ; CHECK: liveins: $q0
311     ; CHECK-NEXT: {{  $}}
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
320     $q0 = COPY %umin
321     RET_ReallyLR implicit $q0
325 name:            v32s8_umin
326 tracksRegLiveness: true
327 body: |
328   bb.0:
329     liveins: $x0, $q0, $q1
331     ; CHECK-LABEL: name: v32s8_umin
332     ; CHECK: liveins: $x0, $q0, $q1
333     ; CHECK-NEXT: {{  $}}
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
346     %1:_(p0) = COPY $x0
347     G_STORE %umin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
351 name:            v4s16_umin
352 tracksRegLiveness: true
353 body: |
354   bb.0:
355     liveins: $x0
357     ; CHECK-LABEL: name: v4s16_umin
358     ; CHECK: liveins: $x0
359     ; CHECK-NEXT: {{  $}}
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
368     $x0 = COPY %umin
369     RET_ReallyLR implicit $x0
373 name:            v8s16_umin
374 tracksRegLiveness: true
375 body: |
376   bb.0:
377     liveins: $q0
379     ; CHECK-LABEL: name: v8s16_umin
380     ; CHECK: liveins: $q0
381     ; CHECK-NEXT: {{  $}}
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
390     $q0 = COPY %umin
391     RET_ReallyLR implicit $q0
395 name:            v16s16_umin
396 tracksRegLiveness: true
397 body: |
398   bb.0:
399     liveins: $x0, $q0, $q1
401     ; CHECK-LABEL: name: v16s16_umin
402     ; CHECK: liveins: $x0, $q0, $q1
403     ; CHECK-NEXT: {{  $}}
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
416     %1:_(p0) = COPY $x0
417     G_STORE %umin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
421 name:            v2s32_umin
422 tracksRegLiveness: true
423 body: |
424   bb.0:
425     liveins: $x0
427     ; CHECK-LABEL: name: v2s32_umin
428     ; CHECK: liveins: $x0
429     ; CHECK-NEXT: {{  $}}
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
438     $x0 = COPY %umin
439     RET_ReallyLR implicit $x0
443 name:            v4s32_umin
444 tracksRegLiveness: true
445 body: |
446   bb.0:
447     liveins: $q0
449     ; CHECK-LABEL: name: v4s32_umin
450     ; CHECK: liveins: $q0
451     ; CHECK-NEXT: {{  $}}
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
460     $q0 = COPY %umin
461     RET_ReallyLR implicit $q0
465 name:            v8s32_umin
466 tracksRegLiveness: true
467 body: |
468   bb.0:
469     liveins: $x0, $q0, $q1
471     ; CHECK-LABEL: name: v8s32_umin
472     ; CHECK: liveins: $x0, $q0, $q1
473     ; CHECK-NEXT: {{  $}}
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
486     %1:_(p0) = COPY $x0
487     G_STORE %umin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
491 name:            v2s64_umin
492 tracksRegLiveness: true
493 body: |
494   bb.0:
495     liveins: $q0
497     ; CHECK-LABEL: name: v2s64_umin
498     ; CHECK: liveins: $q0
499     ; CHECK-NEXT: {{  $}}
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
515     $q0 = COPY %umin
516     RET_ReallyLR implicit $q0
520 name:            v4s64_umin
521 tracksRegLiveness: true
522 body: |
523   bb.0:
524     liveins: $x0, $q0, $q1
526     ; CHECK-LABEL: name: v4s64_umin
527     ; CHECK: liveins: $x0, $q0, $q1
528     ; CHECK-NEXT: {{  $}}
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
552     %1:_(p0) = COPY $x0
553     G_STORE %umin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
557 name:            v8s8_smax
558 tracksRegLiveness: true
559 body: |
560   bb.0:
561     liveins: $x0
563     ; CHECK-LABEL: name: v8s8_smax
564     ; CHECK: liveins: $x0
565     ; CHECK-NEXT: {{  $}}
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
574     $x0 = COPY %smax
575     RET_ReallyLR implicit $x0
579 name:            v16s8_smax
580 tracksRegLiveness: true
581 body: |
582   bb.0:
583     liveins: $q0
585     ; CHECK-LABEL: name: v16s8_smax
586     ; CHECK: liveins: $q0
587     ; CHECK-NEXT: {{  $}}
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
596     $q0 = COPY %smax
597     RET_ReallyLR implicit $q0
601 name:            v4s16_smax
602 tracksRegLiveness: true
603 body: |
604   bb.0:
605     liveins: $x0
607     ; CHECK-LABEL: name: v4s16_smax
608     ; CHECK: liveins: $x0
609     ; CHECK-NEXT: {{  $}}
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
618     $x0 = COPY %smax
619     RET_ReallyLR implicit $x0
623 name:            v32s8_smax
624 tracksRegLiveness: true
625 body: |
626   bb.0:
627     liveins: $x0, $q0, $q1
629     ; CHECK-LABEL: name: v32s8_smax
630     ; CHECK: liveins: $x0, $q0, $q1
631     ; CHECK-NEXT: {{  $}}
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
644     %1:_(p0) = COPY $x0
645     G_STORE %smax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
649 name:            v8s16_smax
650 tracksRegLiveness: true
651 body: |
652   bb.0:
653     liveins: $q0
655     ; CHECK-LABEL: name: v8s16_smax
656     ; CHECK: liveins: $q0
657     ; CHECK-NEXT: {{  $}}
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
666     $q0 = COPY %smax
667     RET_ReallyLR implicit $q0
671 name:            v16s16_smax
672 tracksRegLiveness: true
673 body: |
674   bb.0:
675     liveins: $x0, $q0, $q1
677     ; CHECK-LABEL: name: v16s16_smax
678     ; CHECK: liveins: $x0, $q0, $q1
679     ; CHECK-NEXT: {{  $}}
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
692     %1:_(p0) = COPY $x0
693     G_STORE %smax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
697 name:            v2s32_smax
698 tracksRegLiveness: true
699 body: |
700   bb.0:
701     liveins: $x0
703     ; CHECK-LABEL: name: v2s32_smax
704     ; CHECK: liveins: $x0
705     ; CHECK-NEXT: {{  $}}
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
714     $x0 = COPY %smax
715     RET_ReallyLR implicit $x0
719 name:            v4s32_smax
720 tracksRegLiveness: true
721 body: |
722   bb.0:
723     liveins: $q0
725     ; CHECK-LABEL: name: v4s32_smax
726     ; CHECK: liveins: $q0
727     ; CHECK-NEXT: {{  $}}
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
736     $q0 = COPY %smax
737     RET_ReallyLR implicit $q0
741 name:            v8s32_smax
742 tracksRegLiveness: true
743 body: |
744   bb.0:
745     liveins: $x0, $q0, $q1
747     ; CHECK-LABEL: name: v8s32_smax
748     ; CHECK: liveins: $x0, $q0, $q1
749     ; CHECK-NEXT: {{  $}}
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
762     %1:_(p0) = COPY $x0
763     G_STORE %smax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
767 name:            v2s64_smax
768 tracksRegLiveness: true
769 body: |
770   bb.0:
771     liveins: $q0
773     ; CHECK-LABEL: name: v2s64_smax
774     ; CHECK: liveins: $q0
775     ; CHECK-NEXT: {{  $}}
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
791     $q0 = COPY %smax
792     RET_ReallyLR implicit $q0
796 name:            v4s64_smax
797 tracksRegLiveness: true
798 body: |
799   bb.0:
800     liveins: $x0, $q0, $q1
802     ; CHECK-LABEL: name: v4s64_smax
803     ; CHECK: liveins: $x0, $q0, $q1
804     ; CHECK-NEXT: {{  $}}
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
828     %1:_(p0) = COPY $x0
829     G_STORE %smax(<4 x s64>), %1(p0) :: (store (<4 x s64>))
833 name:            v8s8_umax
834 tracksRegLiveness: true
835 body: |
836   bb.0:
837     liveins: $x0
839     ; CHECK-LABEL: name: v8s8_umax
840     ; CHECK: liveins: $x0
841     ; CHECK-NEXT: {{  $}}
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
850     $x0 = COPY %umax
851     RET_ReallyLR implicit $x0
855 name:            v16s8_umax
856 tracksRegLiveness: true
857 body: |
858   bb.0:
859     liveins: $q0
861     ; CHECK-LABEL: name: v16s8_umax
862     ; CHECK: liveins: $q0
863     ; CHECK-NEXT: {{  $}}
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
872     $q0 = COPY %umax
873     RET_ReallyLR implicit $q0
877 name:            v32s8_umax
878 tracksRegLiveness: true
879 body: |
880   bb.0:
881     liveins: $x0, $q0, $q1
883     ; CHECK-LABEL: name: v32s8_umax
884     ; CHECK: liveins: $x0, $q0, $q1
885     ; CHECK-NEXT: {{  $}}
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
898     %1:_(p0) = COPY $x0
899     G_STORE %umax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
903 name:            v4s16_umax
904 tracksRegLiveness: true
905 body: |
906   bb.0:
907     liveins: $x0
909     ; CHECK-LABEL: name: v4s16_umax
910     ; CHECK: liveins: $x0
911     ; CHECK-NEXT: {{  $}}
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
920     $x0 = COPY %umax
921     RET_ReallyLR implicit $x0
925 name:            v8s16_umax
926 tracksRegLiveness: true
927 body: |
928   bb.0:
929     liveins: $q0
931     ; CHECK-LABEL: name: v8s16_umax
932     ; CHECK: liveins: $q0
933     ; CHECK-NEXT: {{  $}}
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
942     $q0 = COPY %umax
943     RET_ReallyLR implicit $q0
947 name:            v16s16_umax
948 tracksRegLiveness: true
949 body: |
950   bb.0:
951     liveins: $x0, $q0, $q1
953     ; CHECK-LABEL: name: v16s16_umax
954     ; CHECK: liveins: $x0, $q0, $q1
955     ; CHECK-NEXT: {{  $}}
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
968     %1:_(p0) = COPY $x0
969     G_STORE %umax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
973 name:            v2s32_umax
974 tracksRegLiveness: true
975 body: |
976   bb.0:
977     liveins: $x0
979     ; CHECK-LABEL: name: v2s32_umax
980     ; CHECK: liveins: $x0
981     ; CHECK-NEXT: {{  $}}
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
990     $x0 = COPY %umax
991     RET_ReallyLR implicit $x0
995 name:            v4s32_umax
996 tracksRegLiveness: true
997 body: |
998   bb.0:
999     liveins: $q0
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
1012     $q0 = COPY %umax
1013     RET_ReallyLR implicit $q0
1017 name:            v8s32_umax
1018 tracksRegLiveness: true
1019 body: |
1020   bb.0:
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
1038     %1:_(p0) = COPY $x0
1039     G_STORE %umax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
1043 name:            v2s64_umax
1044 tracksRegLiveness: true
1045 body: |
1046   bb.0:
1047     liveins: $q0
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
1067     $q0 = COPY %umax
1068     RET_ReallyLR implicit $q0
1072 name:            v4s64_umax
1073 tracksRegLiveness: true
1074 body: |
1075   bb.0:
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
1104     %1:_(p0) = COPY $x0
1105     G_STORE %umax(<4 x s64>), %1(p0) :: (store (<4 x s64>))