blob: 5489429d41748ae5784085a750522165b5c4bd77 [file] [edit]
# RUN: llc -mtriple=amdgpu9.42-amd-amdhsa -run-pass=si-insert-waitcnts -o - %s | FileCheck --check-prefix=GFX94 %s
# RUN: llc -mtriple=amdgpu9.50-amd-amdhsa -run-pass=si-insert-waitcnts -o - %s | FileCheck --check-prefix=GFX94 %s
---
name: buffer_inv_advances_vmcnt
tracksRegLiveness: true
machineFunctionInfo:
isEntryFunction: true
body: |
bb.0:
liveins: $exec, $vgpr0_vgpr1
; GFX94-LABEL: name: buffer_inv_advances_vmcnt
; GFX94: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec
; GFX94-NEXT: $vgpr3 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec
; GFX94-NEXT: BUFFER_INV 0, implicit $exec
; GFX94-NEXT: $vgpr4 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec
; GFX94-NEXT: S_WAITCNT .Vmcnt_2
; GFX94-NEXT: $vgpr5 = V_MOV_B32_e32 $vgpr3, implicit $exec
$vgpr2 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec
$vgpr3 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec
BUFFER_INV 0, implicit $exec
$vgpr4 = GLOBAL_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec
$vgpr5 = V_MOV_B32_e32 $vgpr3, implicit $exec
S_ENDPGM 0
...
---
name: buffer_inv_only_does_not_wait_at_return
tracksRegLiveness: true
machineFunctionInfo:
isEntryFunction: false
body: |
bb.0:
liveins: $sgpr30_sgpr31
; GFX94-LABEL: name: buffer_inv_only_does_not_wait_at_return
; GFX94: S_WAITCNT
; GFX94-NEXT: BUFFER_INV 0, implicit $exec
; GFX94-NOT: S_WAITCNT
; GFX94-NEXT: S_SETPC_B64_return $sgpr30_sgpr31
BUFFER_INV 0, implicit $exec
S_WAITCNT_soft 0
S_SETPC_B64_return $sgpr30_sgpr31
...
---
name: buffer_inv_does_not_hide_store_at_return
tracksRegLiveness: true
machineFunctionInfo:
isEntryFunction: false
body: |
bb.0:
liveins: $exec, $vgpr0_vgpr1, $vgpr2, $sgpr30_sgpr31
; LOAD and STORE alias vmcnt on these targets. Invalidation-only elision
; must retain the wait for real stores at a function return.
; GFX94-LABEL: name: buffer_inv_does_not_hide_store_at_return
; GFX94: GLOBAL_STORE_DWORD
; GFX94-NEXT: BUFFER_INV 0, implicit $exec
; GFX94-NEXT: S_WAITCNT .Vmcnt_0
; GFX94-NEXT: S_SETPC_B64_return $sgpr30_sgpr31
GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
BUFFER_INV 0, implicit $exec
S_SETPC_B64_return $sgpr30_sgpr31
...
---
name: buffer_inv_does_not_hide_soft_store_wait
tracksRegLiveness: true
machineFunctionInfo:
isEntryFunction: true
body: |
bb.0:
liveins: $exec, $vgpr0_vgpr1, $vgpr2
; The same event-set check is used when simplifying a soft ordering wait.
; GFX94-LABEL: name: buffer_inv_does_not_hide_soft_store_wait
; GFX94: GLOBAL_STORE_DWORD
; GFX94-NEXT: BUFFER_INV 0, implicit $exec
; GFX94-NEXT: S_WAITCNT .Vmcnt_0
; GFX94-NEXT: S_NOP 0
GLOBAL_STORE_DWORD $vgpr0_vgpr1, $vgpr2, 0, 0, implicit $exec
BUFFER_INV 0, implicit $exec
S_WAITCNT_soft 0
S_NOP 0
S_ENDPGM 0
...