| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX11 %s |
| # RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -mattr=+wavefrontsize64 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefixes=GCN,GFX12 %s |
| |
| --- |
| name: partial_forwarding_1_hazard |
| body: | |
| bb.0: |
| ; GFX11-LABEL: name: partial_forwarding_1_hazard |
| ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX11-NEXT: S_ENDPGM 0 |
| ; GFX12-LABEL: name: partial_forwarding_1_hazard |
| ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX12-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_2_hazard |
| body: | |
| bb.0: |
| ; GFX11-LABEL: name: partial_forwarding_2_hazard |
| ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $sgpr0 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr1 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr2 = S_MOV_B32 0 |
| ; GFX11-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX11-NEXT: $sgpr3 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr4 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr5 = S_MOV_B32 0 |
| ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $sgpr6 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr7 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr8 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr9 = S_MOV_B32 0 |
| ; GFX11-NEXT: $sgpr10 = S_MOV_B32 0 |
| ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX11-NEXT: S_ENDPGM 0 |
| ; GFX12-LABEL: name: partial_forwarding_2_hazard |
| ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $sgpr0 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr1 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr2 = S_MOV_B32 0 |
| ; GFX12-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX12-NEXT: $sgpr3 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr4 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr5 = S_MOV_B32 0 |
| ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $sgpr6 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr7 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr8 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr9 = S_MOV_B32 0 |
| ; GFX12-NEXT: $sgpr10 = S_MOV_B32 0 |
| ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX12-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $sgpr0 = S_MOV_B32 0 |
| $sgpr1 = S_MOV_B32 0 |
| $sgpr2 = S_MOV_B32 0 |
| $exec = S_MOV_B64 -1 |
| $sgpr3 = S_MOV_B32 0 |
| $sgpr4 = S_MOV_B32 0 |
| $sgpr5 = S_MOV_B32 0 |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $sgpr6 = S_MOV_B32 0 |
| $sgpr7 = S_MOV_B32 0 |
| $sgpr8 = S_MOV_B32 0 |
| $sgpr9 = S_MOV_B32 0 |
| $sgpr10 = S_MOV_B32 0 |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_3_hazard |
| body: | |
| bb.0: |
| ; GFX11-LABEL: name: partial_forwarding_3_hazard |
| ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX11-NEXT: S_ENDPGM 0 |
| ; GFX12-LABEL: name: partial_forwarding_3_hazard |
| ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX12-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_3_no_hazard_1 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: partial_forwarding_3_no_hazard_1 |
| ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $exec = S_MOV_B64 -1 |
| ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr20 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_3_no_hazard_2 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: partial_forwarding_3_no_hazard_2 |
| ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $exec = S_MOV_B64 -1 |
| ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr20 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_3_no_hazard_3 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: partial_forwarding_3_no_hazard_3 |
| ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $exec = S_MOV_B64 -1 |
| ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr20 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr20 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_4_hazard |
| body: | |
| bb.0: |
| ; GFX11-LABEL: name: partial_forwarding_4_hazard |
| ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX11-NEXT: S_ENDPGM 0 |
| ; GFX12-LABEL: name: partial_forwarding_4_hazard |
| ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX12-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_4_no_hazard |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: partial_forwarding_4_no_hazard |
| ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $exec = S_MOV_B64 -1 |
| ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr21 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr21 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_5_hazard |
| body: | |
| bb.0: |
| ; GFX11-LABEL: name: partial_forwarding_5_hazard |
| ; GFX11: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX11-NEXT: S_ENDPGM 0 |
| ; GFX12-LABEL: name: partial_forwarding_5_hazard |
| ; GFX12: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX12-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_5_no_hazard |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: partial_forwarding_5_no_hazard |
| ; GCN: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr21 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $exec = S_MOV_B64 -1 |
| ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr21 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_branching_1a |
| body: | |
| ; GFX11-LABEL: name: partial_forwarding_branching_1a |
| ; GFX11: bb.0: |
| ; GFX11-NEXT: successors: %bb.2(0x80000000) |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX11-NEXT: S_BRANCH %bb.2 |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: bb.1: |
| ; GFX11-NEXT: successors: %bb.2(0x80000000) |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_BRANCH %bb.2 |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: bb.2: |
| ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX11-NEXT: S_ENDPGM 0 |
| ; GFX12-LABEL: name: partial_forwarding_branching_1a |
| ; GFX12: bb.0: |
| ; GFX12-NEXT: successors: %bb.2(0x80000000) |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX12-NEXT: S_BRANCH %bb.2 |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: bb.1: |
| ; GFX12-NEXT: successors: %bb.2(0x80000000) |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: S_BRANCH %bb.2 |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: bb.2: |
| ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX12-NEXT: S_ENDPGM 0 |
| bb.0: |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| S_BRANCH %bb.2 |
| bb.1: |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| S_BRANCH %bb.2 |
| bb.2: |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: partial_forwarding_branching_1b |
| body: | |
| ; GFX11-LABEL: name: partial_forwarding_branching_1b |
| ; GFX11: bb.0: |
| ; GFX11-NEXT: successors: %bb.2(0x80000000) |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_BRANCH %bb.2 |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: bb.1: |
| ; GFX11-NEXT: successors: %bb.2(0x80000000) |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX11-NEXT: S_BRANCH %bb.2 |
| ; GFX11-NEXT: {{ $}} |
| ; GFX11-NEXT: bb.2: |
| ; GFX11-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX11-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GFX11-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX11-NEXT: S_ENDPGM 0 |
| ; GFX12-LABEL: name: partial_forwarding_branching_1b |
| ; GFX12: bb.0: |
| ; GFX12-NEXT: successors: %bb.2(0x80000000) |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: S_BRANCH %bb.2 |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: bb.1: |
| ; GFX12-NEXT: successors: %bb.2(0x80000000) |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $exec = S_MOV_B64 -1 |
| ; GFX12-NEXT: S_BRANCH %bb.2 |
| ; GFX12-NEXT: {{ $}} |
| ; GFX12-NEXT: bb.2: |
| ; GFX12-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| ; GFX12-NEXT: $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| ; GFX12-NEXT: S_ENDPGM 0 |
| bb.0: |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| S_BRANCH %bb.2 |
| bb.1: |
| $vgpr0 = V_MOV_B32_e32 0, implicit $exec |
| $exec = S_MOV_B64 -1 |
| S_BRANCH %bb.2 |
| bb.2: |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr14 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr15 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr0, $vgpr1, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |