1# RUN: llc -march=amdgcn -mcpu=gfx803 -run-pass si-memory-legalizer %s -o - | FileCheck -check-prefix=GCN %s
2
3---
4
5# GCN-LABEL: name: load_singlethread_unordered
6
7# GCN-LABEL: bb.0:
8# GCN-NOT:   S_WAITCNT
9# GCN:       DS_READ_B32
10# GCN-NOT:   S_WAITCNT
11# GCN:       FLAT_STORE_DWORD
12
13name:            load_singlethread_unordered
14body:             |
15  bb.0:
16    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
17    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
18    $m0 = S_MOV_B32 -1
19    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
20    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 1, 0, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread-one-as") unordered (s32) from `i32 addrspace(2)* undef`)
21    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
22    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
23    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
24    S_ENDPGM 0
25
26...
27---
28
29# GCN-LABEL: name: load_singlethread_monotonic
30
31# GCN-LABEL: bb.0:
32# GCN-NOT:   S_WAITCNT
33# GCN:       DS_READ_B32
34# GCN-NOT:   S_WAITCNT
35# GCN:       FLAT_STORE_DWORD
36
37name:            load_singlethread_monotonic
38body:             |
39  bb.0:
40    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
41    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
42    $m0 = S_MOV_B32 -1
43    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
44    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread-one-as") monotonic (s32) from `i32 addrspace(2)* undef`)
45    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
46    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
47    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
48    S_ENDPGM 0
49
50...
51---
52
53# GCN-LABEL: name: load_singlethread_acquire
54
55# GCN-LABEL: bb.0:
56# GCN-NOT:   S_WAITCNT
57# GCN:       DS_READ_B32
58# GCN-NOT:   S_WAITCNT
59# GCN:       FLAT_STORE_DWORD
60
61name:            load_singlethread_acquire
62body:             |
63  bb.0:
64    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
65    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
66    $m0 = S_MOV_B32 -1
67    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
68    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread-one-as") acquire (s32) from `i32 addrspace(2)* undef`)
69    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
70    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
71    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
72    S_ENDPGM 0
73
74...
75---
76
77# GCN-LABEL: name: load_singlethread_seq_cst
78
79# GCN-LABEL: bb.0:
80# GCN-NOT:   S_WAITCNT
81# GCN:       DS_READ_B32
82# GCN-NOT:   S_WAITCNT
83# GCN:       FLAT_STORE_DWORD
84
85name:            load_singlethread_seq_cst
86body:             |
87  bb.0:
88    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
89    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
90    $m0 = S_MOV_B32 -1
91    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
92    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread-one-as") seq_cst (s32) from `i32 addrspace(2)* undef`)
93    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
94    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
95    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
96    S_ENDPGM 0
97
98...
99---
100
101# GCN-LABEL: name: load_wavefront_unordered
102
103# GCN-LABEL: bb.0:
104# GCN-NOT:   S_WAITCNT
105# GCN:       DS_READ_B32
106# GCN-NOT:   S_WAITCNT
107# GCN:       FLAT_STORE_DWORD
108
109name:            load_wavefront_unordered
110body:             |
111  bb.0:
112    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
113    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
114    $m0 = S_MOV_B32 -1
115    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
116    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront-one-as") unordered (s32) from `i32 addrspace(2)* undef`)
117    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
118    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
119    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
120    S_ENDPGM 0
121
122...
123---
124
125# GCN-LABEL: name: load_wavefront_monotonic
126
127# GCN-LABEL: bb.0:
128# GCN-NOT:   S_WAITCNT
129# GCN:       DS_READ_B32
130# GCN-NOT:   S_WAITCNT
131# GCN:       FLAT_STORE_DWORD
132
133name:            load_wavefront_monotonic
134body:             |
135  bb.0:
136    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
137    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
138    $m0 = S_MOV_B32 -1
139    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
140    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront-one-as") monotonic (s32) from `i32 addrspace(2)* undef`)
141    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
142    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
143    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
144    S_ENDPGM 0
145
146...
147---
148
149# GCN-LABEL: name: load_wavefront_acquire
150
151# GCN-LABEL: bb.0:
152# GCN-NOT:   S_WAITCNT
153# GCN:       DS_READ_B32
154# GCN-NOT:   S_WAITCNT
155# GCN:       FLAT_STORE_DWORD
156
157name:            load_wavefront_acquire
158body:             |
159  bb.0:
160    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
161    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
162    $m0 = S_MOV_B32 -1
163    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
164    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront-one-as") acquire (s32) from `i32 addrspace(2)* undef`)
165    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
166    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
167    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
168    S_ENDPGM 0
169
170...
171---
172
173# GCN-LABEL: name: load_wavefront_seq_cst
174
175# GCN-LABEL: bb.0:
176# GCN-NOT:   S_WAITCNT
177# GCN:       DS_READ_B32
178# GCN-NOT:   S_WAITCNT
179# GCN:       FLAT_STORE_DWORD
180
181name:            load_wavefront_seq_cst
182body:             |
183  bb.0:
184    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
185    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
186    $m0 = S_MOV_B32 -1
187    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
188    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront-one-as") seq_cst (s32) from `i32 addrspace(2)* undef`)
189    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
190    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
191    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
192    S_ENDPGM 0
193
194...
195---
196
197# GCN-LABEL: name: load_workgroup_unordered
198
199# GCN-LABEL: bb.0:
200# GCN-NOT:   S_WAITCNT
201# GCN:       DS_READ_B32
202# GCN-NOT:   S_WAITCNT
203# GCN:       FLAT_STORE_DWORD
204
205name:            load_workgroup_unordered
206body:             |
207  bb.0:
208    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
209    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
210    $m0 = S_MOV_B32 -1
211    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
212    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup-one-as") unordered (s32) from `i32 addrspace(2)* undef`)
213    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
214    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
215    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
216    S_ENDPGM 0
217
218...
219---
220
221# GCN-LABEL: name: load_workgroup_monotonic
222
223# GCN-LABEL: bb.0:
224# GCN-NOT:   S_WAITCNT
225# GCN:       DS_READ_B32
226# GCN-NOT:   S_WAITCNT
227# GCN:       FLAT_STORE_DWORD
228
229name:            load_workgroup_monotonic
230body:             |
231  bb.0:
232    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
233    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
234    $m0 = S_MOV_B32 -1
235    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
236    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup-one-as") monotonic (s32) from `i32 addrspace(2)* undef`)
237    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
238    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
239    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
240    S_ENDPGM 0
241
242...
243---
244
245# GCN-LABEL: name: load_workgroup_acquire
246
247# GCN-LABEL: bb.0:
248# GCN-NOT:   S_WAITCNT
249# GCN:       DS_READ_B32
250# GCN-NOT:   S_WAITCNT
251# GCN:       FLAT_STORE_DWORD
252
253name:            load_workgroup_acquire
254body:             |
255  bb.0:
256    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
257    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
258    $m0 = S_MOV_B32 -1
259    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
260    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup-one-as") acquire (s32) from `i32 addrspace(2)* undef`)
261    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
262    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
263    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
264    S_ENDPGM 0
265
266...
267---
268
269# GCN-LABEL: name: load_workgroup_seq_cst
270
271# GCN-LABEL: bb.0:
272# GCN-NOT:   S_WAITCNT
273# GCN:       DS_READ_B32
274# GCN-NOT:   S_WAITCNT
275# GCN:       FLAT_STORE_DWORD
276
277name:            load_workgroup_seq_cst
278body:             |
279  bb.0:
280    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
281    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
282    $m0 = S_MOV_B32 -1
283    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
284    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup-one-as") seq_cst (s32) from `i32 addrspace(2)* undef`)
285    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
286    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
287    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
288    S_ENDPGM 0
289
290...
291---
292
293# GCN-LABEL: name: load_agent_unordered
294
295# GCN-LABEL: bb.0:
296# GCN-NOT:   S_WAITCNT
297# GCN:       DS_READ_B32
298# GCN-NOT:   S_WAITCNT
299# GCN:       FLAT_STORE_DWORD
300
301name:            load_agent_unordered
302body:             |
303  bb.0:
304    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
305    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
306    $m0 = S_MOV_B32 -1
307    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
308    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("agent-one-as") unordered (s32) from `i32 addrspace(2)* undef`)
309    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
310    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
311    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
312    S_ENDPGM 0
313
314...
315---
316
317# GCN-LABEL: name: load_agent_monotonic
318
319# GCN-LABEL: bb.0:
320# GCN-NOT:   S_WAITCNT
321# GCN:       DS_READ_B32
322# GCN-NOT:   S_WAITCNT
323# GCN:       FLAT_STORE_DWORD
324
325name:            load_agent_monotonic
326body:             |
327  bb.0:
328    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
329    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
330    $m0 = S_MOV_B32 -1
331    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
332    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("agent-one-as") monotonic (s32) from `i32 addrspace(2)* undef`)
333    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
334    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
335    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
336    S_ENDPGM 0
337
338...
339---
340
341# GCN-LABEL: name: load_agent_acquire
342
343# GCN-LABEL: bb.0:
344# GCN-NOT:   S_WAITCNT
345# GCN:       DS_READ_B32
346# GCN-NOT:   S_WAITCNT
347# GCN:       FLAT_STORE_DWORD
348
349name:            load_agent_acquire
350body:             |
351  bb.0:
352    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
353    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
354    $m0 = S_MOV_B32 -1
355    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
356    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("agent-one-as") acquire (s32) from `i32 addrspace(2)* undef`)
357    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
358    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
359    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
360    S_ENDPGM 0
361
362...
363---
364
365# GCN-LABEL: name: load_agent_seq_cst
366
367# GCN-LABEL: bb.0:
368# GCN-NOT:   S_WAITCNT
369# GCN:       DS_READ_B32
370# GCN-NOT:   S_WAITCNT
371# GCN:       FLAT_STORE_DWORD
372
373name:            load_agent_seq_cst
374body:             |
375  bb.0:
376    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
377    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
378    $m0 = S_MOV_B32 -1
379    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
380    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("agent-one-as") seq_cst (s32) from `i32 addrspace(2)* undef`)
381    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
382    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
383    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
384    S_ENDPGM 0
385
386...
387---
388
389# GCN-LABEL: name: load_system_unordered
390
391# GCN-LABEL: bb.0:
392# GCN-NOT:   S_WAITCNT
393# GCN:       DS_READ_B32
394# GCN-NOT:   S_WAITCNT
395# GCN:       FLAT_STORE_DWORD
396
397name:            load_system_unordered
398body:             |
399  bb.0:
400    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
401    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
402    $m0 = S_MOV_B32 -1
403    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
404    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("one-as") unordered (s32) from `i32 addrspace(2)* undef`)
405    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
406    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
407    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
408    S_ENDPGM 0
409
410...
411---
412
413# GCN-LABEL: name: load_system_monotonic
414
415# GCN-LABEL: bb.0:
416# GCN-NOT:   S_WAITCNT
417# GCN:       DS_READ_B32
418# GCN-NOT:   S_WAITCNT
419# GCN:       FLAT_STORE_DWORD
420
421name:            load_system_monotonic
422body:             |
423  bb.0:
424    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
425    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
426    $m0 = S_MOV_B32 -1
427    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
428    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("one-as") monotonic (s32) from `i32 addrspace(2)* undef`)
429    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
430    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
431    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
432    S_ENDPGM 0
433
434...
435---
436
437# GCN-LABEL: name: load_system_acquire
438
439# GCN-LABEL: bb.0:
440# GCN-NOT:   S_WAITCNT
441# GCN:       DS_READ_B32
442# GCN-NOT:   S_WAITCNT
443# GCN:       FLAT_STORE_DWORD
444
445name:            load_system_acquire
446body:             |
447  bb.0:
448    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
449    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
450    $m0 = S_MOV_B32 -1
451    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
452    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("one-as") acquire (s32) from `i32 addrspace(2)* undef`)
453    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
454    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
455    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
456    S_ENDPGM 0
457
458...
459---
460
461# GCN-LABEL: name: load_system_seq_cst
462
463# GCN-LABEL: bb.0:
464# GCN-NOT:   S_WAITCNT
465# GCN:       DS_READ_B32
466# GCN-NOT:   S_WAITCNT
467# GCN:       FLAT_STORE_DWORD
468
469name:            load_system_seq_cst
470body:             |
471  bb.0:
472    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
473    $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`, align 4, addrspace 4)
474    $m0 = S_MOV_B32 -1
475    $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
476    renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 1, implicit $m0, implicit $exec :: (volatile load syncscope("one-as") seq_cst (s32) from `i32 addrspace(2)* undef`)
477    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
478    $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
479    FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32* undef`)
480    S_ENDPGM 0
481
482...
483---
484
485# GCN-LABEL: name: store_singlethread_unordered
486
487# GCN-LABEL: bb.0:
488# GCN-NOT:   S_WAITCNT
489# GCN:       DS_WRITE_B32
490# GCN-NOT:   S_WAITCNT
491# GCN:       S_ENDPGM 0
492
493name:            store_singlethread_unordered
494body:             |
495  bb.0:
496    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
497    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
498    $m0 = S_MOV_B32 -1
499    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
500    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
501    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") unordered (s32) into `i32 addrspace(2)* undef`)
502    S_ENDPGM 0
503
504...
505---
506
507# GCN-LABEL: name: store_singlethread_monotonic
508
509# GCN-LABEL: bb.0:
510# GCN-NOT:   S_WAITCNT
511# GCN:       DS_WRITE_B32
512# GCN-NOT:   S_WAITCNT
513# GCN:       S_ENDPGM 0
514
515name:            store_singlethread_monotonic
516body:             |
517  bb.0:
518    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
519    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
520    $m0 = S_MOV_B32 -1
521    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
522    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
523    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") monotonic (s32) into `i32 addrspace(2)* undef`)
524    S_ENDPGM 0
525
526...
527---
528
529# GCN-LABEL: name: store_singlethread_release
530
531# GCN-LABEL: bb.0:
532# GCN-NOT:   S_WAITCNT
533# GCN:       DS_WRITE_B32
534# GCN-NOT:   S_WAITCNT
535# GCN:       S_ENDPGM 0
536
537name:            store_singlethread_release
538body:             |
539  bb.0:
540    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
541    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
542    $m0 = S_MOV_B32 -1
543    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
544    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
545    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") release (s32) into `i32 addrspace(2)* undef`)
546    S_ENDPGM 0
547
548...
549---
550
551# GCN-LABEL: name: store_singlethread_seq_cst
552
553# GCN-LABEL: bb.0:
554# GCN-NOT:   S_WAITCNT
555# GCN:       DS_WRITE_B32
556# GCN-NOT:   S_WAITCNT
557# GCN:       S_ENDPGM 0
558
559name:            store_singlethread_seq_cst
560body:             |
561  bb.0:
562    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
563    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
564    $m0 = S_MOV_B32 -1
565    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
566    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
567    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") seq_cst (s32) into `i32 addrspace(2)* undef`)
568    S_ENDPGM 0
569
570...
571---
572
573# GCN-LABEL: name: store_wavefront_unordered
574
575# GCN-LABEL: bb.0:
576# GCN-NOT:   S_WAITCNT
577# GCN:       DS_WRITE_B32
578# GCN-NOT:   S_WAITCNT
579# GCN:       S_ENDPGM 0
580
581name:            store_wavefront_unordered
582body:             |
583  bb.0:
584    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
585    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
586    $m0 = S_MOV_B32 -1
587    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
588    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
589    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront-one-as") unordered (s32) into `i32 addrspace(2)* undef`)
590    S_ENDPGM 0
591
592...
593---
594
595# GCN-LABEL: name: store_wavefront_monotonic
596
597# GCN-LABEL: bb.0:
598# GCN-NOT:   S_WAITCNT
599# GCN:       DS_WRITE_B32
600# GCN-NOT:   S_WAITCNT
601# GCN:       S_ENDPGM 0
602
603name:            store_wavefront_monotonic
604body:             |
605  bb.0:
606    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
607    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
608    $m0 = S_MOV_B32 -1
609    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
610    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
611    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront-one-as") monotonic (s32) into `i32 addrspace(2)* undef`)
612    S_ENDPGM 0
613
614...
615---
616
617# GCN-LABEL: name: store_wavefront_release
618
619# GCN-LABEL: bb.0:
620# GCN-NOT:   S_WAITCNT
621# GCN:       DS_WRITE_B32
622# GCN-NOT:   S_WAITCNT
623# GCN:       S_ENDPGM 0
624
625name:            store_wavefront_release
626body:             |
627  bb.0:
628    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
629    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
630    $m0 = S_MOV_B32 -1
631    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
632    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
633    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront-one-as") release (s32) into `i32 addrspace(2)* undef`)
634    S_ENDPGM 0
635
636...
637---
638
639# GCN-LABEL: name: store_wavefront_seq_cst
640
641# GCN-LABEL: bb.0:
642# GCN-NOT:   S_WAITCNT
643# GCN:       DS_WRITE_B32
644# GCN-NOT:   S_WAITCNT
645# GCN:       S_ENDPGM 0
646
647name:            store_wavefront_seq_cst
648body:             |
649  bb.0:
650    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
651    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
652    $m0 = S_MOV_B32 -1
653    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
654    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
655    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront-one-as") seq_cst (s32) into `i32 addrspace(2)* undef`)
656    S_ENDPGM 0
657
658...
659---
660
661# GCN-LABEL: name: store_workgroup_unordered
662
663# GCN-LABEL: bb.0:
664# GCN-NOT:   S_WAITCNT
665# GCN:       DS_WRITE_B32
666# GCN-NOT:   S_WAITCNT
667# GCN:       S_ENDPGM 0
668
669name:            store_workgroup_unordered
670body:             |
671  bb.0:
672    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
673    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
674    $m0 = S_MOV_B32 -1
675    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
676    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
677    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup-one-as") unordered (s32) into `i32 addrspace(2)* undef`)
678    S_ENDPGM 0
679
680...
681---
682
683# GCN-LABEL: name: store_workgroup_monotonic
684
685# GCN-LABEL: bb.0:
686# GCN-NOT:   S_WAITCNT
687# GCN:       DS_WRITE_B32
688# GCN-NOT:   S_WAITCNT
689# GCN:       S_ENDPGM 0
690
691name:            store_workgroup_monotonic
692body:             |
693  bb.0:
694    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
695    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
696    $m0 = S_MOV_B32 -1
697    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
698    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
699    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup-one-as") monotonic (s32) into `i32 addrspace(2)* undef`)
700    S_ENDPGM 0
701
702...
703---
704
705# GCN-LABEL: name: store_workgroup_release
706
707# GCN-LABEL: bb.0:
708# GCN-NOT:   S_WAITCNT
709# GCN:       DS_WRITE_B32
710# GCN-NOT:   S_WAITCNT
711# GCN:       S_ENDPGM 0
712
713name:            store_workgroup_release
714body:             |
715  bb.0:
716    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
717    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
718    $m0 = S_MOV_B32 -1
719    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
720    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
721    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup-one-as") release (s32) into `i32 addrspace(2)* undef`)
722    S_ENDPGM 0
723
724...
725---
726
727# GCN-LABEL: name: store_workgroup_seq_cst
728
729# GCN-LABEL: bb.0:
730# GCN-NOT:   S_WAITCNT
731# GCN:       DS_WRITE_B32
732# GCN-NOT:   S_WAITCNT
733# GCN:       S_ENDPGM 0
734
735name:            store_workgroup_seq_cst
736body:             |
737  bb.0:
738    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
739    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
740    $m0 = S_MOV_B32 -1
741    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
742    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
743    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup-one-as") seq_cst (s32) into `i32 addrspace(2)* undef`)
744    S_ENDPGM 0
745
746...
747---
748
749# GCN-LABEL: name: store_agent_unordered
750
751# GCN-LABEL: bb.0:
752# GCN-NOT:   S_WAITCNT
753# GCN:       DS_WRITE_B32
754# GCN-NOT:   S_WAITCNT
755# GCN:       S_ENDPGM 0
756
757name:            store_agent_unordered
758body:             |
759  bb.0:
760    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
761    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
762    $m0 = S_MOV_B32 -1
763    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
764    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
765    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("agent-one-as") unordered (s32) into `i32 addrspace(2)* undef`)
766    S_ENDPGM 0
767
768...
769---
770
771# GCN-LABEL: name: store_agent_monotonic
772
773# GCN-LABEL: bb.0:
774# GCN-NOT:   S_WAITCNT
775# GCN:       DS_WRITE_B32
776# GCN-NOT:   S_WAITCNT
777# GCN:       S_ENDPGM 0
778
779name:            store_agent_monotonic
780body:             |
781  bb.0:
782    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
783    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
784    $m0 = S_MOV_B32 -1
785    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
786    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
787    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("agent-one-as") monotonic (s32) into `i32 addrspace(2)* undef`)
788    S_ENDPGM 0
789
790...
791---
792
793# GCN-LABEL: name: store_agent_release
794
795# GCN-LABEL: bb.0:
796# GCN-NOT:   S_WAITCNT
797# GCN:       DS_WRITE_B32
798# GCN-NOT:   S_WAITCNT
799# GCN:       S_ENDPGM 0
800
801name:            store_agent_release
802body:             |
803  bb.0:
804    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
805    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
806    $m0 = S_MOV_B32 -1
807    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
808    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
809    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("agent-one-as") release (s32) into `i32 addrspace(2)* undef`)
810    S_ENDPGM 0
811
812...
813---
814
815# GCN-LABEL: name: store_agent_seq_cst
816
817# GCN-LABEL: bb.0:
818# GCN-NOT:   S_WAITCNT
819# GCN:       DS_WRITE_B32
820# GCN-NOT:   S_WAITCNT
821# GCN:       S_ENDPGM 0
822
823name:            store_agent_seq_cst
824body:             |
825  bb.0:
826    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
827    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
828    $m0 = S_MOV_B32 -1
829    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
830    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
831    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("agent-one-as") seq_cst (s32) into `i32 addrspace(2)* undef`)
832    S_ENDPGM 0
833
834...
835---
836
837# GCN-LABEL: name: store_system_unordered
838
839# GCN-LABEL: bb.0:
840# GCN-NOT:   S_WAITCNT
841# GCN:       DS_WRITE_B32
842# GCN-NOT:   S_WAITCNT
843# GCN:       S_ENDPGM 0
844
845name:            store_system_unordered
846body:             |
847  bb.0:
848    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
849    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
850    $m0 = S_MOV_B32 -1
851    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
852    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
853    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store unordered (s32) into `i32 addrspace(2)* undef`)
854    S_ENDPGM 0
855
856...
857---
858
859# GCN-LABEL: name: store_system_monotonic
860
861# GCN-LABEL: bb.0:
862# GCN-NOT:   S_WAITCNT
863# GCN:       DS_WRITE_B32
864# GCN-NOT:   S_WAITCNT
865# GCN:       S_ENDPGM 0
866
867name:            store_system_monotonic
868body:             |
869  bb.0:
870    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
871    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
872    $m0 = S_MOV_B32 -1
873    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
874    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
875    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store monotonic (s32) into `i32 addrspace(2)* undef`)
876    S_ENDPGM 0
877
878...
879---
880
881# GCN-LABEL: name: store_system_release
882
883# GCN-LABEL: bb.0:
884# GCN-NOT:   S_WAITCNT
885# GCN:       DS_WRITE_B32
886# GCN-NOT:   S_WAITCNT
887# GCN:       S_ENDPGM 0
888
889name:            store_system_release
890body:             |
891  bb.0:
892    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
893    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
894    $m0 = S_MOV_B32 -1
895    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
896    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
897    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("one-as") release (s32) into `i32 addrspace(2)* undef`)
898    S_ENDPGM 0
899
900...
901---
902
903# GCN-LABEL: name: store_system_seq_cst
904
905# GCN-LABEL: bb.0:
906# GCN-NOT:   S_WAITCNT
907# GCN:       DS_WRITE_B32
908# GCN-NOT:   S_WAITCNT
909# GCN:       S_ENDPGM 0
910
911name:            store_system_seq_cst
912body:             |
913  bb.0:
914    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
915    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
916    $m0 = S_MOV_B32 -1
917    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
918    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
919    DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("one-as") seq_cst (s32) into `i32 addrspace(2)* undef`)
920    S_ENDPGM 0
921
922...
923---
924
925# GCN-LABEL: name: atomicrmw_singlethread_unordered
926
927# GCN-LABEL: bb.0:
928# GCN-NOT:   S_WAITCNT
929# GCN:       DS_WRXCHG_RTN_B32
930# GCN-NOT:   S_WAITCNT
931# GCN:       S_ENDPGM 0
932
933name:            atomicrmw_singlethread_unordered
934body:             |
935  bb.0:
936    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
937    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
938    $m0 = S_MOV_B32 -1
939    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
940    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
941    $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") unordered (s32) into `i32 addrspace(2)* undef`)
942    S_ENDPGM 0
943
944...
945---
946
947# GCN-LABEL: name: atomicrmw_singlethread_monotonic
948
949# GCN-LABEL: bb.0:
950# GCN-NOT:   S_WAITCNT
951# GCN:       DS_WRXCHG_RTN_B32
952# GCN-NOT:   S_WAITCNT
953# GCN:       S_ENDPGM 0
954
955name:            atomicrmw_singlethread_monotonic
956body:             |
957  bb.0:
958    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
959    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
960    $m0 = S_MOV_B32 -1
961    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
962    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
963    $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") monotonic (s32) into `i32 addrspace(2)* undef`)
964    S_ENDPGM 0
965
966...
967---
968
969# GCN-LABEL: name: atomicrmw_singlethread_acquire
970
971# GCN-LABEL: bb.0:
972# GCN-NOT:   S_WAITCNT
973# GCN:       DS_WRXCHG_RTN_B32
974# GCN-NOT:   S_WAITCNT
975# GCN:       S_ENDPGM 0
976
977name:            atomicrmw_singlethread_acquire
978body:             |
979  bb.0:
980    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
981    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
982    $m0 = S_MOV_B32 -1
983    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
984    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
985    $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") acquire (s32) into `i32 addrspace(2)* undef`)
986    S_ENDPGM 0
987
988...
989---
990
991# GCN-LABEL: name: atomicrmw_singlethread_release
992
993# GCN-LABEL: bb.0:
994# GCN-NOT:   S_WAITCNT
995# GCN:       DS_WRXCHG_RTN_B32
996# GCN-NOT:   S_WAITCNT
997# GCN:       S_ENDPGM 0
998
999name:            atomicrmw_singlethread_release
1000body:             |
1001  bb.0:
1002    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
1003    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
1004    $m0 = S_MOV_B32 -1
1005    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
1006    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
1007    $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") release (s32) into `i32 addrspace(2)* undef`)
1008    S_ENDPGM 0
1009
1010...
1011---
1012
1013# GCN-LABEL: name: atomicrmw_singlethread_acq_rel
1014
1015# GCN-LABEL: bb.0:
1016# GCN-NOT:   S_WAITCNT
1017# GCN:       DS_WRXCHG_RTN_B32
1018# GCN-NOT:   S_WAITCNT
1019# GCN:       S_ENDPGM 0
1020
1021name:            atomicrmw_singlethread_acq_rel
1022body:             |
1023  bb.0:
1024    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
1025    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
1026    $m0 = S_MOV_B32 -1
1027    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
1028    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
1029    $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") acq_rel (s32) into `i32 addrspace(2)* undef`)
1030    S_ENDPGM 0
1031
1032...
1033---
1034
1035# GCN-LABEL: name: atomicrmw_singlethread_seq_cst
1036
1037# GCN-LABEL: bb.0:
1038# GCN-NOT:   S_WAITCNT
1039# GCN:       DS_WRXCHG_RTN_B32
1040# GCN-NOT:   S_WAITCNT
1041# GCN:       S_ENDPGM 0
1042
1043name:            atomicrmw_singlethread_seq_cst
1044body:             |
1045  bb.0:
1046    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, addrspace 4)
1047    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`, align 8, addrspace 4)
1048    $m0 = S_MOV_B32 -1
1049    $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
1050    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
1051    $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 1, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread-one-as") seq_cst (s32) into `i32 addrspace(2)* undef`)
1052    S_ENDPGM 0
1053
1054...
1055