# RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefix=GCN %s # GCN-LABEL: name: vmem_write_sgpr # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B32 --- name: vmem_write_sgpr body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_smem_write_sgpr # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: V_NOP # GCN-NEXT: S_LOAD_DWORD_IMM --- name: vmem_smem_write_sgpr body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec $sgpr0 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0, 0 ... # GCN-LABEL: name: vmem_snop_write_sgpr # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: S_NOP # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B32 --- name: vmem_snop_write_sgpr body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec S_NOP 0 $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_valu_write_sgpr # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: V_ADD_F32 # GCN-NEXT: S_MOV_B32 --- name: vmem_valu_write_sgpr body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec $vgpr2 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $exec $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_swait0_write_sgpr # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: S_WAITCNT # GCN-NEXT: S_MOV_B32 --- name: vmem_swait0_write_sgpr body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec S_WAITCNT 0 $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_swait_any_write_sgpr # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: S_WAITCNT # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B32 --- name: vmem_swait_any_write_sgpr body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec S_WAITCNT 1 $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_write_exec_impread # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN: V_NOP # GCN-NEXT: S_MOV_B64 --- name: vmem_write_exec_impread body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec $exec = S_MOV_B64 7 ... # GCN-LABEL: name: vmem_write_exec_expread # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B64 --- name: vmem_write_exec_expread body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $exec_lo, 0, 0, 0, 0, 0, 0, implicit $exec $exec = S_MOV_B64 7 ... # GCN-LABEL: name: ds_write_m0 # GCN: DS_READ_B32 # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B32 --- name: ds_write_m0 body: | bb.0: $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = DS_READ_B32 $vgpr0, 0, 0, implicit $m0, implicit $exec $m0 = S_MOV_B32 7 ... # GCN-LABEL: name: vmem_write_sgpr_fall_through # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN: V_NOP # GCN-NEXT: S_MOV_B32 --- name: vmem_write_sgpr_fall_through body: | bb.0: successors: %bb.1 $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec bb.1: $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_write_sgpr_branch # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: S_BRANCH # GCN: V_NOP # GCN-NEXT: S_MOV_B32 --- name: vmem_write_sgpr_branch body: | bb.0: successors: %bb.1 $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec S_BRANCH %bb.1 bb.1: $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_write_sgpr_branch_around # GCN: BUFFER_LOAD_DWORD_OFFEN # GCN-NEXT: S_BRANCH # GCN: bb.2: # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B32 --- name: vmem_write_sgpr_branch_around body: | bb.0: successors: %bb.2 $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec S_BRANCH %bb.2 bb.1: successors: %bb.2 S_WAITCNT 0 bb.2: $sgpr0 = S_MOV_B32 0 ... # GCN-LABEL: name: vmem_write_sgpr_branch_backedge # GCN: $vgpr0 = IMPLICIT_DEF # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B32 --- name: vmem_write_sgpr_branch_backedge body: | bb.0: successors: %bb.1 $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF $sgpr4 = IMPLICIT_DEF $vgpr0 = IMPLICIT_DEF $sgpr0 = S_MOV_B32 0 bb.1: $vgpr1 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, 0, 0, 0, implicit $exec S_BRANCH %bb.0 ... # GCN-LABEL: name: ds_write_exec # GCN: DS_WRITE_B32_gfx9 # GCN-NEXT: V_NOP # GCN-NEXT: S_MOV_B32 --- name: ds_write_exec body: | bb.0: $vgpr0 = IMPLICIT_DEF $vgpr1 = IMPLICIT_DEF DS_WRITE_B32_gfx9 $vgpr0, $vgpr1, 0, 0, implicit $exec $exec_lo = S_MOV_B32 -1 ...