[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / memory-legalizer-region.mir
blob3452d4148cb97a8dc6d30ff00ab6071f5c4c467c
1 # RUN: llc -march=amdgcn -mcpu=gfx803 -run-pass si-memory-legalizer %s -o - | FileCheck -check-prefix=GCN %s
3 ---
5 # GCN-LABEL: name: load_singlethread_unordered
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
13 name:            load_singlethread_unordered
14 body:             |
15   bb.0:
16     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
17     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
24     S_ENDPGM 0
26 ...
27 ---
29 # GCN-LABEL: name: load_singlethread_monotonic
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
37 name:            load_singlethread_monotonic
38 body:             |
39   bb.0:
40     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
41     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
48     S_ENDPGM 0
50 ...
51 ---
53 # GCN-LABEL: name: load_singlethread_acquire
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
61 name:            load_singlethread_acquire
62 body:             |
63   bb.0:
64     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
65     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
72     S_ENDPGM 0
74 ...
75 ---
77 # GCN-LABEL: name: load_singlethread_seq_cst
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
85 name:            load_singlethread_seq_cst
86 body:             |
87   bb.0:
88     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
89     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
96     S_ENDPGM 0
98 ...
99 ---
101 # GCN-LABEL: name: load_wavefront_unordered
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
109 name:            load_wavefront_unordered
110 body:             |
111   bb.0:
112     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
113     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
120     S_ENDPGM 0
125 # GCN-LABEL: name: load_wavefront_monotonic
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
133 name:            load_wavefront_monotonic
134 body:             |
135   bb.0:
136     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
137     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
144     S_ENDPGM 0
149 # GCN-LABEL: name: load_wavefront_acquire
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
157 name:            load_wavefront_acquire
158 body:             |
159   bb.0:
160     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
161     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
168     S_ENDPGM 0
173 # GCN-LABEL: name: load_wavefront_seq_cst
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
181 name:            load_wavefront_seq_cst
182 body:             |
183   bb.0:
184     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
185     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
192     S_ENDPGM 0
197 # GCN-LABEL: name: load_workgroup_unordered
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
205 name:            load_workgroup_unordered
206 body:             |
207   bb.0:
208     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
209     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
216     S_ENDPGM 0
221 # GCN-LABEL: name: load_workgroup_monotonic
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
229 name:            load_workgroup_monotonic
230 body:             |
231   bb.0:
232     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
233     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
240     S_ENDPGM 0
245 # GCN-LABEL: name: load_workgroup_acquire
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
253 name:            load_workgroup_acquire
254 body:             |
255   bb.0:
256     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
257     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
264     S_ENDPGM 0
269 # GCN-LABEL: name: load_workgroup_seq_cst
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
277 name:            load_workgroup_seq_cst
278 body:             |
279   bb.0:
280     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
281     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
288     S_ENDPGM 0
293 # GCN-LABEL: name: load_agent_unordered
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
301 name:            load_agent_unordered
302 body:             |
303   bb.0:
304     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
305     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
312     S_ENDPGM 0
317 # GCN-LABEL: name: load_agent_monotonic
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
325 name:            load_agent_monotonic
326 body:             |
327   bb.0:
328     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
329     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
336     S_ENDPGM 0
341 # GCN-LABEL: name: load_agent_acquire
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
349 name:            load_agent_acquire
350 body:             |
351   bb.0:
352     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
353     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
360     S_ENDPGM 0
365 # GCN-LABEL: name: load_agent_seq_cst
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
373 name:            load_agent_seq_cst
374 body:             |
375   bb.0:
376     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
377     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
384     S_ENDPGM 0
389 # GCN-LABEL: name: load_system_unordered
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
397 name:            load_system_unordered
398 body:             |
399   bb.0:
400     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
401     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
408     S_ENDPGM 0
413 # GCN-LABEL: name: load_system_monotonic
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
421 name:            load_system_monotonic
422 body:             |
423   bb.0:
424     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
425     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
432     S_ENDPGM 0
437 # GCN-LABEL: name: load_system_acquire
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
445 name:            load_system_acquire
446 body:             |
447   bb.0:
448     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
449     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
456     S_ENDPGM 0
461 # GCN-LABEL: name: load_system_seq_cst
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
469 name:            load_system_seq_cst
470 body:             |
471   bb.0:
472     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
473     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0, 0 :: (dereferenceable invariant load 8 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 4 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, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
480     S_ENDPGM 0
485 # GCN-LABEL: name: store_singlethread_unordered
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
493 name:            store_singlethread_unordered
494 body:             |
495   bb.0:
496     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
497     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
502     S_ENDPGM 0
507 # GCN-LABEL: name: store_singlethread_monotonic
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
515 name:            store_singlethread_monotonic
516 body:             |
517   bb.0:
518     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
519     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
524     S_ENDPGM 0
529 # GCN-LABEL: name: store_singlethread_release
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
537 name:            store_singlethread_release
538 body:             |
539   bb.0:
540     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
541     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
546     S_ENDPGM 0
551 # GCN-LABEL: name: store_singlethread_seq_cst
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
559 name:            store_singlethread_seq_cst
560 body:             |
561   bb.0:
562     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
563     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
568     S_ENDPGM 0
573 # GCN-LABEL: name: store_wavefront_unordered
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
581 name:            store_wavefront_unordered
582 body:             |
583   bb.0:
584     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
585     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
590     S_ENDPGM 0
595 # GCN-LABEL: name: store_wavefront_monotonic
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
603 name:            store_wavefront_monotonic
604 body:             |
605   bb.0:
606     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
607     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
612     S_ENDPGM 0
617 # GCN-LABEL: name: store_wavefront_release
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
625 name:            store_wavefront_release
626 body:             |
627   bb.0:
628     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
629     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
634     S_ENDPGM 0
639 # GCN-LABEL: name: store_wavefront_seq_cst
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
647 name:            store_wavefront_seq_cst
648 body:             |
649   bb.0:
650     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
651     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
656     S_ENDPGM 0
661 # GCN-LABEL: name: store_workgroup_unordered
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
669 name:            store_workgroup_unordered
670 body:             |
671   bb.0:
672     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
673     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
678     S_ENDPGM 0
683 # GCN-LABEL: name: store_workgroup_monotonic
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
691 name:            store_workgroup_monotonic
692 body:             |
693   bb.0:
694     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
695     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
700     S_ENDPGM 0
705 # GCN-LABEL: name: store_workgroup_release
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
713 name:            store_workgroup_release
714 body:             |
715   bb.0:
716     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
717     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
722     S_ENDPGM 0
727 # GCN-LABEL: name: store_workgroup_seq_cst
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
735 name:            store_workgroup_seq_cst
736 body:             |
737   bb.0:
738     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
739     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
744     S_ENDPGM 0
749 # GCN-LABEL: name: store_agent_unordered
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
757 name:            store_agent_unordered
758 body:             |
759   bb.0:
760     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
761     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
766     S_ENDPGM 0
771 # GCN-LABEL: name: store_agent_monotonic
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
779 name:            store_agent_monotonic
780 body:             |
781   bb.0:
782     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
783     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
788     S_ENDPGM 0
793 # GCN-LABEL: name: store_agent_release
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
801 name:            store_agent_release
802 body:             |
803   bb.0:
804     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
805     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
810     S_ENDPGM 0
815 # GCN-LABEL: name: store_agent_seq_cst
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
823 name:            store_agent_seq_cst
824 body:             |
825   bb.0:
826     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
827     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
832     S_ENDPGM 0
837 # GCN-LABEL: name: store_system_unordered
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
845 name:            store_system_unordered
846 body:             |
847   bb.0:
848     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
849     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
854     S_ENDPGM 0
859 # GCN-LABEL: name: store_system_monotonic
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
867 name:            store_system_monotonic
868 body:             |
869   bb.0:
870     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
871     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
876     S_ENDPGM 0
881 # GCN-LABEL: name: store_system_release
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
889 name:            store_system_release
890 body:             |
891   bb.0:
892     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
893     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
898     S_ENDPGM 0
903 # GCN-LABEL: name: store_system_seq_cst
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
911 name:            store_system_seq_cst
912 body:             |
913   bb.0:
914     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
915     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
920     S_ENDPGM 0
925 # GCN-LABEL: name: atomicrmw_singlethread_unordered
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
933 name:            atomicrmw_singlethread_unordered
934 body:             |
935   bb.0:
936     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
937     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
942     S_ENDPGM 0
947 # GCN-LABEL: name: atomicrmw_singlethread_monotonic
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
955 name:            atomicrmw_singlethread_monotonic
956 body:             |
957   bb.0:
958     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
959     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
964     S_ENDPGM 0
969 # GCN-LABEL: name: atomicrmw_singlethread_acquire
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
977 name:            atomicrmw_singlethread_acquire
978 body:             |
979   bb.0:
980     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
981     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
986     S_ENDPGM 0
991 # GCN-LABEL: name: atomicrmw_singlethread_release
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
999 name:            atomicrmw_singlethread_release
1000 body:             |
1001   bb.0:
1002     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
1003     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
1008     S_ENDPGM 0
1013 # GCN-LABEL: name: atomicrmw_singlethread_acq_rel
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
1021 name:            atomicrmw_singlethread_acq_rel
1022 body:             |
1023   bb.0:
1024     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
1025     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
1030     S_ENDPGM 0
1035 # GCN-LABEL: name: atomicrmw_singlethread_seq_cst
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
1043 name:            atomicrmw_singlethread_seq_cst
1044 body:             |
1045   bb.0:
1046     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
1047     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0, 0 :: (dereferenceable invariant load 4 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 4 into `i32 addrspace(2)* undef`)
1052     S_ENDPGM 0