brintos

brintos / llvm-project-archived public Read only

0
0
Text · 28.5 KiB · 27229cd Raw
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