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