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