1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -march=aarch64 -run-pass=legalizer -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s
7 tracksRegLiveness: true
14 ; CHECK-LABEL: name: test_redor_v1i1
16 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
17 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
18 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
19 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
20 ; CHECK: $w0 = COPY [[AND]](s32)
21 ; CHECK: RET_ReallyLR implicit $w0
23 %0:_(s1) = G_TRUNC %1(s32)
24 %2:_(s1) = G_VECREDUCE_OR %0(s1)
25 %4:_(s32) = G_ZEXT %2(s1)
27 RET_ReallyLR implicit $w0
33 tracksRegLiveness: true
40 ; CHECK-LABEL: name: test_redor_v2i1
42 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
43 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
44 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
45 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
46 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
47 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
48 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
49 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
50 ; CHECK: $w0 = COPY [[AND]](s32)
51 ; CHECK: RET_ReallyLR implicit $w0
52 %1:_(<2 x s32>) = COPY $d0
53 %0:_(<2 x s1>) = G_TRUNC %1(<2 x s32>)
54 %2:_(s1) = G_VECREDUCE_OR %0(<2 x s1>)
55 %4:_(s32) = G_ZEXT %2(s1)
57 RET_ReallyLR implicit $w0
63 tracksRegLiveness: true
70 ; CHECK-LABEL: name: test_redor_v4i1
72 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
73 ; CHECK: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
74 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
75 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
76 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
77 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
78 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
79 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
80 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
81 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
82 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
83 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
84 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
85 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C]]
86 ; CHECK: $w0 = COPY [[AND]](s32)
87 ; CHECK: RET_ReallyLR implicit $w0
88 %1:_(<4 x s16>) = COPY $d0
89 %0:_(<4 x s1>) = G_TRUNC %1(<4 x s16>)
90 %2:_(s1) = G_VECREDUCE_OR %0(<4 x s1>)
91 %4:_(s32) = G_ZEXT %2(s1)
93 RET_ReallyLR implicit $w0
99 tracksRegLiveness: true
106 ; CHECK-LABEL: name: test_redor_v8i1
107 ; CHECK: liveins: $d0
108 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
109 ; CHECK: [[UV:%[0-9]+]]:_(s8), [[UV1:%[0-9]+]]:_(s8), [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[COPY]](<8 x s8>)
110 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s8)
111 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s8)
112 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
113 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
114 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
115 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
116 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
117 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
118 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ANYEXT4]], [[ANYEXT5]]
119 ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
120 ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
121 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ANYEXT6]], [[ANYEXT7]]
122 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
123 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
124 ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
125 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
126 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR3]](s32)
127 ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[COPY3]], [[COPY4]]
128 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR4]](s32)
129 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[OR5]](s32)
130 ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[COPY5]], [[COPY6]]
131 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
132 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR6]](s32)
133 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY7]], [[C]]
134 ; CHECK: $w0 = COPY [[AND]](s32)
135 ; CHECK: RET_ReallyLR implicit $w0
136 %1:_(<8 x s8>) = COPY $d0
137 %0:_(<8 x s1>) = G_TRUNC %1(<8 x s8>)
138 %2:_(s1) = G_VECREDUCE_OR %0(<8 x s1>)
139 %4:_(s32) = G_ZEXT %2(s1)
141 RET_ReallyLR implicit $w0
145 name: test_redor_v16i1
147 tracksRegLiveness: true
152 machineFunctionInfo: {}
157 ; CHECK-LABEL: name: test_redor_v16i1
158 ; CHECK: liveins: $q0
159 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
160 ; CHECK: [[UV:%[0-9]+]]:_(s8), [[UV1:%[0-9]+]]:_(s8), [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8), [[UV8:%[0-9]+]]:_(s8), [[UV9:%[0-9]+]]:_(s8), [[UV10:%[0-9]+]]:_(s8), [[UV11:%[0-9]+]]:_(s8), [[UV12:%[0-9]+]]:_(s8), [[UV13:%[0-9]+]]:_(s8), [[UV14:%[0-9]+]]:_(s8), [[UV15:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[COPY]](<16 x s8>)
161 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s8)
162 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s8)
163 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
164 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
165 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
166 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
167 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
168 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
169 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ANYEXT4]], [[ANYEXT5]]
170 ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
171 ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
172 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ANYEXT6]], [[ANYEXT7]]
173 ; CHECK: [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s8)
174 ; CHECK: [[ANYEXT9:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s8)
175 ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ANYEXT8]], [[ANYEXT9]]
176 ; CHECK: [[ANYEXT10:%[0-9]+]]:_(s32) = G_ANYEXT [[UV10]](s8)
177 ; CHECK: [[ANYEXT11:%[0-9]+]]:_(s32) = G_ANYEXT [[UV11]](s8)
178 ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ANYEXT10]], [[ANYEXT11]]
179 ; CHECK: [[ANYEXT12:%[0-9]+]]:_(s32) = G_ANYEXT [[UV12]](s8)
180 ; CHECK: [[ANYEXT13:%[0-9]+]]:_(s32) = G_ANYEXT [[UV13]](s8)
181 ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[ANYEXT12]], [[ANYEXT13]]
182 ; CHECK: [[ANYEXT14:%[0-9]+]]:_(s32) = G_ANYEXT [[UV14]](s8)
183 ; CHECK: [[ANYEXT15:%[0-9]+]]:_(s32) = G_ANYEXT [[UV15]](s8)
184 ; CHECK: [[OR7:%[0-9]+]]:_(s32) = G_OR [[ANYEXT14]], [[ANYEXT15]]
185 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
186 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
187 ; CHECK: [[OR8:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
188 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
189 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR3]](s32)
190 ; CHECK: [[OR9:%[0-9]+]]:_(s32) = G_OR [[COPY3]], [[COPY4]]
191 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR4]](s32)
192 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[OR5]](s32)
193 ; CHECK: [[OR10:%[0-9]+]]:_(s32) = G_OR [[COPY5]], [[COPY6]]
194 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR6]](s32)
195 ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[OR7]](s32)
196 ; CHECK: [[OR11:%[0-9]+]]:_(s32) = G_OR [[COPY7]], [[COPY8]]
197 ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY [[OR8]](s32)
198 ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY [[OR9]](s32)
199 ; CHECK: [[OR12:%[0-9]+]]:_(s32) = G_OR [[COPY9]], [[COPY10]]
200 ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY [[OR10]](s32)
201 ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[OR11]](s32)
202 ; CHECK: [[OR13:%[0-9]+]]:_(s32) = G_OR [[COPY11]], [[COPY12]]
203 ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[OR12]](s32)
204 ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[OR13]](s32)
205 ; CHECK: [[OR14:%[0-9]+]]:_(s32) = G_OR [[COPY13]], [[COPY14]]
206 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
207 ; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[OR14]](s32)
208 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C]]
209 ; CHECK: $w0 = COPY [[AND]](s32)
210 ; CHECK: RET_ReallyLR implicit $w0
211 %1:_(<16 x s8>) = COPY $q0
212 %0:_(<16 x s1>) = G_TRUNC %1(<16 x s8>)
213 %2:_(s1) = G_VECREDUCE_OR %0(<16 x s1>)
214 %4:_(s32) = G_ZEXT %2(s1)
216 RET_ReallyLR implicit $w0
220 name: test_redor_v1i8
222 tracksRegLiveness: true
229 ; CHECK-LABEL: name: test_redor_v1i8
230 ; CHECK: liveins: $d0
231 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
232 ; CHECK: [[BITCAST:%[0-9]+]]:_(s64) = G_BITCAST [[COPY]](<8 x s8>)
233 ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[BITCAST]](s64)
234 ; CHECK: $w0 = COPY [[TRUNC]](s32)
235 ; CHECK: RET_ReallyLR implicit $w0
236 %1:_(<8 x s8>) = COPY $d0
237 %11:_(s64) = G_BITCAST %1(<8 x s8>)
238 %0:_(s8) = G_TRUNC %11(s64)
239 %9:_(s8) = G_VECREDUCE_OR %0(s8)
240 %10:_(s32) = G_ANYEXT %9(s8)
242 RET_ReallyLR implicit $w0
246 name: test_redor_v3i8
248 tracksRegLiveness: true
255 liveins: $w0, $w1, $w2
257 ; CHECK-LABEL: name: test_redor_v3i8
258 ; CHECK: liveins: $w0, $w1, $w2
259 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
260 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
261 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
262 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
263 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
264 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY3]], [[COPY4]]
265 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
266 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
267 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[COPY5]], [[COPY6]]
268 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
269 ; CHECK: $w0 = COPY [[COPY7]](s32)
270 ; CHECK: RET_ReallyLR implicit $w0
274 %4:_(<3 x s32>) = G_BUILD_VECTOR %1(s32), %2(s32), %3(s32)
275 %0:_(<3 x s8>) = G_TRUNC %4(<3 x s32>)
276 %5:_(s8) = G_VECREDUCE_OR %0(<3 x s8>)
277 %6:_(s32) = G_ANYEXT %5(s8)
279 RET_ReallyLR implicit $w0
283 name: test_redor_v4i8
285 tracksRegLiveness: true
292 ; CHECK-LABEL: name: test_redor_v4i8
293 ; CHECK: liveins: $d0
294 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
295 ; CHECK: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
296 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
297 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
298 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
299 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
300 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
301 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
302 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
303 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
304 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
305 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
306 ; CHECK: $w0 = COPY [[COPY3]](s32)
307 ; CHECK: RET_ReallyLR implicit $w0
308 %1:_(<4 x s16>) = COPY $d0
309 %0:_(<4 x s8>) = G_TRUNC %1(<4 x s16>)
310 %2:_(s8) = G_VECREDUCE_OR %0(<4 x s8>)
311 %3:_(s32) = G_ANYEXT %2(s8)
313 RET_ReallyLR implicit $w0
317 name: test_redor_v8i8
319 tracksRegLiveness: true
326 ; CHECK-LABEL: name: test_redor_v8i8
327 ; CHECK: liveins: $d0
328 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
329 ; CHECK: [[UV:%[0-9]+]]:_(s8), [[UV1:%[0-9]+]]:_(s8), [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[COPY]](<8 x s8>)
330 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s8)
331 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s8)
332 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
333 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
334 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
335 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
336 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
337 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
338 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ANYEXT4]], [[ANYEXT5]]
339 ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
340 ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
341 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ANYEXT6]], [[ANYEXT7]]
342 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
343 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
344 ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
345 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
346 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR3]](s32)
347 ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[COPY3]], [[COPY4]]
348 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR4]](s32)
349 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[OR5]](s32)
350 ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[COPY5]], [[COPY6]]
351 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR6]](s32)
352 ; CHECK: $w0 = COPY [[COPY7]](s32)
353 ; CHECK: RET_ReallyLR implicit $w0
354 %0:_(<8 x s8>) = COPY $d0
355 %1:_(s8) = G_VECREDUCE_OR %0(<8 x s8>)
356 %2:_(s32) = G_ANYEXT %1(s8)
358 RET_ReallyLR implicit $w0
362 name: test_redor_v16i8
364 tracksRegLiveness: true
371 ; CHECK-LABEL: name: test_redor_v16i8
372 ; CHECK: liveins: $q0
373 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
374 ; CHECK: [[UV:%[0-9]+]]:_(<8 x s8>), [[UV1:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[COPY]](<16 x s8>)
375 ; CHECK: [[OR:%[0-9]+]]:_(<8 x s8>) = G_OR [[UV]], [[UV1]]
376 ; CHECK: [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8), [[UV8:%[0-9]+]]:_(s8), [[UV9:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[OR]](<8 x s8>)
377 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
378 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
379 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
380 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
381 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
382 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
383 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
384 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
385 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ANYEXT4]], [[ANYEXT5]]
386 ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s8)
387 ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s8)
388 ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ANYEXT6]], [[ANYEXT7]]
389 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
390 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
391 ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
392 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR3]](s32)
393 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR4]](s32)
394 ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[COPY3]], [[COPY4]]
395 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR5]](s32)
396 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[OR6]](s32)
397 ; CHECK: [[OR7:%[0-9]+]]:_(s32) = G_OR [[COPY5]], [[COPY6]]
398 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR7]](s32)
399 ; CHECK: $w0 = COPY [[COPY7]](s32)
400 ; CHECK: RET_ReallyLR implicit $w0
401 %0:_(<16 x s8>) = COPY $q0
402 %1:_(s8) = G_VECREDUCE_OR %0(<16 x s8>)
403 %2:_(s32) = G_ANYEXT %1(s8)
405 RET_ReallyLR implicit $w0
409 name: test_redor_v32i8
411 tracksRegLiveness: true
419 ; CHECK-LABEL: name: test_redor_v32i8
420 ; CHECK: liveins: $q0, $q1
421 ; CHECK: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
422 ; CHECK: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
423 ; CHECK: [[OR:%[0-9]+]]:_(<16 x s8>) = G_OR [[COPY]], [[COPY1]]
424 ; CHECK: [[UV:%[0-9]+]]:_(<8 x s8>), [[UV1:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[OR]](<16 x s8>)
425 ; CHECK: [[OR1:%[0-9]+]]:_(<8 x s8>) = G_OR [[UV]], [[UV1]]
426 ; CHECK: [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8), [[UV8:%[0-9]+]]:_(s8), [[UV9:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[OR1]](<8 x s8>)
427 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
428 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
429 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
430 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
431 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
432 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
433 ; CHECK: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
434 ; CHECK: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
435 ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[ANYEXT4]], [[ANYEXT5]]
436 ; CHECK: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s8)
437 ; CHECK: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s8)
438 ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[ANYEXT6]], [[ANYEXT7]]
439 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
440 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR3]](s32)
441 ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[COPY2]], [[COPY3]]
442 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR4]](s32)
443 ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[OR5]](s32)
444 ; CHECK: [[OR7:%[0-9]+]]:_(s32) = G_OR [[COPY4]], [[COPY5]]
445 ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[OR6]](s32)
446 ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[OR7]](s32)
447 ; CHECK: [[OR8:%[0-9]+]]:_(s32) = G_OR [[COPY6]], [[COPY7]]
448 ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[OR8]](s32)
449 ; CHECK: $w0 = COPY [[COPY8]](s32)
450 ; CHECK: RET_ReallyLR implicit $w0
451 %1:_(<16 x s8>) = COPY $q0
452 %2:_(<16 x s8>) = COPY $q1
453 %0:_(<32 x s8>) = G_CONCAT_VECTORS %1(<16 x s8>), %2(<16 x s8>)
454 %3:_(s8) = G_VECREDUCE_OR %0(<32 x s8>)
455 %4:_(s32) = G_ANYEXT %3(s8)
457 RET_ReallyLR implicit $w0
461 name: test_redor_v4i16
463 tracksRegLiveness: true
470 ; CHECK-LABEL: name: test_redor_v4i16
471 ; CHECK: liveins: $d0
472 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
473 ; CHECK: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
474 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
475 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
476 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
477 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
478 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
479 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
480 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
481 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
482 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
483 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
484 ; CHECK: $w0 = COPY [[COPY3]](s32)
485 ; CHECK: RET_ReallyLR implicit $w0
486 %0:_(<4 x s16>) = COPY $d0
487 %1:_(s16) = G_VECREDUCE_OR %0(<4 x s16>)
488 %2:_(s32) = G_ANYEXT %1(s16)
490 RET_ReallyLR implicit $w0
494 name: test_redor_v8i16
496 tracksRegLiveness: true
503 ; CHECK-LABEL: name: test_redor_v8i16
504 ; CHECK: liveins: $q0
505 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
506 ; CHECK: [[UV:%[0-9]+]]:_(<4 x s16>), [[UV1:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[COPY]](<8 x s16>)
507 ; CHECK: [[OR:%[0-9]+]]:_(<4 x s16>) = G_OR [[UV]], [[UV1]]
508 ; CHECK: [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16), [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[OR]](<4 x s16>)
509 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
510 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
511 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
512 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
513 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
514 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
515 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
516 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
517 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[COPY1]], [[COPY2]]
518 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR3]](s32)
519 ; CHECK: $w0 = COPY [[COPY3]](s32)
520 ; CHECK: RET_ReallyLR implicit $w0
521 %0:_(<8 x s16>) = COPY $q0
522 %1:_(s16) = G_VECREDUCE_OR %0(<8 x s16>)
523 %2:_(s32) = G_ANYEXT %1(s16)
525 RET_ReallyLR implicit $w0
529 name: test_redor_v16i16
531 tracksRegLiveness: true
539 ; CHECK-LABEL: name: test_redor_v16i16
540 ; CHECK: liveins: $q0, $q1
541 ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
542 ; CHECK: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
543 ; CHECK: [[OR:%[0-9]+]]:_(<8 x s16>) = G_OR [[COPY]], [[COPY1]]
544 ; CHECK: [[UV:%[0-9]+]]:_(<4 x s16>), [[UV1:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[OR]](<8 x s16>)
545 ; CHECK: [[OR1:%[0-9]+]]:_(<4 x s16>) = G_OR [[UV]], [[UV1]]
546 ; CHECK: [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16), [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[OR1]](<4 x s16>)
547 ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
548 ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
549 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[ANYEXT]], [[ANYEXT1]]
550 ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
551 ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
552 ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[ANYEXT2]], [[ANYEXT3]]
553 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
554 ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[OR3]](s32)
555 ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[COPY2]], [[COPY3]]
556 ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[OR4]](s32)
557 ; CHECK: $w0 = COPY [[COPY4]](s32)
558 ; CHECK: RET_ReallyLR implicit $w0
559 %1:_(<8 x s16>) = COPY $q0
560 %2:_(<8 x s16>) = COPY $q1
561 %0:_(<16 x s16>) = G_CONCAT_VECTORS %1(<8 x s16>), %2(<8 x s16>)
562 %3:_(s16) = G_VECREDUCE_OR %0(<16 x s16>)
563 %4:_(s32) = G_ANYEXT %3(s16)
565 RET_ReallyLR implicit $w0
569 name: test_redor_v2i32
571 tracksRegLiveness: true
578 ; CHECK-LABEL: name: test_redor_v2i32
579 ; CHECK: liveins: $d0
580 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
581 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
582 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[UV]], [[UV1]]
583 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR]](s32)
584 ; CHECK: $w0 = COPY [[COPY1]](s32)
585 ; CHECK: RET_ReallyLR implicit $w0
586 %0:_(<2 x s32>) = COPY $d0
587 %1:_(s32) = G_VECREDUCE_OR %0(<2 x s32>)
589 RET_ReallyLR implicit $w0
593 name: test_redor_v4i32
595 tracksRegLiveness: true
602 ; CHECK-LABEL: name: test_redor_v4i32
603 ; CHECK: liveins: $q0
604 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
605 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
606 ; CHECK: [[OR:%[0-9]+]]:_(<2 x s32>) = G_OR [[UV]], [[UV1]]
607 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[OR]](<2 x s32>)
608 ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[UV2]], [[UV3]]
609 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[OR1]](s32)
610 ; CHECK: $w0 = COPY [[COPY1]](s32)
611 ; CHECK: RET_ReallyLR implicit $w0
612 %0:_(<4 x s32>) = COPY $q0
613 %1:_(s32) = G_VECREDUCE_OR %0(<4 x s32>)
615 RET_ReallyLR implicit $w0
619 name: test_redor_v8i32
621 tracksRegLiveness: true
629 ; CHECK-LABEL: name: test_redor_v8i32
630 ; CHECK: liveins: $q0, $q1
631 ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
632 ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
633 ; CHECK: [[OR:%[0-9]+]]:_(<4 x s32>) = G_OR [[COPY]], [[COPY1]]
634 ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[OR]](<4 x s32>)
635 ; CHECK: [[OR1:%[0-9]+]]:_(<2 x s32>) = G_OR [[UV]], [[UV1]]
636 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[OR1]](<2 x s32>)
637 ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[UV2]], [[UV3]]
638 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[OR2]](s32)
639 ; CHECK: $w0 = COPY [[COPY2]](s32)
640 ; CHECK: RET_ReallyLR implicit $w0
641 %1:_(<4 x s32>) = COPY $q0
642 %2:_(<4 x s32>) = COPY $q1
643 %0:_(<8 x s32>) = G_CONCAT_VECTORS %1(<4 x s32>), %2(<4 x s32>)
644 %3:_(s32) = G_VECREDUCE_OR %0(<8 x s32>)
646 RET_ReallyLR implicit $w0
650 name: test_redor_v2i64
652 tracksRegLiveness: true
659 ; CHECK-LABEL: name: test_redor_v2i64
660 ; CHECK: liveins: $q0
661 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
662 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
663 ; CHECK: [[OR:%[0-9]+]]:_(s64) = G_OR [[UV]], [[UV1]]
664 ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY [[OR]](s64)
665 ; CHECK: $x0 = COPY [[COPY1]](s64)
666 ; CHECK: RET_ReallyLR implicit $x0
667 %0:_(<2 x s64>) = COPY $q0
668 %1:_(s64) = G_VECREDUCE_OR %0(<2 x s64>)
670 RET_ReallyLR implicit $x0
674 name: test_redor_v4i64
676 tracksRegLiveness: true
684 ; CHECK-LABEL: name: test_redor_v4i64
685 ; CHECK: liveins: $q0, $q1
686 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
687 ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
688 ; CHECK: [[OR:%[0-9]+]]:_(<2 x s64>) = G_OR [[COPY]], [[COPY1]]
689 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[OR]](<2 x s64>)
690 ; CHECK: [[OR1:%[0-9]+]]:_(s64) = G_OR [[UV]], [[UV1]]
691 ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY [[OR1]](s64)
692 ; CHECK: $x0 = COPY [[COPY2]](s64)
693 ; CHECK: RET_ReallyLR implicit $x0
694 %1:_(<2 x s64>) = COPY $q0
695 %2:_(<2 x s64>) = COPY $q1
696 %0:_(<4 x s64>) = G_CONCAT_VECTORS %1(<2 x s64>), %2(<2 x s64>)
697 %3:_(s64) = G_VECREDUCE_OR %0(<4 x s64>)
699 RET_ReallyLR implicit $x0