| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5 |
| # RUN: llc -mtriple=amdgcn --run-pass=livevars -o - %s | FileCheck %s |
| --- |
| # Check that super register is defined for an sgpr copy. |
| name: sgpr_copy |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| |
| ; CHECK-LABEL: name: sgpr_copy |
| ; CHECK: %sval:sreg_32 = S_MOV_B32 0 |
| ; CHECK-NEXT: $sgpr0 = COPY %sval |
| ; CHECK-NEXT: $sgpr1 = COPY %sval |
| ; CHECK-NEXT: $sgpr2 = COPY %sval |
| ; CHECK-NEXT: $sgpr3 = COPY killed %sval |
| ; CHECK-NEXT: SI_RETURN implicit killed $sgpr0_sgpr1_sgpr2_sgpr3 |
| %sval:sreg_32 = S_MOV_B32 0 |
| |
| $sgpr0 = COPY %sval |
| $sgpr1 = COPY %sval |
| $sgpr2 = COPY %sval |
| $sgpr3 = COPY %sval |
| SI_RETURN implicit $sgpr0_sgpr1_sgpr2_sgpr3 |
| |
| ... |
| --- |
| # Check that super register is defined for a vgpr vector copy. |
| name: vgpr_copy |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| |
| ; CHECK-LABEL: name: vgpr_copy |
| ; CHECK: %vval:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| ; CHECK-NEXT: $vgpr0 = COPY %vval |
| ; CHECK-NEXT: $vgpr1 = COPY %vval |
| ; CHECK-NEXT: $vgpr2 = COPY %vval |
| ; CHECK-NEXT: $vgpr3 = COPY killed %vval |
| ; CHECK-NEXT: dead [[COPY:%[0-9]+]]:vgpr_32 = COPY killed $vgpr0_vgpr1_vgpr2_vgpr3 |
| %vval:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| |
| $vgpr0 = COPY %vval |
| $vgpr1 = COPY %vval |
| $vgpr2 = COPY %vval |
| $vgpr3 = COPY %vval |
| %0:vgpr_32 = COPY $vgpr0_vgpr1_vgpr2_vgpr3 |
| |
| ... |
| --- |
| # Check that super register is defined when there is a hole. |
| name: sgpr_copy_hole |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: sgpr_copy_hole |
| ; CHECK: %sval:sreg_32 = S_MOV_B32 0 |
| ; CHECK-NEXT: $sgpr0 = COPY %sval |
| ; CHECK-NEXT: $sgpr2 = COPY %sval |
| ; CHECK-NEXT: $sgpr3 = COPY killed %sval |
| ; CHECK-NEXT: SI_RETURN implicit killed $sgpr0_sgpr1_sgpr2_sgpr3 |
| %sval:sreg_32 = S_MOV_B32 0 |
| |
| $sgpr0 = COPY %sval |
| $sgpr2 = COPY %sval |
| $sgpr3 = COPY %sval |
| SI_RETURN implicit $sgpr0_sgpr1_sgpr2_sgpr3 |
| |
| ... |
| --- |
| # Check that super register is defined when a pair interrupts the sequence. |
| name: vgpr_copy_pair |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| ; CHECK-LABEL: name: vgpr_copy_pair |
| ; CHECK: %vval:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| ; CHECK-NEXT: $vgpr0 = COPY %vval |
| ; CHECK-NEXT: $vgpr1 = COPY %vval |
| ; CHECK-NEXT: $vgpr2 = COPY %vval |
| ; CHECK-NEXT: $vgpr3 = COPY killed %vval |
| ; CHECK-NEXT: dead [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr1_vgpr2 |
| ; CHECK-NEXT: dead [[COPY1:%[0-9]+]]:vgpr_32 = COPY killed $vgpr0_vgpr1_vgpr2_vgpr3 |
| %vval:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| |
| $vgpr0 = COPY %vval |
| $vgpr1 = COPY %vval |
| $vgpr2 = COPY %vval |
| $vgpr3 = COPY %vval |
| %0:vgpr_32 = COPY $vgpr1_vgpr2 |
| %1:vgpr_32 = COPY $vgpr0_vgpr1_vgpr2_vgpr3 |
| ... |