| # 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: S_WAITCNT_DEPCTR 65507 |
| # 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, implicit $exec |
| $sgpr0 = S_MOV_B32 0 |
| ... |
| # GCN-LABEL: name: vmem_write_exec |
| # GCN: BUFFER_STORE_DWORD_OFFEN_exact |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # GCN-NEXT: S_MOV_B32 |
| --- |
| name: vmem_write_exec |
| body: | |
| bb.0: |
| $sgpr0_sgpr1_sgpr2_sgpr3 = IMPLICIT_DEF |
| $sgpr4 = IMPLICIT_DEF |
| $vgpr0 = IMPLICIT_DEF |
| $vgpr1 = IMPLICIT_DEF |
| BUFFER_STORE_DWORD_OFFEN_exact killed renamable $vgpr0, renamable $vgpr1, renamable $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, 0, implicit $exec |
| $exec_lo = S_MOV_B32 -1 |
| ... |
| # GCN-LABEL: name: vmem_write_sgpr_chain |
| # GCN: BUFFER_LOAD_DWORD_OFFEN |
| # GCN-NEXT: S_MOV_B32 |
| # GCN-NEXT: S_MOV_B32 |
| # GCN-NEXT: S_MOV_B32 |
| # GCN-NEXT: S_MOV_B32 |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # GCN-NEXT: S_MOV_B32 |
| --- |
| name: vmem_write_sgpr_chain |
| body: | |
| bb.0: |
| successors: |
| $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, implicit $exec |
| $sgpr5 = S_MOV_B32 $sgpr0 |
| $sgpr6 = S_MOV_B32 $sgpr1 |
| $sgpr7 = S_MOV_B32 $sgpr2 |
| $sgpr8 = S_MOV_B32 $sgpr3 |
| $sgpr0 = S_MOV_B32 0 |
| ... |
| # GCN-LABEL: name: vmem_smem_write_sgpr |
| # GCN: BUFFER_LOAD_DWORD_OFFEN |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # 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, implicit $exec |
| $sgpr0 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 0, 0 |
| ... |
| # GCN-LABEL: name: vmem_snop_write_sgpr |
| # GCN: BUFFER_LOAD_DWORD_OFFEN |
| # GCN-NEXT: S_NOP |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # 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, 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, implicit $exec |
| $vgpr2 = V_ADD_F32_e32 $vgpr1, $vgpr1, implicit $mode, 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, 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: S_WAITCNT_DEPCTR 65507 |
| # 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, implicit $exec |
| S_WAITCNT 1 |
| $sgpr0 = S_MOV_B32 0 |
| ... |
| # GCN-LABEL: name: vmem_write_exec_impread |
| # GCN: BUFFER_LOAD_DWORD_OFFEN |
| # GCN: S_WAITCNT_DEPCTR 65507 |
| # 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, implicit $exec |
| $exec = S_MOV_B64 7 |
| ... |
| # GCN-LABEL: name: vmem_write_exec_expread |
| # GCN: BUFFER_LOAD_DWORD_OFFEN |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # 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, implicit $exec |
| $exec = S_MOV_B64 7 |
| ... |
| # GCN-LABEL: name: ds_write_m0 |
| # GCN: DS_READ_B32 |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # 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: S_WAITCNT_DEPCTR 65507 |
| # 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, 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: S_WAITCNT_DEPCTR 65507 |
| # 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, 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: S_WAITCNT_DEPCTR 65507 |
| # 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, 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_cbranch_around |
| # GCN: BUFFER_LOAD_DWORD_OFFEN |
| # GCN-NEXT: S_CBRANCH |
| # GCN-NEXT: S_BRANCH |
| # GCN: bb.1: |
| # GCN: S_WAITCNT |
| # GCN: V_ADD_CO_U32 |
| # GCN: bb.2: |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # GCN-NEXT: S_MOV_B32 |
| --- |
| name: vmem_write_sgpr_cbranch_around |
| body: | |
| bb.0: |
| successors: %bb.1, %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, implicit $exec |
| S_CBRANCH_SCC0 %bb.2, implicit $scc |
| S_BRANCH %bb.1 |
| |
| bb.1: |
| successors: %bb.2 |
| S_WAITCNT 0 |
| $vgpr2, $vcc_lo = V_ADD_CO_U32_e64 $vgpr1, $vgpr1, 0, implicit $exec |
| S_BRANCH %bb.2 |
| |
| bb.2: |
| $sgpr0 = S_MOV_B32 0 |
| ... |
| # GCN-LABEL: name: vmem_write_sgpr_branch_backedge |
| # GCN: $vgpr0 = IMPLICIT_DEF |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # 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, implicit $exec |
| S_BRANCH %bb.0 |
| ... |
| # GCN-LABEL: name: ds_write_exec |
| # GCN: DS_WRITE_B32_gfx9 |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # 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 |
| ... |
| # GCN-LABEL: name: vmem_scratch_exec |
| # GCN: SCRATCH_LOAD_DWORD |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # GCN-NEXT: S_MOV_B32 |
| --- |
| name: vmem_scratch_exec |
| body: | |
| bb.0: |
| $vgpr0 = IMPLICIT_DEF |
| $vgpr1 = SCRATCH_LOAD_DWORD undef $vgpr0, 0, 0, implicit $exec, implicit $flat_scr |
| $exec_lo = S_MOV_B32 -1 |
| ... |
| # GCN-LABEL: name: vmem_flat_exec |
| # GCN: FLAT_LOAD_DWORD |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # GCN-NEXT: S_MOV_B32 |
| --- |
| name: vmem_flat_exec |
| body: | |
| bb.0: |
| $vgpr0 = IMPLICIT_DEF |
| $vgpr1 = IMPLICIT_DEF |
| $vgpr2 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr |
| $exec_lo = S_MOV_B32 -1 |
| ... |
| # GCN-LABEL: name: vmem_global_exec |
| # GCN: GLOBAL_LOAD_DWORD |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # GCN-NEXT: S_MOV_B32 |
| --- |
| name: vmem_global_exec |
| body: | |
| bb.0: |
| $vgpr0 = IMPLICIT_DEF |
| $vgpr1 = IMPLICIT_DEF |
| $vgpr2 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec |
| $exec_lo = S_MOV_B32 -1 |
| ... |
| # GCN-LABEL: name: vmem_global_atomic_exec |
| # GCN: GLOBAL_ATOMIC_ADD_RTN |
| # GCN-NEXT: S_WAITCNT_DEPCTR 65507 |
| # GCN-NEXT: S_MOV_B32 |
| --- |
| name: vmem_global_atomic_exec |
| body: | |
| bb.0: |
| $vgpr0 = IMPLICIT_DEF |
| $vgpr1 = IMPLICIT_DEF |
| $vgpr2 = IMPLICIT_DEF |
| $vgpr3 = GLOBAL_ATOMIC_ADD_RTN $vgpr0_vgpr1, $vgpr2, 0, 1, implicit $exec :: (load store syncscope("agent") seq_cst 4, addrspace 1) |
| $exec_lo = S_MOV_B32 -1 |
| ... |