842 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass="amdgpu-regbankselect,amdgpu-regbanklegalize" %s -verify-machineinstrs -o - | FileCheck %s3 4---5name: xor_s32_ss6legalized: true7 8body: |9 bb.0:10 liveins: $sgpr0, $sgpr111 ; CHECK-LABEL: name: xor_s32_ss12 ; CHECK: liveins: $sgpr0, $sgpr113 ; CHECK-NEXT: {{ $}}14 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr015 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr116 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[COPY]], [[COPY1]]17 %0:_(s32) = COPY $sgpr018 %1:_(s32) = COPY $sgpr119 %2:_(s32) = G_XOR %0, %120...21 22---23name: xor_s32_sv24legalized: true25 26body: |27 bb.0:28 liveins: $sgpr0, $vgpr029 ; CHECK-LABEL: name: xor_s32_sv30 ; CHECK: liveins: $sgpr0, $vgpr031 ; CHECK-NEXT: {{ $}}32 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr033 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr034 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)35 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[COPY2]], [[COPY1]]36 %0:_(s32) = COPY $sgpr037 %1:_(s32) = COPY $vgpr038 %2:_(s32) = G_XOR %0, %139...40 41---42name: xor_s32_vs43legalized: true44 45body: |46 bb.0:47 liveins: $sgpr0, $vgpr048 ; CHECK-LABEL: name: xor_s32_vs49 ; CHECK: liveins: $sgpr0, $vgpr050 ; CHECK-NEXT: {{ $}}51 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr052 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr053 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)54 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[COPY]], [[COPY2]]55 %0:_(s32) = COPY $vgpr056 %1:_(s32) = COPY $sgpr057 %2:_(s32) = G_XOR %0, %158...59 60---61name: xor_s32_vv62legalized: true63 64body: |65 bb.0:66 liveins: $vgpr0, $vgpr167 ; CHECK-LABEL: name: xor_s32_vv68 ; CHECK: liveins: $vgpr0, $vgpr169 ; CHECK-NEXT: {{ $}}70 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr071 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr172 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[COPY]], [[COPY1]]73 %0:_(s32) = COPY $vgpr074 %1:_(s32) = COPY $vgpr175 %2:_(s32) = G_XOR %0, %176...77 78---79name: xor_i1_scc_scc80legalized: true81 82body: |83 bb.0:84 liveins: $sgpr0, $sgpr185 ; CHECK-LABEL: name: xor_i1_scc_scc86 ; CHECK: liveins: $sgpr0, $sgpr187 ; CHECK-NEXT: {{ $}}88 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr089 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr190 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 091 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]92 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY1]](s32), [[C]]93 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[ICMP]], [[ICMP1]]94 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s32)95 %0:_(s32) = COPY $sgpr096 %1:_(s32) = COPY $sgpr197 %2:_(s32) = G_CONSTANT i32 098 %4:_(s1) = G_ICMP intpred(ne), %0, %299 %5:_(s1) = G_ICMP intpred(ne), %1, %2100 %6:_(s1) = G_XOR %4, %5101 %7:_(s32) = G_ANYEXT %6102 S_NOP 0, implicit %7103...104 105---106name: xor_i1_vcc_vcc107legalized: true108 109body: |110 bb.0:111 liveins: $vgpr0, $vgpr1112 ; CHECK-LABEL: name: xor_i1_vcc_vcc113 ; CHECK: liveins: $vgpr0, $vgpr1114 ; CHECK-NEXT: {{ $}}115 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0116 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1117 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0118 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)119 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY2]]120 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)121 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY3]]122 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[ICMP]], [[ICMP1]]123 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s1)124 %0:_(s32) = COPY $vgpr0125 %1:_(s32) = COPY $vgpr1126 %2:_(s32) = G_CONSTANT i32 0127 %4:_(s1) = G_ICMP intpred(ne), %0, %2128 %5:_(s1) = G_ICMP intpred(ne), %1, %2129 %6:_(s1) = G_XOR %4, %5130 S_NOP 0, implicit %6131...132 133---134name: xor_i1_scc_vcc135legalized: true136 137body: |138 bb.0:139 liveins: $sgpr0, $vgpr0140 ; CHECK-LABEL: name: xor_i1_scc_vcc141 ; CHECK: liveins: $sgpr0, $vgpr0142 ; CHECK-NEXT: {{ $}}143 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0144 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0145 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0146 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[C]]147 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)148 ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]149 ; CHECK-NEXT: [[AMDGPU_COPY_VCC_SCC:%[0-9]+]]:vcc(s1) = G_AMDGPU_COPY_VCC_SCC [[ICMP]](s32)150 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[AMDGPU_COPY_VCC_SCC]], [[ICMP1]]151 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s1)152 %0:_(s32) = COPY $sgpr0153 %1:_(s32) = COPY $vgpr0154 %2:_(s32) = G_CONSTANT i32 0155 %4:_(s1) = G_ICMP intpred(ne), %0, %2156 %5:_(s1) = G_ICMP intpred(ne), %1, %2157 %6:_(s1) = G_XOR %4, %5158 S_NOP 0, implicit %6159...160 161---162name: xor_i1_sgpr_trunc_sgpr_trunc163legalized: true164body: |165 bb.0.entry:166 liveins: $sgpr0, $sgpr1167 ; CHECK-LABEL: name: xor_i1_sgpr_trunc_sgpr_trunc168 ; CHECK: liveins: $sgpr0, $sgpr1169 ; CHECK-NEXT: {{ $}}170 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0171 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1172 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[COPY]], [[COPY1]]173 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s32)174 %0:_(s32) = COPY $sgpr0175 %1:_(s32) = COPY $sgpr1176 %2:_(s1) = G_TRUNC %0177 %3:_(s1) = G_TRUNC %1178 %4:_(s1) = G_XOR %2, %3179 %5:_(s32) = G_ANYEXT %4180 S_NOP 0, implicit %5181 182...183 184---185name: xor_i1_trunc_scc186legalized: true187body: |188 bb.0.entry:189 liveins: $sgpr0, $sgpr1190 ; CHECK-LABEL: name: xor_i1_trunc_scc191 ; CHECK: liveins: $sgpr0, $sgpr1192 ; CHECK-NEXT: {{ $}}193 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0194 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1195 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]196 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(s32) = G_XOR [[COPY]], [[ICMP]]197 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s32)198 %0:_(s32) = COPY $sgpr0199 %1:_(s32) = COPY $sgpr1200 %2:_(s1) = G_TRUNC %0201 %3:_(s1) = G_ICMP intpred(ne), %0, %1202 %4:_(s1) = G_XOR %2, %3203 %5:_(s32) = G_ANYEXT %4204 S_NOP 0, implicit %5205...206 207---208name: xor_i1_s_trunc_vcc209legalized: true210body: |211 bb.0.entry:212 liveins: $sgpr0, $vgpr0213 ; CHECK-LABEL: name: xor_i1_s_trunc_vcc214 ; CHECK: liveins: $sgpr0, $vgpr0215 ; CHECK-NEXT: {{ $}}216 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0217 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0218 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)219 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY1]]220 ; CHECK-NEXT: [[AMDGPU_COPY_VCC_SCC:%[0-9]+]]:vcc(s1) = G_AMDGPU_COPY_VCC_SCC [[COPY]](s32)221 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[AMDGPU_COPY_VCC_SCC]], [[ICMP]]222 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s1)223 %0:_(s32) = COPY $sgpr0224 %1:_(s32) = COPY $vgpr0225 %2:_(s1) = G_TRUNC %0226 %3:_(s1) = G_ICMP intpred(ne), %0, %1227 %4:_(s1) = G_XOR %2, %3228 S_NOP 0, implicit %4229...230 231---232name: xor_s64_ss233legalized: true234 235body: |236 bb.0:237 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3238 ; CHECK-LABEL: name: xor_s64_ss239 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3240 ; CHECK-NEXT: {{ $}}241 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1242 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3243 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(s64) = G_XOR [[COPY]], [[COPY1]]244 %0:_(s64) = COPY $sgpr0_sgpr1245 %1:_(s64) = COPY $sgpr2_sgpr3246 %2:_(s64) = G_XOR %0, %1247...248 249---250name: xor_s64_sv251legalized: true252 253body: |254 bb.0:255 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1256 ; CHECK-LABEL: name: xor_s64_sv257 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1258 ; CHECK-NEXT: {{ $}}259 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1260 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1261 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)262 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)263 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)264 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]265 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]266 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)267 %0:_(s64) = COPY $sgpr0_sgpr1268 %1:_(s64) = COPY $vgpr0_vgpr1269 %2:_(s64) = G_XOR %0, %1270...271 272---273name: xor_s64_vs274legalized: true275 276body: |277 bb.0:278 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1279 ; CHECK-LABEL: name: xor_s64_vs280 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1281 ; CHECK-NEXT: {{ $}}282 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1283 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1284 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)285 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)286 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)287 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]288 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]289 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)290 %0:_(s64) = COPY $vgpr0_vgpr1291 %1:_(s64) = COPY $sgpr0_sgpr1292 %2:_(s64) = G_XOR %0, %1293...294 295---296name: xor_s64_vv297legalized: true298 299body: |300 bb.0:301 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3302 ; CHECK-LABEL: name: xor_s64_vv303 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3304 ; CHECK-NEXT: {{ $}}305 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1306 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3307 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)308 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)309 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]310 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]311 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)312 %0:_(s64) = COPY $vgpr0_vgpr1313 %1:_(s64) = COPY $vgpr2_vgpr3314 %2:_(s64) = G_XOR %0, %1315...316 317---318name: xor_s64_vv_user319legalized: true320 321body: |322 bb.0:323 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3324 ; CHECK-LABEL: name: xor_s64_vv_user325 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3326 ; CHECK-NEXT: {{ $}}327 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1328 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3329 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)330 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)331 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]332 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]333 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)334 ; CHECK-NEXT: S_NOP 0, implicit [[MV]](s64)335 %0:_(s64) = COPY $vgpr0_vgpr1336 %1:_(s64) = COPY $vgpr2_vgpr3337 %2:_(s64) = G_XOR %0, %1338 S_NOP 0, implicit %2339...340---341name: xor_s64_ss_ss_merge342legalized: true343 344body: |345 bb.0:346 liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3347 ; CHECK-LABEL: name: xor_s64_ss_ss_merge348 ; CHECK: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3349 ; CHECK-NEXT: {{ $}}350 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0351 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1352 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2353 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3354 ; CHECK-NEXT: [[MV:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)355 ; CHECK-NEXT: [[MV1:%[0-9]+]]:sgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)356 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(s64) = G_XOR [[MV]], [[MV1]]357 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s64)358 %0:_(s32) = COPY $sgpr0359 %1:_(s32) = COPY $sgpr1360 %2:_(s32) = COPY $sgpr2361 %3:_(s32) = COPY $sgpr3362 %4:_(s64) = G_MERGE_VALUES %0, %1363 %5:_(s64) = G_MERGE_VALUES %2, %3364 %6:_(s64) = G_XOR %4, %5365 S_NOP 0, implicit %6366...367 368---369name: xor_s64_vv_vv_merge370legalized: true371 372body: |373 bb.0:374 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3375 ; CHECK-LABEL: name: xor_s64_vv_vv_merge376 ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3377 ; CHECK-NEXT: {{ $}}378 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0379 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1380 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2381 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3382 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)383 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)384 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)385 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)386 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]387 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]388 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)389 ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)390 %0:_(s32) = COPY $vgpr0391 %1:_(s32) = COPY $vgpr1392 %2:_(s32) = COPY $vgpr2393 %3:_(s32) = COPY $vgpr3394 %4:_(s64) = G_MERGE_VALUES %0, %1395 %5:_(s64) = G_MERGE_VALUES %2, %3396 %6:_(s64) = G_XOR %4, %5397 S_NOP 0, implicit %6398...399 400---401name: xor_s64_s_sv_merge402legalized: true403 404body: |405 bb.0:406 liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0407 ; CHECK-LABEL: name: xor_s64_s_sv_merge408 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0409 ; CHECK-NEXT: {{ $}}410 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1411 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2412 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0413 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)414 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY2]](s32)415 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)416 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY4]](s64)417 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)418 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]419 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]420 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)421 ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)422 %0:_(s64) = COPY $sgpr0_sgpr1423 %1:_(s32) = COPY $sgpr2424 %2:_(s32) = COPY $vgpr0425 %3:_(s64) = G_MERGE_VALUES %1, %2426 %4:_(s64) = G_XOR %0, %3427 S_NOP 0, implicit %4428...429 430---431name: xor_s64_s_vs_merge432legalized: true433 434body: |435 bb.0:436 liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0437 ; CHECK-LABEL: name: xor_s64_s_vs_merge438 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2, $vgpr0439 ; CHECK-NEXT: {{ $}}440 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1441 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr2442 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0443 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)444 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY2]](s32), [[COPY3]](s32)445 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)446 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY4]](s64)447 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)448 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]449 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]450 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)451 ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)452 %0:_(s64) = COPY $sgpr0_sgpr1453 %1:_(s32) = COPY $sgpr2454 %2:_(s32) = COPY $vgpr0455 %3:_(s64) = G_MERGE_VALUES %2, %1456 %4:_(s64) = G_XOR %0, %3457 S_NOP 0, implicit %4458...459 460---461name: xor_s64_sv_sv_merge462legalized: true463 464body: |465 bb.0:466 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1467 ; CHECK-LABEL: name: xor_s64_sv_sv_merge468 ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1469 ; CHECK-NEXT: {{ $}}470 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0471 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1472 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0473 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1474 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)475 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)476 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)477 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY5]](s32), [[COPY3]](s32)478 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)479 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)480 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]481 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]482 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)483 ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)484 %0:_(s32) = COPY $sgpr0485 %1:_(s32) = COPY $sgpr1486 %2:_(s32) = COPY $vgpr0487 %3:_(s32) = COPY $vgpr1488 %4:_(s64) = G_MERGE_VALUES %0, %2489 %5:_(s64) = G_MERGE_VALUES %1, %3490 %6:_(s64) = G_XOR %4, %5491 S_NOP 0, implicit %6492...493 494---495name: xor_s64_sv_vs_merge496legalized: true497 498body: |499 bb.0:500 liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1501 ; CHECK-LABEL: name: xor_s64_sv_vs_merge502 ; CHECK: liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1503 ; CHECK-NEXT: {{ $}}504 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0505 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1506 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0507 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1508 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)509 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY4]](s32), [[COPY2]](s32)510 ; CHECK-NEXT: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)511 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[COPY3]](s32), [[COPY5]](s32)512 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)513 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV1]](s64)514 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]515 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]516 ; CHECK-NEXT: [[MV2:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)517 ; CHECK-NEXT: S_NOP 0, implicit [[MV2]](s64)518 %0:_(s32) = COPY $sgpr0519 %1:_(s32) = COPY $sgpr1520 %2:_(s32) = COPY $vgpr0521 %3:_(s32) = COPY $vgpr1522 %4:_(s64) = G_MERGE_VALUES %0, %2523 %5:_(s64) = G_MERGE_VALUES %3, %1524 %6:_(s64) = G_XOR %4, %5525 S_NOP 0, implicit %6526...527 528---529name: xor_chain_s64_sv530legalized: true531 532body: |533 bb.0:534 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1535 ; CHECK-LABEL: name: xor_chain_s64_sv536 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1537 ; CHECK-NEXT: {{ $}}538 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1539 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3540 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1541 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)542 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)543 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)544 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]545 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]546 ; CHECK-NEXT: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR]](s32), [[XOR1]](s32)547 ; CHECK-NEXT: [[COPY4:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)548 ; CHECK-NEXT: [[UV4:%[0-9]+]]:vgpr(s32), [[UV5:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY4]](s64)549 ; CHECK-NEXT: [[UV6:%[0-9]+]]:vgpr(s32), [[UV7:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[MV]](s64)550 ; CHECK-NEXT: [[XOR2:%[0-9]+]]:vgpr(s32) = G_XOR [[UV4]], [[UV6]]551 ; CHECK-NEXT: [[XOR3:%[0-9]+]]:vgpr(s32) = G_XOR [[UV5]], [[UV7]]552 ; CHECK-NEXT: [[MV1:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[XOR2]](s32), [[XOR3]](s32)553 ; CHECK-NEXT: S_NOP 0, implicit [[MV1]](s64)554 %0:_(s64) = COPY $sgpr0_sgpr1555 %1:_(s64) = COPY $sgpr2_sgpr3556 %2:_(s64) = COPY $vgpr0_vgpr1557 %3:_(s64) = G_XOR %0, %2558 %4:_(s64) = G_XOR %1, %3559 S_NOP 0, implicit %4560...561 562---563name: xor_v2i32_ss564legalized: true565 566body: |567 bb.0:568 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3569 ; CHECK-LABEL: name: xor_v2i32_ss570 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3571 ; CHECK-NEXT: {{ $}}572 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1573 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3574 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(<2 x s32>) = G_XOR [[COPY]], [[COPY1]]575 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](<2 x s32>)576 %0:_(<2 x s32>) = COPY $sgpr0_sgpr1577 %1:_(<2 x s32>) = COPY $sgpr2_sgpr3578 %2:_(<2 x s32>) = G_XOR %0, %1579 S_NOP 0, implicit %2580...581 582---583name: xor_v2i32_sv584legalized: true585 586body: |587 bb.0:588 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1589 ; CHECK-LABEL: name: xor_v2i32_sv590 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1591 ; CHECK-NEXT: {{ $}}592 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1593 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1594 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY [[COPY]](<2 x s32>)595 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)596 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)597 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]598 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]599 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[XOR]](s32), [[XOR1]](s32)600 ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)601 %0:_(<2 x s32>) = COPY $sgpr0_sgpr1602 %1:_(<2 x s32>) = COPY $vgpr0_vgpr1603 %2:_(<2 x s32>) = G_XOR %0, %1604 S_NOP 0, implicit %2605...606 607---608name: xor_v2i32_vs609legalized: true610 611body: |612 bb.0:613 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1614 615 ; CHECK-LABEL: name: xor_v2i32_vs616 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1617 ; CHECK-NEXT: {{ $}}618 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1619 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1620 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY [[COPY1]](<2 x s32>)621 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)622 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)623 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]624 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]625 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[XOR]](s32), [[XOR1]](s32)626 ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)627 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1628 %1:_(<2 x s32>) = COPY $sgpr0_sgpr1629 %2:_(<2 x s32>) = G_XOR %0, %1630 S_NOP 0, implicit %2631...632 633---634name: xor_v2i32_vv635legalized: true636 637body: |638 bb.0:639 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3640 ; CHECK-LABEL: name: xor_v2i32_vv641 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3642 ; CHECK-NEXT: {{ $}}643 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1644 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3645 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)646 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)647 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(s32) = G_XOR [[UV]], [[UV2]]648 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(s32) = G_XOR [[UV1]], [[UV3]]649 ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[XOR]](s32), [[XOR1]](s32)650 ; CHECK-NEXT: S_NOP 0, implicit [[BUILD_VECTOR]](<2 x s32>)651 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1652 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3653 %2:_(<2 x s32>) = G_XOR %0, %1654 S_NOP 0, implicit %2655...656 657---658name: xor_v4s16_ss659legalized: true660 661body: |662 bb.0:663 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3664 ; CHECK-LABEL: name: xor_v4s16_ss665 ; CHECK: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3666 ; CHECK-NEXT: {{ $}}667 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1668 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3669 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(<4 x s16>) = G_XOR [[COPY]], [[COPY1]]670 %0:_(<4 x s16>) = COPY $sgpr0_sgpr1671 %1:_(<4 x s16>) = COPY $sgpr2_sgpr3672 %2:_(<4 x s16>) = G_XOR %0, %1673...674 675---676name: xor_v4s16_sv677legalized: true678 679body: |680 bb.0:681 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1682 ; CHECK-LABEL: name: xor_v4s16_sv683 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1684 ; CHECK-NEXT: {{ $}}685 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1686 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1687 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY [[COPY]](<4 x s16>)688 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)689 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)690 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV]], [[UV2]]691 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV1]], [[UV3]]692 ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[XOR]](<2 x s16>), [[XOR1]](<2 x s16>)693 %0:_(<4 x s16>) = COPY $sgpr0_sgpr1694 %1:_(<4 x s16>) = COPY $vgpr0_vgpr1695 %2:_(<4 x s16>) = G_XOR %0, %1696...697 698---699name: xor_v4s16_vs700legalized: true701 702body: |703 bb.0:704 liveins: $sgpr0_sgpr1, $vgpr0_vgpr1705 ; CHECK-LABEL: name: xor_v4s16_vs706 ; CHECK: liveins: $sgpr0_sgpr1, $vgpr0_vgpr1707 ; CHECK-NEXT: {{ $}}708 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1709 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1710 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY [[COPY1]](<4 x s16>)711 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)712 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)713 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV]], [[UV2]]714 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV1]], [[UV3]]715 ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[XOR]](<2 x s16>), [[XOR1]](<2 x s16>)716 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1717 %1:_(<4 x s16>) = COPY $sgpr0_sgpr1718 %2:_(<4 x s16>) = G_XOR %0, %1719...720 721---722name: xor_v4s16_vv723legalized: true724 725body: |726 bb.0:727 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3728 ; CHECK-LABEL: name: xor_v4s16_vv729 ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3730 ; CHECK-NEXT: {{ $}}731 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1732 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3733 ; CHECK-NEXT: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)734 ; CHECK-NEXT: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)735 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV]], [[UV2]]736 ; CHECK-NEXT: [[XOR1:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[UV1]], [[UV3]]737 ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[XOR]](<2 x s16>), [[XOR1]](<2 x s16>)738 %0:_(<4 x s16>) = COPY $vgpr0_vgpr1739 %1:_(<4 x s16>) = COPY $vgpr2_vgpr3740 %2:_(<4 x s16>) = G_XOR %0, %1741...742 743---744name: xor_v2s16_ss745legalized: true746 747body: |748 bb.0:749 liveins: $sgpr0, $sgpr1750 ; CHECK-LABEL: name: xor_v2s16_ss751 ; CHECK: liveins: $sgpr0, $sgpr1752 ; CHECK-NEXT: {{ $}}753 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0754 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1755 ; CHECK-NEXT: [[XOR:%[0-9]+]]:sgpr(<2 x s16>) = G_XOR [[COPY]], [[COPY1]]756 %0:_(<2 x s16>) = COPY $sgpr0757 %1:_(<2 x s16>) = COPY $sgpr1758 %2:_(<2 x s16>) = G_XOR %0, %1759...760 761---762name: xor_v2s16_sv763legalized: true764 765body: |766 bb.0:767 liveins: $sgpr0, $vgpr0768 ; CHECK-LABEL: name: xor_v2s16_sv769 ; CHECK: liveins: $sgpr0, $vgpr0770 ; CHECK-NEXT: {{ $}}771 ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0772 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0773 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY]](<2 x s16>)774 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[COPY2]], [[COPY1]]775 %0:_(<2 x s16>) = COPY $sgpr0776 %1:_(<2 x s16>) = COPY $vgpr0777 %2:_(<2 x s16>) = G_XOR %0, %1778...779 780---781name: xor_v2s16_vs782legalized: true783 784body: |785 bb.0:786 liveins: $sgpr0, $vgpr0787 ; CHECK-LABEL: name: xor_v2s16_vs788 ; CHECK: liveins: $sgpr0, $vgpr0789 ; CHECK-NEXT: {{ $}}790 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0791 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0792 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY1]](<2 x s16>)793 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[COPY]], [[COPY2]]794 %0:_(<2 x s16>) = COPY $vgpr0795 %1:_(<2 x s16>) = COPY $sgpr0796 %2:_(<2 x s16>) = G_XOR %0, %1797...798 799---800name: xor_v2s16_vv801legalized: true802 803body: |804 bb.0:805 liveins: $vgpr0, $vgpr1806 ; CHECK-LABEL: name: xor_v2s16_vv807 ; CHECK: liveins: $vgpr0, $vgpr1808 ; CHECK-NEXT: {{ $}}809 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0810 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1811 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vgpr(<2 x s16>) = G_XOR [[COPY]], [[COPY1]]812 %0:_(<2 x s16>) = COPY $vgpr0813 %1:_(<2 x s16>) = COPY $vgpr1814 %2:_(<2 x s16>) = G_XOR %0, %1815...816 817---818name: xor_i1_vcc_constant819legalized: true820 821body: |822 bb.0:823 liveins: $vgpr0, $vgpr1824 ; CHECK-LABEL: name: xor_i1_vcc_constant825 ; CHECK: liveins: $vgpr0, $vgpr1826 ; CHECK-NEXT: {{ $}}827 ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0828 ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0829 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY [[C]](s32)830 ; CHECK-NEXT: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]831 ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 1832 ; CHECK-NEXT: [[AMDGPU_COPY_VCC_SCC:%[0-9]+]]:vcc(s1) = G_AMDGPU_COPY_VCC_SCC [[C1]](s32)833 ; CHECK-NEXT: [[XOR:%[0-9]+]]:vcc(s1) = G_XOR [[ICMP]], [[AMDGPU_COPY_VCC_SCC]]834 ; CHECK-NEXT: S_NOP 0, implicit [[XOR]](s1)835 %0:_(s32) = COPY $vgpr0836 %1:_(s32) = G_CONSTANT i32 0837 %2:_(s1) = G_ICMP intpred(ne), %0, %1838 %3:_(s1) = G_CONSTANT i1 true839 %4:_(s1) = G_XOR %2, %3840 S_NOP 0, implicit %4841...842