[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / regbankselect-xor.mir
blob2c516260bc5b8b135e8adeff439640918aebfa75
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
5 ---
6 name: xor_s32_ss
7 legalized: true
9 body: |
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 ...
21 ---
22 name: xor_s32_sv
23 legalized: true
25 body: |
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 ...
38 ---
39 name: xor_s32_vs
40 legalized: true
42 body: |
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 ...
55 ---
56 name: xor_s32_vv
57 legalized: true
59 body: |
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 ...
71 ---
72 name: xor_i1_scc_scc
73 legalized: true
75 body: |
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 ...
101 name: xor_i1_vcc_vcc
102 legalized: true
104 body: |
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
127 name: xor_i1_scc_vcc
128 legalized: true
130 body: |
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
154 name: xor_i1_sgpr_trunc_sgpr_trunc
155 legalized: true
156 body:             |
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
179 name: xor_i1_trunc_scc
180 legalized: true
181 body:             |
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
204 name: xor_i1_s_trunc_vcc
205 legalized: true
206 body:             |
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
227 name: xor_s64_ss
228 legalized: true
230 body: |
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
243 name: xor_s64_sv
244 legalized: true
246 body: |
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
263 name: xor_s64_vs
264 legalized: true
266 body: |
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
283 name: xor_s64_vv
284 legalized: true
286 body: |
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
303 name: xor_s64_vv_user
304 legalized: true
306 body: |
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
324 name: xor_s64_ss_ss_merge
325 legalized: true
327 body: |
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
350 name: xor_s64_vv_vv_merge
351 legalized: true
353 body: |
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
380 name: xor_s64_s_sv_merge
381 legalized: true
383 body: |
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
407 name: xor_s64_s_vs_merge
408 legalized: true
410 body: |
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
434 name: xor_s64_sv_sv_merge
435 legalized: true
437 body: |
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
466 name: xor_s64_sv_vs_merge
467 legalized: true
469 body: |
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
498 name: xor_chain_s64_sv
499 legalized: true
501 body: |
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
528 name: xor_v2i32_ss
529 legalized: true
531 body: |
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
546 name: xor_v2i32_sv
547 legalized: true
549 body: |
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
568 name: xor_v2i32_vs
569 legalized: true
571 body: |
572   bb.0:
573     liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
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
591 name: xor_v2i32_vv
592 legalized: true
594 body: |
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
613 name: xor_v4s16_ss
614 legalized: true
616 body: |
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
629 name: xor_v4s16_sv
630 legalized: true
632 body: |
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
649 name: xor_v4s16_vs
650 legalized: true
652 body: |
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
669 name: xor_v4s16_vv
670 legalized: true
672 body: |
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
689 name: xor_v2s16_ss
690 legalized: true
692 body: |
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
705 name: xor_v2s16_sv
706 legalized: true
708 body: |
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
722 name: xor_v2s16_vs
723 legalized: true
725 body: |
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
739 name: xor_v2s16_vv
740 legalized: true
742 body: |
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
755 name: xor_i1_vcc_constant
756 legalized: true
758 body: |
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