brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.8 KiB · fb20cd4 Raw
540 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=tahiti -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s  | FileCheck -check-prefix=WAVE64 %s3# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -o - %s  | FileCheck -check-prefix=WAVE64 %s4# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -run-pass=instruction-select -global-isel-abort=0 -verify-machineinstrs -o - %s  | FileCheck -check-prefix=WAVE32 %s5# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=-real-true16 -run-pass=instruction-select -global-isel-abort=0 -verify-machineinstrs -o - %s  | FileCheck -check-prefixes=WAVE32 %s6 7---8 9name:            xor_s1_vcc_vcc_vcc10legalized:       true11regBankSelected: true12tracksRegLiveness: true13 14body: |15  bb.0:16    liveins: $vgpr0, $vgpr117    ; WAVE64-LABEL: name: xor_s1_vcc_vcc_vcc18    ; WAVE64: liveins: $vgpr0, $vgpr119    ; WAVE64-NEXT: {{  $}}20    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr021    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr122    ; WAVE64-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec23    ; WAVE64-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec24    ; WAVE64-NEXT: [[V_CMP_EQ_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[COPY1]], [[V_MOV_B32_e32_]], implicit $exec25    ; WAVE64-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[V_CMP_EQ_U32_e64_]], [[V_CMP_EQ_U32_e64_1]], implicit-def dead $scc26    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]27    ;28    ; WAVE32-LABEL: name: xor_s1_vcc_vcc_vcc29    ; WAVE32: liveins: $vgpr0, $vgpr130    ; WAVE32-NEXT: {{  $}}31    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr032    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr133    ; WAVE32-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec34    ; WAVE32-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], implicit $exec35    ; WAVE32-NEXT: [[V_CMP_EQ_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_EQ_U32_e64 [[COPY1]], [[V_MOV_B32_e32_]], implicit $exec36    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_XOR_B32 [[V_CMP_EQ_U32_e64_]], [[V_CMP_EQ_U32_e64_1]], implicit-def dead $scc37    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]38    %0:vgpr(s32) = COPY $vgpr039    %1:vgpr(s32) = COPY $vgpr140    %2:vgpr(s32) = G_CONSTANT i32 041    %3:vcc(s1) = G_ICMP intpred(eq), %0, %242    %4:vcc(s1) = G_ICMP intpred(eq), %1, %243    %5:vcc(s1) = G_XOR %3, %444    S_ENDPGM 0, implicit %545...46 47# Should fail to select48 49---50 51name:            xor_s1_sgpr_sgpr_sgpr52legalized:       true53regBankSelected: true54tracksRegLiveness: true55 56body: |57  bb.0:58    liveins: $sgpr0, $sgpr159    ; WAVE64-LABEL: name: xor_s1_sgpr_sgpr_sgpr60    ; WAVE64: liveins: $sgpr0, $sgpr161    ; WAVE64-NEXT: {{  $}}62    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr063    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr164    ; WAVE64-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc65    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]66    ;67    ; WAVE32-LABEL: name: xor_s1_sgpr_sgpr_sgpr68    ; WAVE32: liveins: $sgpr0, $sgpr169    ; WAVE32-NEXT: {{  $}}70    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr071    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr172    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc73    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]74    %0:sgpr(s32) = COPY $sgpr075    %1:sgpr(s32) = COPY $sgpr176    %2:sgpr(s1) = G_TRUNC %077    %3:sgpr(s1) = G_TRUNC %178    %4:sgpr(s1) = G_XOR %2, %379    S_ENDPGM 0, implicit %480...81 82---83 84name:            xor_s16_sgpr_sgpr_sgpr85legalized:       true86regBankSelected: true87tracksRegLiveness: true88 89body: |90  bb.0:91    liveins: $sgpr0, $sgpr192    ; WAVE64-LABEL: name: xor_s16_sgpr_sgpr_sgpr93    ; WAVE64: liveins: $sgpr0, $sgpr194    ; WAVE64-NEXT: {{  $}}95    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr096    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr197    ; WAVE64-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc98    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]99    ;100    ; WAVE32-LABEL: name: xor_s16_sgpr_sgpr_sgpr101    ; WAVE32: liveins: $sgpr0, $sgpr1102    ; WAVE32-NEXT: {{  $}}103    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0104    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1105    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc106    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]107    %0:sgpr(s32) = COPY $sgpr0108    %1:sgpr(s32) = COPY $sgpr1109    %2:sgpr(s16) = G_TRUNC %0110    %3:sgpr(s16) = G_TRUNC %1111    %4:sgpr(s16) = G_XOR %2, %3112    S_ENDPGM 0, implicit %4113...114 115---116 117name:            xor_s16_vgpr_vgpr_vgpr118legalized:       true119regBankSelected: true120tracksRegLiveness: true121 122body: |123  bb.0:124    liveins: $vgpr0, $vgpr1125    ; WAVE64-LABEL: name: xor_s16_vgpr_vgpr_vgpr126    ; WAVE64: liveins: $vgpr0, $vgpr1127    ; WAVE64-NEXT: {{  $}}128    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0129    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1130    ; WAVE64-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec131    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]132    ;133    ; WAVE32-LABEL: name: xor_s16_vgpr_vgpr_vgpr134    ; WAVE32: liveins: $vgpr0, $vgpr1135    ; WAVE32-NEXT: {{  $}}136    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0137    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1138    ; WAVE32-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec139    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]140    %0:vgpr(s32) = COPY $vgpr0141    %1:vgpr(s32) = COPY $vgpr1142    %2:vgpr(s16) = G_TRUNC %0143    %3:vgpr(s16) = G_TRUNC %1144    %4:vgpr(s16) = G_XOR %2, %3145    S_ENDPGM 0, implicit %4146...147 148---149 150name:            xor_s32_sgpr_sgpr_sgpr151legalized:       true152regBankSelected: true153tracksRegLiveness: true154 155body: |156  bb.0:157    liveins: $sgpr0, $sgpr1158    ; WAVE64-LABEL: name: xor_s32_sgpr_sgpr_sgpr159    ; WAVE64: liveins: $sgpr0, $sgpr1160    ; WAVE64-NEXT: {{  $}}161    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0162    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1163    ; WAVE64-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc164    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]165    ;166    ; WAVE32-LABEL: name: xor_s32_sgpr_sgpr_sgpr167    ; WAVE32: liveins: $sgpr0, $sgpr1168    ; WAVE32-NEXT: {{  $}}169    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0170    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1171    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc172    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]173    %0:sgpr(s32) = COPY $sgpr0174    %1:sgpr(s32) = COPY $sgpr1175    %2:sgpr(s32) = G_XOR %0, %1176    S_ENDPGM 0, implicit %2177...178 179---180 181name:            xor_s64_sgpr_sgpr_sgpr182legalized:       true183regBankSelected: true184tracksRegLiveness: true185 186body: |187  bb.0:188    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3189    ; WAVE64-LABEL: name: xor_s64_sgpr_sgpr_sgpr190    ; WAVE64: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3191    ; WAVE64-NEXT: {{  $}}192    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1193    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3194    ; WAVE64-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[COPY]], [[COPY1]], implicit-def dead $scc195    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]196    ;197    ; WAVE32-LABEL: name: xor_s64_sgpr_sgpr_sgpr198    ; WAVE32: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3199    ; WAVE32-NEXT: {{  $}}200    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1201    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3202    ; WAVE32-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[COPY]], [[COPY1]], implicit-def dead $scc203    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]204    %0:sgpr(s64) = COPY $sgpr0_sgpr1205    %1:sgpr(s64) = COPY $sgpr2_sgpr3206    %2:sgpr(s64) = G_XOR %0, %1207    S_ENDPGM 0, implicit %2208...209 210---211 212name:            xor_v2s16_sgpr_sgpr_sgpr213legalized:       true214regBankSelected: true215tracksRegLiveness: true216 217body: |218  bb.0:219    liveins: $sgpr0, $sgpr1220    ; WAVE64-LABEL: name: xor_v2s16_sgpr_sgpr_sgpr221    ; WAVE64: liveins: $sgpr0, $sgpr1222    ; WAVE64-NEXT: {{  $}}223    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0224    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1225    ; WAVE64-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc226    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]227    ;228    ; WAVE32-LABEL: name: xor_v2s16_sgpr_sgpr_sgpr229    ; WAVE32: liveins: $sgpr0, $sgpr1230    ; WAVE32-NEXT: {{  $}}231    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0232    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1233    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc234    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]235    %0:sgpr(<2 x s16>) = COPY $sgpr0236    %1:sgpr(<2 x s16>) = COPY $sgpr1237    %2:sgpr(<2 x s16>) = G_XOR %0, %1238    S_ENDPGM 0, implicit %2239...240 241---242 243name:            xor_v2s32_sgpr_sgpr_sgpr244legalized:       true245regBankSelected: true246tracksRegLiveness: true247 248body: |249  bb.0:250    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3251    ; WAVE64-LABEL: name: xor_v2s32_sgpr_sgpr_sgpr252    ; WAVE64: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3253    ; WAVE64-NEXT: {{  $}}254    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1255    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3256    ; WAVE64-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[COPY]], [[COPY1]], implicit-def dead $scc257    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]258    ;259    ; WAVE32-LABEL: name: xor_v2s32_sgpr_sgpr_sgpr260    ; WAVE32: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3261    ; WAVE32-NEXT: {{  $}}262    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1263    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3264    ; WAVE32-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[COPY]], [[COPY1]], implicit-def dead $scc265    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]266    %0:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1267    %1:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3268    %2:sgpr(<2 x s32>) = G_XOR %0, %1269    S_ENDPGM 0, implicit %2270...271 272---273 274name:            xor_v4s16_sgpr_sgpr_sgpr275legalized:       true276regBankSelected: true277tracksRegLiveness: true278 279body: |280  bb.0:281    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3282    ; WAVE64-LABEL: name: xor_v4s16_sgpr_sgpr_sgpr283    ; WAVE64: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3284    ; WAVE64-NEXT: {{  $}}285    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1286    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3287    ; WAVE64-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[COPY]], [[COPY1]], implicit-def dead $scc288    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]289    ;290    ; WAVE32-LABEL: name: xor_v4s16_sgpr_sgpr_sgpr291    ; WAVE32: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3292    ; WAVE32-NEXT: {{  $}}293    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1294    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_64 = COPY $sgpr2_sgpr3295    ; WAVE32-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64 = S_XOR_B64 [[COPY]], [[COPY1]], implicit-def dead $scc296    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]297    %0:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1298    %1:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3299    %2:sgpr(<4 x s16>) = G_XOR %0, %1300    S_ENDPGM 0, implicit %2301...302 303---304 305name:            xor_s32_vgpr_vgpr_vgpr306legalized:       true307regBankSelected: true308tracksRegLiveness: true309 310body: |311  bb.0:312    liveins: $vgpr0, $vgpr1313    ; WAVE64-LABEL: name: xor_s32_vgpr_vgpr_vgpr314    ; WAVE64: liveins: $vgpr0, $vgpr1315    ; WAVE64-NEXT: {{  $}}316    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0317    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1318    ; WAVE64-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec319    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]320    ;321    ; WAVE32-LABEL: name: xor_s32_vgpr_vgpr_vgpr322    ; WAVE32: liveins: $vgpr0, $vgpr1323    ; WAVE32-NEXT: {{  $}}324    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0325    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1326    ; WAVE32-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec327    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]328    %0:vgpr(s32) = COPY $vgpr0329    %1:vgpr(s32) = COPY $vgpr1330    %2:vgpr(s32) = G_XOR %0, %1331    S_ENDPGM 0, implicit %2332...333 334---335 336name:            xor_v2s16_vgpr_vgpr_vgpr337legalized:       true338regBankSelected: true339tracksRegLiveness: true340 341body: |342  bb.0:343    liveins: $vgpr0, $vgpr1344    ; WAVE64-LABEL: name: xor_v2s16_vgpr_vgpr_vgpr345    ; WAVE64: liveins: $vgpr0, $vgpr1346    ; WAVE64-NEXT: {{  $}}347    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0348    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1349    ; WAVE64-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec350    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]351    ;352    ; WAVE32-LABEL: name: xor_v2s16_vgpr_vgpr_vgpr353    ; WAVE32: liveins: $vgpr0, $vgpr1354    ; WAVE32-NEXT: {{  $}}355    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0356    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1357    ; WAVE32-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec358    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]359    %0:vgpr(<2 x s16>) = COPY $vgpr0360    %1:vgpr(<2 x s16>) = COPY $vgpr1361    %2:vgpr(<2 x s16>) = G_XOR %0, %1362    S_ENDPGM 0, implicit %2363...364 365 366# This should fail to select367---368 369name:            xor_s64_vgpr_vgpr_vgpr370legalized:       true371regBankSelected: true372tracksRegLiveness: true373 374body: |375  bb.0:376    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3377    ; WAVE64-LABEL: name: xor_s64_vgpr_vgpr_vgpr378    ; WAVE64: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3379    ; WAVE64-NEXT: {{  $}}380    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1381    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3382    ; WAVE64-NEXT: [[XOR:%[0-9]+]]:vgpr(s64) = G_XOR [[COPY]], [[COPY1]]383    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[XOR]](s64)384    ;385    ; WAVE32-LABEL: name: xor_s64_vgpr_vgpr_vgpr386    ; WAVE32: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3387    ; WAVE32-NEXT: {{  $}}388    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1389    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3390    ; WAVE32-NEXT: [[XOR:%[0-9]+]]:vgpr(s64) = G_XOR [[COPY]], [[COPY1]]391    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[XOR]](s64)392    %0:vgpr(s64) = COPY $vgpr0_vgpr1393    %1:vgpr(s64) = COPY $vgpr2_vgpr3394    %2:vgpr(s64) = G_XOR %0, %1395    S_ENDPGM 0, implicit %2396...397 398---399 400name:            xor_s1_vcc_copy_to_vcc401legalized:       true402regBankSelected: true403tracksRegLiveness: true404 405body: |406  bb.0:407    liveins: $vgpr0, $vgpr1408    ; WAVE64-LABEL: name: xor_s1_vcc_copy_to_vcc409    ; WAVE64: liveins: $vgpr0, $vgpr1410    ; WAVE64-NEXT: {{  $}}411    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0412    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1413    ; WAVE64-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY]], implicit $exec414    ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_]], implicit $exec415    ; WAVE64-NEXT: [[V_AND_B32_e32_1:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY1]], implicit $exec416    ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_1]], implicit $exec417    ; WAVE64-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[V_CMP_NE_U32_e64_]], [[V_CMP_NE_U32_e64_1]], implicit-def dead $scc418    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]419    ;420    ; WAVE32-LABEL: name: xor_s1_vcc_copy_to_vcc421    ; WAVE32: liveins: $vgpr0, $vgpr1422    ; WAVE32-NEXT: {{  $}}423    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0424    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1425    ; WAVE32-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY]], implicit $exec426    ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_]], implicit $exec427    ; WAVE32-NEXT: [[V_AND_B32_e32_1:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY1]], implicit $exec428    ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_1]], implicit $exec429    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_XOR_B32 [[V_CMP_NE_U32_e64_]], [[V_CMP_NE_U32_e64_1]], implicit-def dead $scc430    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_]]431    %0:vgpr(s32) = COPY $vgpr0432    %1:vgpr(s32) = COPY $vgpr1433    %2:vgpr(s1) = G_TRUNC %0434    %3:vgpr(s1) = G_TRUNC %1435    %4:vcc(s1) = COPY %2436    %5:vcc(s1) = COPY %3437    %6:vcc(s1) = G_XOR %4, %5438    S_ENDPGM 0, implicit %6439...440 441# The selector for the copy of the xor result may constrain the result442# register of the xor, losing that it is a VCCRegBank context.443 444# Works for wave32, should fail for wave64445---446name:            copy_select_constrain_vcc_result_reg_wave32447legalized:       true448regBankSelected: true449tracksRegLiveness: true450body:             |451  bb.0:452    liveins: $vgpr0, $sgpr0453 454    ; WAVE64-LABEL: name: copy_select_constrain_vcc_result_reg_wave32455    ; WAVE64: liveins: $vgpr0, $sgpr0456    ; WAVE64-NEXT: {{  $}}457    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0458    ; WAVE64-NEXT: %sgpr0:sreg_32 = COPY $sgpr0459    ; WAVE64-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY]], implicit $exec460    ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_]], implicit $exec461    ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, %sgpr0, implicit-def dead $scc462    ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec463    ; WAVE64-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[V_CMP_NE_U32_e64_]], [[V_CMP_NE_U32_e64_1]], implicit-def dead $scc464    ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32_xm0 = COPY [[S_XOR_B64_]]465    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[COPY1]]466    ;467    ; WAVE32-LABEL: name: copy_select_constrain_vcc_result_reg_wave32468    ; WAVE32: liveins: $vgpr0, $sgpr0469    ; WAVE32-NEXT: {{  $}}470    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0471    ; WAVE32-NEXT: %sgpr0:sreg_32 = COPY $sgpr0472    ; WAVE32-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY]], implicit $exec473    ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_]], implicit $exec474    ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, %sgpr0, implicit-def dead $scc475    ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec476    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_XOR_B32 [[V_CMP_NE_U32_e64_]], [[V_CMP_NE_U32_e64_1]], implicit-def dead $scc477    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32_xm0 = COPY [[S_XOR_B32_]]478    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY1]]479    %1:vgpr(s32) = COPY $vgpr0480    %0:vgpr(s1) = G_TRUNC %1(s32)481    %sgpr0:sgpr(s32) = COPY $sgpr0482    %2:sgpr(s1) = G_TRUNC %sgpr0483    %6:sgpr(s32) = G_CONSTANT i32 0484    %7:sgpr(p1) = G_IMPLICIT_DEF485    %9:vcc(s1) = COPY %0(s1)486    %10:vcc(s1) = COPY %2(s1)487    %8:vcc(s1) = G_XOR %9, %10488    %3:sreg_32_xm0(s1) = COPY %8(s1)489    S_ENDPGM 0, implicit %3490 491...492 493# Works for wave64, should fail for wave32494---495name:            copy_select_constrain_vcc_result_reg_wave64496legalized:       true497regBankSelected: true498tracksRegLiveness: true499body:             |500  bb.0:501    liveins: $vgpr0, $sgpr0502 503    ; WAVE64-LABEL: name: copy_select_constrain_vcc_result_reg_wave64504    ; WAVE64: liveins: $vgpr0, $sgpr0505    ; WAVE64-NEXT: {{  $}}506    ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0507    ; WAVE64-NEXT: %sgpr0:sreg_32 = COPY $sgpr0508    ; WAVE64-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY]], implicit $exec509    ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_]], implicit $exec510    ; WAVE64-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, %sgpr0, implicit-def dead $scc511    ; WAVE64-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec512    ; WAVE64-NEXT: [[S_XOR_B64_:%[0-9]+]]:sreg_64_xexec = S_XOR_B64 [[V_CMP_NE_U32_e64_]], [[V_CMP_NE_U32_e64_1]], implicit-def dead $scc513    ; WAVE64-NEXT: S_ENDPGM 0, implicit [[S_XOR_B64_]]514    ;515    ; WAVE32-LABEL: name: copy_select_constrain_vcc_result_reg_wave64516    ; WAVE32: liveins: $vgpr0, $sgpr0517    ; WAVE32-NEXT: {{  $}}518    ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0519    ; WAVE32-NEXT: %sgpr0:sreg_32 = COPY $sgpr0520    ; WAVE32-NEXT: [[V_AND_B32_e32_:%[0-9]+]]:vgpr_32 = V_AND_B32_e32 1, [[COPY]], implicit $exec521    ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[V_AND_B32_e32_]], implicit $exec522    ; WAVE32-NEXT: [[S_AND_B32_:%[0-9]+]]:sreg_32 = S_AND_B32 1, %sgpr0, implicit-def dead $scc523    ; WAVE32-NEXT: [[V_CMP_NE_U32_e64_1:%[0-9]+]]:sreg_32_xm0_xexec = V_CMP_NE_U32_e64 0, [[S_AND_B32_]], implicit $exec524    ; WAVE32-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32_xm0_xexec = S_XOR_B32 [[V_CMP_NE_U32_e64_]], [[V_CMP_NE_U32_e64_1]], implicit-def dead $scc525    ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_64_xexec = COPY [[S_XOR_B32_]]526    ; WAVE32-NEXT: S_ENDPGM 0, implicit [[COPY1]]527    %1:vgpr(s32) = COPY $vgpr0528    %0:vgpr(s1) = G_TRUNC %1(s32)529    %sgpr0:sgpr(s32) = COPY $sgpr0530    %2:sgpr(s1) = G_TRUNC %sgpr0531    %6:sgpr(s32) = G_CONSTANT i32 0532    %7:sgpr(p1) = G_IMPLICIT_DEF533    %9:vcc(s1) = COPY %0(s1)534    %10:vcc(s1) = COPY %2(s1)535    %8:vcc(s1) = G_XOR %9, %10536    %3:sreg_64_xexec(s1) = COPY %8(s1)537    S_ENDPGM 0, implicit %3538 539...540