Revert rGe6ccb57bb3f6b761f2310e97fd6ca99eff42f73e "[SLP] Add cost model for `llvm...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / memory-legalizer-private-volatile.ll
blobe0dfca637564cc8a9f45559f11efce0344782a96
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-amd- -mcpu=gfx600 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX6 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx700 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX7 %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX10-WGP %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -mattr=+cumode -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX10-CU %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx700 -amdgcn-skip-cache-invalidations -verify-machineinstrs < %s | FileCheck --check-prefixes=SKIP-CACHE-INV %s
7 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX11-WGP %s
8 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -mattr=+cumode -verify-machineinstrs < %s | FileCheck --check-prefixes=GFX11-CU %s
10 define amdgpu_kernel void @private_volatile_load_0(
11 ; GFX6-LABEL: private_volatile_load_0:
12 ; GFX6:       ; %bb.0: ; %entry
13 ; GFX6-NEXT:    s_mov_b32 s4, SCRATCH_RSRC_DWORD0
14 ; GFX6-NEXT:    s_mov_b32 s5, SCRATCH_RSRC_DWORD1
15 ; GFX6-NEXT:    s_load_dword s2, s[0:1], 0x9
16 ; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0xb
17 ; GFX6-NEXT:    s_mov_b32 s6, -1
18 ; GFX6-NEXT:    s_mov_b32 s7, 0xe8f000
19 ; GFX6-NEXT:    s_add_u32 s4, s4, s3
20 ; GFX6-NEXT:    s_addc_u32 s5, s5, 0
21 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
22 ; GFX6-NEXT:    v_mov_b32_e32 v0, s2
23 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[4:7], 0 offen glc
24 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
25 ; GFX6-NEXT:    s_mov_b32 s3, 0xf000
26 ; GFX6-NEXT:    s_mov_b32 s2, -1
27 ; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], 0
28 ; GFX6-NEXT:    s_endpgm
30 ; GFX7-LABEL: private_volatile_load_0:
31 ; GFX7:       ; %bb.0: ; %entry
32 ; GFX7-NEXT:    s_mov_b64 s[10:11], s[2:3]
33 ; GFX7-NEXT:    s_mov_b64 s[8:9], s[0:1]
34 ; GFX7-NEXT:    s_load_dword s2, s[4:5], 0x0
35 ; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
36 ; GFX7-NEXT:    s_add_u32 s8, s8, s7
37 ; GFX7-NEXT:    s_addc_u32 s9, s9, 0
38 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
39 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
40 ; GFX7-NEXT:    buffer_load_dword v2, v0, s[8:11], 0 offen glc
41 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
42 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
43 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
44 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
45 ; GFX7-NEXT:    s_endpgm
47 ; GFX10-WGP-LABEL: private_volatile_load_0:
48 ; GFX10-WGP:       ; %bb.0: ; %entry
49 ; GFX10-WGP-NEXT:    s_mov_b64 s[10:11], s[2:3]
50 ; GFX10-WGP-NEXT:    s_mov_b64 s[8:9], s[0:1]
51 ; GFX10-WGP-NEXT:    s_clause 0x1
52 ; GFX10-WGP-NEXT:    s_load_dword s2, s[4:5], 0x0
53 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
54 ; GFX10-WGP-NEXT:    s_add_u32 s8, s8, s7
55 ; GFX10-WGP-NEXT:    s_addc_u32 s9, s9, 0
56 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, 0
57 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
58 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, s2
59 ; GFX10-WGP-NEXT:    buffer_load_dword v0, v0, s[8:11], 0 offen glc dlc
60 ; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)
61 ; GFX10-WGP-NEXT:    global_store_dword v1, v0, s[0:1]
62 ; GFX10-WGP-NEXT:    s_endpgm
64 ; GFX10-CU-LABEL: private_volatile_load_0:
65 ; GFX10-CU:       ; %bb.0: ; %entry
66 ; GFX10-CU-NEXT:    s_mov_b64 s[10:11], s[2:3]
67 ; GFX10-CU-NEXT:    s_mov_b64 s[8:9], s[0:1]
68 ; GFX10-CU-NEXT:    s_clause 0x1
69 ; GFX10-CU-NEXT:    s_load_dword s2, s[4:5], 0x0
70 ; GFX10-CU-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
71 ; GFX10-CU-NEXT:    s_add_u32 s8, s8, s7
72 ; GFX10-CU-NEXT:    s_addc_u32 s9, s9, 0
73 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, 0
74 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
75 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, s2
76 ; GFX10-CU-NEXT:    buffer_load_dword v0, v0, s[8:11], 0 offen glc dlc
77 ; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)
78 ; GFX10-CU-NEXT:    global_store_dword v1, v0, s[0:1]
79 ; GFX10-CU-NEXT:    s_endpgm
81 ; SKIP-CACHE-INV-LABEL: private_volatile_load_0:
82 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
83 ; SKIP-CACHE-INV-NEXT:    s_getpc_b64 s[4:5]
84 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s4, s0
85 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[4:7], s[4:5], 0x0
86 ; SKIP-CACHE-INV-NEXT:    s_load_dword s2, s[0:1], 0x0
87 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
88 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
89 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s2
90 ; SKIP-CACHE-INV-NEXT:    s_add_u32 s4, s4, s3
91 ; SKIP-CACHE-INV-NEXT:    s_addc_u32 s5, s5, 0
92 ; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, v0, s[4:7], 0 offen glc
93 ; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)
94 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, 0xf000
95 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, -1
96 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
97 ; SKIP-CACHE-INV-NEXT:    s_endpgm
99 ; GFX11-WGP-LABEL: private_volatile_load_0:
100 ; GFX11-WGP:       ; %bb.0: ; %entry
101 ; GFX11-WGP-NEXT:    s_clause 0x1
102 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[0:1], 0x0
103 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
104 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, 0
105 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
106 ; GFX11-WGP-NEXT:    scratch_load_b32 v0, off, s2 glc dlc
107 ; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)
108 ; GFX11-WGP-NEXT:    global_store_b32 v1, v0, s[0:1]
109 ; GFX11-WGP-NEXT:    s_endpgm
111 ; GFX11-CU-LABEL: private_volatile_load_0:
112 ; GFX11-CU:       ; %bb.0: ; %entry
113 ; GFX11-CU-NEXT:    s_clause 0x1
114 ; GFX11-CU-NEXT:    s_load_b32 s2, s[0:1], 0x0
115 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
116 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, 0
117 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
118 ; GFX11-CU-NEXT:    scratch_load_b32 v0, off, s2 glc dlc
119 ; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)
120 ; GFX11-CU-NEXT:    global_store_b32 v1, v0, s[0:1]
121 ; GFX11-CU-NEXT:    s_endpgm
122     i32 addrspace(5)* %in, i32 addrspace(1)* %out) {
123 entry:
124   %val = load volatile i32, i32 addrspace(5)* %in, align 4
125   store i32 %val, i32 addrspace(1)* %out
126   ret void
129 define amdgpu_kernel void @private_volatile_load_1(
130 ; GFX6-LABEL: private_volatile_load_1:
131 ; GFX6:       ; %bb.0: ; %entry
132 ; GFX6-NEXT:    s_mov_b32 s4, SCRATCH_RSRC_DWORD0
133 ; GFX6-NEXT:    s_mov_b32 s5, SCRATCH_RSRC_DWORD1
134 ; GFX6-NEXT:    s_load_dword s2, s[0:1], 0x9
135 ; GFX6-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0xb
136 ; GFX6-NEXT:    s_mov_b32 s6, -1
137 ; GFX6-NEXT:    s_mov_b32 s7, 0xe8f000
138 ; GFX6-NEXT:    s_add_u32 s4, s4, s3
139 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
140 ; GFX6-NEXT:    s_addc_u32 s5, s5, 0
141 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
142 ; GFX6-NEXT:    v_add_i32_e32 v0, vcc, s2, v0
143 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[4:7], 0 offen glc
144 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
145 ; GFX6-NEXT:    s_mov_b32 s3, 0xf000
146 ; GFX6-NEXT:    s_mov_b32 s2, -1
147 ; GFX6-NEXT:    buffer_store_dword v0, off, s[0:3], 0
148 ; GFX6-NEXT:    s_endpgm
150 ; GFX7-LABEL: private_volatile_load_1:
151 ; GFX7:       ; %bb.0: ; %entry
152 ; GFX7-NEXT:    s_mov_b64 s[10:11], s[2:3]
153 ; GFX7-NEXT:    s_mov_b64 s[8:9], s[0:1]
154 ; GFX7-NEXT:    s_load_dword s2, s[4:5], 0x0
155 ; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
156 ; GFX7-NEXT:    s_add_u32 s8, s8, s7
157 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
158 ; GFX7-NEXT:    s_addc_u32 s9, s9, 0
159 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
160 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s2, v0
161 ; GFX7-NEXT:    buffer_load_dword v2, v0, s[8:11], 0 offen glc
162 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
163 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
164 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
165 ; GFX7-NEXT:    flat_store_dword v[0:1], v2
166 ; GFX7-NEXT:    s_endpgm
168 ; GFX10-WGP-LABEL: private_volatile_load_1:
169 ; GFX10-WGP:       ; %bb.0: ; %entry
170 ; GFX10-WGP-NEXT:    s_mov_b64 s[10:11], s[2:3]
171 ; GFX10-WGP-NEXT:    s_mov_b64 s[8:9], s[0:1]
172 ; GFX10-WGP-NEXT:    s_clause 0x1
173 ; GFX10-WGP-NEXT:    s_load_dword s2, s[4:5], 0x0
174 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
175 ; GFX10-WGP-NEXT:    s_add_u32 s8, s8, s7
176 ; GFX10-WGP-NEXT:    s_addc_u32 s9, s9, 0
177 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, 0
178 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
179 ; GFX10-WGP-NEXT:    v_lshl_add_u32 v0, v0, 2, s2
180 ; GFX10-WGP-NEXT:    buffer_load_dword v0, v0, s[8:11], 0 offen glc dlc
181 ; GFX10-WGP-NEXT:    s_waitcnt vmcnt(0)
182 ; GFX10-WGP-NEXT:    global_store_dword v1, v0, s[0:1]
183 ; GFX10-WGP-NEXT:    s_endpgm
185 ; GFX10-CU-LABEL: private_volatile_load_1:
186 ; GFX10-CU:       ; %bb.0: ; %entry
187 ; GFX10-CU-NEXT:    s_mov_b64 s[10:11], s[2:3]
188 ; GFX10-CU-NEXT:    s_mov_b64 s[8:9], s[0:1]
189 ; GFX10-CU-NEXT:    s_clause 0x1
190 ; GFX10-CU-NEXT:    s_load_dword s2, s[4:5], 0x0
191 ; GFX10-CU-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
192 ; GFX10-CU-NEXT:    s_add_u32 s8, s8, s7
193 ; GFX10-CU-NEXT:    s_addc_u32 s9, s9, 0
194 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, 0
195 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
196 ; GFX10-CU-NEXT:    v_lshl_add_u32 v0, v0, 2, s2
197 ; GFX10-CU-NEXT:    buffer_load_dword v0, v0, s[8:11], 0 offen glc dlc
198 ; GFX10-CU-NEXT:    s_waitcnt vmcnt(0)
199 ; GFX10-CU-NEXT:    global_store_dword v1, v0, s[0:1]
200 ; GFX10-CU-NEXT:    s_endpgm
202 ; SKIP-CACHE-INV-LABEL: private_volatile_load_1:
203 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
204 ; SKIP-CACHE-INV-NEXT:    s_getpc_b64 s[4:5]
205 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s4, s0
206 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[4:7], s[4:5], 0x0
207 ; SKIP-CACHE-INV-NEXT:    s_load_dword s2, s[0:1], 0x0
208 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x2
209 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
210 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
211 ; SKIP-CACHE-INV-NEXT:    v_add_i32_e32 v0, vcc, s2, v0
212 ; SKIP-CACHE-INV-NEXT:    s_add_u32 s4, s4, s3
213 ; SKIP-CACHE-INV-NEXT:    s_addc_u32 s5, s5, 0
214 ; SKIP-CACHE-INV-NEXT:    buffer_load_dword v0, v0, s[4:7], 0 offen glc
215 ; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)
216 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s3, 0xf000
217 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s2, -1
218 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, off, s[0:3], 0
219 ; SKIP-CACHE-INV-NEXT:    s_endpgm
221 ; GFX11-WGP-LABEL: private_volatile_load_1:
222 ; GFX11-WGP:       ; %bb.0: ; %entry
223 ; GFX11-WGP-NEXT:    s_load_b32 s2, s[0:1], 0x0
224 ; GFX11-WGP-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
225 ; GFX11-WGP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
226 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, 0
227 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
228 ; GFX11-WGP-NEXT:    scratch_load_b32 v0, v0, s2 glc dlc
229 ; GFX11-WGP-NEXT:    s_waitcnt vmcnt(0)
230 ; GFX11-WGP-NEXT:    global_store_b32 v1, v0, s[0:1]
231 ; GFX11-WGP-NEXT:    s_endpgm
233 ; GFX11-CU-LABEL: private_volatile_load_1:
234 ; GFX11-CU:       ; %bb.0: ; %entry
235 ; GFX11-CU-NEXT:    s_load_b32 s2, s[0:1], 0x0
236 ; GFX11-CU-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
237 ; GFX11-CU-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
238 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, 0
239 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
240 ; GFX11-CU-NEXT:    scratch_load_b32 v0, v0, s2 glc dlc
241 ; GFX11-CU-NEXT:    s_waitcnt vmcnt(0)
242 ; GFX11-CU-NEXT:    global_store_b32 v1, v0, s[0:1]
243 ; GFX11-CU-NEXT:    s_endpgm
244     i32 addrspace(5)* %in, i32 addrspace(1)* %out) {
245 entry:
246   %tid = call i32 @llvm.amdgcn.workitem.id.x()
247   %val.gep = getelementptr inbounds i32, i32 addrspace(5)* %in, i32 %tid
248   %val = load volatile i32, i32 addrspace(5)* %val.gep, align 4
249   store i32 %val, i32 addrspace(1)* %out
250   ret void
253 define amdgpu_kernel void @private_volatile_store_0(
254 ; GFX6-LABEL: private_volatile_store_0:
255 ; GFX6:       ; %bb.0: ; %entry
256 ; GFX6-NEXT:    s_mov_b32 s4, SCRATCH_RSRC_DWORD0
257 ; GFX6-NEXT:    s_mov_b32 s5, SCRATCH_RSRC_DWORD1
258 ; GFX6-NEXT:    s_mov_b32 s6, -1
259 ; GFX6-NEXT:    s_mov_b32 s7, 0xe8f000
260 ; GFX6-NEXT:    s_add_u32 s4, s4, s3
261 ; GFX6-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x9
262 ; GFX6-NEXT:    s_load_dword s0, s[0:1], 0xb
263 ; GFX6-NEXT:    s_addc_u32 s5, s5, 0
264 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
265 ; GFX6-NEXT:    s_load_dword s1, s[2:3], 0x0
266 ; GFX6-NEXT:    v_mov_b32_e32 v1, s0
267 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
268 ; GFX6-NEXT:    v_mov_b32_e32 v0, s1
269 ; GFX6-NEXT:    buffer_store_dword v0, v1, s[4:7], 0 offen
270 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
271 ; GFX6-NEXT:    s_endpgm
273 ; GFX7-LABEL: private_volatile_store_0:
274 ; GFX7:       ; %bb.0: ; %entry
275 ; GFX7-NEXT:    s_mov_b64 s[10:11], s[2:3]
276 ; GFX7-NEXT:    s_mov_b64 s[8:9], s[0:1]
277 ; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
278 ; GFX7-NEXT:    s_load_dword s2, s[4:5], 0x2
279 ; GFX7-NEXT:    s_add_u32 s8, s8, s7
280 ; GFX7-NEXT:    s_addc_u32 s9, s9, 0
281 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
282 ; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x0
283 ; GFX7-NEXT:    v_mov_b32_e32 v1, s2
284 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
285 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
286 ; GFX7-NEXT:    buffer_store_dword v0, v1, s[8:11], 0 offen
287 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
288 ; GFX7-NEXT:    s_endpgm
290 ; GFX10-WGP-LABEL: private_volatile_store_0:
291 ; GFX10-WGP:       ; %bb.0: ; %entry
292 ; GFX10-WGP-NEXT:    s_mov_b64 s[10:11], s[2:3]
293 ; GFX10-WGP-NEXT:    s_mov_b64 s[8:9], s[0:1]
294 ; GFX10-WGP-NEXT:    s_clause 0x1
295 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
296 ; GFX10-WGP-NEXT:    s_load_dword s2, s[4:5], 0x8
297 ; GFX10-WGP-NEXT:    s_add_u32 s8, s8, s7
298 ; GFX10-WGP-NEXT:    s_addc_u32 s9, s9, 0
299 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
300 ; GFX10-WGP-NEXT:    s_load_dword s0, s[0:1], 0x0
301 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s2
302 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
303 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v0, s0
304 ; GFX10-WGP-NEXT:    buffer_store_dword v0, v1, s[8:11], 0 offen
305 ; GFX10-WGP-NEXT:    s_waitcnt_vscnt null, 0x0
306 ; GFX10-WGP-NEXT:    s_endpgm
308 ; GFX10-CU-LABEL: private_volatile_store_0:
309 ; GFX10-CU:       ; %bb.0: ; %entry
310 ; GFX10-CU-NEXT:    s_mov_b64 s[10:11], s[2:3]
311 ; GFX10-CU-NEXT:    s_mov_b64 s[8:9], s[0:1]
312 ; GFX10-CU-NEXT:    s_clause 0x1
313 ; GFX10-CU-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
314 ; GFX10-CU-NEXT:    s_load_dword s2, s[4:5], 0x8
315 ; GFX10-CU-NEXT:    s_add_u32 s8, s8, s7
316 ; GFX10-CU-NEXT:    s_addc_u32 s9, s9, 0
317 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
318 ; GFX10-CU-NEXT:    s_load_dword s0, s[0:1], 0x0
319 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s2
320 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
321 ; GFX10-CU-NEXT:    v_mov_b32_e32 v0, s0
322 ; GFX10-CU-NEXT:    buffer_store_dword v0, v1, s[8:11], 0 offen
323 ; GFX10-CU-NEXT:    s_waitcnt_vscnt null, 0x0
324 ; GFX10-CU-NEXT:    s_endpgm
326 ; SKIP-CACHE-INV-LABEL: private_volatile_store_0:
327 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
328 ; SKIP-CACHE-INV-NEXT:    s_getpc_b64 s[4:5]
329 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s4, s0
330 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[4:7], s[4:5], 0x0
331 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
332 ; SKIP-CACHE-INV-NEXT:    s_add_u32 s4, s4, s3
333 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0
334 ; SKIP-CACHE-INV-NEXT:    s_load_dword s0, s[0:1], 0x2
335 ; SKIP-CACHE-INV-NEXT:    s_addc_u32 s5, s5, 0
336 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
337 ; SKIP-CACHE-INV-NEXT:    s_load_dword s1, s[2:3], 0x0
338 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, s0
339 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
340 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v0, s1
341 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v0, v1, s[4:7], 0 offen
342 ; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)
343 ; SKIP-CACHE-INV-NEXT:    s_endpgm
345 ; GFX11-WGP-LABEL: private_volatile_store_0:
346 ; GFX11-WGP:       ; %bb.0: ; %entry
347 ; GFX11-WGP-NEXT:    s_clause 0x1
348 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0
349 ; GFX11-WGP-NEXT:    s_load_b32 s0, s[0:1], 0x8
350 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
351 ; GFX11-WGP-NEXT:    s_load_b32 s1, s[2:3], 0x0
352 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
353 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v0, s1
354 ; GFX11-WGP-NEXT:    scratch_store_b32 off, v0, s0 dlc
355 ; GFX11-WGP-NEXT:    s_waitcnt_vscnt null, 0x0
356 ; GFX11-WGP-NEXT:    s_endpgm
358 ; GFX11-CU-LABEL: private_volatile_store_0:
359 ; GFX11-CU:       ; %bb.0: ; %entry
360 ; GFX11-CU-NEXT:    s_clause 0x1
361 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0
362 ; GFX11-CU-NEXT:    s_load_b32 s0, s[0:1], 0x8
363 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
364 ; GFX11-CU-NEXT:    s_load_b32 s1, s[2:3], 0x0
365 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
366 ; GFX11-CU-NEXT:    v_mov_b32_e32 v0, s1
367 ; GFX11-CU-NEXT:    scratch_store_b32 off, v0, s0 dlc
368 ; GFX11-CU-NEXT:    s_waitcnt_vscnt null, 0x0
369 ; GFX11-CU-NEXT:    s_endpgm
370     i32 addrspace(1)* %in, i32 addrspace(5)* %out) {
371 entry:
372   %val = load i32, i32 addrspace(1)* %in, align 4
373   store volatile i32 %val, i32 addrspace(5)* %out
374   ret void
377 define amdgpu_kernel void @private_volatile_store_1(
378 ; GFX6-LABEL: private_volatile_store_1:
379 ; GFX6:       ; %bb.0: ; %entry
380 ; GFX6-NEXT:    s_mov_b32 s4, SCRATCH_RSRC_DWORD0
381 ; GFX6-NEXT:    s_mov_b32 s5, SCRATCH_RSRC_DWORD1
382 ; GFX6-NEXT:    s_mov_b32 s6, -1
383 ; GFX6-NEXT:    s_mov_b32 s7, 0xe8f000
384 ; GFX6-NEXT:    s_add_u32 s4, s4, s3
385 ; GFX6-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x9
386 ; GFX6-NEXT:    s_load_dword s0, s[0:1], 0xb
387 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
388 ; GFX6-NEXT:    s_addc_u32 s5, s5, 0
389 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
390 ; GFX6-NEXT:    s_load_dword s1, s[2:3], 0x0
391 ; GFX6-NEXT:    v_add_i32_e32 v0, vcc, s0, v0
392 ; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
393 ; GFX6-NEXT:    v_mov_b32_e32 v1, s1
394 ; GFX6-NEXT:    buffer_store_dword v1, v0, s[4:7], 0 offen
395 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
396 ; GFX6-NEXT:    s_endpgm
398 ; GFX7-LABEL: private_volatile_store_1:
399 ; GFX7:       ; %bb.0: ; %entry
400 ; GFX7-NEXT:    s_mov_b64 s[10:11], s[2:3]
401 ; GFX7-NEXT:    s_mov_b64 s[8:9], s[0:1]
402 ; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
403 ; GFX7-NEXT:    s_load_dword s2, s[4:5], 0x2
404 ; GFX7-NEXT:    s_add_u32 s8, s8, s7
405 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
406 ; GFX7-NEXT:    s_addc_u32 s9, s9, 0
407 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
408 ; GFX7-NEXT:    s_load_dword s0, s[0:1], 0x0
409 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s2, v0
410 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
411 ; GFX7-NEXT:    v_mov_b32_e32 v1, s0
412 ; GFX7-NEXT:    buffer_store_dword v1, v0, s[8:11], 0 offen
413 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
414 ; GFX7-NEXT:    s_endpgm
416 ; GFX10-WGP-LABEL: private_volatile_store_1:
417 ; GFX10-WGP:       ; %bb.0: ; %entry
418 ; GFX10-WGP-NEXT:    s_mov_b64 s[10:11], s[2:3]
419 ; GFX10-WGP-NEXT:    s_mov_b64 s[8:9], s[0:1]
420 ; GFX10-WGP-NEXT:    s_clause 0x1
421 ; GFX10-WGP-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
422 ; GFX10-WGP-NEXT:    s_load_dword s2, s[4:5], 0x8
423 ; GFX10-WGP-NEXT:    s_add_u32 s8, s8, s7
424 ; GFX10-WGP-NEXT:    s_addc_u32 s9, s9, 0
425 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
426 ; GFX10-WGP-NEXT:    s_load_dword s0, s[0:1], 0x0
427 ; GFX10-WGP-NEXT:    v_lshl_add_u32 v0, v0, 2, s2
428 ; GFX10-WGP-NEXT:    s_waitcnt lgkmcnt(0)
429 ; GFX10-WGP-NEXT:    v_mov_b32_e32 v1, s0
430 ; GFX10-WGP-NEXT:    buffer_store_dword v1, v0, s[8:11], 0 offen
431 ; GFX10-WGP-NEXT:    s_waitcnt_vscnt null, 0x0
432 ; GFX10-WGP-NEXT:    s_endpgm
434 ; GFX10-CU-LABEL: private_volatile_store_1:
435 ; GFX10-CU:       ; %bb.0: ; %entry
436 ; GFX10-CU-NEXT:    s_mov_b64 s[10:11], s[2:3]
437 ; GFX10-CU-NEXT:    s_mov_b64 s[8:9], s[0:1]
438 ; GFX10-CU-NEXT:    s_clause 0x1
439 ; GFX10-CU-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
440 ; GFX10-CU-NEXT:    s_load_dword s2, s[4:5], 0x8
441 ; GFX10-CU-NEXT:    s_add_u32 s8, s8, s7
442 ; GFX10-CU-NEXT:    s_addc_u32 s9, s9, 0
443 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
444 ; GFX10-CU-NEXT:    s_load_dword s0, s[0:1], 0x0
445 ; GFX10-CU-NEXT:    v_lshl_add_u32 v0, v0, 2, s2
446 ; GFX10-CU-NEXT:    s_waitcnt lgkmcnt(0)
447 ; GFX10-CU-NEXT:    v_mov_b32_e32 v1, s0
448 ; GFX10-CU-NEXT:    buffer_store_dword v1, v0, s[8:11], 0 offen
449 ; GFX10-CU-NEXT:    s_waitcnt_vscnt null, 0x0
450 ; GFX10-CU-NEXT:    s_endpgm
452 ; SKIP-CACHE-INV-LABEL: private_volatile_store_1:
453 ; SKIP-CACHE-INV:       ; %bb.0: ; %entry
454 ; SKIP-CACHE-INV-NEXT:    s_getpc_b64 s[4:5]
455 ; SKIP-CACHE-INV-NEXT:    s_mov_b32 s4, s0
456 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx4 s[4:7], s[4:5], 0x0
457 ; SKIP-CACHE-INV-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
458 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
459 ; SKIP-CACHE-INV-NEXT:    s_add_u32 s4, s4, s3
460 ; SKIP-CACHE-INV-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x0
461 ; SKIP-CACHE-INV-NEXT:    s_load_dword s0, s[0:1], 0x2
462 ; SKIP-CACHE-INV-NEXT:    s_addc_u32 s5, s5, 0
463 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
464 ; SKIP-CACHE-INV-NEXT:    s_load_dword s1, s[2:3], 0x0
465 ; SKIP-CACHE-INV-NEXT:    v_add_i32_e32 v0, vcc, s0, v0
466 ; SKIP-CACHE-INV-NEXT:    s_waitcnt lgkmcnt(0)
467 ; SKIP-CACHE-INV-NEXT:    v_mov_b32_e32 v1, s1
468 ; SKIP-CACHE-INV-NEXT:    buffer_store_dword v1, v0, s[4:7], 0 offen
469 ; SKIP-CACHE-INV-NEXT:    s_waitcnt vmcnt(0)
470 ; SKIP-CACHE-INV-NEXT:    s_endpgm
472 ; GFX11-WGP-LABEL: private_volatile_store_1:
473 ; GFX11-WGP:       ; %bb.0: ; %entry
474 ; GFX11-WGP-NEXT:    s_clause 0x1
475 ; GFX11-WGP-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0
476 ; GFX11-WGP-NEXT:    s_load_b32 s0, s[0:1], 0x8
477 ; GFX11-WGP-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
478 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
479 ; GFX11-WGP-NEXT:    s_load_b32 s1, s[2:3], 0x0
480 ; GFX11-WGP-NEXT:    s_waitcnt lgkmcnt(0)
481 ; GFX11-WGP-NEXT:    v_mov_b32_e32 v1, s1
482 ; GFX11-WGP-NEXT:    scratch_store_b32 v0, v1, s0 dlc
483 ; GFX11-WGP-NEXT:    s_waitcnt_vscnt null, 0x0
484 ; GFX11-WGP-NEXT:    s_endpgm
486 ; GFX11-CU-LABEL: private_volatile_store_1:
487 ; GFX11-CU:       ; %bb.0: ; %entry
488 ; GFX11-CU-NEXT:    s_clause 0x1
489 ; GFX11-CU-NEXT:    s_load_b64 s[2:3], s[0:1], 0x0
490 ; GFX11-CU-NEXT:    s_load_b32 s0, s[0:1], 0x8
491 ; GFX11-CU-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
492 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
493 ; GFX11-CU-NEXT:    s_load_b32 s1, s[2:3], 0x0
494 ; GFX11-CU-NEXT:    s_waitcnt lgkmcnt(0)
495 ; GFX11-CU-NEXT:    v_mov_b32_e32 v1, s1
496 ; GFX11-CU-NEXT:    scratch_store_b32 v0, v1, s0 dlc
497 ; GFX11-CU-NEXT:    s_waitcnt_vscnt null, 0x0
498 ; GFX11-CU-NEXT:    s_endpgm
499     i32 addrspace(1)* %in, i32 addrspace(5)* %out) {
500 entry:
501   %tid = call i32 @llvm.amdgcn.workitem.id.x()
502   %val = load i32, i32 addrspace(1)* %in, align 4
503   %out.gep = getelementptr inbounds i32, i32 addrspace(5)* %out, i32 %tid
504   store volatile i32 %val, i32 addrspace(5)* %out.gep
505   ret void
508 declare i32 @llvm.amdgcn.workitem.id.x()