| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6 |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -run-pass=machine-scheduler -amdgpu-sched-strategy=coexec -verify-misched %s -o - | FileCheck -check-prefix=CHECK %s |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -run-pass=machine-scheduler -amdgpu-sched-strategy=coexec -verify-misched -debug-only=gcn-hazard-recognizer %s -o /dev/null 2>&1 | FileCheck -check-prefix=DBG %s |
| |
| # REQUIRES: asserts |
| |
| # Tests use V_WMMA_SCALE_F32_16X16X128_F8F6F4 which has pattern 0EEIEEISVV |
| # (10-cycle window, 8-cycle occupancy). The 'S' slot indicates scaled WMMA |
| # can issue there (LD_SCALE rule). |
| # |
| # Co-execution window slots: |
| # Stage: 0 1 2 3 4 5 6 7 8 9 |
| # Slot: E0 E E I E E I S V V |
| # |
| # E0 (stage 0): Control only (issue cycle) |
| # E (stages 1,2,4,5): MEM + SALU allowed, NO VALU/TRANS |
| # I (stages 3,6): MEM + SALU + VALU + TRANS allowed |
| # S (stage 7): Same as I, plus scaled WMMA can absorb here |
| # V (stages 8,9): MEM + SALU + WMMA allowed, NO VALU/TRANS |
| |
| --- | |
| define void @wmma_ds_salu_only() #0 { ret void } |
| define void @wmma_valu_trans_only() #0 { ret void } |
| define void @wmma_valu_in_I_slots() #0 { ret void } |
| define void @wmma_trans_in_I_slots() #0 { ret void } |
| define void @wmma_chain_back_to_back() #0 { ret void } |
| define void @wmma_mixed_ds_valu_trans() #0 { ret void } |
| define void @trans_valu_interleave() #0 { ret void } |
| define void @wmma_valu_blocked_in_V_slot() #0 { ret void } |
| |
| attributes #0 = { "amdgpu-waves-per-eu"="1,1" } |
| ... |
| |
| # DBG-LABEL: PreRA hazard recognizer: wmma_ds_salu_only |
| # DBG: CoExec window complete: |
| # DBG-NEXT: Stages: 0 1 2 3 4 5 6 7 8 9 |
| # DBG-NEXT: Slots: 0 E E I E E I S V V |
| # DBG-NEXT: Scheduled: 0 E E I E E I S V V |
| --- |
| name: wmma_ds_salu_only |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: wmma_ds_salu_only |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: early-clobber %17:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF]], [[DEF1]], 0, [[DEF2]], [[DEF3]], [[DEF4]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_1:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 16, 0, implicit $exec |
| ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[DEF6]], [[DEF7]], implicit-def dead $scc |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_2:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 32, 0, implicit $exec |
| ; CHECK-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_]], [[DEF7]], implicit-def dead $scc |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_3:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 48, 0, implicit $exec |
| ; CHECK-NEXT: [[S_ADD_I32_2:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_1]], [[DEF6]], implicit-def dead $scc |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_4:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 64, 0, implicit $exec |
| ; CHECK-NEXT: [[S_ADD_I32_3:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_2]], [[DEF7]], implicit-def dead $scc |
| ; CHECK-NEXT: S_ENDPGM 0, implicit [[DS_READ_B128_gfx9_]], implicit [[DS_READ_B128_gfx9_1]], implicit [[DS_READ_B128_gfx9_2]], implicit [[DS_READ_B128_gfx9_3]], implicit [[DS_READ_B128_gfx9_4]], implicit [[S_ADD_I32_3]], implicit %17 |
| bb.0: |
| successors: %bb.1 |
| %0:vreg_512_align2 = IMPLICIT_DEF |
| %1:vreg_512_align2 = IMPLICIT_DEF |
| %2:vreg_256_align2 = IMPLICIT_DEF |
| %3:vgpr_32_lo256 = IMPLICIT_DEF |
| %4:vgpr_32_lo256 = IMPLICIT_DEF |
| %5:vgpr_32 = IMPLICIT_DEF |
| %6:sreg_32 = IMPLICIT_DEF |
| %7:sreg_32 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %8:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 0, 0, implicit $exec |
| %9:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 16, 0, implicit $exec |
| %10:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 32, 0, implicit $exec |
| %11:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 48, 0, implicit $exec |
| %12:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 64, 0, implicit $exec |
| %13:sreg_32 = S_ADD_I32 %6, %7, implicit-def dead $scc |
| %14:sreg_32 = S_ADD_I32 %13, %7, implicit-def dead $scc |
| %15:sreg_32 = S_ADD_I32 %14, %6, implicit-def dead $scc |
| %16:sreg_32 = S_ADD_I32 %15, %7, implicit-def dead $scc |
| early-clobber %17:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %0, %1, 0, %2, %3, %4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| S_ENDPGM 0, implicit %8, implicit %9, implicit %10, implicit %11, implicit %12, implicit %16, implicit %17 |
| ... |
| |
| # DBG-LABEL: PreRA hazard recognizer: wmma_valu_trans_only |
| # DBG: CoExec window ended at stage 7: |
| # DBG-NEXT: Stages: 0 1 2 3 4 5 6 7 8 9 |
| # DBG-NEXT: Slots: 0 E E I E E I S V V |
| # DBG-NEXT: Scheduled: 0 - - I - - I S . . |
| --- |
| name: wmma_valu_trans_only |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: wmma_valu_trans_only |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: early-clobber %10:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF]], [[DEF1]], 0, [[DEF2]], [[DEF3]], [[DEF4]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[V_EXP_F32_e32_:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF5]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF6]], 8, [[DEF7]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0, implicit [[V_EXP_F32_e32_]], implicit [[V_PK_ADD_F32_]], implicit %10 |
| bb.0: |
| successors: %bb.1 |
| %0:vreg_512_align2 = IMPLICIT_DEF |
| %1:vreg_512_align2 = IMPLICIT_DEF |
| %2:vreg_256_align2 = IMPLICIT_DEF |
| %3:vgpr_32_lo256 = IMPLICIT_DEF |
| %4:vgpr_32_lo256 = IMPLICIT_DEF |
| %5:vgpr_32 = IMPLICIT_DEF |
| %6:vreg_64_align2 = IMPLICIT_DEF |
| %7:vreg_64_align2 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %8:vgpr_32 = V_EXP_F32_e32 %5, implicit $mode, implicit $exec |
| %9:vreg_64_align2 = V_PK_ADD_F32 8, %6, 8, %7, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| early-clobber %10:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %0, %1, 0, %2, %3, %4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| S_ENDPGM 0, implicit %8, implicit %9, implicit %10 |
| ... |
| |
| # DBG-LABEL: PreRA hazard recognizer: wmma_valu_in_I_slots |
| # DBG: CoExec window ended at stage 8: |
| # DBG-NEXT: Stages: 0 1 2 3 4 5 6 7 8 9 |
| # DBG-NEXT: Slots: 0 E E I E E I S V V |
| # DBG-NEXT: Scheduled: 0 E E I E E I S V . |
| --- |
| name: wmma_valu_in_I_slots |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: wmma_valu_in_I_slots |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF8:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: early-clobber %16:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF]], [[DEF1]], 0, [[DEF2]], [[DEF3]], [[DEF4]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_1:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 16, 0, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF6]], 8, [[DEF7]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_2:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 32, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_3:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 48, 0, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_1:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF7]], 8, [[DEF8]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_2:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF6]], 8, [[DEF8]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0, implicit [[DS_READ_B128_gfx9_]], implicit [[DS_READ_B128_gfx9_1]], implicit [[DS_READ_B128_gfx9_2]], implicit [[DS_READ_B128_gfx9_3]], implicit [[V_PK_ADD_F32_]], implicit [[V_PK_ADD_F32_1]], implicit [[V_PK_ADD_F32_2]], implicit %16 |
| bb.0: |
| successors: %bb.1 |
| %0:vreg_512_align2 = IMPLICIT_DEF |
| %1:vreg_512_align2 = IMPLICIT_DEF |
| %2:vreg_256_align2 = IMPLICIT_DEF |
| %3:vgpr_32_lo256 = IMPLICIT_DEF |
| %4:vgpr_32_lo256 = IMPLICIT_DEF |
| %5:vgpr_32 = IMPLICIT_DEF |
| %6:vreg_64_align2 = IMPLICIT_DEF |
| %7:vreg_64_align2 = IMPLICIT_DEF |
| %8:vreg_64_align2 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %9:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 0, 0, implicit $exec |
| %10:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 16, 0, implicit $exec |
| %11:vreg_64_align2 = V_PK_ADD_F32 8, %6, 8, %7, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| %12:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 32, 0, implicit $exec |
| %13:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 48, 0, implicit $exec |
| %14:vreg_64_align2 = V_PK_ADD_F32 8, %7, 8, %8, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| %15:vreg_64_align2 = V_PK_ADD_F32 8, %6, 8, %8, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| early-clobber %16:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %0, %1, 0, %2, %3, %4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| S_ENDPGM 0, implicit %9, implicit %10, implicit %12, implicit %13, implicit %11, implicit %14, implicit %15, implicit %16 |
| ... |
| |
| # DBG-LABEL: PreRA hazard recognizer: wmma_trans_in_I_slots |
| # DBG: CoExec window ended at stage 7: |
| # DBG-NEXT: Stages: 0 1 2 3 4 5 6 7 8 9 |
| # DBG-NEXT: Slots: 0 E E I E E I S V V |
| # DBG-NEXT: Scheduled: 0 - - I - - I S . . |
| --- |
| name: wmma_trans_in_I_slots |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: wmma_trans_in_I_slots |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: early-clobber %10:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF]], [[DEF1]], 0, [[DEF2]], [[DEF3]], [[DEF4]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[V_EXP_F32_e32_:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF5]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF6]], 8, [[DEF7]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0, implicit [[V_EXP_F32_e32_]], implicit [[V_PK_ADD_F32_]], implicit %10 |
| bb.0: |
| successors: %bb.1 |
| %0:vreg_512_align2 = IMPLICIT_DEF |
| %1:vreg_512_align2 = IMPLICIT_DEF |
| %2:vreg_256_align2 = IMPLICIT_DEF |
| %3:vgpr_32_lo256 = IMPLICIT_DEF |
| %4:vgpr_32_lo256 = IMPLICIT_DEF |
| %5:vgpr_32 = IMPLICIT_DEF |
| %6:vreg_64_align2 = IMPLICIT_DEF |
| %7:vreg_64_align2 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %8:vgpr_32 = V_EXP_F32_e32 %5, implicit $mode, implicit $exec |
| %9:vreg_64_align2 = V_PK_ADD_F32 8, %6, 8, %7, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| early-clobber %10:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %0, %1, 0, %2, %3, %4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| S_ENDPGM 0, implicit %8, implicit %9, implicit %10 |
| ... |
| |
| # DBG-LABEL: PreRA hazard recognizer: wmma_chain_back_to_back |
| # DBG: WMMA window started: 0EEIEEISVV (window=10) |
| # The next WMMA of the chain issues in a vacant slot, which starts a new window. |
| # DBG: CoExec window interrupted at stage 8: |
| # DBG-NEXT: Stages: 0 1 2 3 4 5 6 7 8 9 |
| # DBG-NEXT: Slots: 0 E E I E E I S V V |
| # DBG-NEXT: Scheduled: 0 - - - - - - - V . |
| --- |
| name: wmma_chain_back_to_back |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: wmma_chain_back_to_back |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF8:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF9:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF10:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: early-clobber %17:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF6]], [[DEF7]], 0, [[DEF8]], [[DEF9]], [[DEF10]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DEF11:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF12:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF13:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF14:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: early-clobber %15:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF11]], [[DEF12]], 0, [[DEF13]], [[DEF]], [[DEF1]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: early-clobber %16:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF14]], [[DEF2]], 0, [[DEF3]], [[DEF4]], [[DEF5]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0, implicit %15, implicit %16, implicit %17 |
| bb.0: |
| successors: %bb.1 |
| %0:vreg_512_align2 = IMPLICIT_DEF |
| %1:vreg_512_align2 = IMPLICIT_DEF |
| %2:vreg_256_align2 = IMPLICIT_DEF |
| %3:vgpr_32_lo256 = IMPLICIT_DEF |
| %4:vgpr_32_lo256 = IMPLICIT_DEF |
| %5:vreg_512_align2 = IMPLICIT_DEF |
| %6:vreg_512_align2 = IMPLICIT_DEF |
| %7:vreg_256_align2 = IMPLICIT_DEF |
| %8:vgpr_32_lo256 = IMPLICIT_DEF |
| %9:vgpr_32_lo256 = IMPLICIT_DEF |
| %10:vreg_512_align2 = IMPLICIT_DEF |
| %11:vreg_512_align2 = IMPLICIT_DEF |
| %12:vreg_256_align2 = IMPLICIT_DEF |
| %13:vgpr_32_lo256 = IMPLICIT_DEF |
| %14:vgpr_32_lo256 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| early-clobber %15:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %0, %1, 0, %2, %3, %4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| early-clobber %16:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %5, %6, 0, %7, %8, %9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| early-clobber %17:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %10, %11, 0, %12, %13, %14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| S_ENDPGM 0, implicit %15, implicit %16, implicit %17 |
| ... |
| |
| # DBG-LABEL: PreRA hazard recognizer: wmma_mixed_ds_valu_trans |
| # DBG: CoExec window complete: |
| # DBG-NEXT: Stages: 0 1 2 3 4 5 6 7 8 9 |
| # DBG-NEXT: Slots: 0 E E I E E I S V V |
| # DBG-NEXT: Scheduled: 0 E E I E E I S - - |
| --- |
| name: wmma_mixed_ds_valu_trans |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: wmma_mixed_ds_valu_trans |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF8:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF9:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF10:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF11:%[0-9]+]]:sreg_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: early-clobber %21:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF]], [[DEF1]], 0, [[DEF2]], [[DEF3]], [[DEF4]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_1:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 16, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_2:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 32, 0, implicit $exec |
| ; CHECK-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[DEF10]], [[DEF11]], implicit-def dead $scc |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_3:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 48, 0, implicit $exec |
| ; CHECK-NEXT: [[V_EXP_F32_e32_:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF8]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_]], [[DEF10]], implicit-def dead $scc |
| ; CHECK-NEXT: [[V_EXP_F32_e32_1:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF9]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF6]], 8, [[DEF7]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0, implicit [[DS_READ_B128_gfx9_]], implicit [[DS_READ_B128_gfx9_1]], implicit [[DS_READ_B128_gfx9_2]], implicit [[DS_READ_B128_gfx9_3]], implicit [[V_PK_ADD_F32_]], implicit [[V_EXP_F32_e32_]], implicit [[V_EXP_F32_e32_1]], implicit [[S_ADD_I32_1]], implicit %21 |
| bb.0: |
| successors: %bb.1 |
| %0:vreg_512_align2 = IMPLICIT_DEF |
| %1:vreg_512_align2 = IMPLICIT_DEF |
| %2:vreg_256_align2 = IMPLICIT_DEF |
| %3:vgpr_32_lo256 = IMPLICIT_DEF |
| %4:vgpr_32_lo256 = IMPLICIT_DEF |
| %5:vgpr_32 = IMPLICIT_DEF |
| %6:vreg_64_align2 = IMPLICIT_DEF |
| %7:vreg_64_align2 = IMPLICIT_DEF |
| %8:vgpr_32 = IMPLICIT_DEF |
| %9:vgpr_32 = IMPLICIT_DEF |
| %10:sreg_32 = IMPLICIT_DEF |
| %11:sreg_32 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %12:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 0, 0, implicit $exec |
| %13:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 16, 0, implicit $exec |
| %14:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 32, 0, implicit $exec |
| %15:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 48, 0, implicit $exec |
| %16:vreg_64_align2 = V_PK_ADD_F32 8, %6, 8, %7, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| %17:vgpr_32 = V_EXP_F32_e32 %8, implicit $mode, implicit $exec |
| %18:vgpr_32 = V_EXP_F32_e32 %9, implicit $mode, implicit $exec |
| %19:sreg_32 = S_ADD_I32 %10, %11, implicit-def dead $scc |
| %20:sreg_32 = S_ADD_I32 %19, %10, implicit-def dead $scc |
| early-clobber %21:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %0, %1, 0, %2, %3, %4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| S_ENDPGM 0, implicit %12, implicit %13, implicit %14, implicit %15, implicit %16, implicit %17, implicit %18, implicit %20, implicit %21 |
| ... |
| |
| # TRANS does not create co-exec windows. The TRANS counter enforces |
| # 1-cycle gaps between TRANS instructions, interleaving them with VALU. |
| # DBG-LABEL: PreRA hazard recognizer: trans_valu_interleave |
| # DBG: TRANS hazard set: CyclesUntilTRANS=2 |
| # DBG: TRANS hazard set: CyclesUntilTRANS=2 |
| # DBG: TRANS hazard set: CyclesUntilTRANS=2 |
| # DBG: TRANS hazard set: CyclesUntilTRANS=2 |
| --- |
| name: trans_valu_interleave |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: trans_valu_interleave |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: [[V_EXP_F32_e32_:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_ADD_F32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[DEF4]], [[DEF5]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_EXP_F32_e32_1:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF1]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_ADD_F32_e32_1:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[DEF5]], [[DEF6]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_EXP_F32_e32_2:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF2]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_ADD_F32_e32_2:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[DEF6]], [[DEF7]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_EXP_F32_e32_3:%[0-9]+]]:vgpr_32 = V_EXP_F32_e32 [[DEF3]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_ADD_F32_e32_3:%[0-9]+]]:vgpr_32 = V_ADD_F32_e32 [[DEF7]], [[DEF4]], implicit $mode, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0, implicit [[V_EXP_F32_e32_]], implicit [[V_EXP_F32_e32_1]], implicit [[V_EXP_F32_e32_2]], implicit [[V_EXP_F32_e32_3]], implicit [[V_ADD_F32_e32_]], implicit [[V_ADD_F32_e32_1]], implicit [[V_ADD_F32_e32_2]], implicit [[V_ADD_F32_e32_3]] |
| bb.0: |
| successors: %bb.1 |
| %0:vgpr_32 = IMPLICIT_DEF |
| %1:vgpr_32 = IMPLICIT_DEF |
| %2:vgpr_32 = IMPLICIT_DEF |
| %3:vgpr_32 = IMPLICIT_DEF |
| %4:vgpr_32 = IMPLICIT_DEF |
| %5:vgpr_32 = IMPLICIT_DEF |
| %6:vgpr_32 = IMPLICIT_DEF |
| %7:vgpr_32 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %8:vgpr_32 = V_EXP_F32_e32 %0, implicit $mode, implicit $exec |
| %9:vgpr_32 = V_EXP_F32_e32 %1, implicit $mode, implicit $exec |
| %10:vgpr_32 = V_EXP_F32_e32 %2, implicit $mode, implicit $exec |
| %11:vgpr_32 = V_EXP_F32_e32 %3, implicit $mode, implicit $exec |
| %12:vgpr_32 = V_ADD_F32_e32 %4, %5, implicit $mode, implicit $exec |
| %13:vgpr_32 = V_ADD_F32_e32 %5, %6, implicit $mode, implicit $exec |
| %14:vgpr_32 = V_ADD_F32_e32 %6, %7, implicit $mode, implicit $exec |
| %15:vgpr_32 = V_ADD_F32_e32 %7, %4, implicit $mode, implicit $exec |
| S_ENDPGM 0, implicit %8, implicit %9, implicit %10, implicit %11, implicit %12, implicit %13, implicit %14, implicit %15 |
| ... |
| |
| # Test 8: VALU blocked in V slots. Fill E and I slots with DS/VALU, |
| # then extra VALU that cannot go in V slots (stages 8,9). |
| # Only 2 I slots available (3,6) but 5 VALU - some VALU pushed past window. |
| # DBG-LABEL: PreRA hazard recognizer: wmma_valu_blocked_in_V_slot |
| # DBG: CoExec window complete: |
| # DBG-NEXT: Stages: 0 1 2 3 4 5 6 7 8 9 |
| # DBG-NEXT: Slots: 0 E E I E E I S V V |
| # DBG-NEXT: Scheduled: 0 E E I E - I S - - |
| --- |
| name: wmma_valu_blocked_in_V_slot |
| tracksRegLiveness: true |
| body: | |
| ; CHECK-LABEL: name: wmma_valu_blocked_in_V_slot |
| ; CHECK: bb.0: |
| ; CHECK-NEXT: successors: %bb.1(0x80000000) |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: [[DEF:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vreg_512_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF2:%[0-9]+]]:vreg_256_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF3:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF4:%[0-9]+]]:vgpr_32_lo256 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF5:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF6:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF7:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF8:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: [[DEF9:%[0-9]+]]:vreg_64_align2 = IMPLICIT_DEF |
| ; CHECK-NEXT: S_BRANCH %bb.1 |
| ; CHECK-NEXT: {{ $}} |
| ; CHECK-NEXT: bb.1: |
| ; CHECK-NEXT: early-clobber %19:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr [[DEF]], [[DEF1]], 0, [[DEF2]], [[DEF3]], [[DEF4]], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 0, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_1:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 16, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_2:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 32, 0, implicit $exec |
| ; CHECK-NEXT: [[DS_READ_B128_gfx9_3:%[0-9]+]]:vreg_128_lo256_align2 = DS_READ_B128_gfx9 [[DEF5]], 48, 0, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF6]], 8, [[DEF7]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_1:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF7]], 8, [[DEF8]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_2:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF8]], 8, [[DEF9]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_3:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF6]], 8, [[DEF9]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: [[V_PK_ADD_F32_4:%[0-9]+]]:vreg_64_align2 = V_PK_ADD_F32 8, [[DEF9]], 8, [[DEF7]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| ; CHECK-NEXT: S_ENDPGM 0, implicit [[DS_READ_B128_gfx9_]], implicit [[DS_READ_B128_gfx9_1]], implicit [[DS_READ_B128_gfx9_2]], implicit [[DS_READ_B128_gfx9_3]], implicit [[V_PK_ADD_F32_]], implicit [[V_PK_ADD_F32_1]], implicit [[V_PK_ADD_F32_2]], implicit [[V_PK_ADD_F32_3]], implicit [[V_PK_ADD_F32_4]], implicit %19 |
| bb.0: |
| successors: %bb.1 |
| %0:vreg_512_align2 = IMPLICIT_DEF |
| %1:vreg_512_align2 = IMPLICIT_DEF |
| %2:vreg_256_align2 = IMPLICIT_DEF |
| %3:vgpr_32_lo256 = IMPLICIT_DEF |
| %4:vgpr_32_lo256 = IMPLICIT_DEF |
| %5:vgpr_32 = IMPLICIT_DEF |
| %6:vreg_64_align2 = IMPLICIT_DEF |
| %7:vreg_64_align2 = IMPLICIT_DEF |
| %8:vreg_64_align2 = IMPLICIT_DEF |
| %9:vreg_64_align2 = IMPLICIT_DEF |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| %10:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 0, 0, implicit $exec |
| %11:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 16, 0, implicit $exec |
| %12:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 32, 0, implicit $exec |
| %13:vreg_128_lo256_align2 = DS_READ_B128_gfx9 %5, 48, 0, implicit $exec |
| %14:vreg_64_align2 = V_PK_ADD_F32 8, %6, 8, %7, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| %15:vreg_64_align2 = V_PK_ADD_F32 8, %7, 8, %8, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| %16:vreg_64_align2 = V_PK_ADD_F32 8, %8, 8, %9, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| %17:vreg_64_align2 = V_PK_ADD_F32 8, %6, 8, %9, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| %18:vreg_64_align2 = V_PK_ADD_F32 8, %9, 8, %7, 0, 0, 0, 0, 0, implicit $mode, implicit $exec |
| early-clobber %19:vreg_256_align2 = V_WMMA_SCALE_F32_16X16X128_F8F6F4_f8_f8_w32_threeaddr %0, %1, 0, %2, %3, %4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, implicit $exec |
| S_ENDPGM 0, implicit %10, implicit %11, implicit %12, implicit %13, implicit %14, implicit %15, implicit %16, implicit %17, implicit %18, implicit %19 |
| ... |