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