Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-reduce-xor.mir
blob3951241c66766f5e6411a75db821d771e8fc20bb
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=aarch64 -run-pass=legalizer -global-isel-abort=1 -verify-machineinstrs %s -o - | FileCheck %s
4 ---
5 name:            test_redxor_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_redxor_v1i1
15     ; CHECK: liveins: $w0
16     ; CHECK-NEXT: {{  $}}
17     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
18     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
19     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
20     ; CHECK-NEXT: $w0 = COPY [[AND]](s32)
21     ; CHECK-NEXT: RET_ReallyLR implicit $w0
22     %1:_(s32) = COPY $w0
23     %0:_(s1) = G_TRUNC %1(s32)
24     %2:_(s1) = G_VECREDUCE_XOR %0(s1)
25     %4:_(s32) = G_ZEXT %2(s1)
26     $w0 = COPY %4(s32)
27     RET_ReallyLR implicit $w0
29 ...
30 ---
31 name:            test_redxor_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_redxor_v2i1
41     ; CHECK: liveins: $d0
42     ; CHECK-NEXT: {{  $}}
43     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
44     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
45     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[UV]], [[UV1]]
46     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
47     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR]], [[C]]
48     ; CHECK-NEXT: $w0 = COPY [[AND]](s32)
49     ; CHECK-NEXT: RET_ReallyLR implicit $w0
50     %1:_(<2 x s32>) = COPY $d0
51     %0:_(<2 x s1>) = G_TRUNC %1(<2 x s32>)
52     %2:_(s1) = G_VECREDUCE_XOR %0(<2 x s1>)
53     %4:_(s32) = G_ZEXT %2(s1)
54     $w0 = COPY %4(s32)
55     RET_ReallyLR implicit $w0
57 ...
58 ---
59 name:            test_redxor_v4i1
60 alignment:       4
61 tracksRegLiveness: true
62 liveins:
63   - { reg: '$d0' }
64 body:             |
65   bb.1:
66     liveins: $d0
68     ; CHECK-LABEL: name: test_redxor_v4i1
69     ; CHECK: liveins: $d0
70     ; CHECK-NEXT: {{  $}}
71     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
72     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
73     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
74     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
75     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
76     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
77     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
78     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
79     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[XOR]], [[XOR1]]
80     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
81     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR2]], [[C]]
82     ; CHECK-NEXT: $w0 = COPY [[AND]](s32)
83     ; CHECK-NEXT: RET_ReallyLR implicit $w0
84     %1:_(<4 x s16>) = COPY $d0
85     %0:_(<4 x s1>) = G_TRUNC %1(<4 x s16>)
86     %2:_(s1) = G_VECREDUCE_XOR %0(<4 x s1>)
87     %4:_(s32) = G_ZEXT %2(s1)
88     $w0 = COPY %4(s32)
89     RET_ReallyLR implicit $w0
91 ...
92 ---
93 name:            test_redxor_v8i1
94 alignment:       4
95 tracksRegLiveness: true
96 liveins:
97   - { reg: '$d0' }
98 body:             |
99   bb.1:
100     liveins: $d0
102     ; CHECK-LABEL: name: test_redxor_v8i1
103     ; CHECK: liveins: $d0
104     ; CHECK-NEXT: {{  $}}
105     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
106     ; CHECK-NEXT: [[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>)
107     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s8)
108     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s8)
109     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
110     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
111     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
112     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
113     ; CHECK-NEXT: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
114     ; CHECK-NEXT: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
115     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT4]], [[ANYEXT5]]
116     ; CHECK-NEXT: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
117     ; CHECK-NEXT: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
118     ; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT6]], [[ANYEXT7]]
119     ; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s32) = G_XOR [[XOR]], [[XOR1]]
120     ; CHECK-NEXT: [[XOR5:%[0-9]+]]:_(s32) = G_XOR [[XOR2]], [[XOR3]]
121     ; CHECK-NEXT: [[XOR6:%[0-9]+]]:_(s32) = G_XOR [[XOR4]], [[XOR5]]
122     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
123     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR6]], [[C]]
124     ; CHECK-NEXT: $w0 = COPY [[AND]](s32)
125     ; CHECK-NEXT: RET_ReallyLR implicit $w0
126     %1:_(<8 x s8>) = COPY $d0
127     %0:_(<8 x s1>) = G_TRUNC %1(<8 x s8>)
128     %2:_(s1) = G_VECREDUCE_XOR %0(<8 x s1>)
129     %4:_(s32) = G_ZEXT %2(s1)
130     $w0 = COPY %4(s32)
131     RET_ReallyLR implicit $w0
135 name:            test_redxor_v16i1
136 alignment:       4
137 tracksRegLiveness: true
138 liveins:
139   - { reg: '$q0' }
140 frameInfo:
141   maxAlignment:    1
142 machineFunctionInfo: {}
143 body:             |
144   bb.1:
145     liveins: $q0
147     ; CHECK-LABEL: name: test_redxor_v16i1
148     ; CHECK: liveins: $q0
149     ; CHECK-NEXT: {{  $}}
150     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
151     ; CHECK-NEXT: [[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>)
152     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s8)
153     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s8)
154     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
155     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
156     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
157     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
158     ; CHECK-NEXT: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
159     ; CHECK-NEXT: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
160     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT4]], [[ANYEXT5]]
161     ; CHECK-NEXT: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
162     ; CHECK-NEXT: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
163     ; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT6]], [[ANYEXT7]]
164     ; CHECK-NEXT: [[ANYEXT8:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s8)
165     ; CHECK-NEXT: [[ANYEXT9:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s8)
166     ; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT8]], [[ANYEXT9]]
167     ; CHECK-NEXT: [[ANYEXT10:%[0-9]+]]:_(s32) = G_ANYEXT [[UV10]](s8)
168     ; CHECK-NEXT: [[ANYEXT11:%[0-9]+]]:_(s32) = G_ANYEXT [[UV11]](s8)
169     ; CHECK-NEXT: [[XOR5:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT10]], [[ANYEXT11]]
170     ; CHECK-NEXT: [[ANYEXT12:%[0-9]+]]:_(s32) = G_ANYEXT [[UV12]](s8)
171     ; CHECK-NEXT: [[ANYEXT13:%[0-9]+]]:_(s32) = G_ANYEXT [[UV13]](s8)
172     ; CHECK-NEXT: [[XOR6:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT12]], [[ANYEXT13]]
173     ; CHECK-NEXT: [[ANYEXT14:%[0-9]+]]:_(s32) = G_ANYEXT [[UV14]](s8)
174     ; CHECK-NEXT: [[ANYEXT15:%[0-9]+]]:_(s32) = G_ANYEXT [[UV15]](s8)
175     ; CHECK-NEXT: [[XOR7:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT14]], [[ANYEXT15]]
176     ; CHECK-NEXT: [[XOR8:%[0-9]+]]:_(s32) = G_XOR [[XOR]], [[XOR1]]
177     ; CHECK-NEXT: [[XOR9:%[0-9]+]]:_(s32) = G_XOR [[XOR2]], [[XOR3]]
178     ; CHECK-NEXT: [[XOR10:%[0-9]+]]:_(s32) = G_XOR [[XOR4]], [[XOR5]]
179     ; CHECK-NEXT: [[XOR11:%[0-9]+]]:_(s32) = G_XOR [[XOR6]], [[XOR7]]
180     ; CHECK-NEXT: [[XOR12:%[0-9]+]]:_(s32) = G_XOR [[XOR8]], [[XOR9]]
181     ; CHECK-NEXT: [[XOR13:%[0-9]+]]:_(s32) = G_XOR [[XOR10]], [[XOR11]]
182     ; CHECK-NEXT: [[XOR14:%[0-9]+]]:_(s32) = G_XOR [[XOR12]], [[XOR13]]
183     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
184     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[XOR14]], [[C]]
185     ; CHECK-NEXT: $w0 = COPY [[AND]](s32)
186     ; CHECK-NEXT: RET_ReallyLR implicit $w0
187     %1:_(<16 x s8>) = COPY $q0
188     %0:_(<16 x s1>) = G_TRUNC %1(<16 x s8>)
189     %2:_(s1) = G_VECREDUCE_XOR %0(<16 x s1>)
190     %4:_(s32) = G_ZEXT %2(s1)
191     $w0 = COPY %4(s32)
192     RET_ReallyLR implicit $w0
196 name:            test_redxor_v1i8
197 alignment:       4
198 tracksRegLiveness: true
199 liveins:
200   - { reg: '$d0' }
201 body:             |
202   bb.1:
203     liveins: $d0
205     ; CHECK-LABEL: name: test_redxor_v1i8
206     ; CHECK: liveins: $d0
207     ; CHECK-NEXT: {{  $}}
208     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
209     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s64) = G_BITCAST [[COPY]](<8 x s8>)
210     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[BITCAST]](s64)
211     ; CHECK-NEXT: $w0 = COPY [[TRUNC]](s32)
212     ; CHECK-NEXT: RET_ReallyLR implicit $w0
213     %1:_(<8 x s8>) = COPY $d0
214     %11:_(s64) = G_BITCAST %1(<8 x s8>)
215     %0:_(s8) = G_TRUNC %11(s64)
216     %9:_(s8) = G_VECREDUCE_XOR %0(s8)
217     %10:_(s32) = G_ANYEXT %9(s8)
218     $w0 = COPY %10(s32)
219     RET_ReallyLR implicit $w0
223 name:            test_redxor_v3i8
224 alignment:       4
225 tracksRegLiveness: true
226 liveins:
227   - { reg: '$w0' }
228   - { reg: '$w1' }
229   - { reg: '$w2' }
230 body:             |
231   bb.1:
232     liveins: $w0, $w1, $w2
234     ; CHECK-LABEL: name: test_redxor_v3i8
235     ; CHECK: liveins: $w0, $w1, $w2
236     ; CHECK-NEXT: {{  $}}
237     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
238     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
239     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w2
240     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[COPY]], [[COPY1]]
241     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[XOR]], [[COPY2]]
242     ; CHECK-NEXT: $w0 = COPY [[XOR1]](s32)
243     ; CHECK-NEXT: RET_ReallyLR implicit $w0
244     %1:_(s32) = COPY $w0
245     %2:_(s32) = COPY $w1
246     %3:_(s32) = COPY $w2
247     %4:_(<3 x s32>) = G_BUILD_VECTOR %1(s32), %2(s32), %3(s32)
248     %0:_(<3 x s8>) = G_TRUNC %4(<3 x s32>)
249     %5:_(s8) = G_VECREDUCE_XOR %0(<3 x s8>)
250     %6:_(s32) = G_ANYEXT %5(s8)
251     $w0 = COPY %6(s32)
252     RET_ReallyLR implicit $w0
256 name:            test_redxor_v4i8
257 alignment:       4
258 tracksRegLiveness: true
259 liveins:
260   - { reg: '$d0' }
261 body:             |
262   bb.1:
263     liveins: $d0
265     ; CHECK-LABEL: name: test_redxor_v4i8
266     ; CHECK: liveins: $d0
267     ; CHECK-NEXT: {{  $}}
268     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
269     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
270     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
271     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
272     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
273     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
274     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
275     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
276     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[XOR]], [[XOR1]]
277     ; CHECK-NEXT: $w0 = COPY [[XOR2]](s32)
278     ; CHECK-NEXT: RET_ReallyLR implicit $w0
279     %1:_(<4 x s16>) = COPY $d0
280     %0:_(<4 x s8>) = G_TRUNC %1(<4 x s16>)
281     %2:_(s8) = G_VECREDUCE_XOR %0(<4 x s8>)
282     %3:_(s32) = G_ANYEXT %2(s8)
283     $w0 = COPY %3(s32)
284     RET_ReallyLR implicit $w0
288 name:            test_redxor_v8i8
289 alignment:       4
290 tracksRegLiveness: true
291 liveins:
292   - { reg: '$d0' }
293 body:             |
294   bb.1:
295     liveins: $d0
297     ; CHECK-LABEL: name: test_redxor_v8i8
298     ; CHECK: liveins: $d0
299     ; CHECK-NEXT: {{  $}}
300     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s8>) = COPY $d0
301     ; CHECK-NEXT: [[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>)
302     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s8)
303     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s8)
304     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
305     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
306     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
307     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
308     ; CHECK-NEXT: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
309     ; CHECK-NEXT: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
310     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT4]], [[ANYEXT5]]
311     ; CHECK-NEXT: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
312     ; CHECK-NEXT: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
313     ; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT6]], [[ANYEXT7]]
314     ; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s32) = G_XOR [[XOR]], [[XOR1]]
315     ; CHECK-NEXT: [[XOR5:%[0-9]+]]:_(s32) = G_XOR [[XOR2]], [[XOR3]]
316     ; CHECK-NEXT: [[XOR6:%[0-9]+]]:_(s32) = G_XOR [[XOR4]], [[XOR5]]
317     ; CHECK-NEXT: $w0 = COPY [[XOR6]](s32)
318     ; CHECK-NEXT: RET_ReallyLR implicit $w0
319     %0:_(<8 x s8>) = COPY $d0
320     %1:_(s8) = G_VECREDUCE_XOR %0(<8 x s8>)
321     %2:_(s32) = G_ANYEXT %1(s8)
322     $w0 = COPY %2(s32)
323     RET_ReallyLR implicit $w0
327 name:            test_redxor_v16i8
328 alignment:       4
329 tracksRegLiveness: true
330 liveins:
331   - { reg: '$q0' }
332 body:             |
333   bb.1:
334     liveins: $q0
336     ; CHECK-LABEL: name: test_redxor_v16i8
337     ; CHECK: liveins: $q0
338     ; CHECK-NEXT: {{  $}}
339     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
340     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s8>), [[UV1:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[COPY]](<16 x s8>)
341     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<8 x s8>) = G_XOR [[UV]], [[UV1]]
342     ; CHECK-NEXT: [[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 [[XOR]](<8 x s8>)
343     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
344     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
345     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
346     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
347     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
348     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
349     ; CHECK-NEXT: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
350     ; CHECK-NEXT: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
351     ; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT4]], [[ANYEXT5]]
352     ; CHECK-NEXT: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s8)
353     ; CHECK-NEXT: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s8)
354     ; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT6]], [[ANYEXT7]]
355     ; CHECK-NEXT: [[XOR5:%[0-9]+]]:_(s32) = G_XOR [[XOR1]], [[XOR2]]
356     ; CHECK-NEXT: [[XOR6:%[0-9]+]]:_(s32) = G_XOR [[XOR3]], [[XOR4]]
357     ; CHECK-NEXT: [[XOR7:%[0-9]+]]:_(s32) = G_XOR [[XOR5]], [[XOR6]]
358     ; CHECK-NEXT: $w0 = COPY [[XOR7]](s32)
359     ; CHECK-NEXT: RET_ReallyLR implicit $w0
360     %0:_(<16 x s8>) = COPY $q0
361     %1:_(s8) = G_VECREDUCE_XOR %0(<16 x s8>)
362     %2:_(s32) = G_ANYEXT %1(s8)
363     $w0 = COPY %2(s32)
364     RET_ReallyLR implicit $w0
368 name:            test_redxor_v32i8
369 alignment:       4
370 tracksRegLiveness: true
371 liveins:
372   - { reg: '$q0' }
373   - { reg: '$q1' }
374 body:             |
375   bb.1:
376     liveins: $q0, $q1
378     ; CHECK-LABEL: name: test_redxor_v32i8
379     ; CHECK: liveins: $q0, $q1
380     ; CHECK-NEXT: {{  $}}
381     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
382     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<16 x s8>) = COPY $q1
383     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<16 x s8>) = G_XOR [[COPY]], [[COPY1]]
384     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<8 x s8>), [[UV1:%[0-9]+]]:_(<8 x s8>) = G_UNMERGE_VALUES [[XOR]](<16 x s8>)
385     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<8 x s8>) = G_XOR [[UV]], [[UV1]]
386     ; CHECK-NEXT: [[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 [[XOR1]](<8 x s8>)
387     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s8)
388     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s8)
389     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
390     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s8)
391     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s8)
392     ; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
393     ; CHECK-NEXT: [[ANYEXT4:%[0-9]+]]:_(s32) = G_ANYEXT [[UV6]](s8)
394     ; CHECK-NEXT: [[ANYEXT5:%[0-9]+]]:_(s32) = G_ANYEXT [[UV7]](s8)
395     ; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT4]], [[ANYEXT5]]
396     ; CHECK-NEXT: [[ANYEXT6:%[0-9]+]]:_(s32) = G_ANYEXT [[UV8]](s8)
397     ; CHECK-NEXT: [[ANYEXT7:%[0-9]+]]:_(s32) = G_ANYEXT [[UV9]](s8)
398     ; CHECK-NEXT: [[XOR5:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT6]], [[ANYEXT7]]
399     ; CHECK-NEXT: [[XOR6:%[0-9]+]]:_(s32) = G_XOR [[XOR2]], [[XOR3]]
400     ; CHECK-NEXT: [[XOR7:%[0-9]+]]:_(s32) = G_XOR [[XOR4]], [[XOR5]]
401     ; CHECK-NEXT: [[XOR8:%[0-9]+]]:_(s32) = G_XOR [[XOR6]], [[XOR7]]
402     ; CHECK-NEXT: $w0 = COPY [[XOR8]](s32)
403     ; CHECK-NEXT: RET_ReallyLR implicit $w0
404     %1:_(<16 x s8>) = COPY $q0
405     %2:_(<16 x s8>) = COPY $q1
406     %0:_(<32 x s8>) = G_CONCAT_VECTORS %1(<16 x s8>), %2(<16 x s8>)
407     %3:_(s8) = G_VECREDUCE_XOR %0(<32 x s8>)
408     %4:_(s32) = G_ANYEXT %3(s8)
409     $w0 = COPY %4(s32)
410     RET_ReallyLR implicit $w0
414 name:            test_redxor_v4i16
415 alignment:       4
416 tracksRegLiveness: true
417 liveins:
418   - { reg: '$d0' }
419 body:             |
420   bb.1:
421     liveins: $d0
423     ; CHECK-LABEL: name: test_redxor_v4i16
424     ; CHECK: liveins: $d0
425     ; CHECK-NEXT: {{  $}}
426     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $d0
427     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
428     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV]](s16)
429     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV1]](s16)
430     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
431     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
432     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
433     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
434     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[XOR]], [[XOR1]]
435     ; CHECK-NEXT: $w0 = COPY [[XOR2]](s32)
436     ; CHECK-NEXT: RET_ReallyLR implicit $w0
437     %0:_(<4 x s16>) = COPY $d0
438     %1:_(s16) = G_VECREDUCE_XOR %0(<4 x s16>)
439     %2:_(s32) = G_ANYEXT %1(s16)
440     $w0 = COPY %2(s32)
441     RET_ReallyLR implicit $w0
445 name:            test_redxor_v8i16
446 alignment:       4
447 tracksRegLiveness: true
448 liveins:
449   - { reg: '$q0' }
450 body:             |
451   bb.1:
452     liveins: $q0
454     ; CHECK-LABEL: name: test_redxor_v8i16
455     ; CHECK: liveins: $q0
456     ; CHECK-NEXT: {{  $}}
457     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
458     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s16>), [[UV1:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[COPY]](<8 x s16>)
459     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s16>) = G_XOR [[UV]], [[UV1]]
460     ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16), [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[XOR]](<4 x s16>)
461     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
462     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
463     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
464     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
465     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
466     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
467     ; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s32) = G_XOR [[XOR1]], [[XOR2]]
468     ; CHECK-NEXT: $w0 = COPY [[XOR3]](s32)
469     ; CHECK-NEXT: RET_ReallyLR implicit $w0
470     %0:_(<8 x s16>) = COPY $q0
471     %1:_(s16) = G_VECREDUCE_XOR %0(<8 x s16>)
472     %2:_(s32) = G_ANYEXT %1(s16)
473     $w0 = COPY %2(s32)
474     RET_ReallyLR implicit $w0
478 name:            test_redxor_v16i16
479 alignment:       4
480 tracksRegLiveness: true
481 liveins:
482   - { reg: '$q0' }
483   - { reg: '$q1' }
484 body:             |
485   bb.1:
486     liveins: $q0, $q1
488     ; CHECK-LABEL: name: test_redxor_v16i16
489     ; CHECK: liveins: $q0, $q1
490     ; CHECK-NEXT: {{  $}}
491     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
492     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<8 x s16>) = COPY $q1
493     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<8 x s16>) = G_XOR [[COPY]], [[COPY1]]
494     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s16>), [[UV1:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[XOR]](<8 x s16>)
495     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<4 x s16>) = G_XOR [[UV]], [[UV1]]
496     ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16), [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[XOR1]](<4 x s16>)
497     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[UV2]](s16)
498     ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[UV3]](s16)
499     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
500     ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s32) = G_ANYEXT [[UV4]](s16)
501     ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s32) = G_ANYEXT [[UV5]](s16)
502     ; CHECK-NEXT: [[XOR3:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT2]], [[ANYEXT3]]
503     ; CHECK-NEXT: [[XOR4:%[0-9]+]]:_(s32) = G_XOR [[XOR2]], [[XOR3]]
504     ; CHECK-NEXT: $w0 = COPY [[XOR4]](s32)
505     ; CHECK-NEXT: RET_ReallyLR implicit $w0
506     %1:_(<8 x s16>) = COPY $q0
507     %2:_(<8 x s16>) = COPY $q1
508     %0:_(<16 x s16>) = G_CONCAT_VECTORS %1(<8 x s16>), %2(<8 x s16>)
509     %3:_(s16) = G_VECREDUCE_XOR %0(<16 x s16>)
510     %4:_(s32) = G_ANYEXT %3(s16)
511     $w0 = COPY %4(s32)
512     RET_ReallyLR implicit $w0
516 name:            test_redxor_v2i32
517 alignment:       4
518 tracksRegLiveness: true
519 liveins:
520   - { reg: '$d0' }
521 body:             |
522   bb.1:
523     liveins: $d0
525     ; CHECK-LABEL: name: test_redxor_v2i32
526     ; CHECK: liveins: $d0
527     ; CHECK-NEXT: {{  $}}
528     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
529     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
530     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[UV]], [[UV1]]
531     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[XOR]](s32)
532     ; CHECK-NEXT: $w0 = COPY [[COPY1]](s32)
533     ; CHECK-NEXT: RET_ReallyLR implicit $w0
534     %0:_(<2 x s32>) = COPY $d0
535     %1:_(s32) = G_VECREDUCE_XOR %0(<2 x s32>)
536     $w0 = COPY %1(s32)
537     RET_ReallyLR implicit $w0
541 name:            test_redxor_v4i32
542 alignment:       4
543 tracksRegLiveness: true
544 liveins:
545   - { reg: '$q0' }
546 body:             |
547   bb.1:
548     liveins: $q0
550     ; CHECK-LABEL: name: test_redxor_v4i32
551     ; CHECK: liveins: $q0
552     ; CHECK-NEXT: {{  $}}
553     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
554     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
555     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s32>) = G_XOR [[UV]], [[UV1]]
556     ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[XOR]](<2 x s32>)
557     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s32) = G_XOR [[UV2]], [[UV3]]
558     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY [[XOR1]](s32)
559     ; CHECK-NEXT: $w0 = COPY [[COPY1]](s32)
560     ; CHECK-NEXT: RET_ReallyLR implicit $w0
561     %0:_(<4 x s32>) = COPY $q0
562     %1:_(s32) = G_VECREDUCE_XOR %0(<4 x s32>)
563     $w0 = COPY %1(s32)
564     RET_ReallyLR implicit $w0
568 name:            test_redxor_v8i32
569 alignment:       4
570 tracksRegLiveness: true
571 liveins:
572   - { reg: '$q0' }
573   - { reg: '$q1' }
574 body:             |
575   bb.1:
576     liveins: $q0, $q1
578     ; CHECK-LABEL: name: test_redxor_v8i32
579     ; CHECK: liveins: $q0, $q1
580     ; CHECK-NEXT: {{  $}}
581     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
582     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $q1
583     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR [[COPY]], [[COPY1]]
584     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[XOR]](<4 x s32>)
585     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(<2 x s32>) = G_XOR [[UV]], [[UV1]]
586     ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[XOR1]](<2 x s32>)
587     ; CHECK-NEXT: [[XOR2:%[0-9]+]]:_(s32) = G_XOR [[UV2]], [[UV3]]
588     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY [[XOR2]](s32)
589     ; CHECK-NEXT: $w0 = COPY [[COPY2]](s32)
590     ; CHECK-NEXT: RET_ReallyLR implicit $w0
591     %1:_(<4 x s32>) = COPY $q0
592     %2:_(<4 x s32>) = COPY $q1
593     %0:_(<8 x s32>) = G_CONCAT_VECTORS %1(<4 x s32>), %2(<4 x s32>)
594     %3:_(s32) = G_VECREDUCE_XOR %0(<8 x s32>)
595     $w0 = COPY %3(s32)
596     RET_ReallyLR implicit $w0
600 name:            test_redxor_v2i64
601 alignment:       4
602 tracksRegLiveness: true
603 liveins:
604   - { reg: '$q0' }
605 body:             |
606   bb.1:
607     liveins: $q0
609     ; CHECK-LABEL: name: test_redxor_v2i64
610     ; CHECK: liveins: $q0
611     ; CHECK-NEXT: {{  $}}
612     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
613     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
614     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(s64) = G_XOR [[UV]], [[UV1]]
615     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY [[XOR]](s64)
616     ; CHECK-NEXT: $x0 = COPY [[COPY1]](s64)
617     ; CHECK-NEXT: RET_ReallyLR implicit $x0
618     %0:_(<2 x s64>) = COPY $q0
619     %1:_(s64) = G_VECREDUCE_XOR %0(<2 x s64>)
620     $x0 = COPY %1(s64)
621     RET_ReallyLR implicit $x0
625 name:            test_redxor_v4i64
626 alignment:       4
627 tracksRegLiveness: true
628 liveins:
629   - { reg: '$q0' }
630   - { reg: '$q1' }
631 body:             |
632   bb.1:
633     liveins: $q0, $q1
635     ; CHECK-LABEL: name: test_redxor_v4i64
636     ; CHECK: liveins: $q0, $q1
637     ; CHECK-NEXT: {{  $}}
638     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $q0
639     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $q1
640     ; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<2 x s64>) = G_XOR [[COPY]], [[COPY1]]
641     ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[XOR]](<2 x s64>)
642     ; CHECK-NEXT: [[XOR1:%[0-9]+]]:_(s64) = G_XOR [[UV]], [[UV1]]
643     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s64) = COPY [[XOR1]](s64)
644     ; CHECK-NEXT: $x0 = COPY [[COPY2]](s64)
645     ; CHECK-NEXT: RET_ReallyLR implicit $x0
646     %1:_(<2 x s64>) = COPY $q0
647     %2:_(<2 x s64>) = COPY $q1
648     %0:_(<4 x s64>) = G_CONCAT_VECTORS %1(<2 x s64>), %2(<2 x s64>)
649     %3:_(s64) = G_VECREDUCE_XOR %0(<4 x s64>)
650     $x0 = COPY %3(s64)
651     RET_ReallyLR implicit $x0