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
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
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
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
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
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
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
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
154 name: xor_i1_sgpr_trunc_sgpr_trunc
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
179 name: xor_i1_trunc_scc
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
204 name: xor_i1_s_trunc_vcc
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
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
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
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
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
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
324 name: xor_s64_ss_ss_merge
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
350 name: xor_s64_vv_vv_merge
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
380 name: xor_s64_s_sv_merge
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
407 name: xor_s64_s_vs_merge
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
434 name: xor_s64_sv_sv_merge
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
466 name: xor_s64_sv_vs_merge
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
498 name: xor_chain_s64_sv
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
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
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
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
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
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
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
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
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
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
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
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
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
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