| # RUN: llc -march=amdgcn -mcpu=gfx940 -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN %s |
| |
| # GCN-LABEL: name: trans32_write_non_trans32_read |
| # GCN: V_RCP_F32 |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_MUL_F32 |
| name: trans32_write_non_trans32_read |
| body: | |
| bb.0: |
| $vgpr1 = V_RCP_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr2 = V_MUL_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: trans32_write_trans_read |
| # GCN: V_SIN_F32 |
| # GCN-NEXT: V_COS_F32 |
| name: trans32_write_trans_read |
| body: | |
| bb.0: |
| $vgpr0 = V_SIN_F32_e32 $vgpr1, implicit $mode, implicit $exec |
| $vgpr2 = V_COS_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: trans64_write_non_trans_read |
| # GCN: V_RCP_F64 |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_OR_B32 |
| name: trans64_write_non_trans_read |
| body: | |
| bb.0: |
| $vgpr0_vgpr1 = V_RCP_F64_e32 $vgpr2_vgpr3, implicit $mode, implicit $exec |
| $vgpr4 = V_OR_B32_e32 $vgpr1, $vgpr5, implicit $mode, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: trans32_write_non_trans64_read |
| # GCN: V_EXP_F32 |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_MUL_F64 |
| name: trans32_write_non_trans64_read |
| body: | |
| bb.0: |
| $vgpr1 = V_EXP_F32_e32 $vgpr0, implicit $mode, implicit $exec |
| $vgpr2_vgpr3 = V_MUL_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr2_vgpr3, 0, 0, implicit $mode, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: opsel_hi16_write_valu_read |
| # GCN: V_ADD_I16 |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_MUL_F64 |
| name: opsel_hi16_write_valu_read |
| body: | |
| bb.0: |
| $vgpr0 = V_ADD_I16_e64 8, $vgpr1, 0, $vgpr2, 0, 0, implicit $exec |
| $vgpr4_vgpr5 = V_MUL_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr2_vgpr3, 0, 0, implicit $mode, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: opsel_lo16_write_valu_read |
| # GCN: V_ADD_I16 |
| # GCN-NEXT: V_MUL_F64 |
| name: opsel_lo16_write_valu_read |
| body: | |
| bb.0: |
| $vgpr0 = V_ADD_I16_e64 0, $vgpr1, 0, $vgpr2, 0, 0, implicit $exec |
| $vgpr4_vgpr5 = V_MUL_F64_e64 0, $vgpr0_vgpr1, 0, $vgpr2_vgpr3, 0, 0, implicit $mode, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: sdwa_hi16_write_valu_read |
| # GCN: V_MOV_B32_sdwa |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: sdwa_hi16_write_valu_read |
| body: | |
| bb.0: |
| $vgpr0 = V_MOV_B32_sdwa 0, $vgpr1, 0, 5, 2, 5, implicit $vgpr0(tied-def 0), implicit $exec |
| $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: sdwa_lo16_write_valu_read |
| # GCN: V_MOV_B32_sdwa |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: sdwa_lo16_write_valu_read |
| body: | |
| bb.0: |
| $vgpr0 = V_MOV_B32_sdwa 0, $vgpr1, 0, 4, 2, 5, implicit $vgpr0(tied-def 0), implicit $exec |
| $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: sdwa_dword_write_valu_read |
| # GCN: V_MOV_B32_sdwa |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: sdwa_dword_write_valu_read |
| body: | |
| bb.0: |
| $vgpr0 = V_MOV_B32_sdwa 0, $vgpr1, 0, 6, 2, 5, implicit $vgpr0(tied-def 0), implicit $exec |
| $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: sdwa_lo16_no_write_valu_read |
| # GCN: V_CMP_EQ_U32_sdwa |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: sdwa_lo16_no_write_valu_read |
| body: | |
| bb.0: |
| $vcc = V_CMP_EQ_U32_sdwa 0, $vgpr1, 0, $vgpr0, 0, 5, 2, implicit $exec |
| $vgpr3 = V_MOV_B32_e32 $vgpr0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: valu_write_sgpr_valu_read_as_constant |
| # GCN: V_READFIRSTLANE_B32 |
| # GCN-NEXT: S_NOP 1 |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: valu_write_sgpr_valu_read_as_constant |
| body: | |
| bb.0: |
| $sgpr0 = V_READFIRSTLANE_B32 $vgpr0, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 $sgpr0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: valu_write_vcc_valu_read_as_constant |
| # GCN: V_CMP_NE_U32_e32 |
| # GCN-NEXT: S_NOP 1 |
| # GCN-NEXT: V_ADDC_U32_e32 |
| name: valu_write_vcc_valu_read_as_constant |
| body: | |
| bb.0: |
| V_CMP_NE_U32_e32 0, $vgpr0, implicit-def $vcc, implicit $exec |
| $vgpr1 = V_ADDC_U32_e32 0, $vgpr1, implicit-def $vcc, implicit $vcc, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: valu_write_sgpr_readlane_read_as_laneselect |
| # GCN: V_READFIRSTLANE_B32 |
| # GCN-NEXT: S_NOP 3 |
| # GCN-NEXT: V_READLANE_B32 |
| name: valu_write_sgpr_readlane_read_as_laneselect |
| body: | |
| bb.0: |
| $sgpr0 = V_READFIRSTLANE_B32 $vgpr0, implicit $exec |
| $sgpr1 = V_READLANE_B32 $vgpr1, $sgpr0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: valu_write_sgpr_writelane_read_as_laneselect |
| # GCN: V_ADD_CO_U32_e64 |
| # GCN-NEXT: S_NOP 3 |
| # GCN-NEXT: V_WRITELANE_B32 |
| name: valu_write_sgpr_writelane_read_as_laneselect |
| body: | |
| bb.0: |
| $vgpr0, $sgpr0_sgpr1 = V_ADD_CO_U32_e64 $vgpr0, 1, 0, implicit $exec |
| $vgpr1 = V_WRITELANE_B32 0, $sgpr0, $vgpr1, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: vcmpx_write_exec_valu_read_as_constant |
| # GCN: V_CMPX_EQ_I32_e32 |
| # GCN-NEXT: S_NOP 1 |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: vcmpx_write_exec_valu_read_as_constant |
| body: | |
| bb.0: |
| implicit $exec, implicit $vcc = V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit $exec |
| $vgpr1 = V_MOV_B32_e32 $exec_lo, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: vcmpx_write_exec_readlane |
| # GCN: V_CMPX_EQ_I32_e32 |
| # GCN-NEXT: S_NOP 3 |
| # GCN-NEXT: V_READLANE_B32 |
| name: vcmpx_write_exec_readlane |
| body: | |
| bb.0: |
| implicit $exec, implicit $vcc = V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit $exec |
| $sgpr1 = V_READLANE_B32 $vgpr1, 0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: vcmpx_write_exec_readfirstlane |
| # GCN: V_CMPX_EQ_I32_e32 |
| # GCN-NEXT: S_NOP 3 |
| # GCN-NEXT: V_READFIRSTLANE_B32 |
| name: vcmpx_write_exec_readfirstlane |
| body: | |
| bb.0: |
| implicit $exec, implicit $vcc = V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit $exec |
| $sgpr1 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: vcmpx_write_exec_writelane |
| # GCN: V_CMPX_EQ_I32_e32 |
| # GCN-NEXT: S_NOP 3 |
| # GCN-NEXT: V_WRITELANE_B32 |
| name: vcmpx_write_exec_writelane |
| body: | |
| bb.0: |
| implicit $exec, implicit $vcc = V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit $exec |
| $vgpr1 = V_WRITELANE_B32 0, $sgpr0, $vgpr1, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: valu_write_vgpr_readlane_read |
| # GCN: V_ADD_CO_U32_e32 |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_READLANE_B32 |
| name: valu_write_vgpr_readlane_read |
| body: | |
| bb.0: |
| $vgpr1 = V_ADD_CO_U32_e32 $vgpr0, $vgpr0, implicit-def $vcc, implicit $exec |
| $sgpr1 = V_READLANE_B32 $vgpr1, $sgpr0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: valu_write_vgpr_readfirstlane_read |
| # GCN: V_ADD_CO_U32_e32 |
| # GCN-NEXT: S_NOP 0 |
| # GCN-NEXT: V_READFIRSTLANE_B32 |
| name: valu_write_vgpr_readfirstlane_read |
| body: | |
| bb.0: |
| $vgpr1 = V_ADD_CO_U32_e32 $vgpr0, $vgpr0, implicit-def $vcc, implicit $exec |
| $sgpr1 = V_READFIRSTLANE_B32 $vgpr1, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: global_store_dwordx4_data_hazard |
| # GCN: GLOBAL_STORE_DWORDX4 |
| # GCN-NEXT: S_NOP 1 |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: global_store_dwordx4_data_hazard |
| |
| body: | |
| bb.0: |
| liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5 |
| GLOBAL_STORE_DWORDX4 $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5, 0, 0, implicit $exec |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ... |
| |
| # GCN-LABEL: name: global_store_dwordx3_data_hazard |
| # GCN: GLOBAL_STORE_DWORDX3 |
| # GCN-NEXT: S_NOP 1 |
| # GCN-NEXT: V_MOV_B32_e32 |
| name: global_store_dwordx3_data_hazard |
| |
| body: | |
| bb.0: |
| liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4 |
| GLOBAL_STORE_DWORDX3 $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4, 0, 0, implicit $exec |
| $vgpr2 = V_MOV_B32_e32 0, implicit $exec |
| ... |