| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx908 -verify-machineinstrs -run-pass si-fold-operands %s -o - | FileCheck %s --check-prefixes=GFX908 |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx90a -verify-machineinstrs -run-pass si-fold-operands %s -o - | FileCheck %s --check-prefixes=GFX90A |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx942 -verify-machineinstrs -run-pass si-fold-operands %s -o - | FileCheck %s --check-prefixes=GFX90A |
| |
| --- |
| name: test_sgpr_init_multiuse |
| tracksRegLiveness: true |
| |
| body: | |
| ; GFX908-LABEL: name: test_sgpr_init_multiuse |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $sgpr0, $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr0 |
| ; GFX908-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY1]], implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_1:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY1]], implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_2:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY1]], implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_3:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY1]], implicit $exec |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[V_ACCVGPR_WRITE_B32_e64_3]], %bb.0, %13.sub0, %bb.1 |
| ; GFX908-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[V_ACCVGPR_WRITE_B32_e64_2]], %bb.0, %13.sub1, %bb.1 |
| ; GFX908-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[V_ACCVGPR_WRITE_B32_e64_1]], %bb.0, %13.sub2, %bb.1 |
| ; GFX908-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[V_ACCVGPR_WRITE_B32_e64_]], %bb.0, %13.sub3, %bb.1 |
| ; GFX908-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX908-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX908-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY2]], %subreg.sub3 |
| ; GFX908-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX908-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX908-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: test_sgpr_init_multiuse |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $sgpr0, $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr0 |
| ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[COPY1]] |
| ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:agpr_32 = COPY [[COPY1]] |
| ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[COPY1]] |
| ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:agpr_32 = COPY [[COPY1]] |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY5]], %bb.0, %13.sub0, %bb.1 |
| ; GFX90A-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.0, %13.sub1, %bb.1 |
| ; GFX90A-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY3]], %bb.0, %13.sub2, %bb.1 |
| ; GFX90A-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.0, %13.sub3, %bb.1 |
| ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY9]], %subreg.sub0, [[COPY8]], %subreg.sub1, [[COPY7]], %subreg.sub2, [[COPY6]], %subreg.sub3 |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX90A-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| liveins: $sgpr0, $scc |
| successors: %bb.1 |
| |
| %0:sgpr_32 = COPY $sgpr0 |
| %1:vgpr_32 = COPY %0 |
| |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %8:vgpr_32 = PHI %1, %bb.0, %16, %bb.1 |
| %9:vgpr_32 = PHI %1, %bb.0, %17, %bb.1 |
| %10:vgpr_32 = PHI %1, %bb.0, %18, %bb.1 |
| %11:vgpr_32 = PHI %1, %bb.0, %19, %bb.1 |
| %12:areg_128_align2 = REG_SEQUENCE %8, %subreg.sub0, %9, %subreg.sub1, %10, %subreg.sub2, %11, %subreg.sub3 |
| %13:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| %14:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| %15:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 %14:vgpr_32, %13:vgpr_32, %12:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %16:vgpr_32 = COPY %15.sub0 |
| %17:vgpr_32 = COPY %15.sub1 |
| %18:vgpr_32 = COPY %15.sub2 |
| %19:vgpr_32 = COPY %15.sub3 |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_sgpr_init_multiuse_agprtuple |
| tracksRegLiveness: true |
| |
| body: | |
| ; GFX908-LABEL: name: test_sgpr_init_multiuse_agprtuple |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $sgpr0_sgpr1, $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1 |
| ; GFX908-NEXT: [[COPY1:%[0-9]+]]:vreg_64_align2 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY2:%[0-9]+]]:areg_64_align2 = COPY [[COPY1]] |
| ; GFX908-NEXT: [[COPY3:%[0-9]+]]:areg_64_align2 = COPY [[COPY1]] |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:areg_64_align2 = PHI [[COPY3]], %bb.0, %9.sub0_sub1, %bb.1 |
| ; GFX908-NEXT: [[PHI1:%[0-9]+]]:areg_64_align2 = PHI [[COPY2]], %bb.0, %9.sub2_sub3, %bb.1 |
| ; GFX908-NEXT: [[COPY4:%[0-9]+]]:vreg_64_align2 = COPY [[PHI1]] |
| ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vreg_64_align2 = COPY [[PHI]] |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY5]].sub0, %subreg.sub0, [[COPY5]].sub1, %subreg.sub1, [[COPY4]].sub0, %subreg.sub2, [[COPY4]].sub1, %subreg.sub3 |
| ; GFX908-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1073741824, implicit $exec |
| ; GFX908-NEXT: [[V_MOV_B64_e32_1:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1065353216, implicit $exec |
| ; GFX908-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B64_e32_1]].sub0, [[V_MOV_B64_e32_]].sub1, [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: test_sgpr_init_multiuse_agprtuple |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $sgpr0_sgpr1, $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_64 = COPY $sgpr0_sgpr1 |
| ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vreg_64_align2 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:areg_64_align2 = COPY [[COPY1]] |
| ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:areg_64_align2 = COPY [[COPY1]] |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:areg_64_align2 = PHI [[COPY3]], %bb.0, %9.sub0_sub1, %bb.1 |
| ; GFX90A-NEXT: [[PHI1:%[0-9]+]]:areg_64_align2 = PHI [[COPY2]], %bb.0, %9.sub2_sub3, %bb.1 |
| ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:vreg_64_align2 = COPY [[PHI1]] |
| ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vreg_64_align2 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY5]].sub0, %subreg.sub0, [[COPY5]].sub1, %subreg.sub1, [[COPY4]].sub0, %subreg.sub2, [[COPY4]].sub1, %subreg.sub3 |
| ; GFX90A-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1073741824, implicit $exec |
| ; GFX90A-NEXT: [[V_MOV_B64_e32_1:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1065353216, implicit $exec |
| ; GFX90A-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B64_e32_1]].sub0, [[V_MOV_B64_e32_]].sub1, [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| successors: %bb.1 |
| liveins: $sgpr0_sgpr1, $scc |
| |
| %0:sgpr_64 = COPY $sgpr0_sgpr1 |
| %1:vreg_64_align2 = COPY %0:sgpr_64 |
| |
| bb.1: |
| successors: %bb.1, %bb.2 |
| liveins: $scc |
| |
| %2:vreg_64_align2 = PHI %1, %bb.0, %3, %bb.1 |
| %4:vreg_64_align2 = PHI %1, %bb.0, %5, %bb.1 |
| %6:areg_128_align2 = REG_SEQUENCE %2.sub0, %subreg.sub0, %2.sub1, %subreg.sub1, %4.sub0, %subreg.sub2, %4.sub1, %subreg.sub3 |
| %7:vreg_64_align2 = V_MOV_B64_e32 1073741824, implicit $exec |
| %8:vreg_64_align2 = V_MOV_B64_e32 1065353216, implicit $exec |
| %9:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 %8.sub0, %7.sub1, %6:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %3:vreg_64_align2 = COPY %9.sub0_sub1:areg_128_align2 |
| %5:vreg_64_align2 = COPY %9.sub2_sub3:areg_128_align2 |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_sgpr_init_singleuse |
| tracksRegLiveness: true |
| |
| body: | |
| ; GFX908-LABEL: name: test_sgpr_init_singleuse |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $sgpr0, $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr0 |
| ; GFX908-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[COPY1]] |
| ; GFX908-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[COPY3]] |
| ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY6:%[0-9]+]]:agpr_32 = COPY [[COPY5]] |
| ; GFX908-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY8:%[0-9]+]]:agpr_32 = COPY [[COPY7]] |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.0, %16.sub0, %bb.1 |
| ; GFX908-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.0, %16.sub1, %bb.1 |
| ; GFX908-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY6]], %bb.0, %16.sub2, %bb.1 |
| ; GFX908-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY8]], %bb.0, %16.sub3, %bb.1 |
| ; GFX908-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX908-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX908-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX908-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY12]], %subreg.sub0, [[COPY11]], %subreg.sub1, [[COPY10]], %subreg.sub2, [[COPY9]], %subreg.sub3 |
| ; GFX908-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX908-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX908-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: test_sgpr_init_singleuse |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $sgpr0, $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:sgpr_32 = COPY $sgpr0 |
| ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[COPY1]] |
| ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[COPY3]] |
| ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:agpr_32 = COPY [[COPY5]] |
| ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:agpr_32 = COPY [[COPY7]] |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.0, %16.sub0, %bb.1 |
| ; GFX90A-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.0, %16.sub1, %bb.1 |
| ; GFX90A-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY6]], %bb.0, %16.sub2, %bb.1 |
| ; GFX90A-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY8]], %bb.0, %16.sub3, %bb.1 |
| ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX90A-NEXT: [[COPY10:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX90A-NEXT: [[COPY11:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX90A-NEXT: [[COPY12:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY12]], %subreg.sub0, [[COPY11]], %subreg.sub1, [[COPY10]], %subreg.sub2, [[COPY9]], %subreg.sub3 |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX90A-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| liveins: $sgpr0, $scc |
| successors: %bb.1 |
| |
| %0:sgpr_32 = COPY $sgpr0 |
| %1:vgpr_32 = COPY %0 |
| %2:vgpr_32 = COPY %0 |
| %3:vgpr_32 = COPY %0 |
| %4:vgpr_32 = COPY %0 |
| |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %8:vgpr_32 = PHI %1, %bb.0, %16, %bb.1 |
| %9:vgpr_32 = PHI %2, %bb.0, %17, %bb.1 |
| %10:vgpr_32 = PHI %3, %bb.0, %18, %bb.1 |
| %11:vgpr_32 = PHI %4, %bb.0, %19, %bb.1 |
| %12:areg_128_align2 = REG_SEQUENCE %8, %subreg.sub0, %9, %subreg.sub1, %10, %subreg.sub2, %11, %subreg.sub3 |
| %13:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| %14:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| %15:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 %14:vgpr_32, %13:vgpr_32, %12:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %16:vgpr_32 = COPY %15.sub0 |
| %17:vgpr_32 = COPY %15.sub1 |
| %18:vgpr_32 = COPY %15.sub2 |
| %19:vgpr_32 = COPY %15.sub3 |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_vgpr_init |
| tracksRegLiveness: true |
| |
| body: | |
| ; GFX908-LABEL: name: test_vgpr_init |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $vgpr0, $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX908-NEXT: [[COPY1:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY3:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.0, %12.sub0, %bb.1 |
| ; GFX908-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY3]], %bb.0, %12.sub1, %bb.1 |
| ; GFX908-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.0, %12.sub2, %bb.1 |
| ; GFX908-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %12.sub3, %bb.1 |
| ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX908-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX908-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1, [[COPY6]], %subreg.sub2, [[COPY5]], %subreg.sub3 |
| ; GFX908-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX908-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX908-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: test_vgpr_init |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $vgpr0, $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.0, %12.sub0, %bb.1 |
| ; GFX90A-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY3]], %bb.0, %12.sub1, %bb.1 |
| ; GFX90A-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.0, %12.sub2, %bb.1 |
| ; GFX90A-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %12.sub3, %bb.1 |
| ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1, [[COPY6]], %subreg.sub2, [[COPY5]], %subreg.sub3 |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX90A-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| liveins: $vgpr0, $scc |
| successors: %bb.1 |
| |
| %0:vgpr_32 = COPY $vgpr0 |
| |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %8:vgpr_32 = PHI %0, %bb.0, %16, %bb.1 |
| %9:vgpr_32 = PHI %0, %bb.0, %17, %bb.1 |
| %10:vgpr_32 = PHI %0, %bb.0, %18, %bb.1 |
| %11:vgpr_32 = PHI %0, %bb.0, %19, %bb.1 |
| %12:areg_128_align2 = REG_SEQUENCE %8, %subreg.sub0, %9, %subreg.sub1, %10, %subreg.sub2, %11, %subreg.sub3 |
| %13:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| %14:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| %15:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 %14:vgpr_32, %13:vgpr_32, %12:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %16:vgpr_32 = COPY %15.sub0 |
| %17:vgpr_32 = COPY %15.sub1 |
| %18:vgpr_32 = COPY %15.sub2 |
| %19:vgpr_32 = COPY %15.sub3 |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_use_vgpr_temp |
| tracksRegLiveness: true |
| |
| body: | |
| ; GFX908-LABEL: name: test_use_vgpr_temp |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $sgpr0, $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $sgpr0 |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_1:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_2:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_3:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[V_ACCVGPR_WRITE_B32_e64_]], %subreg.sub0, [[V_ACCVGPR_WRITE_B32_e64_1]], %subreg.sub1, [[V_ACCVGPR_WRITE_B32_e64_2]], %subreg.sub2, [[V_ACCVGPR_WRITE_B32_e64_3]], %subreg.sub3 |
| ; GFX908-NEXT: [[V_ACCVGPR_READ_B32_e64_:%[0-9]+]]:vgpr_32 = V_ACCVGPR_READ_B32_e64 [[REG_SEQUENCE]].sub0, implicit $exec |
| ; GFX908-NEXT: [[COPY1:%[0-9]+]]:agpr_32 = COPY [[V_ACCVGPR_READ_B32_e64_]] |
| ; GFX908-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0 |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %18.sub0, %bb.1 |
| ; GFX908-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %18.sub1, %bb.1 |
| ; GFX908-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %18.sub2, %bb.1 |
| ; GFX908-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %18.sub3, %bb.1 |
| ; GFX908-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX908-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY6]], %subreg.sub0, [[COPY5]], %subreg.sub1, [[COPY4]], %subreg.sub2, [[COPY3]], %subreg.sub3 |
| ; GFX908-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX908-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX908-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE1]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: test_use_vgpr_temp |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $sgpr0, $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $sgpr0 |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_1:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_2:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_3:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 [[COPY]], implicit $exec |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[V_ACCVGPR_WRITE_B32_e64_]], %subreg.sub0, [[V_ACCVGPR_WRITE_B32_e64_1]], %subreg.sub1, [[V_ACCVGPR_WRITE_B32_e64_2]], %subreg.sub2, [[V_ACCVGPR_WRITE_B32_e64_3]], %subreg.sub3 |
| ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0 |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[REG_SEQUENCE]].sub0, %bb.0, %18.sub0, %bb.1 |
| ; GFX90A-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[REG_SEQUENCE]].sub0, %bb.0, %18.sub1, %bb.1 |
| ; GFX90A-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[REG_SEQUENCE]].sub0, %bb.0, %18.sub2, %bb.1 |
| ; GFX90A-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[REG_SEQUENCE]].sub0, %bb.0, %18.sub3, %bb.1 |
| ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY5]], %subreg.sub0, [[COPY4]], %subreg.sub1, [[COPY3]], %subreg.sub2, [[COPY2]], %subreg.sub3 |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX90A-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE1]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| liveins: $sgpr0, $scc |
| successors: %bb.1 |
| |
| %1:vgpr_32 = COPY $sgpr0 |
| %2:agpr_32 = V_ACCVGPR_WRITE_B32_e64 %1, implicit $exec |
| %3:agpr_32 = V_ACCVGPR_WRITE_B32_e64 %1, implicit $exec |
| %4:agpr_32 = V_ACCVGPR_WRITE_B32_e64 %1, implicit $exec |
| %5:agpr_32 = V_ACCVGPR_WRITE_B32_e64 %1, implicit $exec |
| %6:areg_128_align2 = REG_SEQUENCE %2, %subreg.sub0, %3, %subreg.sub1, %4, %subreg.sub2, %5, %subreg.sub3 |
| %7:vgpr_32 = COPY %6.sub0 |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %8:vgpr_32 = PHI %7, %bb.0, %16, %bb.1 |
| %9:vgpr_32 = PHI %7, %bb.0, %17, %bb.1 |
| %10:vgpr_32 = PHI %7, %bb.0, %18, %bb.1 |
| %11:vgpr_32 = PHI %7, %bb.0, %19, %bb.1 |
| %12:areg_128_align2 = REG_SEQUENCE %8, %subreg.sub0, %9, %subreg.sub1, %10, %subreg.sub2, %11, %subreg.sub3 |
| %13:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| %14:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| %15:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 %14:vgpr_32, %13:vgpr_32, %12:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %16:vgpr_32 = COPY %15.sub0 |
| %17:vgpr_32 = COPY %15.sub1 |
| %18:vgpr_32 = COPY %15.sub2 |
| %19:vgpr_32 = COPY %15.sub3 |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| bb.2: |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_vgpr_init_two_copies |
| tracksRegLiveness: true |
| |
| body: | |
| ; GFX908-LABEL: name: test_vgpr_init_two_copies |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $vgpr0, $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX908-NEXT: [[COPY1:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY3:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.0, %12.sub0, %bb.1 |
| ; GFX908-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY3]], %bb.0, %12.sub1, %bb.1 |
| ; GFX908-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.0, %12.sub2, %bb.1 |
| ; GFX908-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %12.sub3, %bb.1 |
| ; GFX908-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX908-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX908-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1, [[COPY6]], %subreg.sub2, [[COPY5]], %subreg.sub3 |
| ; GFX908-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX908-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX908-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: test_vgpr_init_two_copies |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $vgpr0, $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[COPY]] |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.0, %12.sub0, %bb.1 |
| ; GFX90A-NEXT: [[PHI1:%[0-9]+]]:agpr_32 = PHI [[COPY3]], %bb.0, %12.sub1, %bb.1 |
| ; GFX90A-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.0, %12.sub2, %bb.1 |
| ; GFX90A-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY1]], %bb.0, %12.sub3, %bb.1 |
| ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[PHI1]] |
| ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY8]], %subreg.sub0, [[COPY7]], %subreg.sub1, [[COPY6]], %subreg.sub2, [[COPY5]], %subreg.sub3 |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX90A-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| liveins: $vgpr0, $scc |
| successors: %bb.1 |
| |
| %0:vgpr_32 = COPY $vgpr0 |
| |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %8:vgpr_32 = PHI %0, %bb.0, %17, %bb.1 |
| %9:vgpr_32 = PHI %0, %bb.0, %18, %bb.1 |
| %10:vgpr_32 = PHI %0, %bb.0, %19, %bb.1 |
| %11:vgpr_32 = PHI %0, %bb.0, %20, %bb.1 |
| %12:areg_128_align2 = REG_SEQUENCE %8, %subreg.sub0, %9, %subreg.sub1, %10, %subreg.sub2, %11, %subreg.sub3 |
| %13:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| %14:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| %15:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 %14:vgpr_32, %13:vgpr_32, %12:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %16:vreg_128_align2 = COPY %15:areg_128_align2 |
| %17:vgpr_32 = COPY %16.sub0:vreg_128_align2 |
| %18:vgpr_32 = COPY %16.sub1:vreg_128_align2 |
| %19:vgpr_32 = COPY %16.sub2:vreg_128_align2 |
| %20:vgpr_32 = COPY %16.sub3:vreg_128_align2 |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_vgpr_init_skip_phis_insertpt |
| tracksRegLiveness: true |
| |
| body: | |
| ; GFX908-LABEL: name: test_vgpr_init_skip_phis_insertpt |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $vgpr0, $vgpr1, $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX908-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[COPY]], %bb.0, [[COPY1]], %bb.1 |
| ; GFX908-NEXT: [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[COPY]], %bb.0, [[COPY1]], %bb.1 |
| ; GFX908-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[COPY3:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: [[COPY5:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY5]], %bb.1, %15.sub0, %bb.2 |
| ; GFX908-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.1, %15.sub1, %bb.2 |
| ; GFX908-NEXT: [[PHI4:%[0-9]+]]:agpr_32 = PHI [[COPY3]], %bb.1, %15.sub2, %bb.2 |
| ; GFX908-NEXT: [[PHI5:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.1, %15.sub3, %bb.2 |
| ; GFX908-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI5]] |
| ; GFX908-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[PHI4]] |
| ; GFX908-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX908-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY9]], %subreg.sub0, [[COPY8]], %subreg.sub1, [[COPY7]], %subreg.sub2, [[COPY6]], %subreg.sub3 |
| ; GFX908-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX908-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX908-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.2, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.3: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: test_vgpr_init_skip_phis_insertpt |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $vgpr0, $vgpr1, $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX90A-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:vgpr_32 = PHI [[COPY]], %bb.0, [[COPY1]], %bb.1 |
| ; GFX90A-NEXT: [[PHI1:%[0-9]+]]:vgpr_32 = PHI [[COPY]], %bb.0, [[COPY1]], %bb.1 |
| ; GFX90A-NEXT: [[COPY2:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[COPY3:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[COPY4:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: [[COPY5:%[0-9]+]]:agpr_32 = COPY [[PHI]] |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: successors: %bb.2(0x40000000), %bb.3(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI2:%[0-9]+]]:agpr_32 = PHI [[COPY5]], %bb.1, %15.sub0, %bb.2 |
| ; GFX90A-NEXT: [[PHI3:%[0-9]+]]:agpr_32 = PHI [[COPY4]], %bb.1, %15.sub1, %bb.2 |
| ; GFX90A-NEXT: [[PHI4:%[0-9]+]]:agpr_32 = PHI [[COPY3]], %bb.1, %15.sub2, %bb.2 |
| ; GFX90A-NEXT: [[PHI5:%[0-9]+]]:agpr_32 = PHI [[COPY2]], %bb.1, %15.sub3, %bb.2 |
| ; GFX90A-NEXT: [[COPY6:%[0-9]+]]:vgpr_32 = COPY [[PHI5]] |
| ; GFX90A-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[PHI4]] |
| ; GFX90A-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[PHI3]] |
| ; GFX90A-NEXT: [[COPY9:%[0-9]+]]:vgpr_32 = COPY [[PHI2]] |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[COPY9]], %subreg.sub0, [[COPY8]], %subreg.sub1, [[COPY7]], %subreg.sub2, [[COPY6]], %subreg.sub3 |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_1:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| ; GFX90A-NEXT: [[V_MFMA_F32_4X4X1F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 [[V_MOV_B32_e32_1]], [[V_MOV_B32_e32_]], [[REG_SEQUENCE]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.2, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.3: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| liveins: $vgpr0, $vgpr1, $scc |
| successors: %bb.1 |
| |
| %0:vgpr_32 = COPY $vgpr0 |
| %1:vgpr_32 = COPY $vgpr0 |
| |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %6:vgpr_32 = PHI %0, %bb.0, %1, %bb.1 |
| %7:vgpr_32 = PHI %0, %bb.0, %1, %bb.1 |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| liveins: $scc |
| successors: %bb.2, %bb.3 |
| %8:vgpr_32 = PHI %6, %bb.1, %16, %bb.2 |
| %9:vgpr_32 = PHI %6, %bb.1, %17, %bb.2 |
| %10:vgpr_32 = PHI %6, %bb.1, %18, %bb.2 |
| %11:vgpr_32 = PHI %6, %bb.1, %19, %bb.2 |
| %12:areg_128_align2 = REG_SEQUENCE %8, %subreg.sub0, %9, %subreg.sub1, %10, %subreg.sub2, %11, %subreg.sub3 |
| %13:vgpr_32 = V_MOV_B32_e32 1073741824, implicit $exec |
| %14:vgpr_32 = V_MOV_B32_e32 1065353216, implicit $exec |
| %15:areg_128_align2 = V_MFMA_F32_4X4X1F32_e64 %14:vgpr_32, %13:vgpr_32, %12:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %16:vgpr_32 = COPY %15.sub0 |
| %17:vgpr_32 = COPY %15.sub1 |
| %18:vgpr_32 = COPY %15.sub2 |
| %19:vgpr_32 = COPY %15.sub3 |
| S_CBRANCH_SCC1 %bb.2, implicit $scc |
| |
| bb.3: |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: skip_optimize_agpr_phi_without_subreg_use |
| tracksRegLiveness: true |
| body: | |
| ; GFX908-LABEL: name: skip_optimize_agpr_phi_without_subreg_use |
| ; GFX908: bb.0: |
| ; GFX908-NEXT: successors: %bb.1(0x80000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX908-NEXT: [[S_MOV_B32_:%[0-9]+]]:sgpr_32 = S_MOV_B32 0 |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_1:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_2:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX908-NEXT: [[V_ACCVGPR_WRITE_B32_e64_3:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX908-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[V_ACCVGPR_WRITE_B32_e64_]], %subreg.sub0, [[V_ACCVGPR_WRITE_B32_e64_1]], %subreg.sub1, [[V_ACCVGPR_WRITE_B32_e64_2]], %subreg.sub2, [[V_ACCVGPR_WRITE_B32_e64_3]], %subreg.sub3 |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.1: |
| ; GFX908-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX908-NEXT: liveins: $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: [[PHI:%[0-9]+]]:areg_128_align2 = PHI [[REG_SEQUENCE]], %bb.0, %7, %bb.1 |
| ; GFX908-NEXT: [[V_MFMA_F32_16X16X4F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_16X16X4F32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_]], [[PHI]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX908-NEXT: [[COPY:%[0-9]+]]:areg_128_align2 = COPY [[V_MFMA_F32_16X16X4F32_e64_]], implicit $exec |
| ; GFX908-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX908-NEXT: {{ $}} |
| ; GFX908-NEXT: bb.2: |
| ; GFX908-NEXT: S_ENDPGM 0 |
| ; |
| ; GFX90A-LABEL: name: skip_optimize_agpr_phi_without_subreg_use |
| ; GFX90A: bb.0: |
| ; GFX90A-NEXT: successors: %bb.1(0x80000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX90A-NEXT: [[S_MOV_B32_:%[0-9]+]]:sgpr_32 = S_MOV_B32 0 |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_1:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_2:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX90A-NEXT: [[V_ACCVGPR_WRITE_B32_e64_3:%[0-9]+]]:agpr_32 = V_ACCVGPR_WRITE_B32_e64 0, implicit $exec |
| ; GFX90A-NEXT: [[REG_SEQUENCE:%[0-9]+]]:areg_128_align2 = REG_SEQUENCE [[V_ACCVGPR_WRITE_B32_e64_]], %subreg.sub0, [[V_ACCVGPR_WRITE_B32_e64_1]], %subreg.sub1, [[V_ACCVGPR_WRITE_B32_e64_2]], %subreg.sub2, [[V_ACCVGPR_WRITE_B32_e64_3]], %subreg.sub3 |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.1: |
| ; GFX90A-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000) |
| ; GFX90A-NEXT: liveins: $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: [[PHI:%[0-9]+]]:areg_128_align2 = PHI [[REG_SEQUENCE]], %bb.0, %7, %bb.1 |
| ; GFX90A-NEXT: [[V_MFMA_F32_16X16X4F32_e64_:%[0-9]+]]:areg_128_align2 = V_MFMA_F32_16X16X4F32_e64 [[V_MOV_B32_e32_]], [[V_MOV_B32_e32_]], [[PHI]], 0, 0, 0, implicit $mode, implicit $exec |
| ; GFX90A-NEXT: [[COPY:%[0-9]+]]:areg_128_align2 = COPY [[V_MFMA_F32_16X16X4F32_e64_]], implicit $exec |
| ; GFX90A-NEXT: S_CBRANCH_SCC1 %bb.1, implicit $scc |
| ; GFX90A-NEXT: {{ $}} |
| ; GFX90A-NEXT: bb.2: |
| ; GFX90A-NEXT: S_ENDPGM 0 |
| bb.0: |
| liveins: $scc |
| successors: %bb.1 |
| |
| %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| %1:sgpr_32 = S_MOV_B32 0 |
| %2:sgpr_128 = REG_SEQUENCE %1, %subreg.sub0, %1, %subreg.sub1, %1, %subreg.sub2, %1, %subreg.sub3 |
| %3:vreg_128 = COPY %2 |
| %4:sreg_64 = S_MOV_B64 0 |
| %5:areg_128_align2 = COPY %3, implicit $exec |
| |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %9:areg_128_align2 = PHI %5, %bb.0, %10, %bb.1 |
| %11:areg_128_align2 = V_MFMA_F32_16X16X4F32_e64 %0:vgpr_32, %0:vgpr_32, %9:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %12:vgpr_32 = COPY %11.sub3 |
| %13:vgpr_32 = COPY %11.sub2 |
| %14:vgpr_32 = COPY %11.sub1 |
| %15:vgpr_32 = COPY %11.sub0 |
| %10:areg_128_align2 = COPY %11, implicit $exec |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| S_ENDPGM 0 |
| |
| ... |
| |
| |
| |
| |
| --- |
| name: phi_output_reg_type_is_vgpr |
| tracksRegLiveness: true |
| body: | |
| bb.0: |
| liveins: $scc |
| successors: %bb.1 |
| |
| %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec |
| %1:sgpr_32 = S_MOV_B32 0 |
| %2:sgpr_128 = REG_SEQUENCE %1, %subreg.sub0, %1, %subreg.sub1, %1, %subreg.sub2, %1, %subreg.sub3 |
| %3:vreg_128 = COPY %2 |
| %4:sreg_64 = S_MOV_B64 0 |
| %5:areg_128_align2 = COPY %3, implicit $exec |
| |
| bb.1: |
| liveins: $scc |
| successors: %bb.1, %bb.2 |
| |
| %9:areg_128_align2 = PHI %5, %bb.0, %10, %bb.1 |
| %11:areg_128_align2 = V_MFMA_F32_16X16X4F32_e64 %0:vgpr_32, %0:vgpr_32, %9:areg_128_align2, 0, 0, 0, implicit $mode, implicit $exec |
| %12:vgpr_32 = COPY %11.sub3 |
| %13:vgpr_32 = COPY %11.sub2 |
| %14:vgpr_32 = COPY %11.sub1 |
| %15:vgpr_32 = COPY %11.sub0 |
| %10:areg_128_align2 = COPY %11, implicit $exec |
| S_CBRANCH_SCC1 %bb.1, implicit $scc |
| |
| bb.2: |
| S_ENDPGM 0 |
| |
| ... |