# 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 ...