The xcnt wait is actually required before any memory access that can only be done once, so atomic stores and volatile accesses are affected. This patch also ensures buffer instructions are handled.
59 lines
3.0 KiB
YAML
59 lines
3.0 KiB
YAML
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
|
|
# RUN: llc -mtriple=amdgcn -mcpu=gfx1200 -run-pass=si-memory-legalizer %s -o - | FileCheck --check-prefix=GFX1200 %s
|
|
# RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -run-pass=si-memory-legalizer %s -o - | FileCheck --check-prefix=GFX1250 %s
|
|
|
|
---
|
|
name: intrinsic_store_system_scope
|
|
body: |
|
|
bb.0:
|
|
liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4, $vgpr0, $vgpr1, $vgpr2
|
|
|
|
; GFX1200-LABEL: name: intrinsic_store_system_scope
|
|
; GFX1200: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4, $vgpr0, $vgpr1, $vgpr2
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: S_WAIT_LOADCNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_SAMPLECNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_BVHCNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_KMCNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_STORECNT_soft 0
|
|
; GFX1200-NEXT: BUFFER_STORE_DWORD_VBUFFER_BOTHEN_exact killed renamable $vgpr0, killed renamable $vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 24, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1250-LABEL: name: intrinsic_store_system_scope
|
|
; GFX1250: liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3, $sgpr4, $vgpr0, $vgpr1, $vgpr2
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: BUFFER_STORE_DWORD_VBUFFER_BOTHEN_exact killed renamable $vgpr0, killed renamable $vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 24, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
BUFFER_STORE_DWORD_VBUFFER_BOTHEN_exact killed renamable $vgpr0, killed renamable $vgpr2_vgpr3, killed renamable $sgpr0_sgpr1_sgpr2_sgpr3, killed renamable $sgpr4, 0, 24, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)
|
|
S_ENDPGM 0
|
|
...
|
|
|
|
---
|
|
name: generic_store_volatile
|
|
body: |
|
|
bb.0:
|
|
liveins: $vgpr0, $vgpr1, $vgpr2
|
|
|
|
; GFX1200-LABEL: name: generic_store_volatile
|
|
; GFX1200: liveins: $vgpr0, $vgpr1, $vgpr2
|
|
; GFX1200-NEXT: {{ $}}
|
|
; GFX1200-NEXT: S_WAIT_LOADCNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_SAMPLECNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_BVHCNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_KMCNT_soft 0
|
|
; GFX1200-NEXT: S_WAIT_STORECNT_soft 0
|
|
; GFX1200-NEXT: GLOBAL_STORE_DWORD killed renamable $vgpr2_vgpr3, killed renamable $vgpr0, 0, 24, implicit $exec :: (volatile store (s32), addrspace 1)
|
|
; GFX1200-NEXT: S_WAIT_STORECNT_soft 0
|
|
; GFX1200-NEXT: S_ENDPGM 0
|
|
;
|
|
; GFX1250-LABEL: name: generic_store_volatile
|
|
; GFX1250: liveins: $vgpr0, $vgpr1, $vgpr2
|
|
; GFX1250-NEXT: {{ $}}
|
|
; GFX1250-NEXT: S_WAIT_XCNT_soft 0
|
|
; GFX1250-NEXT: GLOBAL_STORE_DWORD killed renamable $vgpr2_vgpr3, killed renamable $vgpr0, 0, 24, implicit $exec :: (volatile store (s32), addrspace 1)
|
|
; GFX1250-NEXT: S_WAIT_STORECNT_soft 0
|
|
; GFX1250-NEXT: S_ENDPGM 0
|
|
GLOBAL_STORE_DWORD killed renamable $vgpr2_vgpr3, killed renamable $vgpr0, 0, 0, implicit $exec :: (volatile store (s32), addrspace 1)
|
|
S_ENDPGM 0
|
|
...
|