1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s
3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s
4
5---
6name: xor_s32_ss
7legalized: true
8
9body: |
10  bb.0:
11    liveins: $sgpr0, $sgpr1
12    ; CHECK-LABEL: name: xor_s32_ss
13    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
14    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
15    ; CHECK: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[COPY]], [[COPY1]]
16    %0:_(s32) = COPY $sgpr0
17    %1:_(s32) = COPY $sgpr1
18    %2:_(s32) = G_XOR %0, %1
19...
20
21---
22name: xor_s32_sv
23legalized: true
24
25body: |
26  bb.0:
27    liveins: $sgpr0, $vgpr0
28    ; CHECK-LABEL: name: xor_s32_sv
29    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
30    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
31    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
32    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[COPY2]], [[COPY1]]
33    %0:_(s32) = COPY $sgpr0
34    %1:_(s32) = COPY $vgpr0
35    %2:_(s32) = G_XOR %0, %1
36...
37
38---
39name: xor_s32_vs
40legalized: true
41
42body: |
43  bb.0:
44    liveins: $sgpr0, $vgpr0
45    ; CHECK-LABEL: name: xor_s32_vs
46    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
47    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
48    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
49    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[COPY]], [[COPY2]]
50    %0:_(s32) = COPY $vgpr0
51    %1:_(s32) = COPY $sgpr0
52    %2:_(s32) = G_XOR %0, %1
53...
54
55---
56name: xor_s32_vv
57legalized: true
58
59body: |
60  bb.0:
61    liveins: $vgpr0, $vgpr1
62    ; CHECK-LABEL: name: xor_s32_vv
63    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
64    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
65    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[COPY]], [[COPY1]]
66    %0:_(s32) = COPY $vgpr0
67    %1:_(s32) = COPY $vgpr1
68    %2:_(s32) = G_XOR %0, %1
69...
70
71---
72name: xor_i1_scc_scc
73legalized: true
74
75body: |
76  bb.0:
77    liveins: $sgpr0, $sgpr1
78    ; CHECK-LABEL: name: xor_i1_scc_scc
79    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
80    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
81    ; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
82    ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
83    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
84    ; CHECK: [[ICMP1:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]
85    ; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP1]](s32)
86    ; CHECK: [[ANYEXT:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC]](s1)
87    ; CHECK: [[ANYEXT1:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC1]](s1)
88    ; CHECK: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
89    ; CHECK: [[TRUNC2:%[0-9]+]]:sgpr(s1) = G_TRUNC [[XOR]](s32)
90    ; CHECK: S_NOP 0, implicit [[TRUNC2]](s1)
91      %0:_(s32) = COPY $sgpr0
92      %1:_(s32) = COPY $sgpr1
93      %2:_(s32) = G_CONSTANT i32 0
94      %4:_(s1) = G_ICMP intpred(ne), %0, %2
95      %5:_(s1) = G_ICMP intpred(ne), %1, %2
96      %6:_(s1) = G_XOR %4, %5
97      S_NOP 0, implicit %6
98...
99
100---
101name: xor_i1_vcc_vcc
102legalized: true
103
104body: |
105  bb.0:
106    liveins: $vgpr0, $vgpr1
107    ; CHECK-LABEL: name: xor_i1_vcc_vcc
108    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
109    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
110    ; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
111    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
112    ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY2]]
113    ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
114    ; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY3]]
115    ; CHECK: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[ICMP]], [[ICMP1]]
116    ; CHECK: S_NOP 0, implicit [[XOR]](s1)
117      %0:_(s32) = COPY $vgpr0
118      %1:_(s32) = COPY $vgpr1
119      %2:_(s32) = G_CONSTANT i32 0
120      %4:_(s1) = G_ICMP intpred(ne), %0, %2
121      %5:_(s1) = G_ICMP intpred(ne), %1, %2
122      %6:_(s1) = G_XOR %4, %5
123      S_NOP 0, implicit %6
124...
125
126---
127name: xor_i1_scc_vcc
128legalized: true
129
130body: |
131  bb.0:
132    liveins: $sgpr0, $vgpr0
133    ; CHECK-LABEL: name: xor_i1_scc_vcc
134    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
135    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
136    ; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
137    ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]
138    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
139    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
140    ; CHECK: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
141    ; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
142    ; CHECK: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[COPY3]], [[ICMP1]]
143    ; CHECK: S_NOP 0, implicit [[XOR]](s1)
144      %0:_(s32) = COPY $sgpr0
145      %1:_(s32) = COPY $vgpr0
146      %2:_(s32) = G_CONSTANT i32 0
147      %4:_(s1) = G_ICMP intpred(ne), %0, %2
148      %5:_(s1) = G_ICMP intpred(ne), %1, %2
149      %6:_(s1) = G_XOR %4, %5
150      S_NOP 0, implicit %6
151...
152
153---
154name: xor_i1_sgpr_trunc_sgpr_trunc
155legalized: true
156body:             |
157  bb.0.entry:
158    liveins: $sgpr0, $sgpr1
159    ; CHECK-LABEL: name: xor_i1_sgpr_trunc_sgpr_trunc
160    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
161    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
162    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
163    ; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY1]](s32)
164    ; CHECK: [[ANYEXT:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC]](s1)
165    ; CHECK: [[ANYEXT1:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC1]](s1)
166    ; CHECK: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
167    ; CHECK: [[TRUNC2:%[0-9]+]]:sgpr(s1) = G_TRUNC [[XOR]](s32)
168    ; CHECK: S_NOP 0, implicit [[TRUNC2]](s1)
169    %0:_(s32) = COPY $sgpr0
170    %1:_(s32) = COPY $sgpr1
171    %2:_(s1) = G_TRUNC %0
172    %3:_(s1) = G_TRUNC %1
173    %4:_(s1) = G_XOR %2, %3
174    S_NOP 0, implicit %4
175
176...
177
178---
179name: xor_i1_trunc_scc
180legalized: true
181body:             |
182  bb.0.entry:
183    liveins: $sgpr0, $sgpr1
184    ; CHECK-LABEL: name: xor_i1_trunc_scc
185    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
186    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
187    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
188    ; CHECK: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
189    ; CHECK: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
190    ; CHECK: [[ANYEXT:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC]](s1)
191    ; CHECK: [[ANYEXT1:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC1]](s1)
192    ; CHECK: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[ANYEXT]], [[ANYEXT1]]
193    ; CHECK: [[TRUNC2:%[0-9]+]]:sgpr(s1) = G_TRUNC [[XOR]](s32)
194    ; CHECK: S_NOP 0, implicit [[TRUNC2]](s1)
195    %0:_(s32) = COPY $sgpr0
196    %1:_(s32) = COPY $sgpr1
197    %2:_(s1) = G_TRUNC %0
198    %3:_(s1) = G_ICMP intpred(ne), %0, %1
199    %4:_(s1) = G_XOR %2, %3
200    S_NOP 0, implicit %4
201...
202
203---
204name: xor_i1_s_trunc_vcc
205legalized: true
206body:             |
207  bb.0.entry:
208    liveins: $sgpr0, $vgpr0
209    ; CHECK-LABEL: name: xor_i1_s_trunc_vcc
210    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
211    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
212    ; CHECK: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
213    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
214    ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY1]]
215    ; CHECK: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
216    ; CHECK: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[COPY3]], [[ICMP]]
217    ; CHECK: S_NOP 0, implicit [[XOR]](s1)
218    %0:_(s32) = COPY $sgpr0
219    %1:_(s32) = COPY $vgpr0
220    %2:_(s1) = G_TRUNC %0
221    %3:_(s1) = G_ICMP intpred(ne), %0, %1
222    %4:_(s1) = G_XOR %2, %3
223    S_NOP 0, implicit %4
224...
225
226---
227name: xor_s64_ss
228legalized: true
229
230body: |
231  bb.0:
232    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
233    ; CHECK-LABEL: name: xor_s64_ss
234    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
235    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
236    ; CHECK: [[XOR:%[0-9]+]]:sgpr(s64) = G_XOR [[COPY]], [[COPY1]]
237    %0:_(s64) = COPY $sgpr0_sgpr1
238    %1:_(s64) = COPY $sgpr2_sgpr3
239    %2:_(s64) = G_XOR %0, %1
240...
241
242---
243name: xor_s64_sv
244legalized: true
245
246body: |
247  bb.0:
248    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
249    ; CHECK-LABEL: name: xor_s64_sv
250    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
251    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
252    ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
253    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
254    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
255    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
256    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
257    %0:_(s64) = COPY $sgpr0_sgpr1
258    %1:_(s64) = COPY $vgpr0_vgpr1
259    %2:_(s64) = G_XOR %0, %1
260...
261
262---
263name: xor_s64_vs
264legalized: true
265
266body: |
267  bb.0:
268    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
269    ; CHECK-LABEL: name: xor_s64_vs
270    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
271    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
272    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
273    ; CHECK: [[UV2:%[0-9]+]]:sgpr(s32), [[UV3:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
274    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
275    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
276    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
277    %0:_(s64) = COPY $vgpr0_vgpr1
278    %1:_(s64) = COPY $sgpr0_sgpr1
279    %2:_(s64) = G_XOR %0, %1
280...
281
282---
283name: xor_s64_vv
284legalized: true
285
286body: |
287  bb.0:
288    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
289    ; CHECK-LABEL: name: xor_s64_vv
290    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
291    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
292    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
293    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
294    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
295    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
296    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
297    %0:_(s64) = COPY $vgpr0_vgpr1
298    %1:_(s64) = COPY $vgpr2_vgpr3
299    %2:_(s64) = G_XOR %0, %1
300...
301
302---
303name: xor_s64_vv_user
304legalized: true
305
306body: |
307  bb.0:
308    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
309    ; CHECK-LABEL: name: xor_s64_vv_user
310    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
311    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
312    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
313    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
314    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
315    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
316    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
317    ; CHECK: S_NOP 0, implicit [[MV]](s64)
318    %0:_(s64) = COPY $vgpr0_vgpr1
319    %1:_(s64) = COPY $vgpr2_vgpr3
320    %2:_(s64) = G_XOR %0, %1
321    S_NOP 0, implicit %2
322...
323---
324name: xor_s64_ss_ss_merge
325legalized: true
326
327body: |
328  bb.0:
329    liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
330    ; CHECK-LABEL: name: xor_s64_ss_ss_merge
331    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
332    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
333    ; CHECK: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
334    ; CHECK: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3
335    ; CHECK: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
336    ; CHECK: [[MV1:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
337    ; CHECK: [[XOR:%[0-9]+]]:sgpr(s64) = G_XOR [[MV]], [[MV1]]
338    ; CHECK: S_NOP 0, implicit [[XOR]](s64)
339    %0:_(s32) = COPY $sgpr0
340    %1:_(s32) = COPY $sgpr1
341    %2:_(s32) = COPY $sgpr2
342    %3:_(s32) = COPY $sgpr3
343    %4:_(s64) = G_MERGE_VALUES %0, %1
344    %5:_(s64) = G_MERGE_VALUES %2, %3
345    %6:_(s64) = G_XOR %4, %5
346    S_NOP 0, implicit %6
347...
348
349---
350name: xor_s64_vv_vv_merge
351legalized: true
352
353body: |
354  bb.0:
355    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
356    ; CHECK-LABEL: name: xor_s64_vv_vv_merge
357    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
358    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
359    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
360    ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
361    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
362    ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
363    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
364    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
365    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
366    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
367    ; CHECK: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
368    ; CHECK: S_NOP 0, implicit [[MV2]](s64)
369    %0:_(s32) = COPY $vgpr0
370    %1:_(s32) = COPY $vgpr1
371    %2:_(s32) = COPY $vgpr2
372    %3:_(s32) = COPY $vgpr3
373    %4:_(s64) = G_MERGE_VALUES %0, %1
374    %5:_(s64) = G_MERGE_VALUES %2, %3
375    %6:_(s64) = G_XOR %4, %5
376    S_NOP 0, implicit %6
377...
378
379---
380name: xor_s64_s_sv_merge
381legalized: true
382
383body: |
384  bb.0:
385    liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
386    ; CHECK-LABEL: name: xor_s64_s_sv_merge
387    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
388    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
389    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
390    ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
391    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY2]](s32)
392    ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
393    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
394    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
395    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
396    ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
397    ; CHECK: S_NOP 0, implicit [[MV1]](s64)
398    %0:_(s64) = COPY $sgpr0_sgpr1
399    %1:_(s32) = COPY $sgpr2
400    %2:_(s32) = COPY $vgpr0
401    %3:_(s64) = G_MERGE_VALUES %1, %2
402    %4:_(s64) = G_XOR %0, %3
403    S_NOP 0, implicit %4
404...
405
406---
407name: xor_s64_s_vs_merge
408legalized: true
409
410body: |
411  bb.0:
412    liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0
413    ; CHECK-LABEL: name: xor_s64_s_vs_merge
414    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
415    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
416    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
417    ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
418    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)
419    ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
420    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
421    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
422    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
423    ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
424    ; CHECK: S_NOP 0, implicit [[MV1]](s64)
425    %0:_(s64) = COPY $sgpr0_sgpr1
426    %1:_(s32) = COPY $sgpr2
427    %2:_(s32) = COPY $vgpr0
428    %3:_(s64) = G_MERGE_VALUES %2, %1
429    %4:_(s64) = G_XOR %0, %3
430    S_NOP 0, implicit %4
431...
432
433---
434name: xor_s64_sv_sv_merge
435legalized: true
436
437body: |
438  bb.0:
439    liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
440    ; CHECK-LABEL: name: xor_s64_sv_sv_merge
441    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
442    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
443    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
444    ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
445    ; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
446    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)
447    ; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
448    ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY5]](s32), [[COPY3]](s32)
449    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
450    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
451    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
452    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
453    ; CHECK: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
454    ; CHECK: S_NOP 0, implicit [[MV2]](s64)
455    %0:_(s32) = COPY $sgpr0
456    %1:_(s32) = COPY $sgpr1
457    %2:_(s32) = COPY $vgpr0
458    %3:_(s32) = COPY $vgpr1
459    %4:_(s64) = G_MERGE_VALUES %0, %2
460    %5:_(s64) = G_MERGE_VALUES %1, %3
461    %6:_(s64) = G_XOR %4, %5
462    S_NOP 0, implicit %6
463...
464
465---
466name: xor_s64_sv_vs_merge
467legalized: true
468
469body: |
470  bb.0:
471    liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
472    ; CHECK-LABEL: name: xor_s64_sv_vs_merge
473    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
474    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
475    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
476    ; CHECK: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
477    ; CHECK: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
478    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)
479    ; CHECK: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
480    ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY5]](s32)
481    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
482    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)
483    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
484    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
485    ; CHECK: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
486    ; CHECK: S_NOP 0, implicit [[MV2]](s64)
487    %0:_(s32) = COPY $sgpr0
488    %1:_(s32) = COPY $sgpr1
489    %2:_(s32) = COPY $vgpr0
490    %3:_(s32) = COPY $vgpr1
491    %4:_(s64) = G_MERGE_VALUES %0, %2
492    %5:_(s64) = G_MERGE_VALUES %3, %1
493    %6:_(s64) = G_XOR %4, %5
494    S_NOP 0, implicit %6
495...
496
497---
498name: xor_chain_s64_sv
499legalized: true
500
501body: |
502  bb.0:
503    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
504    ; CHECK-LABEL: name: xor_chain_s64_sv
505    ; CHECK: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
506    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
507    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
508    ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
509    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
510    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
511    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
512    ; CHECK: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)
513    ; CHECK: [[UV4:%[0-9]+]]:sgpr(s32), [[UV5:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
514    ; CHECK: [[UV6:%[0-9]+]]:vgpr(s32), [[UV7:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)
515    ; CHECK: [[XOR2:%[0-9]+]]:vgpr(s32) = G_XOR [[UV4]], [[UV6]]
516    ; CHECK: [[XOR3:%[0-9]+]]:vgpr(s32) = G_XOR [[UV5]], [[UV7]]
517    ; CHECK: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR2]](s32), [[XOR3]](s32)
518    ; CHECK: S_NOP 0, implicit [[MV1]](s64)
519    %0:_(s64) = COPY $sgpr0_sgpr1
520    %1:_(s64) = COPY $sgpr2_sgpr3
521    %2:_(s64) = COPY $vgpr0_vgpr1
522    %3:_(s64) = G_XOR %0, %2
523    %4:_(s64) = G_XOR %1, %3
524    S_NOP 0, implicit %4
525...
526
527---
528name: xor_v2i32_ss
529legalized: true
530
531body: |
532  bb.0:
533    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
534    ; CHECK-LABEL: name: xor_v2i32_ss
535    ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
536    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
537    ; CHECK: [[XOR:%[0-9]+]]:sgpr(<2 x s32>) = G_XOR [[COPY]], [[COPY1]]
538    ; CHECK: S_NOP 0, implicit [[XOR]](<2 x s32>)
539    %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
540    %1:_(<2 x s32>) = COPY $sgpr2_sgpr3
541    %2:_(<2 x s32>) = G_XOR %0, %1
542    S_NOP 0, implicit %2
543...
544
545---
546name: xor_v2i32_sv
547legalized: true
548
549body: |
550  bb.0:
551    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
552    ; CHECK-LABEL: name: xor_v2i32_sv
553    ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
554    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
555    ; CHECK: [[UV:%[0-9]+]]:sgpr(s32), [[UV1:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
556    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
557    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
558    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
559    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[XOR]](s32), [[XOR1]](s32)
560    ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
561    %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
562    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
563    %2:_(<2 x s32>) = G_XOR %0, %1
564    S_NOP 0, implicit %2
565...
566
567---
568name: xor_v2i32_vs
569legalized: true
570
571body: |
572  bb.0:
573    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
574
575    ; CHECK-LABEL: name: xor_v2i32_vs
576    ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
577    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
578    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
579    ; CHECK: [[UV2:%[0-9]+]]:sgpr(s32), [[UV3:%[0-9]+]]:sgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
580    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
581    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
582    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[XOR]](s32), [[XOR1]](s32)
583    ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
584    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
585    %1:_(<2 x s32>) = COPY $sgpr0_sgpr1
586    %2:_(<2 x s32>) = G_XOR %0, %1
587    S_NOP 0, implicit %2
588...
589
590---
591name: xor_v2i32_vv
592legalized: true
593
594body: |
595  bb.0:
596    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
597    ; CHECK-LABEL: name: xor_v2i32_vv
598    ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
599    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
600    ; CHECK: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
601    ; CHECK: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
602    ; CHECK: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]
603    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]
604    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[XOR]](s32), [[XOR1]](s32)
605    ; CHECK: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)
606    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
607    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
608    %2:_(<2 x s32>) = G_XOR %0, %1
609    S_NOP 0, implicit %2
610...
611
612---
613name: xor_v4s16_ss
614legalized: true
615
616body: |
617  bb.0:
618    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
619    ; CHECK-LABEL: name: xor_v4s16_ss
620    ; CHECK: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
621    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
622    ; CHECK: [[XOR:%[0-9]+]]:sgpr(<4 x s16>) = G_XOR [[COPY]], [[COPY1]]
623    %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
624    %1:_(<4 x s16>) = COPY $sgpr2_sgpr3
625    %2:_(<4 x s16>) = G_XOR %0, %1
626...
627
628---
629name: xor_v4s16_sv
630legalized: true
631
632body: |
633  bb.0:
634    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
635    ; CHECK-LABEL: name: xor_v4s16_sv
636    ; CHECK: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
637    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
638    ; CHECK: [[UV:%[0-9]+]]:sgpr(<2 x s16>), [[UV1:%[0-9]+]]:sgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
639    ; CHECK: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
640    ; CHECK: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV]], [[UV2]]
641    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV1]], [[UV3]]
642    ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[XOR]](<2 x s16>), [[XOR1]](<2 x s16>)
643    %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
644    %1:_(<4 x s16>) = COPY $vgpr0_vgpr1
645    %2:_(<4 x s16>) = G_XOR %0, %1
646...
647
648---
649name: xor_v4s16_vs
650legalized: true
651
652body: |
653  bb.0:
654    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
655    ; CHECK-LABEL: name: xor_v4s16_vs
656    ; CHECK: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
657    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
658    ; CHECK: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
659    ; CHECK: [[UV2:%[0-9]+]]:sgpr(<2 x s16>), [[UV3:%[0-9]+]]:sgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
660    ; CHECK: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV]], [[UV2]]
661    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV1]], [[UV3]]
662    ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[XOR]](<2 x s16>), [[XOR1]](<2 x s16>)
663    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
664    %1:_(<4 x s16>) = COPY $sgpr0_sgpr1
665    %2:_(<4 x s16>) = G_XOR %0, %1
666...
667
668---
669name: xor_v4s16_vv
670legalized: true
671
672body: |
673  bb.0:
674    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
675    ; CHECK-LABEL: name: xor_v4s16_vv
676    ; CHECK: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
677    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
678    ; CHECK: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
679    ; CHECK: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
680    ; CHECK: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV]], [[UV2]]
681    ; CHECK: [[XOR1:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV1]], [[UV3]]
682    ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[XOR]](<2 x s16>), [[XOR1]](<2 x s16>)
683    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
684    %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
685    %2:_(<4 x s16>) = G_XOR %0, %1
686...
687
688---
689name: xor_v2s16_ss
690legalized: true
691
692body: |
693  bb.0:
694    liveins: $sgpr0, $sgpr1
695    ; CHECK-LABEL: name: xor_v2s16_ss
696    ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
697    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
698    ; CHECK: [[XOR:%[0-9]+]]:sgpr(<2 x s16>) = G_XOR [[COPY]], [[COPY1]]
699    %0:_(<2 x s16>) = COPY $sgpr0
700    %1:_(<2 x s16>) = COPY $sgpr1
701    %2:_(<2 x s16>) = G_XOR %0, %1
702...
703
704---
705name: xor_v2s16_sv
706legalized: true
707
708body: |
709  bb.0:
710    liveins: $sgpr0, $vgpr0
711    ; CHECK-LABEL: name: xor_v2s16_sv
712    ; CHECK: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
713    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
714    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY]](<2 x s16>)
715    ; CHECK: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[COPY2]], [[COPY1]]
716    %0:_(<2 x s16>) = COPY $sgpr0
717    %1:_(<2 x s16>) = COPY $vgpr0
718    %2:_(<2 x s16>) = G_XOR %0, %1
719...
720
721---
722name: xor_v2s16_vs
723legalized: true
724
725body: |
726  bb.0:
727    liveins: $sgpr0, $vgpr0
728    ; CHECK-LABEL: name: xor_v2s16_vs
729    ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
730    ; CHECK: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
731    ; CHECK: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY1]](<2 x s16>)
732    ; CHECK: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[COPY]], [[COPY2]]
733    %0:_(<2 x s16>) = COPY $vgpr0
734    %1:_(<2 x s16>) = COPY $sgpr0
735    %2:_(<2 x s16>) = G_XOR %0, %1
736...
737
738---
739name: xor_v2s16_vv
740legalized: true
741
742body: |
743  bb.0:
744    liveins: $vgpr0, $vgpr1
745    ; CHECK-LABEL: name: xor_v2s16_vv
746    ; CHECK: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
747    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1
748    ; CHECK: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[COPY]], [[COPY1]]
749    %0:_(<2 x s16>) = COPY $vgpr0
750    %1:_(<2 x s16>) = COPY $vgpr1
751    %2:_(<2 x s16>) = G_XOR %0, %1
752...
753
754---
755name: xor_i1_vcc_constant
756legalized: true
757
758body: |
759  bb.0:
760    liveins: $vgpr0, $vgpr1
761    ; CHECK-LABEL: name: xor_i1_vcc_constant
762    ; CHECK: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
763    ; CHECK: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
764    ; CHECK: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)
765    ; CHECK: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
766    ; CHECK: [[C1:%[0-9]+]]:sgpr(s1) = G_CONSTANT i1 true
767    ; CHECK: [[COPY2:%[0-9]+]]:vcc(s1) = COPY [[C1]](s1)
768    ; CHECK: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[ICMP]], [[COPY2]]
769    ; CHECK: S_NOP 0, implicit [[XOR]](s1)
770      %0:_(s32) = COPY $vgpr0
771      %1:_(s32) = G_CONSTANT i32 0
772      %2:_(s1) = G_ICMP intpred(ne), %0, %1
773      %3:_(s1) = G_CONSTANT i1 true
774      %4:_(s1) = G_XOR %2, %3
775      S_NOP 0, implicit %4
776...
777