xref: /llvm-project/llvm/test/CodeGen/AMDGPU/lds-dma-waitcnt.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# RUN: llc -mtriple=amdgcn -mcpu=gfx940 -verify-machineinstrs -run-pass si-insert-waitcnts -o - %s | FileCheck -check-prefix=GCN %s
2
3# GCN-LABEL: name: buffer_load_dword_lds_ds_read
4# GCN:      BUFFER_LOAD_DWORD_LDS_IDXEN
5# GCN-NEXT: S_WAITCNT 3952
6#                     vmcnt(0)
7# GCN-NEXT: DS_READ_B32_gfx9
8---
9name: buffer_load_dword_lds_ds_read
10body:             |
11  bb.0:
12    $m0 = S_MOV_B32 0
13    BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4)
14    $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`)
15    S_ENDPGM 0
16
17...
18
19# GCN-LABEL: name: buffer_load_dword_lds_vmcnt_1
20# GCN:      BUFFER_LOAD_DWORD_LDS_IDXEN
21# GCN-NEXT: BUFFER_LOAD_DWORD_IDXEN
22# GCN-NEXT: S_WAITCNT 3953
23#                     vmcnt(1)
24# GCN-NEXT: DS_READ_B32_gfx9
25---
26name: buffer_load_dword_lds_vmcnt_1
27body:             |
28  bb.0:
29    $m0 = S_MOV_B32 0
30    BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`), (store (s32) into `ptr addrspace(3) undef`)
31    $vgpr10 = BUFFER_LOAD_DWORD_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`)
32    $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`)
33    S_ENDPGM 0
34
35...
36
37# GCN-LABEL: name: buffer_load_dword_lds_flat_read
38# GCN:      BUFFER_LOAD_DWORD_LDS_IDXEN
39# GCN-NEXT: S_WAITCNT 3952
40#                     vmcnt(0)
41# GCN-NEXT: FLAT_LOAD_DWORD
42---
43name: buffer_load_dword_lds_flat_read
44body:             |
45  bb.0:
46    $m0 = S_MOV_B32 0
47    BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`), (store (s32) into `ptr addrspace(3) undef`)
48    $vgpr0 = FLAT_LOAD_DWORD $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32) from `ptr undef`)
49
50    S_ENDPGM 0
51
52...
53
54# GCN-LABEL: name: global_load_lds_dword_ds_read
55# GCN:      GLOBAL_LOAD_LDS_DWORD
56# GCN-NEXT: S_WAITCNT 3952
57#                     vmcnt(0)
58# GCN-NEXT: DS_READ_B32_gfx9
59---
60name: global_load_lds_dword_ds_read
61body:             |
62  bb.0:
63    $m0 = S_MOV_B32 0
64    GLOBAL_LOAD_LDS_DWORD $vgpr0_vgpr1, 4, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4)
65    $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`)
66    S_ENDPGM 0
67
68...
69
70# GCN-LABEL: name: scratch_load_lds_dword_ds_read
71# GCN:      SCRATCH_LOAD_LDS_DWORD
72# GCN-NEXT: S_WAITCNT 3952
73#                     vmcnt(0)
74# GCN-NEXT: DS_READ_B32_gfx9
75---
76name: scratch_load_lds_dword_ds_read
77body:             |
78  bb.0:
79    $m0 = S_MOV_B32 0
80    SCRATCH_LOAD_LDS_DWORD $vgpr0, 4, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(5) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4)
81    $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`)
82    S_ENDPGM 0
83
84...
85
86# GCN-LABEL: name: buffer_store_lds_dword_ds_read
87# GCN:      BUFFER_STORE_LDS_DWORD
88# GCN-NEXT: DS_READ_B32_gfx9
89---
90name: buffer_store_lds_dword_ds_read
91body:             |
92  bb.0:
93    $m0 = S_MOV_B32 0
94    BUFFER_STORE_LDS_DWORD $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(3) undef` + 4), (store (s32) into `ptr addrspace(1) undef` + 4)
95    $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`)
96    S_ENDPGM 0
97
98...
99
100# No need to wait before load from VMEM to LDS.
101# GCN-LABEL: name: series_of_buffer_load_dword_lds_ds_read
102# GCN:      BUFFER_LOAD_DWORD_LDS_IDXEN
103# GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN
104# GCN-NEXT: BUFFER_LOAD_DWORD_LDS_IDXEN
105# GCN-NEXT: S_WAITCNT 3952
106#                     vmcnt(0)
107# GCN-NEXT: DS_READ_B32_gfx9
108---
109name: series_of_buffer_load_dword_lds_ds_read
110body:             |
111  bb.0:
112    $m0 = S_MOV_B32 0
113    BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef`), (store (s32) into `ptr addrspace(3) undef`)
114    BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 4, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 4), (store (s32) into `ptr addrspace(3) undef` + 4)
115    BUFFER_LOAD_DWORD_LDS_IDXEN $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 8, 0, 0, implicit $exec, implicit $m0 :: (load (s32) from `ptr addrspace(1) undef` + 8), (store (s32) into `ptr addrspace(3) undef` + 8)
116    $vgpr0 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $m0, implicit $exec :: (load (s32) from `ptr addrspace(3) undef`)
117    S_ENDPGM 0
118
119...
120