forked from OSchip/llvm-project
346 lines
9.5 KiB
YAML
346 lines
9.5 KiB
YAML
# 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_write_exec
|
|
# GCN: BUFFER_STORE_DWORD_OFFEN_exact
|
|
# GCN-NEXT: V_NOP
|
|
# 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, 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: V_NOP
|
|
# 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, 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: 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 $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, 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_cbranch_around
|
|
# GCN: BUFFER_LOAD_DWORD_OFFEN
|
|
# GCN-NEXT: S_CBRANCH
|
|
# GCN-NEXT: S_BRANCH
|
|
# GCN: bb.1:
|
|
# GCN: S_WAITCNT
|
|
# GCN: V_ADD_I32
|
|
# GCN: bb.2:
|
|
# GCN-NEXT: V_NOP
|
|
# 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, 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_I32_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: 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
|
|
...
|
|
# GCN-LABEL: name: vmem_scratch_exec
|
|
# GCN: SCRATCH_LOAD_DWORD
|
|
# GCN-NEXT: V_NOP
|
|
# GCN-NEXT: S_MOV_B32
|
|
---
|
|
name: vmem_scratch_exec
|
|
body: |
|
|
bb.0:
|
|
$vgpr0 = IMPLICIT_DEF
|
|
$vgpr1 = SCRATCH_LOAD_DWORD undef $vgpr0, 0, 0, 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: V_NOP
|
|
# 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, 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: V_NOP
|
|
# 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, 0, 0, implicit $exec
|
|
$exec_lo = S_MOV_B32 -1
|
|
...
|
|
# GCN-LABEL: name: vmem_global_atomic_exec
|
|
# GCN: GLOBAL_ATOMIC_ADD_RTN
|
|
# GCN-NEXT: V_NOP
|
|
# 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, 0, implicit $exec :: (load store syncscope("agent") seq_cst 4, addrspace 1)
|
|
$exec_lo = S_MOV_B32 -1
|
|
...
|