| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6 |
| # RUN: llc -simplify-mir -mtriple=amdgpu11.00 -mattr=+real-true16 -run-pass=si-shrink-instructions -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s |
| # RUN: llc -simplify-mir -mtriple=amdgpu12.00 -mattr=+real-true16 -run-pass=si-shrink-instructions -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s |
| |
| --- |
| name: swap_phys_condensed |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: swap_phys_condensed |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| |
| --- |
| name: swap_phys_sparse |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: swap_phys_sparse |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| --- |
| name: swap_phys_liveout |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: swap_phys_liveout |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| --- |
| name: swap_phys_liveout_superreg |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: swap_phys_liveout_superreg |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| |
| --- |
| name: swap_phys_overlap_x |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_vgpr1, $vgpr3_vgpr4 |
| ; GCN-LABEL: name: swap_phys_overlap_x |
| ; GCN: liveins: $vgpr0_vgpr1, $vgpr3_vgpr4 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr3_vgpr4 = V_ADD_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr3_vgpr4, 0, 0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| $vgpr3_vgpr4 = V_ADD_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr3_vgpr4, 0, 0, implicit $mode, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| ... |
| |
| --- |
| name: swap_phys_clobber_y |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16 |
| ; GCN-LABEL: name: swap_phys_clobber_y |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| ; GCN-NEXT: $vgpr1_hi16 = V_MOV_B16_t16_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 0, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: swap_virt_copy_vgpr_16 |
| tracksRegLiveness: true |
| registers: |
| - { id: 0, class: vgpr_16 } |
| - { id: 1, class: vgpr_16 } |
| - { id: 2, class: vgpr_16 } |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: swap_virt_copy_vgpr_16 |
| ; GCN: [[DEF:%[0-9]+]]:vgpr_16 = IMPLICIT_DEF |
| ; GCN-NEXT: [[DEF1:%[0-9]+]]:vgpr_16 = IMPLICIT_DEF |
| ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_16 = COPY [[DEF]] |
| ; GCN-NEXT: [[DEF:%[0-9]+]]:vgpr_16 = COPY [[DEF1]] |
| ; GCN-NEXT: [[DEF1:%[0-9]+]]:vgpr_16 = COPY [[COPY]] |
| %0 = IMPLICIT_DEF |
| %1 = IMPLICIT_DEF |
| %2 = COPY %0 |
| %0 = COPY %1 |
| %1 = COPY %2 |
| ... |
| |
| --- |
| name: swap_exact_max_insns_apart |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: swap_exact_max_insns_apart |
| ; GCN: $vgpr0_lo16 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr1_hi16 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr2_lo16 = COPY $vgpr0_lo16 |
| ; GCN-NEXT: $vgpr3_hi16 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr0_lo16 = IMPLICIT_DEF |
| $vgpr1_hi16 = IMPLICIT_DEF |
| $vgpr2_lo16 = COPY $vgpr0_lo16 |
| $vgpr3_hi16 = IMPLICIT_DEF |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr0_lo16 = COPY $vgpr1_hi16 |
| $vgpr1_hi16 = COPY $vgpr2_lo16 |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: swap_too_far |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: swap_too_far |
| ; GCN: $vgpr0_lo16 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr1_hi16 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr2_lo16 = COPY $vgpr0_lo16 |
| ; GCN-NEXT: $vgpr3_hi16 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr4_lo16 = COPY $vgpr3_hi16 |
| ; GCN-NEXT: $vgpr3_hi16 = COPY $vgpr4_lo16 |
| ; GCN-NEXT: $vgpr0_lo16 = COPY $vgpr1_hi16 |
| ; GCN-NEXT: $vgpr1_hi16 = COPY $vgpr2_lo16 |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr0_lo16 = IMPLICIT_DEF |
| $vgpr1_hi16 = IMPLICIT_DEF |
| $vgpr2_lo16 = COPY $vgpr0_lo16 |
| $vgpr3_hi16 = IMPLICIT_DEF |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr4_lo16 = COPY $vgpr3_hi16 |
| $vgpr3_hi16 = COPY $vgpr4_lo16 |
| $vgpr0_lo16 = COPY $vgpr1_hi16 |
| $vgpr1_hi16 = COPY $vgpr2_lo16 |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: swap_liveness_error_mov |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr5_hi16, $vgpr1_vgpr2 |
| ; GCN-LABEL: name: swap_liveness_error_mov |
| ; GCN: liveins: $vgpr5_hi16, $vgpr1_vgpr2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr6_lo16 = V_MOV_B16_t16_e32 $vgpr1_hi16, implicit $exec |
| ; GCN-NEXT: $vgpr1_hi16, $vgpr5_hi16 = V_SWAP_B16 $vgpr5_hi16, $vgpr1_hi16, implicit $exec |
| ; GCN-NEXT: $vgpr5_vgpr6 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr6_lo16 = V_MOV_B16_t16_e32 $vgpr7_hi16, implicit $exec, implicit $vgpr6_vgpr7 |
| ; GCN-NEXT: $vgpr5_hi16 = V_MOV_B16_t16_e32 $vgpr6_lo16, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr6_lo16 = V_MOV_B16_t16_e32 $vgpr1_hi16, implicit $exec, implicit killed $vgpr1_vgpr2 |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr5_hi16, implicit $exec |
| $vgpr5_hi16 = V_MOV_B16_t16_e32 $vgpr6_lo16, implicit $exec, implicit-def $vgpr5_vgpr6, implicit $vgpr6_vgpr7 |
| $vgpr6_lo16 = V_MOV_B16_t16_e32 $vgpr7_hi16, implicit $exec, implicit $vgpr6_vgpr7 |
| $vgpr5_hi16 = V_MOV_B16_t16_e32 $vgpr6_lo16, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: swap_liveness_error_copy |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr5_hi16, $vgpr1_vgpr2 |
| ; GCN-LABEL: name: swap_liveness_error_copy |
| ; GCN: liveins: $vgpr5_hi16, $vgpr1_vgpr2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr6_lo16 = COPY $vgpr1_hi16 |
| ; GCN-NEXT: $vgpr1_hi16, $vgpr5_hi16 = V_SWAP_B16 $vgpr5_hi16, $vgpr1_hi16, implicit $exec |
| ; GCN-NEXT: $vgpr5_vgpr6 = IMPLICIT_DEF |
| ; GCN-NEXT: $vgpr6_lo16 = COPY $vgpr7, implicit $vgpr6_vgpr7 |
| ; GCN-NEXT: $vgpr5_hi16 = COPY $vgpr6_lo16 |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr6_lo16 = COPY $vgpr1_hi16, implicit killed $vgpr1_vgpr2 |
| $vgpr1_hi16 = COPY killed $vgpr5_hi16 |
| $vgpr5_hi16 = COPY $vgpr6_lo16, implicit-def $vgpr5_vgpr6, implicit $vgpr6_vgpr7 |
| $vgpr6_lo16 = COPY $vgpr7, implicit $vgpr6_vgpr7 |
| $vgpr5_hi16 = COPY $vgpr6_lo16 |
| S_ENDPGM 0 |
| ... |
| |
| |
| --- |
| name: swap_killed_t_early |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: swap_killed_t_early |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec, implicit killed $vgpr2_lo16 |
| ; GCN-NEXT: $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec, implicit killed $vgpr2_lo16 |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 undef $vgpr2_lo16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| |
| --- |
| name: swap_killed_t_late |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: swap_killed_t_late |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec, implicit killed $vgpr2_lo16 |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec, implicit killed $vgpr2_lo16 |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 undef $vgpr2_lo16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| --- |
| name: swap_killed_x |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: swap_killed_x |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr4_lo16, $vgpr6_lo16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2_lo16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec, implicit killed $vgpr0_lo16 |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr1_hi16 |
| $vgpr2_lo16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr4_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 killed $vgpr1_hi16, implicit $exec |
| $vgpr5_hi16 = V_MOV_B16_t16_e32 killed $vgpr6_lo16, implicit $exec, implicit killed $vgpr0_lo16 |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr2_lo16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr1_hi16 |
| ... |
| |
| --- |
| name: implicit_ops_mov_x_swap_b16 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: implicit_ops_mov_x_swap_b16 |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr3_hi16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec, implicit $vgpr2_lo16, implicit killed $vgpr1_vgpr2 |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 $vgpr1_hi16, implicit $exec, implicit $vgpr2_lo16, implicit killed $vgpr1_vgpr2 |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr3_hi16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| |
| --- |
| name: implicit_ops_mov_t_swap_b16 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: implicit_ops_mov_t_swap_b16 |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr3_hi16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec, implicit $vgpr2_lo16, implicit killed $vgpr1_vgpr2, implicit-def $vgpr1_hi16 |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec, implicit $vgpr2_lo16, implicit killed $vgpr1_vgpr2, implicit-def $vgpr1_hi16 |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 $vgpr1_hi16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr3_hi16, implicit $exec |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |
| |
| --- |
| name: implicit_ops_mov_y_swap_b16 |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr2_lo16, $sgpr30_sgpr31 |
| ; GCN-LABEL: name: implicit_ops_mov_y_swap_b16 |
| ; GCN: liveins: $vgpr0_lo16, $vgpr1_hi16, $vgpr2_lo16, $sgpr30_sgpr31 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr3_hi16 = V_MOV_B16_t16_e32 $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_lo16, $vgpr1_hi16 = V_SWAP_B16 $vgpr1_hi16, $vgpr0_lo16, implicit $exec |
| ; GCN-NEXT: $vgpr0_vgpr1 = IMPLICIT_DEF |
| ; GCN-NEXT: S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| $vgpr3_hi16 = V_MOV_B16_t16_e32 killed $vgpr0_lo16, implicit $exec |
| $vgpr0_lo16 = V_MOV_B16_t16_e32 $vgpr1_hi16, implicit $exec |
| $vgpr1_hi16 = V_MOV_B16_t16_e32 killed $vgpr3_hi16, implicit $exec, implicit $vgpr2_lo16, implicit-def $vgpr0_vgpr1, implicit killed $vgpr3_hi16 |
| S_SETPC_B64_return $sgpr30_sgpr31, implicit $vgpr0_lo16, implicit $vgpr1_hi16 |
| ... |