970 lines · plain
1# RUN: llc -simplify-mir -mtriple=amdgcn -mcpu=gfx900 -run-pass=si-shrink-instructions -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s2# RUN: llc -simplify-mir -mtriple=amdgcn -mcpu=gfx900 -run-pass=si-shrink-instructions -verify-machineinstrs %s -o - -debugify-and-strip-all-safe | FileCheck -check-prefix=GCN %s3# RUN: llc -simplify-mir -mtriple=amdgcn -mcpu=gfx900 -passes=si-shrink-instructions -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s4 5# GCN-LABEL: name: swap_phys_condensed6# GCN: bb.0:7# GCN-NEXT: liveins:8# GCN-NEXT: {{^[ ]*$}}9# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec10# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec11# GCN-NEXT: S_SETPC_B64_return12---13name: swap_phys_condensed14tracksRegLiveness: true15body: |16 bb.0:17 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr3118 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec19 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec20 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec21 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr122...23 24# GCN-LABEL: name: swap_phys_sparse25# GCN: bb.0:26# GCN-NEXT: liveins:27# GCN-NEXT: {{^[ ]*$}}28# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec29# GCN-NEXT: $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec30# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec31# GCN-NEXT: $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec32# GCN-NEXT: S_SETPC_B64_return33---34name: swap_phys_sparse35tracksRegLiveness: true36body: |37 bb.0:38 liveins: $vgpr0, $vgpr1, $vgpr4, $vgpr6, $sgpr30_sgpr3139 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec40 $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec41 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec42 $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec43 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec44 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr145...46 47# GCN-LABEL: name: swap_phys_liveout48# GCN: bb.0:49# GCN-NEXT: liveins:50# GCN-NEXT: {{^[ ]*$}}51# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec52# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec53# GCN-NEXT: S_SETPC_B64_return54---55name: swap_phys_liveout56tracksRegLiveness: true57body: |58 bb.0:59 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr3160 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec61 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec62 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec63 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr164...65 66# GCN-LABEL: name: swap_phys_liveout_superreg67# GCN: bb.0:68# GCN-NEXT: liveins:69# GCN-NEXT: {{^[ ]*$}}70# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec71# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec72# GCN-NEXT: S_SETPC_B64_return73---74name: swap_phys_liveout_superreg75tracksRegLiveness: true76body: |77 bb.0:78 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr3179 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec80 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec81 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec82 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr183...84 85# GCN-LABEL: name: swap_phys_b6486# GCN: bb.0:87# GCN-NEXT: liveins:88# GCN-NEXT: {{^[ ]*$}}89# GCN-NEXT: $vgpr4_vgpr5 = COPY $vgpr0_vgpr190# GCN-NEXT: $vgpr0, $vgpr2 = V_SWAP_B32 $vgpr2, $vgpr0, implicit $exec91# GCN-NEXT: $vgpr1, $vgpr3 = V_SWAP_B32 $vgpr3, $vgpr1, implicit $exec92---93name: swap_phys_b6494tracksRegLiveness: true95body: |96 bb.0:97 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr598 $vgpr4_vgpr5 = COPY killed $vgpr0_vgpr199 $vgpr0_vgpr1 = COPY killed $vgpr2_vgpr3100 $vgpr2_vgpr3 = COPY killed $vgpr4_vgpr5101...102 103# GCN-LABEL: name: swap_phys_overlap_x104# GCN: bb.0:105# GCN-NEXT: liveins:106# GCN-NEXT: {{^[ ]*$}}107# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec108# GCN-NEXT: $vgpr3_vgpr4 = V_ADD_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr3_vgpr4, 0, 0, implicit $mode, implicit $exec109# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec110# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec111---112name: swap_phys_overlap_x113tracksRegLiveness: true114body: |115 bb.0:116 liveins: $vgpr0_vgpr1, $vgpr3_vgpr4117 $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec118 $vgpr3_vgpr4 = V_ADD_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr3_vgpr4, 0, 0, implicit $mode, implicit $exec119 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec120 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec121...122 123# GCN-LABEL: name: swap_phys_clobber_y124# GCN: bb.0:125# GCN-NEXT: liveins:126# GCN-NEXT: {{^[ ]*$}}127# GCN-NEXT: $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec128# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec129# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec130# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec131---132name: swap_phys_clobber_y133tracksRegLiveness: true134body: |135 bb.0:136 liveins: $vgpr0, $vgpr1137 $vgpr2 = V_MOV_B32_e32 $vgpr0, implicit $exec138 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec139 $vgpr1 = V_MOV_B32_e32 0, implicit $exec140 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec141 S_ENDPGM 0142...143 144# GCN-LABEL: name: swap_virt_copy_condense145# GCN: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec146---147name: swap_virt_copy_condense148tracksRegLiveness: true149registers:150 - { id: 0, class: vgpr_32 }151 - { id: 1, class: vgpr_32 }152 - { id: 2, class: vgpr_32 }153body: |154 bb.0:155 %0 = IMPLICIT_DEF156 %1 = IMPLICIT_DEF157 %2 = COPY %0158 %0 = COPY %1159 %1 = COPY %2160...161 162# GCN-LABEL: name: swap_virt_copy_sparse163# GCN: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec164---165name: swap_virt_copy_sparse166tracksRegLiveness: true167registers:168 - { id: 0, class: vgpr_32 }169 - { id: 1, class: vgpr_32 }170 - { id: 2, class: vgpr_32 }171body: |172 bb.0:173 %0 = IMPLICIT_DEF174 %1 = IMPLICIT_DEF175 %2 = COPY %0176 S_NOP 0177 %0 = COPY %1178 S_NOP 0179 %1 = COPY %2180...181 182# GCN-LABEL: name: swap_virt_copy_subreg183# GCN: %0.sub0:vreg_64, %1.sub0:vreg_64 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec184---185name: swap_virt_copy_subreg186tracksRegLiveness: true187registers:188 - { id: 0, class: vreg_64 }189 - { id: 1, class: vreg_64 }190 - { id: 2, class: vreg_64 }191body: |192 bb.0:193 %0 = IMPLICIT_DEF194 %1 = IMPLICIT_DEF195 %2.sub0 = COPY %0.sub0196 %2.sub1 = COPY %0.sub1197 %0.sub0 = COPY %1.sub0198 %0.sub1 = COPY %1.sub1199 %1.sub0 = COPY %2.sub0200...201 202# GCN-LABEL: name: swap_virt_mov203# GCN: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec204---205name: swap_virt_mov206tracksRegLiveness: true207registers:208 - { id: 0, class: vgpr_32 }209 - { id: 1, class: vgpr_32 }210 - { id: 2, class: vgpr_32 }211body: |212 bb.0:213 %0 = IMPLICIT_DEF214 %1 = IMPLICIT_DEF215 %2 = V_MOV_B32_e32 %0, implicit $exec216 %0 = V_MOV_B32_e32 %1, implicit $exec217 %1 = V_MOV_B32_e32 %2, implicit $exec218...219 220# GCN-LABEL: name: swap_virt_read_x221# GCN: bb.0:222# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF223# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF224# GCN-NEXT: %2:vgpr_32 = COPY %0225# GCN-NEXT: %3:vgpr_32 = COPY %0226# GCN-NEXT: %0:vgpr_32 = COPY %1227# GCN-NEXT: %1:vgpr_32 = COPY %2228# GCN-NEXT: S_ENDPGM 0229 230---231name: swap_virt_read_x232tracksRegLiveness: true233registers:234 - { id: 0, class: vgpr_32 }235 - { id: 1, class: vgpr_32 }236 - { id: 2, class: vgpr_32 }237 - { id: 3, class: vgpr_32 }238body: |239 bb.0:240 %0 = IMPLICIT_DEF241 %1 = IMPLICIT_DEF242 %2 = COPY %0243 %3 = COPY %0244 %0 = COPY %1245 %1 = COPY %2246 S_ENDPGM 0247...248 249# GCN-LABEL: name: swap_virt_read_t_twice250# GCN: bb.0:251# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF252# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF253# GCN-NEXT: %2:vgpr_32 = COPY %0254# GCN-NEXT: %3:vgpr_32 = COPY %2255# GCN-NEXT: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec256# GCN-NEXT: S_ENDPGM 0257 258---259name: swap_virt_read_t_twice260tracksRegLiveness: true261registers:262 - { id: 0, class: vgpr_32 }263 - { id: 1, class: vgpr_32 }264 - { id: 2, class: vgpr_32 }265 - { id: 3, class: vgpr_32 }266body: |267 bb.0:268 %0 = IMPLICIT_DEF269 %1 = IMPLICIT_DEF270 %2 = COPY %0271 %3 = COPY %2272 %0 = COPY %1273 %1 = COPY %2274 S_ENDPGM 0275...276 277# GCN-LABEL: name: swap_virt_clobber_y278# GCN: bb.0:279# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF280# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF281# GCN-NEXT: %2:vgpr_32 = COPY %0282# GCN-NEXT: %0:vgpr_32 = COPY %1283# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF284# GCN-NEXT: %1:vgpr_32 = COPY %2285# GCN-NEXT: S_ENDPGM 0286 287---288name: swap_virt_clobber_y289tracksRegLiveness: true290registers:291 - { id: 0, class: vgpr_32 }292 - { id: 1, class: vgpr_32 }293 - { id: 2, class: vgpr_32 }294body: |295 bb.0:296 %0 = IMPLICIT_DEF297 %1 = IMPLICIT_DEF298 %2 = COPY %0299 %0 = COPY %1300 %1 = IMPLICIT_DEF301 %1 = COPY %2302 S_ENDPGM 0303...304 305# GCN-LABEL: name: swap_virt_clobber_x1306# GCN: bb.0:307# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF308# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF309# GCN-NEXT: %2:vgpr_32 = COPY %0310# GCN-NEXT: %0:vgpr_32 = COPY %1311# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF312# GCN-NEXT: %1:vgpr_32 = COPY %2313# GCN-NEXT: S_ENDPGM 0314 315---316name: swap_virt_clobber_x1317tracksRegLiveness: true318registers:319 - { id: 0, class: vgpr_32 }320 - { id: 1, class: vgpr_32 }321 - { id: 2, class: vgpr_32 }322body: |323 bb.0:324 %0 = IMPLICIT_DEF325 %1 = IMPLICIT_DEF326 %2 = COPY %0327 %0 = COPY %1328 %0 = IMPLICIT_DEF329 %1 = COPY %2330 S_ENDPGM 0331...332 333# GCN-LABEL: name: swap_virt_clobber_x2334# GCN: bb.0:335# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF336# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF337# GCN-NEXT: %2:vgpr_32 = COPY %0338# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF339# GCN-NEXT: %0:vgpr_32 = COPY %1340# GCN-NEXT: %1:vgpr_32 = COPY %2341# GCN-NEXT: S_ENDPGM 0342 343---344name: swap_virt_clobber_x2345tracksRegLiveness: true346registers:347 - { id: 0, class: vgpr_32 }348 - { id: 1, class: vgpr_32 }349 - { id: 2, class: vgpr_32 }350body: |351 bb.0:352 %0 = IMPLICIT_DEF353 %1 = IMPLICIT_DEF354 %2 = COPY %0355 %0 = IMPLICIT_DEF356 %0 = COPY %1357 %1 = COPY %2358 S_ENDPGM 0359...360 361# GCN-LABEL: name: swap_virt_clobber_t362# GCN: bb.0:363# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF364# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF365# GCN-NEXT: %2:vgpr_32 = COPY %0366# GCN-NEXT: %0:vgpr_32 = COPY %1367# GCN-NEXT: %2:vgpr_32 = IMPLICIT_DEF368# GCN-NEXT: %1:vgpr_32 = COPY %2369# GCN-NEXT: S_ENDPGM 0370 371---372name: swap_virt_clobber_t373tracksRegLiveness: true374registers:375 - { id: 0, class: vgpr_32 }376 - { id: 1, class: vgpr_32 }377 - { id: 2, class: vgpr_32 }378body: |379 bb.0:380 %0 = IMPLICIT_DEF381 %1 = IMPLICIT_DEF382 %2 = COPY %0383 %0 = COPY %1384 %2 = IMPLICIT_DEF385 %1 = COPY %2386 S_ENDPGM 0387...388 389# GCN-LABEL: name: swap_virt_copy_subreg_overlap_x_full390# GCN: bb.0:391# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF392# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF393# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0394# GCN-NEXT: %3:vreg_64 = COPY %0395# GCN-NEXT: %0.sub0:vreg_64 = COPY %1.sub0396# GCN-NEXT: %1.sub0:vreg_64 = COPY %2.sub0397---398name: swap_virt_copy_subreg_overlap_x_full399tracksRegLiveness: true400registers:401 - { id: 0, class: vreg_64 }402 - { id: 1, class: vreg_64 }403 - { id: 2, class: vreg_64 }404 - { id: 3, class: vreg_64 }405body: |406 bb.0:407 %0 = IMPLICIT_DEF408 %1 = IMPLICIT_DEF409 %2.sub0 = COPY %0.sub0410 %3 = COPY %0411 %0.sub0 = COPY %1.sub0412 %1.sub0 = COPY %2.sub0413...414 415# GCN-LABEL: name: swap_virt_copy_subreg_overlap_x_part416# GCN: bb.0:417# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF418# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF419# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0420# GCN-NEXT: %3:vreg_64 = COPY %0.sub0_sub1421# GCN-NEXT: %0.sub0:vreg_128 = COPY %1.sub0422# GCN-NEXT: %1.sub0:vreg_64 = COPY %2.sub0423---424name: swap_virt_copy_subreg_overlap_x_part425tracksRegLiveness: true426registers:427 - { id: 0, class: vreg_128 }428 - { id: 1, class: vreg_64 }429 - { id: 2, class: vreg_64 }430 - { id: 3, class: vreg_64 }431body: |432 bb.0:433 %0 = IMPLICIT_DEF434 %1 = IMPLICIT_DEF435 %2.sub0 = COPY %0.sub0436 %3 = COPY %0.sub0_sub1437 %0.sub0 = COPY %1.sub0438 %1.sub0 = COPY %2.sub0439...440 441# GCN-LABEL: name: swap_virt_copy_subreg_wide_y442# GCN: bb.0:443# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF444# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF445# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0446# GCN-NEXT: %0.sub0:vreg_64 = COPY %1.sub0447# GCN-NEXT: %1:vreg_64 = COPY %2448---449name: swap_virt_copy_subreg_wide_y450tracksRegLiveness: true451registers:452 - { id: 0, class: vreg_64 }453 - { id: 1, class: vreg_64 }454 - { id: 2, class: vreg_64 }455body: |456 bb.0:457 %0 = IMPLICIT_DEF458 %1 = IMPLICIT_DEF459 %2.sub0 = COPY %0.sub0460 %0.sub0 = COPY %1.sub0461 %1 = COPY %2462...463 464# GCN-LABEL: name: swap_virt_b64465# GCN: bb.0:466# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF467# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF468# GCN-NEXT: %0.sub0:vreg_64, %1.sub0:vreg_64 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec469# GCN-NEXT: %0.sub1:vreg_64, %1.sub1:vreg_64 = V_SWAP_B32 %1.sub1, %0.sub1, implicit $exec470---471name: swap_virt_b64472tracksRegLiveness: true473registers:474 - { id: 0, class: vreg_64 }475 - { id: 1, class: vreg_64 }476 - { id: 2, class: vreg_64 }477body: |478 bb.0:479 %0 = IMPLICIT_DEF480 %1 = IMPLICIT_DEF481 %2 = COPY %0482 %0 = COPY %1483 %1 = COPY %2484...485 486# GCN-LABEL: name: swap_virt_b128487# GCN: bb.0:488# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF489# GCN-NEXT: %1:vreg_128 = IMPLICIT_DEF490# GCN-NEXT: %0.sub0:vreg_128, %1.sub0:vreg_128 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec491# GCN-NEXT: %0.sub1:vreg_128, %1.sub1:vreg_128 = V_SWAP_B32 %1.sub1, %0.sub1, implicit $exec492# GCN-NEXT: %0.sub2:vreg_128, %1.sub2:vreg_128 = V_SWAP_B32 %1.sub2, %0.sub2, implicit $exec493# GCN-NEXT: %0.sub3:vreg_128, %1.sub3:vreg_128 = V_SWAP_B32 %1.sub3, %0.sub3, implicit $exec494---495name: swap_virt_b128496tracksRegLiveness: true497registers:498 - { id: 0, class: vreg_128 }499 - { id: 1, class: vreg_128 }500 - { id: 2, class: vreg_128 }501body: |502 bb.0:503 %0 = IMPLICIT_DEF504 %1 = IMPLICIT_DEF505 %2 = COPY %0506 %0 = COPY %1507 %1 = COPY %2508...509 510# GCN-LABEL: name: swap_virt_b128_sub0_1511# GCN: bb.0:512# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF513# GCN-NEXT: %1:vreg_128 = IMPLICIT_DEF514# GCN-NEXT: %0.sub0:vreg_128, %1.sub0:vreg_128 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec515# GCN-NEXT: %0.sub1:vreg_128, %1.sub1:vreg_128 = V_SWAP_B32 %1.sub1, %0.sub1, implicit $exec516# GCN-NEXT: S_ENDPGM 0517---518name: swap_virt_b128_sub0_1519tracksRegLiveness: true520registers:521 - { id: 0, class: vreg_128 }522 - { id: 1, class: vreg_128 }523 - { id: 2, class: vreg_128 }524body: |525 bb.0:526 %0 = IMPLICIT_DEF527 %1 = IMPLICIT_DEF528 %2.sub0_sub1 = COPY %0.sub0_sub1529 %0.sub0_sub1 = COPY %1.sub0_sub1530 %1.sub0_sub1 = COPY %2.sub0_sub1531 S_ENDPGM 0532...533 534# GCN-LABEL: name: swap_virt_b128_sub2_3535# GCN: bb.0:536# GCN-NEXT: %0:vreg_128 = IMPLICIT_DEF537# GCN-NEXT: %1:vreg_128 = IMPLICIT_DEF538# GCN-NEXT: %0.sub2:vreg_128, %1.sub2:vreg_128 = V_SWAP_B32 %1.sub2, %0.sub2, implicit $exec539# GCN-NEXT: %0.sub3:vreg_128, %1.sub3:vreg_128 = V_SWAP_B32 %1.sub3, %0.sub3, implicit $exec540# GCN-NEXT: S_ENDPGM 0541---542name: swap_virt_b128_sub2_3543tracksRegLiveness: true544registers:545 - { id: 0, class: vreg_128 }546 - { id: 1, class: vreg_128 }547 - { id: 2, class: vreg_128 }548body: |549 bb.0:550 %0 = IMPLICIT_DEF551 %1 = IMPLICIT_DEF552 %2.sub2_sub3 = COPY %0.sub2_sub3553 %0.sub2_sub3 = COPY %1.sub2_sub3554 %1.sub2_sub3 = COPY %2.sub2_sub3555 S_ENDPGM 0556...557 558 559# GCN-LABEL: name: swap_virt_s_to_s560# GCN: bb.0:561# GCN-NEXT: %0:sgpr_32 = IMPLICIT_DEF562# GCN-NEXT: %1:sgpr_32 = IMPLICIT_DEF563# GCN-NEXT: %2:sgpr_32 = COPY %0564# GCN-NEXT: %0:sgpr_32 = COPY %1565# GCN-NEXT: %1:sgpr_32 = COPY %2566---567name: swap_virt_s_to_s568tracksRegLiveness: true569registers:570 - { id: 0, class: sgpr_32 }571 - { id: 1, class: sgpr_32 }572 - { id: 2, class: sgpr_32 }573body: |574 bb.0:575 %0 = IMPLICIT_DEF576 %1 = IMPLICIT_DEF577 %2 = COPY %0578 %0 = COPY %1579 %1 = COPY %2580...581 582# GCN-LABEL: name: swap_virt_copy_subreg_impdef_super583# GCN: %2:vreg_64 = IMPLICIT_DEF584# GCN-NEXT: %2.sub1:vreg_64 = COPY %0.sub1585# GCN-NEXT: %0.sub0:vreg_64, %1.sub0:vreg_64 = V_SWAP_B32 %1.sub0, %0.sub0, implicit $exec586---587name: swap_virt_copy_subreg_impdef_super588tracksRegLiveness: true589registers:590 - { id: 0, class: vreg_64 }591 - { id: 1, class: vreg_64 }592 - { id: 2, class: vreg_64 }593body: |594 bb.0:595 %0 = IMPLICIT_DEF596 %1 = IMPLICIT_DEF597 %2.sub0 = COPY %0.sub0, implicit-def %2, implicit $exec598 %2.sub1 = COPY %0.sub1599 %0.sub0 = COPY %1.sub0600 %0.sub1 = COPY %1.sub1601 %1.sub0 = COPY %2.sub0602...603 604# GCN-LABEL: name: swap_virt_copy_subreg_impuse_x605# GCN: bb.0:606# GCN-NEXT: %0:vreg_64 = IMPLICIT_DEF607# GCN-NEXT: %1:vreg_64 = IMPLICIT_DEF608# GCN-NEXT: %2.sub0:vreg_64 = COPY %0.sub0609# GCN-NEXT: %2.sub1:vreg_64 = COPY %0.sub1610# GCN-NEXT: %0.sub0:vreg_64 = COPY %1.sub0, implicit %0611# GCN-NEXT: %0.sub1:vreg_64 = COPY %1.sub1612# GCN-NEXT: %1.sub0:vreg_64 = COPY %2.sub0613# GCN-NEXT: S_ENDPGM 0614---615name: swap_virt_copy_subreg_impuse_x616tracksRegLiveness: true617registers:618 - { id: 0, class: vreg_64 }619 - { id: 1, class: vreg_64 }620 - { id: 2, class: vreg_64 }621body: |622 bb.0:623 %0 = IMPLICIT_DEF624 %1 = IMPLICIT_DEF625 %2.sub0 = COPY %0.sub0626 %2.sub1 = COPY %0.sub1627 %0.sub0 = COPY %1.sub0, implicit %0628 %0.sub1 = COPY %1.sub1629 %1.sub0 = COPY %2.sub0630 S_ENDPGM 0631...632 633# GCN-LABEL: name: swap_exact_max_insns_apart634# GCN: bb.0:635# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF636# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF637# GCN-NEXT: %3:vgpr_32 = IMPLICIT_DEF638# GCN-NEXT: %4:vgpr_32 = COPY %3639# GCN-NEXT: %3:vgpr_32 = COPY %4640# GCN-NEXT: %4:vgpr_32 = COPY %3641# GCN-NEXT: %3:vgpr_32 = COPY %4642# GCN-NEXT: %4:vgpr_32 = COPY %3643# GCN-NEXT: %3:vgpr_32 = COPY %4644# GCN-NEXT: %4:vgpr_32 = COPY %3645# GCN-NEXT: %3:vgpr_32 = COPY %4646# GCN-NEXT: %4:vgpr_32 = COPY %3647# GCN-NEXT: %3:vgpr_32 = COPY %4648# GCN-NEXT: %4:vgpr_32 = COPY %3649# GCN-NEXT: %3:vgpr_32 = COPY %4650# GCN-NEXT: %4:vgpr_32 = COPY %3651# GCN-NEXT: %0:vgpr_32, %1:vgpr_32 = V_SWAP_B32 %1, %0, implicit $exec652# GCN-NEXT: S_ENDPGM 0653 654---655name: swap_exact_max_insns_apart656tracksRegLiveness: true657registers:658 - { id: 0, class: vgpr_32 }659 - { id: 1, class: vgpr_32 }660 - { id: 2, class: vgpr_32 }661 - { id: 3, class: vgpr_32 }662 - { id: 4, class: vgpr_32 }663body: |664 bb.0:665 %0 = IMPLICIT_DEF666 %1 = IMPLICIT_DEF667 %2 = COPY %0668 %3 = IMPLICIT_DEF669 %4 = COPY %3670 %3 = COPY %4671 %4 = COPY %3672 %3 = COPY %4673 %4 = COPY %3674 %3 = COPY %4675 %4 = COPY %3676 %3 = COPY %4677 %4 = COPY %3678 %3 = COPY %4679 %4 = COPY %3680 %3 = COPY %4681 %4 = COPY %3682 %0 = COPY %1683 %1 = COPY %2684 S_ENDPGM 0685...686 687# GCN-LABEL: name: swap_too_far688# GCN: bb.0:689# GCN-NEXT: %0:vgpr_32 = IMPLICIT_DEF690# GCN-NEXT: %1:vgpr_32 = IMPLICIT_DEF691# GCN-NEXT: %2:vgpr_32 = COPY %0692# GCN-NEXT: %3:vgpr_32 = IMPLICIT_DEF693# GCN-NEXT: %4:vgpr_32 = COPY %3694# GCN-NEXT: %3:vgpr_32 = COPY %4695# GCN-NEXT: %4:vgpr_32 = COPY %3696# GCN-NEXT: %3:vgpr_32 = COPY %4697# GCN-NEXT: %4:vgpr_32 = COPY %3698# GCN-NEXT: %3:vgpr_32 = COPY %4699# GCN-NEXT: %4:vgpr_32 = COPY %3700# GCN-NEXT: %3:vgpr_32 = COPY %4701# GCN-NEXT: %4:vgpr_32 = COPY %3702# GCN-NEXT: %3:vgpr_32 = COPY %4703# GCN-NEXT: %4:vgpr_32 = COPY %3704# GCN-NEXT: %3:vgpr_32 = COPY %4705# GCN-NEXT: %4:vgpr_32 = COPY %3706# GCN-NEXT: %3:vgpr_32 = COPY %4707# GCN-NEXT: %0:vgpr_32 = COPY %1708# GCN-NEXT: %1:vgpr_32 = COPY %2709# GCN-NEXT: S_ENDPGM 0710 711---712name: swap_too_far713tracksRegLiveness: true714registers:715 - { id: 0, class: vgpr_32 }716 - { id: 1, class: vgpr_32 }717 - { id: 2, class: vgpr_32 }718 - { id: 3, class: vgpr_32 }719 - { id: 4, class: vgpr_32 }720body: |721 bb.0:722 %0 = IMPLICIT_DEF723 %1 = IMPLICIT_DEF724 %2 = COPY %0725 %3 = IMPLICIT_DEF726 %4 = COPY %3727 %3 = COPY %4728 %4 = COPY %3729 %3 = COPY %4730 %4 = COPY %3731 %3 = COPY %4732 %4 = COPY %3733 %3 = COPY %4734 %4 = COPY %3735 %3 = COPY %4736 %4 = COPY %3737 %3 = COPY %4738 %4 = COPY %3739 %3 = COPY %4740 %0 = COPY %1741 %1 = COPY %2742 S_ENDPGM 0743...744 745# GCN-LABEL: name: swap_liveness_error_mov746# GCN: $vgpr6 = V_MOV_B32_e32 $vgpr1, implicit $exec747# GCN-NEXT: $vgpr1, $vgpr5 = V_SWAP_B32 $vgpr5, $vgpr1, implicit $exec748# GCN-NEXT: $vgpr5_vgpr6 = IMPLICIT_DEF749# GCN-NEXT: $vgpr6 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit $vgpr6_vgpr7750# GCN-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr6, implicit $exec751 752---753name: swap_liveness_error_mov754tracksRegLiveness: true755body: |756 bb.0:757 liveins: $vgpr5, $vgpr1_vgpr2758 759 $vgpr6 = V_MOV_B32_e32 $vgpr1, implicit $exec, implicit killed $vgpr1_vgpr2760 $vgpr1 = V_MOV_B32_e32 killed $vgpr5, implicit $exec761 $vgpr5 = V_MOV_B32_e32 $vgpr6, implicit $exec, implicit-def $vgpr5_vgpr6, implicit $vgpr6_vgpr7762 $vgpr6 = V_MOV_B32_e32 $vgpr7, implicit $exec, implicit $vgpr6_vgpr7763 $vgpr5 = V_MOV_B32_e32 $vgpr6, implicit $exec764 S_ENDPGM 0765...766 767# GCN-LABEL: name: swap_liveness_error_copy768# GCN: $vgpr6 = COPY $vgpr1769# GCN-NEXT: $vgpr1, $vgpr5 = V_SWAP_B32 $vgpr5, $vgpr1, implicit $exec770# GCN-NEXT: $vgpr5_vgpr6 = IMPLICIT_DEF771# GCN-NEXT: $vgpr6 = COPY $vgpr7, implicit $vgpr6_vgpr7772# GCN-NEXT: $vgpr5 = COPY $vgpr6773 774---775name: swap_liveness_error_copy776tracksRegLiveness: true777body: |778 bb.0:779 liveins: $vgpr5, $vgpr1_vgpr2780 781 $vgpr6 = COPY $vgpr1, implicit killed $vgpr1_vgpr2782 $vgpr1 = COPY killed $vgpr5783 $vgpr5 = COPY $vgpr6, implicit-def $vgpr5_vgpr6, implicit $vgpr6_vgpr7784 $vgpr6 = COPY $vgpr7, implicit $vgpr6_vgpr7785 $vgpr5 = COPY $vgpr6786 S_ENDPGM 0787...788 789# GCN-LABEL: name: swap_killed_t_early790# GCN: $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec791# GCN-NEXT: $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec, implicit killed $vgpr2792# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec793# GCN-NEXT: $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec794# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 undef $vgpr2, implicit $exec795 796---797name: swap_killed_t_early798tracksRegLiveness: true799body: |800 bb.0:801 liveins: $vgpr0, $vgpr1, $vgpr4, $vgpr6, $sgpr30_sgpr31802 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec803 $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec, implicit killed $vgpr2804 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec805 $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec806 $vgpr1 = V_MOV_B32_e32 undef $vgpr2, implicit $exec807 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1808...809 810# GCN-LABEL: name: swap_killed_t_late811# GCN: $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec812# GCN-NEXT: $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec813# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec814# GCN-NEXT: $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec, implicit killed $vgpr2815# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 undef $vgpr2, implicit $exec816 817---818name: swap_killed_t_late819tracksRegLiveness: true820body: |821 bb.0:822 liveins: $vgpr0, $vgpr1, $vgpr4, $vgpr6, $sgpr30_sgpr31823 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec824 $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec825 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec826 $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec, implicit killed $vgpr2827 $vgpr1 = V_MOV_B32_e32 undef $vgpr2, implicit $exec828 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1829...830 831# GCN-LABEL: name: swap_killed_x832# GCN: $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec833# GCN-NEXT: $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec834# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec835# GCN-NEXT: $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec, implicit killed $vgpr0836# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec837 838---839name: swap_killed_x840tracksRegLiveness: true841body: |842 bb.0:843 liveins: $vgpr0, $vgpr1, $vgpr4, $vgpr6, $sgpr30_sgpr31844 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec845 $vgpr3 = V_MOV_B32_e32 killed $vgpr4, implicit $exec846 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec847 $vgpr5 = V_MOV_B32_e32 killed $vgpr6, implicit $exec, implicit killed $vgpr0848 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec849 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr1850...851 852# GCN-LABEL: name: indirect_mov_t853# GCN: $vgpr2 = V_MOV_B32_indirect_read killed $vgpr0, implicit $exec, implicit $m0854# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec855# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec856# GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1857 858---859name: indirect_mov_t860tracksRegLiveness: true861body: |862 bb.0:863 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31864 $vgpr2 = V_MOV_B32_indirect_read killed $vgpr0, implicit $exec, implicit $m0865 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec866 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec867 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1868...869 870# GCN-LABEL: name: indirect_mov_x871# GCN: $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec872# GCN-NEXT: $vgpr0 = V_MOV_B32_indirect_read killed $vgpr1, implicit $exec, implicit $m0873# GCN-NEXT: $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec874# GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1875 876---877name: indirect_mov_x878tracksRegLiveness: true879body: |880 bb.0:881 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31882 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec883 $vgpr0 = V_MOV_B32_indirect_read killed $vgpr1, implicit $exec, implicit $m0884 $vgpr1 = V_MOV_B32_e32 killed $vgpr2, implicit $exec885 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1886...887 888# GCN-LABEL: name: indirect_mov_y889# GCN: $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec890# GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec891# GCN-NEXT: $vgpr1 = V_MOV_B32_indirect_read killed $vgpr2, implicit $exec, implicit $m0892# GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1893 894---895name: indirect_mov_y896tracksRegLiveness: true897body: |898 bb.0:899 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31900 $vgpr2 = V_MOV_B32_e32 killed $vgpr0, implicit $exec901 $vgpr0 = V_MOV_B32_e32 killed $vgpr1, implicit $exec902 $vgpr1 = V_MOV_B32_indirect_read killed $vgpr2, implicit $exec, implicit $m0903 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1904...905 906# GCN-LABEL: name: implicit_ops_mov_x_swap_b32907# GCN: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec, implicit $vgpr2, implicit killed $vgpr1_vgpr2908 909---910name: implicit_ops_mov_x_swap_b32911tracksRegLiveness: true912body: |913 bb.0:914 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31915 $vgpr3 = V_MOV_B32_e32 killed $vgpr0, implicit $exec916 $vgpr0 = V_MOV_B32_e32 $vgpr1, implicit $exec, implicit $vgpr2, implicit killed $vgpr1_vgpr2917 $vgpr1 = V_MOV_B32_e32 killed $vgpr3, implicit $exec918 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1919...920 921# GCN-LABEL: name: implict_ops_mov_x_swap_b64922# GCN: %2:vreg_64 = COPY %0923# GCN-NEXT: %0:vreg_64 = COPY %1, implicit $vgpr0924# GCN-NEXT: %1:vreg_64 = COPY %2925 926---927name: implict_ops_mov_x_swap_b64928tracksRegLiveness: true929body: |930 bb.0:931 liveins: $vgpr0932 %0:vreg_64 = IMPLICIT_DEF933 %1:vreg_64 = IMPLICIT_DEF934 %2:vreg_64 = COPY %0935 %0:vreg_64 = COPY %1, implicit $vgpr0936 %1:vreg_64 = COPY %2937...938 939# GCN-LABEL: implicit_ops_mov_t_swap_b32940# GCN: $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec, implicit $vgpr2, implicit killed $vgpr1_vgpr2, implicit-def $vgpr1941# GCN-NEXT: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec942 943---944name: implicit_ops_mov_t_swap_b32945tracksRegLiveness: true946body: |947 bb.0:948 liveins: $vgpr0, $vgpr1, $sgpr30_sgpr31949 $vgpr3 = V_MOV_B32_e32 killed $vgpr0, implicit $exec, implicit $vgpr2, implicit killed $vgpr1_vgpr2, implicit-def $vgpr1950 $vgpr0 = V_MOV_B32_e32 $vgpr1, implicit $exec951 $vgpr1 = V_MOV_B32_e32 killed $vgpr3, implicit $exec952 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1953...954 955# GCN-LABEL: implicit_ops_mov_y_swap_b32956# GCN: $vgpr0, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr0, implicit $exec957# GCN-NEXT: $vgpr0_vgpr1 = IMPLICIT_DEF958 959---960name: implicit_ops_mov_y_swap_b32961tracksRegLiveness: true962body: |963 bb.0:964 liveins: $vgpr0, $vgpr1, $vgpr2, $sgpr30_sgpr31965 $vgpr3 = V_MOV_B32_e32 killed $vgpr0, implicit $exec966 $vgpr0 = V_MOV_B32_e32 $vgpr1, implicit $exec967 $vgpr1 = V_MOV_B32_e32 killed $vgpr3, implicit $exec, implicit $vgpr2, implicit-def $vgpr0_vgpr1, implicit killed $vgpr3968 S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1969...970