[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-reduce-or.mir
blob2ebd88a224b94c540b8a9826ace0d2f8e4921518
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
4 ---
5 name:            test_redor_v1i1
6 alignment:       4
7 tracksRegLiveness: true
8 liveins:
9   - { reg: '$w0' }
10 body:             |
11   bb.1:
12     liveins: $w0
14     ; CHECK-LABEL: name: test_redor_v1i1
15     ; CHECK: liveins: $w0
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
22     %1:_(s32) = COPY $w0
23     %0:_(s1) = G_TRUNC %1(s32)
24     %2:_(s1) = G_VECREDUCE_OR %0(s1)
25     %4:_(s32) = G_ZEXT %2(s1)
26     $w0 = COPY %4(s32)
27     RET_ReallyLR implicit $w0
29 ...
30 ---
31 name:            test_redor_v2i1
32 alignment:       4
33 tracksRegLiveness: true
34 liveins:
35   - { reg: '$d0' }
36 body:             |
37   bb.1:
38     liveins: $d0
40     ; CHECK-LABEL: name: test_redor_v2i1
41     ; CHECK: liveins: $d0
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)
56     $w0 = COPY %4(s32)
57     RET_ReallyLR implicit $w0
59 ...
60 ---
61 name:            test_redor_v4i1
62 alignment:       4
63 tracksRegLiveness: true
64 liveins:
65   - { reg: '$d0' }
66 body:             |
67   bb.1:
68     liveins: $d0
70     ; CHECK-LABEL: name: test_redor_v4i1
71     ; CHECK: liveins: $d0
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)
92     $w0 = COPY %4(s32)
93     RET_ReallyLR implicit $w0
95 ...
96 ---
97 name:            test_redor_v8i1
98 alignment:       4
99 tracksRegLiveness: true
100 liveins:
101   - { reg: '$d0' }
102 body:             |
103   bb.1:
104     liveins: $d0
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)
140     $w0 = COPY %4(s32)
141     RET_ReallyLR implicit $w0
145 name:            test_redor_v16i1
146 alignment:       4
147 tracksRegLiveness: true
148 liveins:
149   - { reg: '$q0' }
150 frameInfo:
151   maxAlignment:    1
152 machineFunctionInfo: {}
153 body:             |
154   bb.1:
155     liveins: $q0
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)
215     $w0 = COPY %4(s32)
216     RET_ReallyLR implicit $w0
220 name:            test_redor_v1i8
221 alignment:       4
222 tracksRegLiveness: true
223 liveins:
224   - { reg: '$d0' }
225 body:             |
226   bb.1:
227     liveins: $d0
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)
241     $w0 = COPY %10(s32)
242     RET_ReallyLR implicit $w0
246 name:            test_redor_v3i8
247 alignment:       4
248 tracksRegLiveness: true
249 liveins:
250   - { reg: '$w0' }
251   - { reg: '$w1' }
252   - { reg: '$w2' }
253 body:             |
254   bb.1:
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
271     %1:_(s32) = COPY $w0
272     %2:_(s32) = COPY $w1
273     %3:_(s32) = COPY $w2
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)
278     $w0 = COPY %6(s32)
279     RET_ReallyLR implicit $w0
283 name:            test_redor_v4i8
284 alignment:       4
285 tracksRegLiveness: true
286 liveins:
287   - { reg: '$d0' }
288 body:             |
289   bb.1:
290     liveins: $d0
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)
312     $w0 = COPY %3(s32)
313     RET_ReallyLR implicit $w0
317 name:            test_redor_v8i8
318 alignment:       4
319 tracksRegLiveness: true
320 liveins:
321   - { reg: '$d0' }
322 body:             |
323   bb.1:
324     liveins: $d0
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)
357     $w0 = COPY %2(s32)
358     RET_ReallyLR implicit $w0
362 name:            test_redor_v16i8
363 alignment:       4
364 tracksRegLiveness: true
365 liveins:
366   - { reg: '$q0' }
367 body:             |
368   bb.1:
369     liveins: $q0
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)
404     $w0 = COPY %2(s32)
405     RET_ReallyLR implicit $w0
409 name:            test_redor_v32i8
410 alignment:       4
411 tracksRegLiveness: true
412 liveins:
413   - { reg: '$q0' }
414   - { reg: '$q1' }
415 body:             |
416   bb.1:
417     liveins: $q0, $q1
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)
456     $w0 = COPY %4(s32)
457     RET_ReallyLR implicit $w0
461 name:            test_redor_v4i16
462 alignment:       4
463 tracksRegLiveness: true
464 liveins:
465   - { reg: '$d0' }
466 body:             |
467   bb.1:
468     liveins: $d0
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)
489     $w0 = COPY %2(s32)
490     RET_ReallyLR implicit $w0
494 name:            test_redor_v8i16
495 alignment:       4
496 tracksRegLiveness: true
497 liveins:
498   - { reg: '$q0' }
499 body:             |
500   bb.1:
501     liveins: $q0
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)
524     $w0 = COPY %2(s32)
525     RET_ReallyLR implicit $w0
529 name:            test_redor_v16i16
530 alignment:       4
531 tracksRegLiveness: true
532 liveins:
533   - { reg: '$q0' }
534   - { reg: '$q1' }
535 body:             |
536   bb.1:
537     liveins: $q0, $q1
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)
564     $w0 = COPY %4(s32)
565     RET_ReallyLR implicit $w0
569 name:            test_redor_v2i32
570 alignment:       4
571 tracksRegLiveness: true
572 liveins:
573   - { reg: '$d0' }
574 body:             |
575   bb.1:
576     liveins: $d0
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>)
588     $w0 = COPY %1(s32)
589     RET_ReallyLR implicit $w0
593 name:            test_redor_v4i32
594 alignment:       4
595 tracksRegLiveness: true
596 liveins:
597   - { reg: '$q0' }
598 body:             |
599   bb.1:
600     liveins: $q0
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>)
614     $w0 = COPY %1(s32)
615     RET_ReallyLR implicit $w0
619 name:            test_redor_v8i32
620 alignment:       4
621 tracksRegLiveness: true
622 liveins:
623   - { reg: '$q0' }
624   - { reg: '$q1' }
625 body:             |
626   bb.1:
627     liveins: $q0, $q1
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>)
645     $w0 = COPY %3(s32)
646     RET_ReallyLR implicit $w0
650 name:            test_redor_v2i64
651 alignment:       4
652 tracksRegLiveness: true
653 liveins:
654   - { reg: '$q0' }
655 body:             |
656   bb.1:
657     liveins: $q0
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>)
669     $x0 = COPY %1(s64)
670     RET_ReallyLR implicit $x0
674 name:            test_redor_v4i64
675 alignment:       4
676 tracksRegLiveness: true
677 liveins:
678   - { reg: '$q0' }
679   - { reg: '$q1' }
680 body:             |
681   bb.1:
682     liveins: $q0, $q1
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>)
698     $x0 = COPY %3(s64)
699     RET_ReallyLR implicit $x0