| # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py |
| # RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize32 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefix=GCN %s |
| |
| --- |
| name: trans_use_1_hazard |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_1_hazard |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_1_no_hazard_1 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_1_no_hazard_1 |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| S_WAITCNT_DEPCTR 4095 |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_2_hazard |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_2_hazard |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $sgpr0 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr1 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr2 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr3 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr4 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr5 = S_MOV_B32 0 |
| ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $sgpr6 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr7 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr8 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr9 = S_MOV_B32 0 |
| ; GCN-NEXT: $sgpr10 = S_MOV_B32 0 |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $sgpr0 = S_MOV_B32 0 |
| $sgpr1 = S_MOV_B32 0 |
| $sgpr2 = S_MOV_B32 0 |
| $sgpr3 = S_MOV_B32 0 |
| $sgpr4 = S_MOV_B32 0 |
| $sgpr5 = S_MOV_B32 0 |
| $vgpr2 = 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 |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_3_hazard |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_3_hazard |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr2 = 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: $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr12 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr13 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_3_no_hazard_1 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_3_no_hazard_1 |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr2 = 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: $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: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = 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 |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_3_no_hazard_2 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_3_no_hazard_2 |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr2 = 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: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr10 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr11 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr2 = 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 |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_3_no_hazard_3 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_3_no_hazard_3 |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr12 = V_SQRT_F32_e32 $vgpr13, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec |
| $vgpr12 = V_SQRT_F32_e32 $vgpr13, implicit $mode, implicit $exec |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_4_one_depctr_1 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_4_one_depctr_1 |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr5 = V_ADD_F32_e32 $vgpr1, $vgpr4, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr7 = V_ADD_F32_e32 $vgpr3, $vgpr6, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec |
| $vgpr5 = V_ADD_F32_e32 $vgpr1, $vgpr4, implicit $mode, implicit $exec |
| $vgpr7 = V_ADD_F32_e32 $vgpr3, $vgpr6, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_4_one_depctr_2 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_4_one_depctr_2 |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr5 = V_ADD_F32_e32 $vgpr3, $vgpr4, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr7 = V_ADD_F32_e32 $vgpr1, $vgpr6, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec |
| $vgpr5 = V_ADD_F32_e32 $vgpr3, $vgpr4, implicit $mode, implicit $exec |
| $vgpr7 = V_ADD_F32_e32 $vgpr1, $vgpr6, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_4 |
| body: | |
| bb.0: |
| ; GCN-LABEL: name: trans_use_4 |
| ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec |
| ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_branching_1a |
| body: | |
| ; GCN-LABEL: name: trans_use_branching_1a |
| ; GCN: bb.0: |
| ; GCN-NEXT: successors: %bb.2(0x80000000) |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_BRANCH %bb.2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: bb.1: |
| ; GCN-NEXT: successors: %bb.2(0x80000000) |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr32 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr33 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_BRANCH %bb.2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: bb.2: |
| ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| bb.0: |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| S_BRANCH %bb.2 |
| bb.1: |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr31 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr32 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr33 = V_MOV_B32_e32 0, implicit $exec |
| S_BRANCH %bb.2 |
| bb.2: |
| $vgpr3 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_branching_1b |
| body: | |
| ; GCN-LABEL: name: trans_use_branching_1b |
| ; GCN: bb.0: |
| ; GCN-NEXT: successors: %bb.2(0x80000000) |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_BRANCH %bb.2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: bb.1: |
| ; GCN-NEXT: successors: %bb.2(0x80000000) |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: S_BRANCH %bb.2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: bb.2: |
| ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| bb.0: |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| S_BRANCH %bb.2 |
| bb.1: |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| S_WAITCNT_DEPCTR 4095 |
| S_BRANCH %bb.2 |
| bb.2: |
| $vgpr3 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |
| |
| --- |
| name: trans_use_branching_1c_no_hazard_1 |
| body: | |
| ; GCN-LABEL: name: trans_use_branching_1c_no_hazard_1 |
| ; GCN: bb.0: |
| ; GCN-NEXT: successors: %bb.2(0x80000000) |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 |
| ; GCN-NEXT: S_BRANCH %bb.2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: bb.1: |
| ; GCN-NEXT: successors: %bb.2(0x80000000) |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: S_BRANCH %bb.2 |
| ; GCN-NEXT: {{ $}} |
| ; GCN-NEXT: bb.2: |
| ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec |
| ; GCN-NEXT: $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ; GCN-NEXT: S_ENDPGM 0 |
| bb.0: |
| $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| S_WAITCNT_DEPCTR 4095 |
| S_BRANCH %bb.2 |
| bb.1: |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr30 = V_MOV_B32_e32 0, implicit $exec |
| S_BRANCH %bb.2 |
| bb.2: |
| $vgpr3 = V_MOV_B32_e32 0, implicit $exec |
| $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| S_ENDPGM 0 |
| ... |