[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-min-max.mir
blobe237d0d7786120c26d5e87fa01b47f30a6dd49e1
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: %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
21     $x0 = COPY %smin
22     RET_ReallyLR implicit $x0
24 ...
25 ---
26 name:            v16s8_smin
27 tracksRegLiveness: true
28 body: |
29   bb.0:
30     liveins: $q0
32     ; CHECK-LABEL: name: v16s8_smin
33     ; CHECK: liveins: $q0
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
42     $q0 = COPY %smin
43     RET_ReallyLR implicit $q0
45 ...
46 ---
47 name:            v32s8_smin
48 tracksRegLiveness: true
49 body: |
50   bb.0:
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
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: %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
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: %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
112     $q0 = COPY %smin
113     RET_ReallyLR implicit $q0
117 name:            v16s16_smin
118 tracksRegLiveness: true
119 body: |
120   bb.0:
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
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: %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
161     $x0 = COPY %smin
162     RET_ReallyLR implicit $x0
166 name:            v4s32_smin
167 tracksRegLiveness: true
168 body: |
169   bb.0:
170     liveins: $q0
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
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: [[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
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: %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
242     $q0 = COPY %smin
243     RET_ReallyLR implicit $q0
247 name:            v4s64_smin
248 tracksRegLiveness: true
249 body: |
250   bb.0:
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
286     %1:_(p0) = COPY $x0
287     G_STORE %smin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
291 name:            v8s8_umin
292 tracksRegLiveness: true
293 body: |
294   bb.0:
295     liveins: $x0
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
307     $x0 = COPY %umin
308     RET_ReallyLR implicit $x0
312 name:            v16s8_umin
313 tracksRegLiveness: true
314 body: |
315   bb.0:
316     liveins: $q0
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
328     $q0 = COPY %umin
329     RET_ReallyLR implicit $q0
333 name:            v32s8_umin
334 tracksRegLiveness: true
335 body: |
336   bb.0:
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
356     %1:_(p0) = COPY $x0
357     G_STORE %umin(<32 x s8>), %1(p0) :: (store (<32 x s8>))
361 name:            v4s16_umin
362 tracksRegLiveness: true
363 body: |
364   bb.0:
365     liveins: $x0
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
377     $x0 = COPY %umin
378     RET_ReallyLR implicit $x0
382 name:            v8s16_umin
383 tracksRegLiveness: true
384 body: |
385   bb.0:
386     liveins: $q0
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
398     $q0 = COPY %umin
399     RET_ReallyLR implicit $q0
403 name:            v16s16_umin
404 tracksRegLiveness: true
405 body: |
406   bb.0:
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
426     %1:_(p0) = COPY $x0
427     G_STORE %umin(<16 x s16>), %1(p0) :: (store (<16 x s16>))
431 name:            v2s32_umin
432 tracksRegLiveness: true
433 body: |
434   bb.0:
435     liveins: $x0
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
447     $x0 = COPY %umin
448     RET_ReallyLR implicit $x0
452 name:            v4s32_umin
453 tracksRegLiveness: true
454 body: |
455   bb.0:
456     liveins: $q0
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
468     $q0 = COPY %umin
469     RET_ReallyLR implicit $q0
473 name:            v8s32_umin
474 tracksRegLiveness: true
475 body: |
476   bb.0:
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
496     %1:_(p0) = COPY $x0
497     G_STORE %umin(<8 x s32>), %1(p0) :: (store (<8 x s32>))
501 name:            v2s64_umin
502 tracksRegLiveness: true
503 body: |
504   bb.0:
505     liveins: $q0
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
528     $q0 = COPY %umin
529     RET_ReallyLR implicit $q0
533 name:            v4s64_umin
534 tracksRegLiveness: true
535 body: |
536   bb.0:
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
572     %1:_(p0) = COPY $x0
573     G_STORE %umin(<4 x s64>), %1(p0) :: (store (<4 x s64>))
577 name:            v8s8_smax
578 tracksRegLiveness: true
579 body: |
580   bb.0:
581     liveins: $x0
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
593     $x0 = COPY %smax
594     RET_ReallyLR implicit $x0
598 name:            v16s8_smax
599 tracksRegLiveness: true
600 body: |
601   bb.0:
602     liveins: $q0
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
614     $q0 = COPY %smax
615     RET_ReallyLR implicit $q0
619 name:            v4s16_smax
620 tracksRegLiveness: true
621 body: |
622   bb.0:
623     liveins: $x0
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
635     $x0 = COPY %smax
636     RET_ReallyLR implicit $x0
640 name:            v32s8_smax
641 tracksRegLiveness: true
642 body: |
643   bb.0:
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
663     %1:_(p0) = COPY $x0
664     G_STORE %smax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
668 name:            v8s16_smax
669 tracksRegLiveness: true
670 body: |
671   bb.0:
672     liveins: $q0
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
684     $q0 = COPY %smax
685     RET_ReallyLR implicit $q0
689 name:            v16s16_smax
690 tracksRegLiveness: true
691 body: |
692   bb.0:
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
712     %1:_(p0) = COPY $x0
713     G_STORE %smax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
717 name:            v2s32_smax
718 tracksRegLiveness: true
719 body: |
720   bb.0:
721     liveins: $x0
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
733     $x0 = COPY %smax
734     RET_ReallyLR implicit $x0
738 name:            v4s32_smax
739 tracksRegLiveness: true
740 body: |
741   bb.0:
742     liveins: $q0
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
754     $q0 = COPY %smax
755     RET_ReallyLR implicit $q0
759 name:            v8s32_smax
760 tracksRegLiveness: true
761 body: |
762   bb.0:
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
782     %1:_(p0) = COPY $x0
783     G_STORE %smax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
787 name:            v2s64_smax
788 tracksRegLiveness: true
789 body: |
790   bb.0:
791     liveins: $q0
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
814     $q0 = COPY %smax
815     RET_ReallyLR implicit $q0
819 name:            v4s64_smax
820 tracksRegLiveness: true
821 body: |
822   bb.0:
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
858     %1:_(p0) = COPY $x0
859     G_STORE %smax(<4 x s64>), %1(p0) :: (store (<4 x s64>))
863 name:            v8s8_umax
864 tracksRegLiveness: true
865 body: |
866   bb.0:
867     liveins: $x0
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
879     $x0 = COPY %umax
880     RET_ReallyLR implicit $x0
884 name:            v16s8_umax
885 tracksRegLiveness: true
886 body: |
887   bb.0:
888     liveins: $q0
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
900     $q0 = COPY %umax
901     RET_ReallyLR implicit $q0
905 name:            v32s8_umax
906 tracksRegLiveness: true
907 body: |
908   bb.0:
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
928     %1:_(p0) = COPY $x0
929     G_STORE %umax(<32 x s8>), %1(p0) :: (store (<32 x s8>))
933 name:            v4s16_umax
934 tracksRegLiveness: true
935 body: |
936   bb.0:
937     liveins: $x0
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
949     $x0 = COPY %umax
950     RET_ReallyLR implicit $x0
954 name:            v8s16_umax
955 tracksRegLiveness: true
956 body: |
957   bb.0:
958     liveins: $q0
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
970     $q0 = COPY %umax
971     RET_ReallyLR implicit $q0
975 name:            v16s16_umax
976 tracksRegLiveness: true
977 body: |
978   bb.0:
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
998     %1:_(p0) = COPY $x0
999     G_STORE %umax(<16 x s16>), %1(p0) :: (store (<16 x s16>))
1003 name:            v2s32_umax
1004 tracksRegLiveness: true
1005 body: |
1006   bb.0:
1007     liveins: $x0
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
1019     $x0 = COPY %umax
1020     RET_ReallyLR implicit $x0
1024 name:            v4s32_umax
1025 tracksRegLiveness: true
1026 body: |
1027   bb.0:
1028     liveins: $q0
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
1040     $q0 = COPY %umax
1041     RET_ReallyLR implicit $q0
1045 name:            v8s32_umax
1046 tracksRegLiveness: true
1047 body: |
1048   bb.0:
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
1068     %1:_(p0) = COPY $x0
1069     G_STORE %umax(<8 x s32>), %1(p0) :: (store (<8 x s32>))
1073 name:            v2s64_umax
1074 tracksRegLiveness: true
1075 body: |
1076   bb.0:
1077     liveins: $q0
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
1100     $q0 = COPY %umax
1101     RET_ReallyLR implicit $q0
1105 name:            v4s64_umax
1106 tracksRegLiveness: true
1107 body: |
1108   bb.0:
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
1144     %1:_(p0) = COPY $x0
1145     G_STORE %umax(<4 x s64>), %1(p0) :: (store (<4 x s64>))