| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6 |
| |
| # machine-sink must not sink WMMA and PERMLANE instructions. |
| # Ensure that WMMA, PERMLANE, and DPP instructions are marked as convergent to prevent |
| # machine-sink from sinking them. |
| |
| # RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx12-generic -run-pass=machine-sink %s -o - | FileCheck %s |
| |
| ################################################################################ |
| # WMMA instructions |
| ################################################################################ |
| |
| --- |
| name: test_V_WMMA_F32_16X16X16_F16_w32_threeaddr |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_WMMA_F32_16X16X16_F16_w32_threeaddr |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vreg_128 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vreg_128 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: early-clobber %3:vreg_256 = V_WMMA_F32_16X16X16_F16_w32_threeaddr 8, [[DEF]], 8, [[DEF1]], 8, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF2]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vreg_256 = COPY %3.sub1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vreg_128 = IMPLICIT_DEF |
| %1:vreg_128 = IMPLICIT_DEF |
| %2:sreg_32 = IMPLICIT_DEF |
| early-clobber %3:vreg_256 = V_WMMA_F32_16X16X16_F16_w32_threeaddr 8, %0:vreg_128, 8, %1:vreg_128, 8, 0, 0, 0, implicit $exec |
| %4:sreg_32 = SI_IF %2:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %5:vreg_256 = COPY %3.sub1:vreg_256 |
| |
| bb.2: |
| SI_END_CF %4:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| |
| ... |
| |
| --- |
| name: test_V_WMMA_F32_16X16X16_F16_twoaddr_w32 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_WMMA_F32_16X16X16_F16_twoaddr_w32 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vsrc:vreg_256 = IMPLICIT_DEF |
| ; CHECK-NEXT: %ssrc:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: early-clobber %vdst:vreg_256 = V_WMMA_F32_16X16X16_F16_twoaddr_w32 8, %vsrc, 8, %vsrc, 8, %vsrc, 0, 0, implicit $exec |
| ; CHECK-NEXT: %sdst:sreg_32 = SI_IF %ssrc, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vcopy:vgpr_32 = COPY %vdst.sub0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF %sdst, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %vsrc:vreg_256 = IMPLICIT_DEF |
| %ssrc:sreg_32 = IMPLICIT_DEF |
| early-clobber %vdst:vreg_256 = V_WMMA_F32_16X16X16_F16_twoaddr_w32 8, %vsrc, 8, %vsrc, 8, %vsrc, 0, 0, implicit $exec |
| %sdst:sreg_32 = SI_IF %ssrc:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| bb.1: |
| %vcopy:vgpr_32 = COPY %vdst.sub0 |
| bb.2: |
| SI_END_CF %sdst:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_V_WMMA_I32_16X16X16_IU8_twoaddr_w32 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_WMMA_I32_16X16X16_IU8_twoaddr_w32 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vsrc:vreg_128 = IMPLICIT_DEF |
| ; CHECK-NEXT: %vsrc2:vreg_256 = IMPLICIT_DEF |
| ; CHECK-NEXT: %ssrc:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: early-clobber %vdst:vreg_256 = V_WMMA_I32_16X16X16_IU8_twoaddr_w32 8, %vsrc, 8, %vsrc, 8, %vsrc2, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: %sdst:sreg_32 = SI_IF %ssrc, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vcopy:vgpr_32 = COPY %vdst.sub0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF %sdst, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %vsrc:vreg_128 = IMPLICIT_DEF |
| %vsrc2:vreg_256 = IMPLICIT_DEF |
| %ssrc:sreg_32 = IMPLICIT_DEF |
| early-clobber %vdst:vreg_256 = V_WMMA_I32_16X16X16_IU8_twoaddr_w32 8, %vsrc, 8, %vsrc, 8, %vsrc2, 0, 0, 0, implicit $exec |
| %sdst:sreg_32 = SI_IF %ssrc:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| bb.1: |
| %vcopy:vgpr_32 = COPY %vdst.sub0 |
| bb.2: |
| SI_END_CF %sdst:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_V_WMMA_BF16_16X16X16_BF16_threeaddr_w32 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_WMMA_BF16_16X16X16_BF16_threeaddr_w32 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vsrc:vreg_256 = IMPLICIT_DEF |
| ; CHECK-NEXT: %ssrc:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: early-clobber %vdst:vreg_256 = V_WMMA_BF16_16X16X16_BF16_threeaddr_w32 8, %vsrc, 8, %vsrc, 8, %vsrc, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: %sdst:sreg_32 = SI_IF %ssrc, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vcopy:vgpr_32 = COPY %vdst.sub0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF %sdst, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %vsrc:vreg_256 = IMPLICIT_DEF |
| %ssrc:sreg_32 = IMPLICIT_DEF |
| early-clobber %vdst:vreg_256 = V_WMMA_BF16_16X16X16_BF16_threeaddr_w32 8, %vsrc, 8, %vsrc, 8, %vsrc, 0, 0, 0, 0, implicit $exec |
| %sdst:sreg_32 = SI_IF %ssrc:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| bb.1: |
| %vcopy:vgpr_32 = COPY %vdst.sub0 |
| bb.2: |
| SI_END_CF %sdst:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: test_V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_twoaddr |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_twoaddr |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vsrc256:vreg_256 = IMPLICIT_DEF |
| ; CHECK-NEXT: %vsrc512:vreg_512 = IMPLICIT_DEF |
| ; CHECK-NEXT: %ssrc:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: early-clobber %vdst:vreg_256 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_twoaddr %vsrc512, %vsrc512, 8, %vsrc256, 0, 0, 1, 2, 1, 1, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: %sdst:sreg_32 = SI_IF %ssrc, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: %vcopy:vgpr_32 = COPY %vdst.sub0 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF %sdst, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %vsrc256:vreg_256 = IMPLICIT_DEF |
| %vsrc512:vreg_512 = IMPLICIT_DEF |
| %ssrc:sreg_32 = IMPLICIT_DEF |
| early-clobber %vdst:vreg_256 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_twoaddr %vsrc512, %vsrc512, 8, %vsrc256, 0, 0, 1, 2, 1, 1, 0, 0, 0, 0, 0, 0, implicit $exec |
| %sdst:sreg_32 = SI_IF %ssrc:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| bb.1: |
| %vcopy:vgpr_32 = COPY %vdst.sub0 |
| bb.2: |
| SI_END_CF %sdst:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| ################################################################################ |
| # PERMLANE instructions |
| ################################################################################ |
| |
| --- |
| name: test_V_PERMLANE_XOR_B32_e64 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANE_XOR_B32_e64 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANE_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_PERMLANE_XOR_B32_e64 [[DEF]], [[DEF1]], 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF2]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANE_XOR_B32_e64_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:sreg_32 = IMPLICIT_DEF |
| %3:vgpr_32 = V_PERMLANE_XOR_B32_e64 %0:vgpr_32, %1:sreg_32, 0, implicit $exec |
| %4:sreg_32 = SI_IF %2:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %5:vgpr_32 = COPY %3:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %4:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_PERMLANE_UP_B32_e64 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANE_UP_B32_e64 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANE_UP_B32_e64_:%[0-9]+]]:vgpr_32 = V_PERMLANE_UP_B32_e64 [[DEF]], [[DEF1]], 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF2]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANE_UP_B32_e64_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:sreg_32 = IMPLICIT_DEF |
| %3:vgpr_32 = V_PERMLANE_UP_B32_e64 %0:vgpr_32, %1:sreg_32, 0, implicit $exec |
| %4:sreg_32 = SI_IF %2:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %5:vgpr_32 = COPY %3:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %4:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_PERMLANE_DOWN_B32_e64 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANE_DOWN_B32_e64 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANE_DOWN_B32_e64_:%[0-9]+]]:vgpr_32 = V_PERMLANE_DOWN_B32_e64 [[DEF]], [[DEF1]], 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF2]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANE_DOWN_B32_e64_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:sreg_32 = IMPLICIT_DEF |
| %3:vgpr_32 = V_PERMLANE_DOWN_B32_e64 %0:vgpr_32, %1:sreg_32, 0, implicit $exec |
| %4:sreg_32 = SI_IF %2:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %5:vgpr_32 = COPY %3:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %4:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_PERMLANE_BCAST_B32_e64 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANE_BCAST_B32_e64 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANE_BCAST_B32_e64_:%[0-9]+]]:vgpr_32 = V_PERMLANE_BCAST_B32_e64 [[DEF]], [[DEF1]], 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF2]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANE_BCAST_B32_e64_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:sreg_32 = IMPLICIT_DEF |
| %3:vgpr_32 = V_PERMLANE_BCAST_B32_e64 %0:vgpr_32, %1:sreg_32, 0, implicit $exec |
| %4:sreg_32 = SI_IF %2:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %5:vgpr_32 = COPY %3:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %4:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_PERMLANE_IDX_GEN_B32_e64 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANE_IDX_GEN_B32_e64 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANE_IDX_GEN_B32_e64_:%[0-9]+]]:vgpr_32 = V_PERMLANE_IDX_GEN_B32_e64 [[DEF]], [[DEF1]], implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF2]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANE_IDX_GEN_B32_e64_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:sreg_32 = IMPLICIT_DEF |
| %3:vgpr_32 = V_PERMLANE_IDX_GEN_B32_e64 %0:vgpr_32, %1:sreg_32, implicit $exec |
| %4:sreg_32 = SI_IF %2:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %5:vgpr_32 = COPY %3:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %4:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_PERMLANEX_VAR_B32_e64 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANEX_VAR_B32_e64 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANEX16_VAR_B32_e64_:%[0-9]+]]:vgpr_32 = V_PERMLANEX16_VAR_B32_e64 0, [[DEF]], 0, [[DEF]], [[DEF]], 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANEX16_VAR_B32_e64_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_PERMLANEX16_VAR_B32_e64 0, %0:vgpr_32, 0, %0:vgpr_32, %0:vgpr_32, 0, implicit $exec |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_PERMLANE64_B32 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANE64_B32 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANE64_B32_:%[0-9]+]]:vgpr_32 = V_PERMLANE64_B32 [[DEF]], implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANE64_B32_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_PERMLANE64_B32 %0:vgpr_32, implicit $exec |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_PERMLANE16_VAR_B32_e64 |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_PERMLANE16_VAR_B32_e64 |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_PERMLANE16_VAR_B32_e64_:%[0-9]+]]:vgpr_32 = V_PERMLANE16_VAR_B32_e64 0, [[DEF]], 0, [[DEF]], [[DEF]], 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_PERMLANE16_VAR_B32_e64_]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_PERMLANE16_VAR_B32_e64 0, %0:vgpr_32, 0, %0:vgpr_32, %0:vgpr_32, 0, implicit $exec |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| ################################################################################ |
| # DPP instructions |
| ################################################################################ |
| |
| --- |
| name: test_V_DOT2C_F32_BF16_dpp_vi |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_DOT2C_F32_BF16_dpp_vi |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_DOT2C_F32_BF16_dpp_vi:%[0-9]+]]:vgpr_32 = V_DOT2C_F32_BF16_dpp_vi 8, [[DEF]], [[DEF]], [[DEF]], [[DEF]], 0, 0, 0, 0, implicit $exec, implicit $mode |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_DOT2C_F32_BF16_dpp_vi]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_DOT2C_F32_BF16_dpp_vi 8, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, 0, 0, 0, 0, implicit $exec, implicit $mode |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_DOT2C_F32_F16_dpp_vi |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_DOT2C_F32_F16_dpp_vi |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_DOT2C_F32_F16_dpp_vi:%[0-9]+]]:vgpr_32 = V_DOT2C_F32_F16_dpp_vi 8, [[DEF]], [[DEF]], [[DEF]], [[DEF]], 0, 0, 0, 0, implicit $exec, implicit $mode |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_DOT2C_F32_F16_dpp_vi]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_DOT2C_F32_F16_dpp_vi 8, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, 0, 0, 0, 0, implicit $exec, implicit $mode |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_DOT2C_I32_I16_dpp_vi |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_DOT2C_I32_I16_dpp_vi |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_DOT2C_I32_I16_dpp_vi:%[0-9]+]]:vgpr_32 = V_DOT2C_I32_I16_dpp_vi 8, [[DEF]], [[DEF]], [[DEF]], [[DEF]], 0, 0, 0, 0, implicit $exec, implicit $mode |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_DOT2C_I32_I16_dpp_vi]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_DOT2C_I32_I16_dpp_vi 8, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, 0, 0, 0, 0, implicit $exec, implicit $mode |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_DOT4C_I32_I8_dpp_vi |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_DOT4C_I32_I8_dpp_vi |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_DOT4C_I32_I8_dpp_vi:%[0-9]+]]:vgpr_32 = V_DOT4C_I32_I8_dpp_vi 8, [[DEF]], [[DEF]], [[DEF]], [[DEF]], 0, 0, 0, 0, implicit $exec, implicit $mode |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_DOT4C_I32_I8_dpp_vi]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_DOT4C_I32_I8_dpp_vi 8, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, 0, 0, 0, 0, implicit $exec, implicit $mode |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |
| --- |
| name: test_V_DOT8C_I32_I4_dpp_vi |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: test_V_DOT8C_I32_I4_dpp_vi |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[V_DOT8C_I32_I4_dpp_vi:%[0-9]+]]:vgpr_32 = V_DOT8C_I32_I4_dpp_vi 8, [[DEF]], [[DEF]], [[DEF]], [[DEF]], 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[SI_IF:%[0-9]+]]:sreg_32 = SI_IF [[DEF1]], %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: successors: %bb.2(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY [[V_DOT8C_I32_I4_dpp_vi]] |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.2: |
| ; CHECK-NEXT: SI_END_CF [[SI_IF]], implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0 |
| bb.0: |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:sreg_32 = IMPLICIT_DEF |
| %2:vgpr_32 = V_DOT8C_I32_I4_dpp_vi 8, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, %0:vgpr_32, 0, 0, 0, 0, implicit $exec |
| %3:sreg_32 = SI_IF %1:sreg_32, %bb.2, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %4:vgpr_32 = COPY %2:vgpr_32 |
| |
| bb.2: |
| SI_END_CF %3:sreg_32, implicit-def dead $exec, implicit-def dead $scc, implicit $exec |
| S_ENDPGM 0 |
| ... |