[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / buffer-fat-pointer-atomicrmw-fadd.ll
blob0ea73ad4c5019a62ff86ebe5c6789f387deda074
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx1200 < %s | FileCheck -check-prefix=GFX12 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx940 < %s | FileCheck -check-prefix=GFX940 %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11 %s
5 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx1010 < %s | FileCheck -check-prefix=GFX10 %s
6 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx90a < %s | FileCheck -check-prefix=GFX90A %s
7 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=gfx908 < %s | FileCheck -check-prefix=GFX908 %s
8 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=tonga < %s | FileCheck -check-prefix=GFX8 %s
9 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=hawaii < %s | FileCheck -check-prefix=GFX7 %s
10 ; RUN: llc -mtriple=amdgcn-amd-amdpal -mcpu=tahiti < %s | FileCheck -check-prefix=GFX6 %s
12 ; --------------------------------------------------------------------
13 ; float
14 ; --------------------------------------------------------------------
16 define float @buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode(ptr addrspace(7) inreg %ptr, float %val) #0 {
17 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
18 ; GFX12:       ; %bb.0:
19 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
20 ; GFX12-NEXT:    s_wait_expcnt 0x0
21 ; GFX12-NEXT:    s_wait_samplecnt 0x0
22 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
23 ; GFX12-NEXT:    s_wait_kmcnt 0x0
24 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
25 ; GFX12-NEXT:    s_wait_storecnt 0x0
26 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
27 ; GFX12-NEXT:    s_wait_loadcnt 0x0
28 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
29 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
31 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
32 ; GFX940:       ; %bb.0:
33 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
35 ; GFX940-NEXT:    buffer_wbl2 sc1
36 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 sc0
37 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
38 ; GFX940-NEXT:    buffer_inv sc1
39 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
41 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
42 ; GFX11:       ; %bb.0:
43 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
45 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
46 ; GFX11-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 glc
47 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
48 ; GFX11-NEXT:    buffer_gl1_inv
49 ; GFX11-NEXT:    buffer_gl0_inv
50 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
52 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
53 ; GFX10:       ; %bb.0:
54 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
55 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
56 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
57 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
58 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
59 ; GFX10-NEXT:    s_mov_b32 s4, 0
60 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
61 ; GFX10-NEXT:  .LBB0_1: ; %atomicrmw.start
62 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
63 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
64 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
65 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
66 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v2
67 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
68 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
69 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
70 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
71 ; GFX10-NEXT:    buffer_gl1_inv
72 ; GFX10-NEXT:    buffer_gl0_inv
73 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
74 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
75 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
76 ; GFX10-NEXT:    s_cbranch_execnz .LBB0_1
77 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
78 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
79 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
81 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
82 ; GFX90A:       ; %bb.0:
83 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
84 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
85 ; GFX90A-NEXT:    buffer_atomic_add_f32 v0, v1, s[16:19], 0 offen offset:1024 glc
86 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
87 ; GFX90A-NEXT:    buffer_wbinvl1
88 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
90 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
91 ; GFX908:       ; %bb.0:
92 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
93 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
94 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
95 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
96 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
97 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
98 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
99 ; GFX908-NEXT:  .LBB0_1: ; %atomicrmw.start
100 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
101 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
102 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
103 ; GFX908-NEXT:    v_add_f32_e32 v4, v5, v2
104 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
105 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
106 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
107 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
108 ; GFX908-NEXT:    buffer_wbinvl1
109 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
110 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
111 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
112 ; GFX908-NEXT:    s_cbranch_execnz .LBB0_1
113 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
114 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
115 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
117 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
118 ; GFX8:       ; %bb.0:
119 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
120 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
121 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
122 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
123 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
124 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
125 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
126 ; GFX8-NEXT:  .LBB0_1: ; %atomicrmw.start
127 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
128 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
129 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
130 ; GFX8-NEXT:    v_add_f32_e32 v4, v5, v2
131 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
132 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
133 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
134 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
135 ; GFX8-NEXT:    buffer_wbinvl1
136 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
137 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
138 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
139 ; GFX8-NEXT:    s_cbranch_execnz .LBB0_1
140 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
141 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
142 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
144 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
145 ; GFX7:       ; %bb.0:
146 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
147 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
148 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
149 ; GFX7-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
150 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
151 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
152 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
153 ; GFX7-NEXT:  .LBB0_1: ; %atomicrmw.start
154 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
155 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
156 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
157 ; GFX7-NEXT:    v_add_f32_e32 v4, v5, v2
158 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
159 ; GFX7-NEXT:    v_mov_b32_e32 v1, v5
160 ; GFX7-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
161 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
162 ; GFX7-NEXT:    buffer_wbinvl1
163 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
164 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
165 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
166 ; GFX7-NEXT:    s_cbranch_execnz .LBB0_1
167 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
168 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
169 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
171 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
172 ; GFX6:       ; %bb.0:
173 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
174 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
175 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
176 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
177 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
178 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
179 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
180 ; GFX6-NEXT:  .LBB0_1: ; %atomicrmw.start
181 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
182 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
183 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
184 ; GFX6-NEXT:    v_add_f32_e32 v4, v5, v2
185 ; GFX6-NEXT:    s_waitcnt expcnt(0)
186 ; GFX6-NEXT:    v_mov_b32_e32 v0, v4
187 ; GFX6-NEXT:    v_mov_b32_e32 v1, v5
188 ; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
189 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
190 ; GFX6-NEXT:    buffer_wbinvl1
191 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
192 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
193 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
194 ; GFX6-NEXT:    s_cbranch_execnz .LBB0_1
195 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
196 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
197 ; GFX6-NEXT:    s_waitcnt expcnt(0)
198 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
199   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
200   %result = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !0
201   ret float %result
204 define void @buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode(ptr addrspace(7) inreg %ptr, float %val) #0 {
205 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
206 ; GFX12:       ; %bb.0:
207 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
208 ; GFX12-NEXT:    s_wait_expcnt 0x0
209 ; GFX12-NEXT:    s_wait_samplecnt 0x0
210 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
211 ; GFX12-NEXT:    s_wait_kmcnt 0x0
212 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
213 ; GFX12-NEXT:    s_wait_storecnt 0x0
214 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024
215 ; GFX12-NEXT:    s_wait_storecnt 0x0
216 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
217 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
219 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
220 ; GFX940:       ; %bb.0:
221 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
222 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
223 ; GFX940-NEXT:    buffer_wbl2 sc1
224 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024
225 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
226 ; GFX940-NEXT:    buffer_inv sc1
227 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
229 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
230 ; GFX11:       ; %bb.0:
231 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
232 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
233 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
234 ; GFX11-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024
235 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
236 ; GFX11-NEXT:    buffer_gl1_inv
237 ; GFX11-NEXT:    buffer_gl0_inv
238 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
240 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
241 ; GFX10:       ; %bb.0:
242 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
243 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
244 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
245 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
246 ; GFX10-NEXT:    s_mov_b32 s4, 0
247 ; GFX10-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
248 ; GFX10-NEXT:  .LBB1_1: ; %atomicrmw.start
249 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
250 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
251 ; GFX10-NEXT:    v_add_f32_e32 v1, v2, v0
252 ; GFX10-NEXT:    v_mov_b32_e32 v5, v2
253 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
254 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
255 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
256 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
257 ; GFX10-NEXT:    buffer_gl1_inv
258 ; GFX10-NEXT:    buffer_gl0_inv
259 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
260 ; GFX10-NEXT:    v_mov_b32_e32 v2, v4
261 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
262 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
263 ; GFX10-NEXT:    s_cbranch_execnz .LBB1_1
264 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
265 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
266 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
268 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
269 ; GFX90A:       ; %bb.0:
270 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
271 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
272 ; GFX90A-NEXT:    buffer_atomic_add_f32 v0, v1, s[16:19], 0 offen offset:1024
273 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
274 ; GFX90A-NEXT:    buffer_wbinvl1
275 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
277 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
278 ; GFX908:       ; %bb.0:
279 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
280 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
281 ; GFX908-NEXT:    buffer_atomic_add_f32 v0, v1, s[16:19], 0 offen offset:1024
282 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
283 ; GFX908-NEXT:    buffer_wbinvl1
284 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
286 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
287 ; GFX8:       ; %bb.0:
288 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
289 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
290 ; GFX8-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
291 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
292 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
293 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
294 ; GFX8-NEXT:  .LBB1_1: ; %atomicrmw.start
295 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
296 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
297 ; GFX8-NEXT:    v_add_f32_e32 v1, v2, v0
298 ; GFX8-NEXT:    v_mov_b32_e32 v5, v2
299 ; GFX8-NEXT:    v_mov_b32_e32 v4, v1
300 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
301 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
302 ; GFX8-NEXT:    buffer_wbinvl1
303 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
304 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
305 ; GFX8-NEXT:    v_mov_b32_e32 v2, v4
306 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
307 ; GFX8-NEXT:    s_cbranch_execnz .LBB1_1
308 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
309 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
310 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
312 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
313 ; GFX7:       ; %bb.0:
314 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
315 ; GFX7-NEXT:    v_mov_b32_e32 v1, s20
316 ; GFX7-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
317 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
318 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
319 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
320 ; GFX7-NEXT:  .LBB1_1: ; %atomicrmw.start
321 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
322 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
323 ; GFX7-NEXT:    v_add_f32_e32 v1, v2, v0
324 ; GFX7-NEXT:    v_mov_b32_e32 v5, v2
325 ; GFX7-NEXT:    v_mov_b32_e32 v4, v1
326 ; GFX7-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
327 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
328 ; GFX7-NEXT:    buffer_wbinvl1
329 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
330 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
331 ; GFX7-NEXT:    v_mov_b32_e32 v2, v4
332 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
333 ; GFX7-NEXT:    s_cbranch_execnz .LBB1_1
334 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
335 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
336 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
338 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
339 ; GFX6:       ; %bb.0:
340 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
341 ; GFX6-NEXT:    v_mov_b32_e32 v1, s20
342 ; GFX6-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
343 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
344 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
345 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
346 ; GFX6-NEXT:  .LBB1_1: ; %atomicrmw.start
347 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
348 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
349 ; GFX6-NEXT:    v_add_f32_e32 v1, v2, v0
350 ; GFX6-NEXT:    s_waitcnt expcnt(0)
351 ; GFX6-NEXT:    v_mov_b32_e32 v5, v2
352 ; GFX6-NEXT:    v_mov_b32_e32 v4, v1
353 ; GFX6-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
354 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
355 ; GFX6-NEXT:    buffer_wbinvl1
356 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
357 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
358 ; GFX6-NEXT:    v_mov_b32_e32 v2, v4
359 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
360 ; GFX6-NEXT:    s_cbranch_execnz .LBB1_1
361 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
362 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
363 ; GFX6-NEXT:    s_waitcnt expcnt(0)
364 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
365   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
366   %unused = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !0
367   ret void
370 define float @buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode(ptr addrspace(7) %ptr, float %val) #0 {
371 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
372 ; GFX12:       ; %bb.0:
373 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
374 ; GFX12-NEXT:    s_wait_expcnt 0x0
375 ; GFX12-NEXT:    s_wait_samplecnt 0x0
376 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
377 ; GFX12-NEXT:    s_wait_kmcnt 0x0
378 ; GFX12-NEXT:    s_mov_b32 s1, exec_lo
379 ; GFX12-NEXT:    s_wait_storecnt 0x0
380 ; GFX12-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
381 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v0
382 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v1
383 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v2
384 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v3
385 ; GFX12-NEXT:    s_wait_alu 0xf1ff
386 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
387 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
388 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
389 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
390 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
391 ; GFX12-NEXT:    s_wait_alu 0xfffe
392 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
393 ; GFX12-NEXT:    s_wait_loadcnt 0x0
394 ; GFX12-NEXT:    buffer_atomic_add_f32 v5, v4, s[4:7], null offen offset:1024 th:TH_ATOMIC_RETURN
395 ; GFX12-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
396 ; GFX12-NEXT:    ; implicit-def: $vgpr4
397 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
398 ; GFX12-NEXT:    s_cbranch_execnz .LBB2_1
399 ; GFX12-NEXT:  ; %bb.2:
400 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
401 ; GFX12-NEXT:    s_wait_loadcnt 0x0
402 ; GFX12-NEXT:    v_mov_b32_e32 v0, v5
403 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
404 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
406 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
407 ; GFX940:       ; %bb.0:
408 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
409 ; GFX940-NEXT:    s_mov_b64 s[2:3], exec
410 ; GFX940-NEXT:    buffer_wbl2 sc1
411 ; GFX940-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
412 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
413 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
414 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
415 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
416 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
417 ; GFX940-NEXT:    s_nop 0
418 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
419 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
420 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
421 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
422 ; GFX940-NEXT:    buffer_atomic_add_f32 v5, v4, s[4:7], 0 offen offset:1024 sc0
423 ; GFX940-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
424 ; GFX940-NEXT:    ; implicit-def: $vgpr4
425 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
426 ; GFX940-NEXT:    s_cbranch_execnz .LBB2_1
427 ; GFX940-NEXT:  ; %bb.2:
428 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
429 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
430 ; GFX940-NEXT:    v_mov_b32_e32 v0, v5
431 ; GFX940-NEXT:    buffer_inv sc1
432 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
434 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
435 ; GFX11:       ; %bb.0:
436 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
437 ; GFX11-NEXT:    s_mov_b32 s1, exec_lo
438 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
439 ; GFX11-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
440 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
441 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
442 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
443 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
444 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
445 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
446 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
447 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
448 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
449 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
450 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
451 ; GFX11-NEXT:    buffer_atomic_add_f32 v5, v4, s[4:7], 0 offen offset:1024 glc
452 ; GFX11-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
453 ; GFX11-NEXT:    ; implicit-def: $vgpr4
454 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
455 ; GFX11-NEXT:    s_cbranch_execnz .LBB2_1
456 ; GFX11-NEXT:  ; %bb.2:
457 ; GFX11-NEXT:    s_mov_b32 exec_lo, s1
458 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
459 ; GFX11-NEXT:    v_mov_b32_e32 v0, v5
460 ; GFX11-NEXT:    buffer_gl1_inv
461 ; GFX11-NEXT:    buffer_gl0_inv
462 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
464 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
465 ; GFX10:       ; %bb.0:
466 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
467 ; GFX10-NEXT:    v_add_nc_u32_e32 v9, 0x400, v4
468 ; GFX10-NEXT:    s_mov_b32 s5, 0
469 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
470 ; GFX10-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
471 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
472 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
473 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
474 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
475 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
476 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
477 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
478 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
479 ; GFX10-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
480 ; GFX10-NEXT:    ; implicit-def: $vgpr4
481 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
482 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
483 ; GFX10-NEXT:    s_cbranch_execnz .LBB2_1
484 ; GFX10-NEXT:  ; %bb.2:
485 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
486 ; GFX10-NEXT:  .LBB2_3: ; %atomicrmw.start
487 ; GFX10-NEXT:    ; =>This Loop Header: Depth=1
488 ; GFX10-NEXT:    ; Child Loop BB2_4 Depth 2
489 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
490 ; GFX10-NEXT:    v_add_f32_e32 v7, v8, v5
491 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
492 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
493 ; GFX10-NEXT:    v_mov_b32_e32 v6, v7
494 ; GFX10-NEXT:    v_mov_b32_e32 v7, v8
495 ; GFX10-NEXT:  .LBB2_4: ; Parent Loop BB2_3 Depth=1
496 ; GFX10-NEXT:    ; => This Inner Loop Header: Depth=2
497 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
498 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
499 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
500 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
501 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
502 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
503 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
504 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
505 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
506 ; GFX10-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
507 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
508 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
509 ; GFX10-NEXT:    s_cbranch_execnz .LBB2_4
510 ; GFX10-NEXT:  ; %bb.5: ; in Loop: Header=BB2_3 Depth=1
511 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
512 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
513 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v6, v8
514 ; GFX10-NEXT:    v_mov_b32_e32 v8, v6
515 ; GFX10-NEXT:    buffer_gl1_inv
516 ; GFX10-NEXT:    buffer_gl0_inv
517 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
518 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
519 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
520 ; GFX10-NEXT:    s_cbranch_execnz .LBB2_3
521 ; GFX10-NEXT:  ; %bb.6: ; %atomicrmw.end
522 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
523 ; GFX10-NEXT:    v_mov_b32_e32 v0, v6
524 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
526 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
527 ; GFX90A:       ; %bb.0:
528 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
529 ; GFX90A-NEXT:    s_mov_b64 s[6:7], exec
530 ; GFX90A-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
531 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
532 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
533 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
534 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
535 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
536 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
537 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
538 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
539 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
540 ; GFX90A-NEXT:    buffer_atomic_add_f32 v5, v4, s[8:11], 0 offen offset:1024 glc
541 ; GFX90A-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
542 ; GFX90A-NEXT:    ; implicit-def: $vgpr4
543 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
544 ; GFX90A-NEXT:    s_cbranch_execnz .LBB2_1
545 ; GFX90A-NEXT:  ; %bb.2:
546 ; GFX90A-NEXT:    s_mov_b64 exec, s[6:7]
547 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
548 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v5
549 ; GFX90A-NEXT:    buffer_wbinvl1
550 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
552 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
553 ; GFX908:       ; %bb.0:
554 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
555 ; GFX908-NEXT:    v_add_u32_e32 v9, 0x400, v4
556 ; GFX908-NEXT:    s_mov_b64 s[6:7], exec
557 ; GFX908-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
558 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
559 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
560 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
561 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
562 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
563 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
564 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
565 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
566 ; GFX908-NEXT:    s_nop 0
567 ; GFX908-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
568 ; GFX908-NEXT:    ; implicit-def: $vgpr4
569 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
570 ; GFX908-NEXT:    s_cbranch_execnz .LBB2_1
571 ; GFX908-NEXT:  ; %bb.2:
572 ; GFX908-NEXT:    s_mov_b64 exec, s[6:7]
573 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
574 ; GFX908-NEXT:  .LBB2_3: ; %atomicrmw.start
575 ; GFX908-NEXT:    ; =>This Loop Header: Depth=1
576 ; GFX908-NEXT:    ; Child Loop BB2_4 Depth 2
577 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
578 ; GFX908-NEXT:    v_add_f32_e32 v7, v8, v5
579 ; GFX908-NEXT:    v_mov_b32_e32 v6, v7
580 ; GFX908-NEXT:    s_mov_b64 s[12:13], exec
581 ; GFX908-NEXT:    v_mov_b32_e32 v7, v8
582 ; GFX908-NEXT:  .LBB2_4: ; Parent Loop BB2_3 Depth=1
583 ; GFX908-NEXT:    ; => This Inner Loop Header: Depth=2
584 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
585 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
586 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
587 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
588 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
589 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
590 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
591 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
592 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
593 ; GFX908-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
594 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
595 ; GFX908-NEXT:    s_cbranch_execnz .LBB2_4
596 ; GFX908-NEXT:  ; %bb.5: ; in Loop: Header=BB2_3 Depth=1
597 ; GFX908-NEXT:    s_mov_b64 exec, s[12:13]
598 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
599 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v8
600 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
601 ; GFX908-NEXT:    v_mov_b32_e32 v8, v6
602 ; GFX908-NEXT:    buffer_wbinvl1
603 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
604 ; GFX908-NEXT:    s_cbranch_execnz .LBB2_3
605 ; GFX908-NEXT:  ; %bb.6: ; %atomicrmw.end
606 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
607 ; GFX908-NEXT:    v_mov_b32_e32 v0, v6
608 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
610 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
611 ; GFX8:       ; %bb.0:
612 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
613 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x400, v4
614 ; GFX8-NEXT:    s_mov_b64 s[6:7], exec
615 ; GFX8-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
616 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
617 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
618 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
619 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
620 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
621 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
622 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
623 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
624 ; GFX8-NEXT:    s_nop 0
625 ; GFX8-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
626 ; GFX8-NEXT:    ; implicit-def: $vgpr4
627 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
628 ; GFX8-NEXT:    s_cbranch_execnz .LBB2_1
629 ; GFX8-NEXT:  ; %bb.2:
630 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
631 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
632 ; GFX8-NEXT:  .LBB2_3: ; %atomicrmw.start
633 ; GFX8-NEXT:    ; =>This Loop Header: Depth=1
634 ; GFX8-NEXT:    ; Child Loop BB2_4 Depth 2
635 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
636 ; GFX8-NEXT:    v_add_f32_e32 v7, v8, v5
637 ; GFX8-NEXT:    v_mov_b32_e32 v6, v7
638 ; GFX8-NEXT:    s_mov_b64 s[12:13], exec
639 ; GFX8-NEXT:    v_mov_b32_e32 v7, v8
640 ; GFX8-NEXT:  .LBB2_4: ; Parent Loop BB2_3 Depth=1
641 ; GFX8-NEXT:    ; => This Inner Loop Header: Depth=2
642 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
643 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
644 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
645 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
646 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
647 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
648 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
649 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
650 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
651 ; GFX8-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
652 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
653 ; GFX8-NEXT:    s_cbranch_execnz .LBB2_4
654 ; GFX8-NEXT:  ; %bb.5: ; in Loop: Header=BB2_3 Depth=1
655 ; GFX8-NEXT:    s_mov_b64 exec, s[12:13]
656 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
657 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v8
658 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
659 ; GFX8-NEXT:    v_mov_b32_e32 v8, v6
660 ; GFX8-NEXT:    buffer_wbinvl1
661 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
662 ; GFX8-NEXT:    s_cbranch_execnz .LBB2_3
663 ; GFX8-NEXT:  ; %bb.6: ; %atomicrmw.end
664 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
665 ; GFX8-NEXT:    v_mov_b32_e32 v0, v6
666 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
668 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
669 ; GFX7:       ; %bb.0:
670 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
671 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 0x400, v4
672 ; GFX7-NEXT:    s_mov_b64 s[6:7], exec
673 ; GFX7-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
674 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
675 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
676 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
677 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
678 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
679 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
680 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
681 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
682 ; GFX7-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
683 ; GFX7-NEXT:    ; implicit-def: $vgpr4
684 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
685 ; GFX7-NEXT:    s_cbranch_execnz .LBB2_1
686 ; GFX7-NEXT:  ; %bb.2:
687 ; GFX7-NEXT:    s_mov_b64 exec, s[6:7]
688 ; GFX7-NEXT:    s_mov_b64 s[6:7], 0
689 ; GFX7-NEXT:  .LBB2_3: ; %atomicrmw.start
690 ; GFX7-NEXT:    ; =>This Loop Header: Depth=1
691 ; GFX7-NEXT:    ; Child Loop BB2_4 Depth 2
692 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
693 ; GFX7-NEXT:    v_add_f32_e32 v7, v8, v5
694 ; GFX7-NEXT:    v_mov_b32_e32 v6, v7
695 ; GFX7-NEXT:    s_mov_b64 s[12:13], exec
696 ; GFX7-NEXT:    v_mov_b32_e32 v7, v8
697 ; GFX7-NEXT:  .LBB2_4: ; Parent Loop BB2_3 Depth=1
698 ; GFX7-NEXT:    ; => This Inner Loop Header: Depth=2
699 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
700 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
701 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
702 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
703 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
704 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
705 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
706 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
707 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
708 ; GFX7-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
709 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
710 ; GFX7-NEXT:    s_cbranch_execnz .LBB2_4
711 ; GFX7-NEXT:  ; %bb.5: ; in Loop: Header=BB2_3 Depth=1
712 ; GFX7-NEXT:    s_mov_b64 exec, s[12:13]
713 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
714 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v8
715 ; GFX7-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
716 ; GFX7-NEXT:    v_mov_b32_e32 v8, v6
717 ; GFX7-NEXT:    buffer_wbinvl1
718 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[6:7]
719 ; GFX7-NEXT:    s_cbranch_execnz .LBB2_3
720 ; GFX7-NEXT:  ; %bb.6: ; %atomicrmw.end
721 ; GFX7-NEXT:    s_or_b64 exec, exec, s[6:7]
722 ; GFX7-NEXT:    v_mov_b32_e32 v0, v6
723 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
725 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__waterfall__amdgpu_no_fine_grained_memory__amdgpu_ignore_denormal_mode:
726 ; GFX6:       ; %bb.0:
727 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
728 ; GFX6-NEXT:    v_add_i32_e32 v9, vcc, 0x400, v4
729 ; GFX6-NEXT:    s_mov_b64 s[6:7], exec
730 ; GFX6-NEXT:  .LBB2_1: ; =>This Inner Loop Header: Depth=1
731 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
732 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
733 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
734 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
735 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
736 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
737 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
738 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
739 ; GFX6-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
740 ; GFX6-NEXT:    ; implicit-def: $vgpr4
741 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
742 ; GFX6-NEXT:    s_cbranch_execnz .LBB2_1
743 ; GFX6-NEXT:  ; %bb.2:
744 ; GFX6-NEXT:    s_mov_b64 exec, s[6:7]
745 ; GFX6-NEXT:    s_mov_b64 s[6:7], 0
746 ; GFX6-NEXT:  .LBB2_3: ; %atomicrmw.start
747 ; GFX6-NEXT:    ; =>This Loop Header: Depth=1
748 ; GFX6-NEXT:    ; Child Loop BB2_4 Depth 2
749 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
750 ; GFX6-NEXT:    v_add_f32_e32 v7, v8, v5
751 ; GFX6-NEXT:    v_mov_b32_e32 v6, v7
752 ; GFX6-NEXT:    s_mov_b64 s[12:13], exec
753 ; GFX6-NEXT:    v_mov_b32_e32 v7, v8
754 ; GFX6-NEXT:  .LBB2_4: ; Parent Loop BB2_3 Depth=1
755 ; GFX6-NEXT:    ; => This Inner Loop Header: Depth=2
756 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
757 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
758 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
759 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
760 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
761 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
762 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
763 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
764 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
765 ; GFX6-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
766 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
767 ; GFX6-NEXT:    s_cbranch_execnz .LBB2_4
768 ; GFX6-NEXT:  ; %bb.5: ; in Loop: Header=BB2_3 Depth=1
769 ; GFX6-NEXT:    s_mov_b64 exec, s[12:13]
770 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
771 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v8
772 ; GFX6-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
773 ; GFX6-NEXT:    v_mov_b32_e32 v8, v6
774 ; GFX6-NEXT:    buffer_wbinvl1
775 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[6:7]
776 ; GFX6-NEXT:    s_cbranch_execnz .LBB2_3
777 ; GFX6-NEXT:  ; %bb.6: ; %atomicrmw.end
778 ; GFX6-NEXT:    s_or_b64 exec, exec, s[6:7]
779 ; GFX6-NEXT:    v_mov_b32_e32 v0, v6
780 ; GFX6-NEXT:    s_waitcnt expcnt(0)
781 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
782   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
783   %result = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.ignore.denormal.mode !0
784   ret float %result
787 define float @buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, float %val) #0 {
788 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
789 ; GFX12:       ; %bb.0:
790 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
791 ; GFX12-NEXT:    s_wait_expcnt 0x0
792 ; GFX12-NEXT:    s_wait_samplecnt 0x0
793 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
794 ; GFX12-NEXT:    s_wait_kmcnt 0x0
795 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
796 ; GFX12-NEXT:    s_wait_storecnt 0x0
797 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
798 ; GFX12-NEXT:    s_wait_loadcnt 0x0
799 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
800 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
802 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
803 ; GFX940:       ; %bb.0:
804 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
805 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
806 ; GFX940-NEXT:    buffer_wbl2 sc1
807 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 sc0
808 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
809 ; GFX940-NEXT:    buffer_inv sc1
810 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
812 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
813 ; GFX11:       ; %bb.0:
814 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
815 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
816 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
817 ; GFX11-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 glc
818 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
819 ; GFX11-NEXT:    buffer_gl1_inv
820 ; GFX11-NEXT:    buffer_gl0_inv
821 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
823 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
824 ; GFX10:       ; %bb.0:
825 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
826 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
827 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
828 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
829 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
830 ; GFX10-NEXT:    s_mov_b32 s4, 0
831 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
832 ; GFX10-NEXT:  .LBB3_1: ; %atomicrmw.start
833 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
834 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
835 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
836 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
837 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v2
838 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
839 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
840 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
841 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
842 ; GFX10-NEXT:    buffer_gl1_inv
843 ; GFX10-NEXT:    buffer_gl0_inv
844 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
845 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
846 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
847 ; GFX10-NEXT:    s_cbranch_execnz .LBB3_1
848 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
849 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
850 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
852 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
853 ; GFX90A:       ; %bb.0:
854 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
855 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
856 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
857 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
858 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
859 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
860 ; GFX90A-NEXT:    v_mov_b32_e32 v3, s6
861 ; GFX90A-NEXT:  .LBB3_1: ; %atomicrmw.start
862 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
863 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
864 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
865 ; GFX90A-NEXT:    v_add_f32_e32 v4, v5, v2
866 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]
867 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
868 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
869 ; GFX90A-NEXT:    buffer_wbinvl1
870 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
871 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
872 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
873 ; GFX90A-NEXT:    s_cbranch_execnz .LBB3_1
874 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
875 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
876 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
878 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
879 ; GFX908:       ; %bb.0:
880 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
881 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
882 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
883 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
884 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
885 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
886 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
887 ; GFX908-NEXT:  .LBB3_1: ; %atomicrmw.start
888 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
889 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
890 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
891 ; GFX908-NEXT:    v_add_f32_e32 v4, v5, v2
892 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
893 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
894 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
895 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
896 ; GFX908-NEXT:    buffer_wbinvl1
897 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
898 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
899 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
900 ; GFX908-NEXT:    s_cbranch_execnz .LBB3_1
901 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
902 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
903 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
905 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
906 ; GFX8:       ; %bb.0:
907 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
908 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
909 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
910 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
911 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
912 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
913 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
914 ; GFX8-NEXT:  .LBB3_1: ; %atomicrmw.start
915 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
916 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
917 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
918 ; GFX8-NEXT:    v_add_f32_e32 v4, v5, v2
919 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
920 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
921 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
922 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
923 ; GFX8-NEXT:    buffer_wbinvl1
924 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
925 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
926 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
927 ; GFX8-NEXT:    s_cbranch_execnz .LBB3_1
928 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
929 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
930 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
932 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
933 ; GFX7:       ; %bb.0:
934 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
935 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
936 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
937 ; GFX7-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
938 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
939 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
940 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
941 ; GFX7-NEXT:  .LBB3_1: ; %atomicrmw.start
942 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
943 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
944 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
945 ; GFX7-NEXT:    v_add_f32_e32 v4, v5, v2
946 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
947 ; GFX7-NEXT:    v_mov_b32_e32 v1, v5
948 ; GFX7-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
949 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
950 ; GFX7-NEXT:    buffer_wbinvl1
951 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
952 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
953 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
954 ; GFX7-NEXT:    s_cbranch_execnz .LBB3_1
955 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
956 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
957 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
959 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
960 ; GFX6:       ; %bb.0:
961 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
962 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
963 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
964 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
965 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
966 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
967 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
968 ; GFX6-NEXT:  .LBB3_1: ; %atomicrmw.start
969 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
970 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
971 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
972 ; GFX6-NEXT:    v_add_f32_e32 v4, v5, v2
973 ; GFX6-NEXT:    s_waitcnt expcnt(0)
974 ; GFX6-NEXT:    v_mov_b32_e32 v0, v4
975 ; GFX6-NEXT:    v_mov_b32_e32 v1, v5
976 ; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
977 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
978 ; GFX6-NEXT:    buffer_wbinvl1
979 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
980 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
981 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
982 ; GFX6-NEXT:    s_cbranch_execnz .LBB3_1
983 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
984 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
985 ; GFX6-NEXT:    s_waitcnt expcnt(0)
986 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
987   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
988   %result = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
989   ret float %result
992 define void @buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, float %val) #0 {
993 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
994 ; GFX12:       ; %bb.0:
995 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
996 ; GFX12-NEXT:    s_wait_expcnt 0x0
997 ; GFX12-NEXT:    s_wait_samplecnt 0x0
998 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
999 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1000 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
1001 ; GFX12-NEXT:    s_wait_storecnt 0x0
1002 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024
1003 ; GFX12-NEXT:    s_wait_storecnt 0x0
1004 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
1005 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1007 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1008 ; GFX940:       ; %bb.0:
1009 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1010 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
1011 ; GFX940-NEXT:    buffer_wbl2 sc1
1012 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024
1013 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1014 ; GFX940-NEXT:    buffer_inv sc1
1015 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1017 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1018 ; GFX11:       ; %bb.0:
1019 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1020 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
1021 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1022 ; GFX11-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024
1023 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1024 ; GFX11-NEXT:    buffer_gl1_inv
1025 ; GFX11-NEXT:    buffer_gl0_inv
1026 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1028 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1029 ; GFX10:       ; %bb.0:
1030 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1031 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
1032 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
1033 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
1034 ; GFX10-NEXT:    s_mov_b32 s4, 0
1035 ; GFX10-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
1036 ; GFX10-NEXT:  .LBB4_1: ; %atomicrmw.start
1037 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
1038 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1039 ; GFX10-NEXT:    v_add_f32_e32 v1, v2, v0
1040 ; GFX10-NEXT:    v_mov_b32_e32 v5, v2
1041 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1042 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
1043 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
1044 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1045 ; GFX10-NEXT:    buffer_gl1_inv
1046 ; GFX10-NEXT:    buffer_gl0_inv
1047 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
1048 ; GFX10-NEXT:    v_mov_b32_e32 v2, v4
1049 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
1050 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
1051 ; GFX10-NEXT:    s_cbranch_execnz .LBB4_1
1052 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
1053 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1054 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1056 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1057 ; GFX90A:       ; %bb.0:
1058 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1059 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
1060 ; GFX90A-NEXT:    buffer_load_dword v3, v1, s[16:19], 0 offen offset:1024
1061 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
1062 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
1063 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s6
1064 ; GFX90A-NEXT:  .LBB4_1: ; %atomicrmw.start
1065 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
1066 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1067 ; GFX90A-NEXT:    v_add_f32_e32 v2, v3, v0
1068 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]
1069 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v1, s[16:19], 0 offen glc
1070 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1071 ; GFX90A-NEXT:    buffer_wbinvl1
1072 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v3
1073 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1074 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v4
1075 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1076 ; GFX90A-NEXT:    s_cbranch_execnz .LBB4_1
1077 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
1078 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
1079 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1081 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1082 ; GFX908:       ; %bb.0:
1083 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1084 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
1085 ; GFX908-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
1086 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
1087 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
1088 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
1089 ; GFX908-NEXT:  .LBB4_1: ; %atomicrmw.start
1090 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
1091 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1092 ; GFX908-NEXT:    v_add_f32_e32 v1, v2, v0
1093 ; GFX908-NEXT:    v_mov_b32_e32 v5, v2
1094 ; GFX908-NEXT:    v_mov_b32_e32 v4, v1
1095 ; GFX908-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
1096 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1097 ; GFX908-NEXT:    buffer_wbinvl1
1098 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
1099 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1100 ; GFX908-NEXT:    v_mov_b32_e32 v2, v4
1101 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1102 ; GFX908-NEXT:    s_cbranch_execnz .LBB4_1
1103 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
1104 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
1105 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
1107 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1108 ; GFX8:       ; %bb.0:
1109 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1110 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
1111 ; GFX8-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
1112 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
1113 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
1114 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
1115 ; GFX8-NEXT:  .LBB4_1: ; %atomicrmw.start
1116 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
1117 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1118 ; GFX8-NEXT:    v_add_f32_e32 v1, v2, v0
1119 ; GFX8-NEXT:    v_mov_b32_e32 v5, v2
1120 ; GFX8-NEXT:    v_mov_b32_e32 v4, v1
1121 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
1122 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1123 ; GFX8-NEXT:    buffer_wbinvl1
1124 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
1125 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1126 ; GFX8-NEXT:    v_mov_b32_e32 v2, v4
1127 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1128 ; GFX8-NEXT:    s_cbranch_execnz .LBB4_1
1129 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
1130 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
1131 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1133 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1134 ; GFX7:       ; %bb.0:
1135 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1136 ; GFX7-NEXT:    v_mov_b32_e32 v1, s20
1137 ; GFX7-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
1138 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
1139 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1140 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
1141 ; GFX7-NEXT:  .LBB4_1: ; %atomicrmw.start
1142 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
1143 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1144 ; GFX7-NEXT:    v_add_f32_e32 v1, v2, v0
1145 ; GFX7-NEXT:    v_mov_b32_e32 v5, v2
1146 ; GFX7-NEXT:    v_mov_b32_e32 v4, v1
1147 ; GFX7-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
1148 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1149 ; GFX7-NEXT:    buffer_wbinvl1
1150 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
1151 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1152 ; GFX7-NEXT:    v_mov_b32_e32 v2, v4
1153 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1154 ; GFX7-NEXT:    s_cbranch_execnz .LBB4_1
1155 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
1156 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
1157 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1159 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f32__offset__amdgpu_no_fine_grained_memory:
1160 ; GFX6:       ; %bb.0:
1161 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1162 ; GFX6-NEXT:    v_mov_b32_e32 v1, s20
1163 ; GFX6-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
1164 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
1165 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
1166 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
1167 ; GFX6-NEXT:  .LBB4_1: ; %atomicrmw.start
1168 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
1169 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1170 ; GFX6-NEXT:    v_add_f32_e32 v1, v2, v0
1171 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1172 ; GFX6-NEXT:    v_mov_b32_e32 v5, v2
1173 ; GFX6-NEXT:    v_mov_b32_e32 v4, v1
1174 ; GFX6-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
1175 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1176 ; GFX6-NEXT:    buffer_wbinvl1
1177 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
1178 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1179 ; GFX6-NEXT:    v_mov_b32_e32 v2, v4
1180 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1181 ; GFX6-NEXT:    s_cbranch_execnz .LBB4_1
1182 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
1183 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
1184 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1185 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
1186   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
1187   %unused = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
1188   ret void
1191 define float @buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset(ptr addrspace(7) inreg %ptr, float %val) {
1192 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1193 ; GFX12:       ; %bb.0:
1194 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1195 ; GFX12-NEXT:    s_wait_expcnt 0x0
1196 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1197 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1198 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1199 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
1200 ; GFX12-NEXT:    s_wait_storecnt 0x0
1201 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
1202 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1203 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
1204 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1206 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1207 ; GFX940:       ; %bb.0:
1208 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1209 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
1210 ; GFX940-NEXT:    buffer_wbl2 sc1
1211 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 sc0
1212 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1213 ; GFX940-NEXT:    buffer_inv sc1
1214 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1216 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1217 ; GFX11:       ; %bb.0:
1218 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1219 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
1220 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1221 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, s4
1222 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
1223 ; GFX11-NEXT:    s_mov_b32 s4, 0
1224 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
1225 ; GFX11-NEXT:  .LBB5_1: ; %atomicrmw.start
1226 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
1227 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1228 ; GFX11-NEXT:    v_mov_b32_e32 v5, v0
1229 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1230 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1231 ; GFX11-NEXT:    v_add_f32_e32 v4, v5, v2
1232 ; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5
1233 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v3, s[0:3], 0 offen glc
1234 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1235 ; GFX11-NEXT:    buffer_gl1_inv
1236 ; GFX11-NEXT:    buffer_gl0_inv
1237 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
1238 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
1239 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1240 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
1241 ; GFX11-NEXT:    s_cbranch_execnz .LBB5_1
1242 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
1243 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1244 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1246 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1247 ; GFX10:       ; %bb.0:
1248 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1249 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
1250 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
1251 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
1252 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
1253 ; GFX10-NEXT:    s_mov_b32 s4, 0
1254 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1255 ; GFX10-NEXT:  .LBB5_1: ; %atomicrmw.start
1256 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
1257 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1258 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1259 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1260 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v2
1261 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
1262 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
1263 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1264 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1265 ; GFX10-NEXT:    buffer_gl1_inv
1266 ; GFX10-NEXT:    buffer_gl0_inv
1267 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
1268 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
1269 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
1270 ; GFX10-NEXT:    s_cbranch_execnz .LBB5_1
1271 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
1272 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1273 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1275 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1276 ; GFX90A:       ; %bb.0:
1277 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1278 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
1279 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
1280 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1281 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
1282 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
1283 ; GFX90A-NEXT:    v_mov_b32_e32 v3, s6
1284 ; GFX90A-NEXT:  .LBB5_1: ; %atomicrmw.start
1285 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
1286 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1287 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
1288 ; GFX90A-NEXT:    v_add_f32_e32 v4, v5, v2
1289 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]
1290 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1291 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1292 ; GFX90A-NEXT:    buffer_wbinvl1
1293 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1294 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1295 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1296 ; GFX90A-NEXT:    s_cbranch_execnz .LBB5_1
1297 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
1298 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
1299 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1301 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1302 ; GFX908:       ; %bb.0:
1303 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1304 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
1305 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
1306 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1307 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
1308 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
1309 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
1310 ; GFX908-NEXT:  .LBB5_1: ; %atomicrmw.start
1311 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
1312 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1313 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
1314 ; GFX908-NEXT:    v_add_f32_e32 v4, v5, v2
1315 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
1316 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
1317 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1318 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1319 ; GFX908-NEXT:    buffer_wbinvl1
1320 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1321 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1322 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1323 ; GFX908-NEXT:    s_cbranch_execnz .LBB5_1
1324 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
1325 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
1326 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
1328 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1329 ; GFX8:       ; %bb.0:
1330 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1331 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
1332 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
1333 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1334 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
1335 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
1336 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
1337 ; GFX8-NEXT:  .LBB5_1: ; %atomicrmw.start
1338 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
1339 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1340 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
1341 ; GFX8-NEXT:    v_add_f32_e32 v4, v5, v2
1342 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
1343 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
1344 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1345 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1346 ; GFX8-NEXT:    buffer_wbinvl1
1347 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1348 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1349 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1350 ; GFX8-NEXT:    s_cbranch_execnz .LBB5_1
1351 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
1352 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
1353 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1355 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1356 ; GFX7:       ; %bb.0:
1357 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1358 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
1359 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
1360 ; GFX7-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1361 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
1362 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1363 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
1364 ; GFX7-NEXT:  .LBB5_1: ; %atomicrmw.start
1365 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
1366 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1367 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
1368 ; GFX7-NEXT:    v_add_f32_e32 v4, v5, v2
1369 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
1370 ; GFX7-NEXT:    v_mov_b32_e32 v1, v5
1371 ; GFX7-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1372 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1373 ; GFX7-NEXT:    buffer_wbinvl1
1374 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1375 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1376 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1377 ; GFX7-NEXT:    s_cbranch_execnz .LBB5_1
1378 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
1379 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
1380 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1382 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset:
1383 ; GFX6:       ; %bb.0:
1384 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1385 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
1386 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
1387 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1388 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
1389 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
1390 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
1391 ; GFX6-NEXT:  .LBB5_1: ; %atomicrmw.start
1392 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
1393 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1394 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
1395 ; GFX6-NEXT:    v_add_f32_e32 v4, v5, v2
1396 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1397 ; GFX6-NEXT:    v_mov_b32_e32 v0, v4
1398 ; GFX6-NEXT:    v_mov_b32_e32 v1, v5
1399 ; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1400 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1401 ; GFX6-NEXT:    buffer_wbinvl1
1402 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1403 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1404 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1405 ; GFX6-NEXT:    s_cbranch_execnz .LBB5_1
1406 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
1407 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
1408 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1409 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
1410   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
1411   %result = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst
1412   ret float %result
1415 define float @buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, float %val) #0 {
1416 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1417 ; GFX12:       ; %bb.0:
1418 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1419 ; GFX12-NEXT:    s_wait_expcnt 0x0
1420 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1421 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1422 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1423 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
1424 ; GFX12-NEXT:    s_wait_storecnt 0x0
1425 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
1426 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1427 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
1428 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1430 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1431 ; GFX940:       ; %bb.0:
1432 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1433 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
1434 ; GFX940-NEXT:    buffer_wbl2 sc1
1435 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 sc0
1436 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1437 ; GFX940-NEXT:    buffer_inv sc1
1438 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1440 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1441 ; GFX11:       ; %bb.0:
1442 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1443 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
1444 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1445 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, s4
1446 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
1447 ; GFX11-NEXT:    s_mov_b32 s4, 0
1448 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
1449 ; GFX11-NEXT:  .LBB6_1: ; %atomicrmw.start
1450 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
1451 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1452 ; GFX11-NEXT:    v_mov_b32_e32 v5, v0
1453 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1454 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1455 ; GFX11-NEXT:    v_add_f32_e32 v4, v5, v2
1456 ; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5
1457 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v3, s[0:3], 0 offen glc
1458 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1459 ; GFX11-NEXT:    buffer_gl1_inv
1460 ; GFX11-NEXT:    buffer_gl0_inv
1461 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
1462 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
1463 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1464 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
1465 ; GFX11-NEXT:    s_cbranch_execnz .LBB6_1
1466 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
1467 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1468 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1470 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1471 ; GFX10:       ; %bb.0:
1472 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1473 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
1474 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
1475 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
1476 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
1477 ; GFX10-NEXT:    s_mov_b32 s4, 0
1478 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1479 ; GFX10-NEXT:  .LBB6_1: ; %atomicrmw.start
1480 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
1481 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1482 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1483 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1484 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v2
1485 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
1486 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
1487 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1488 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1489 ; GFX10-NEXT:    buffer_gl1_inv
1490 ; GFX10-NEXT:    buffer_gl0_inv
1491 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
1492 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
1493 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
1494 ; GFX10-NEXT:    s_cbranch_execnz .LBB6_1
1495 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
1496 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1497 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1499 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1500 ; GFX90A:       ; %bb.0:
1501 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1502 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
1503 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
1504 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1505 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
1506 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
1507 ; GFX90A-NEXT:    v_mov_b32_e32 v3, s6
1508 ; GFX90A-NEXT:  .LBB6_1: ; %atomicrmw.start
1509 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
1510 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1511 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
1512 ; GFX90A-NEXT:    v_add_f32_e32 v4, v5, v2
1513 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]
1514 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1515 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1516 ; GFX90A-NEXT:    buffer_wbinvl1
1517 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1518 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1519 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1520 ; GFX90A-NEXT:    s_cbranch_execnz .LBB6_1
1521 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
1522 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
1523 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1525 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1526 ; GFX908:       ; %bb.0:
1527 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1528 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
1529 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
1530 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1531 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
1532 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
1533 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
1534 ; GFX908-NEXT:  .LBB6_1: ; %atomicrmw.start
1535 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
1536 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1537 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
1538 ; GFX908-NEXT:    v_add_f32_e32 v4, v5, v2
1539 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
1540 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
1541 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1542 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1543 ; GFX908-NEXT:    buffer_wbinvl1
1544 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1545 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1546 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1547 ; GFX908-NEXT:    s_cbranch_execnz .LBB6_1
1548 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
1549 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
1550 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
1552 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1553 ; GFX8:       ; %bb.0:
1554 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1555 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
1556 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
1557 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1558 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
1559 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
1560 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
1561 ; GFX8-NEXT:  .LBB6_1: ; %atomicrmw.start
1562 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
1563 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1564 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
1565 ; GFX8-NEXT:    v_add_f32_e32 v4, v5, v2
1566 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
1567 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
1568 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1569 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1570 ; GFX8-NEXT:    buffer_wbinvl1
1571 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1572 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1573 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1574 ; GFX8-NEXT:    s_cbranch_execnz .LBB6_1
1575 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
1576 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
1577 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1579 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1580 ; GFX7:       ; %bb.0:
1581 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1582 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
1583 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
1584 ; GFX7-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1585 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
1586 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1587 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
1588 ; GFX7-NEXT:  .LBB6_1: ; %atomicrmw.start
1589 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
1590 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1591 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
1592 ; GFX7-NEXT:    v_add_f32_e32 v4, v5, v2
1593 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
1594 ; GFX7-NEXT:    v_mov_b32_e32 v1, v5
1595 ; GFX7-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1596 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1597 ; GFX7-NEXT:    buffer_wbinvl1
1598 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1599 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1600 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1601 ; GFX7-NEXT:    s_cbranch_execnz .LBB6_1
1602 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
1603 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
1604 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1606 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory:
1607 ; GFX6:       ; %bb.0:
1608 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1609 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
1610 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
1611 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1612 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
1613 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
1614 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
1615 ; GFX6-NEXT:  .LBB6_1: ; %atomicrmw.start
1616 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
1617 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1618 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
1619 ; GFX6-NEXT:    v_add_f32_e32 v4, v5, v2
1620 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1621 ; GFX6-NEXT:    v_mov_b32_e32 v0, v4
1622 ; GFX6-NEXT:    v_mov_b32_e32 v1, v5
1623 ; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1624 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1625 ; GFX6-NEXT:    buffer_wbinvl1
1626 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1627 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1628 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1629 ; GFX6-NEXT:    s_cbranch_execnz .LBB6_1
1630 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
1631 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
1632 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1633 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
1634   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
1635   %result = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0
1636   ret float %result
1639 define float @buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode(ptr addrspace(7) inreg %ptr, float %val) #0 {
1640 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1641 ; GFX12:       ; %bb.0:
1642 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1643 ; GFX12-NEXT:    s_wait_expcnt 0x0
1644 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1645 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1646 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1647 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
1648 ; GFX12-NEXT:    s_wait_storecnt 0x0
1649 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
1650 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1651 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
1652 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1654 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1655 ; GFX940:       ; %bb.0:
1656 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1657 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
1658 ; GFX940-NEXT:    buffer_wbl2 sc1
1659 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 sc0
1660 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1661 ; GFX940-NEXT:    buffer_inv sc1
1662 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1664 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1665 ; GFX11:       ; %bb.0:
1666 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1667 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
1668 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1669 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, s4
1670 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
1671 ; GFX11-NEXT:    s_mov_b32 s4, 0
1672 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
1673 ; GFX11-NEXT:  .LBB7_1: ; %atomicrmw.start
1674 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
1675 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1676 ; GFX11-NEXT:    v_mov_b32_e32 v5, v0
1677 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1678 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1679 ; GFX11-NEXT:    v_add_f32_e32 v4, v5, v2
1680 ; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5
1681 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v3, s[0:3], 0 offen glc
1682 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1683 ; GFX11-NEXT:    buffer_gl1_inv
1684 ; GFX11-NEXT:    buffer_gl0_inv
1685 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
1686 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
1687 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1688 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
1689 ; GFX11-NEXT:    s_cbranch_execnz .LBB7_1
1690 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
1691 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1692 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1694 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1695 ; GFX10:       ; %bb.0:
1696 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1697 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
1698 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
1699 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
1700 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
1701 ; GFX10-NEXT:    s_mov_b32 s4, 0
1702 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1703 ; GFX10-NEXT:  .LBB7_1: ; %atomicrmw.start
1704 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
1705 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1706 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1707 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1708 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v2
1709 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
1710 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
1711 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1712 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1713 ; GFX10-NEXT:    buffer_gl1_inv
1714 ; GFX10-NEXT:    buffer_gl0_inv
1715 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
1716 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
1717 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
1718 ; GFX10-NEXT:    s_cbranch_execnz .LBB7_1
1719 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
1720 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1721 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1723 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1724 ; GFX90A:       ; %bb.0:
1725 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1726 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
1727 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
1728 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1729 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
1730 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
1731 ; GFX90A-NEXT:    v_mov_b32_e32 v3, s6
1732 ; GFX90A-NEXT:  .LBB7_1: ; %atomicrmw.start
1733 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
1734 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1735 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
1736 ; GFX90A-NEXT:    v_add_f32_e32 v4, v5, v2
1737 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]
1738 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1739 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1740 ; GFX90A-NEXT:    buffer_wbinvl1
1741 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1742 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1743 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1744 ; GFX90A-NEXT:    s_cbranch_execnz .LBB7_1
1745 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
1746 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
1747 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1749 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1750 ; GFX908:       ; %bb.0:
1751 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1752 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
1753 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
1754 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1755 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
1756 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
1757 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
1758 ; GFX908-NEXT:  .LBB7_1: ; %atomicrmw.start
1759 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
1760 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1761 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
1762 ; GFX908-NEXT:    v_add_f32_e32 v4, v5, v2
1763 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
1764 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
1765 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1766 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
1767 ; GFX908-NEXT:    buffer_wbinvl1
1768 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1769 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1770 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1771 ; GFX908-NEXT:    s_cbranch_execnz .LBB7_1
1772 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
1773 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
1774 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
1776 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1777 ; GFX8:       ; %bb.0:
1778 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1779 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
1780 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
1781 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1782 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
1783 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
1784 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
1785 ; GFX8-NEXT:  .LBB7_1: ; %atomicrmw.start
1786 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
1787 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1788 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
1789 ; GFX8-NEXT:    v_add_f32_e32 v4, v5, v2
1790 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
1791 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
1792 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1793 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1794 ; GFX8-NEXT:    buffer_wbinvl1
1795 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1796 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1797 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1798 ; GFX8-NEXT:    s_cbranch_execnz .LBB7_1
1799 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
1800 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
1801 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
1803 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1804 ; GFX7:       ; %bb.0:
1805 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1806 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
1807 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
1808 ; GFX7-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1809 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
1810 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1811 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
1812 ; GFX7-NEXT:  .LBB7_1: ; %atomicrmw.start
1813 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
1814 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1815 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
1816 ; GFX7-NEXT:    v_add_f32_e32 v4, v5, v2
1817 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
1818 ; GFX7-NEXT:    v_mov_b32_e32 v1, v5
1819 ; GFX7-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1820 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1821 ; GFX7-NEXT:    buffer_wbinvl1
1822 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1823 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1824 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1825 ; GFX7-NEXT:    s_cbranch_execnz .LBB7_1
1826 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
1827 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
1828 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
1830 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f32__offset__amdgpu_no_remote_memory__amdgpu_ignore_denormal_mode:
1831 ; GFX6:       ; %bb.0:
1832 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1833 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
1834 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
1835 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
1836 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
1837 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
1838 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
1839 ; GFX6-NEXT:  .LBB7_1: ; %atomicrmw.start
1840 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
1841 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1842 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
1843 ; GFX6-NEXT:    v_add_f32_e32 v4, v5, v2
1844 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1845 ; GFX6-NEXT:    v_mov_b32_e32 v0, v4
1846 ; GFX6-NEXT:    v_mov_b32_e32 v1, v5
1847 ; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
1848 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
1849 ; GFX6-NEXT:    buffer_wbinvl1
1850 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
1851 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1852 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1853 ; GFX6-NEXT:    s_cbranch_execnz .LBB7_1
1854 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
1855 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
1856 ; GFX6-NEXT:    s_waitcnt expcnt(0)
1857 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
1858   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
1859   %result = atomicrmw fadd ptr addrspace(7) %gep, float %val syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0, !amdgpu.ignore.denormal.mode !0
1860   ret float %result
1863 ; --------------------------------------------------------------------
1864 ; double
1865 ; --------------------------------------------------------------------
1867 define double @buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, double %val) #0 {
1868 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
1869 ; GFX12:       ; %bb.0:
1870 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
1871 ; GFX12-NEXT:    s_wait_expcnt 0x0
1872 ; GFX12-NEXT:    s_wait_samplecnt 0x0
1873 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
1874 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1875 ; GFX12-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
1876 ; GFX12-NEXT:    v_mov_b32_e32 v0, s16
1877 ; GFX12-NEXT:    s_add_co_i32 s4, s16, 0x800
1878 ; GFX12-NEXT:    s_wait_alu 0xfffe
1879 ; GFX12-NEXT:    v_mov_b32_e32 v6, s4
1880 ; GFX12-NEXT:    s_mov_b32 s4, 0
1881 ; GFX12-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], null offen offset:2048
1882 ; GFX12-NEXT:  .LBB8_1: ; %atomicrmw.start
1883 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
1884 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1885 ; GFX12-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
1886 ; GFX12-NEXT:    s_wait_storecnt 0x0
1887 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1888 ; GFX12-NEXT:    v_add_f64_e32 v[7:8], v[9:10], v[4:5]
1889 ; GFX12-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
1890 ; GFX12-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
1891 ; GFX12-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v6, s[0:3], null offen th:TH_ATOMIC_RETURN
1892 ; GFX12-NEXT:    s_wait_loadcnt 0x0
1893 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
1894 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
1895 ; GFX12-NEXT:    s_or_b32 s4, vcc_lo, s4
1896 ; GFX12-NEXT:    s_wait_alu 0xfffe
1897 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
1898 ; GFX12-NEXT:    s_cbranch_execnz .LBB8_1
1899 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
1900 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1901 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
1903 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
1904 ; GFX940:       ; %bb.0:
1905 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1906 ; GFX940-NEXT:    v_mov_b32_e32 v2, s16
1907 ; GFX940-NEXT:    buffer_wbl2 sc1
1908 ; GFX940-NEXT:    buffer_atomic_add_f64 v[0:1], v2, s[0:3], 0 offen offset:2048 sc0
1909 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1910 ; GFX940-NEXT:    buffer_inv sc1
1911 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1913 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
1914 ; GFX11:       ; %bb.0:
1915 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1916 ; GFX11-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
1917 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
1918 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x800
1919 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1920 ; GFX11-NEXT:    v_mov_b32_e32 v6, s4
1921 ; GFX11-NEXT:    s_mov_b32 s4, 0
1922 ; GFX11-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], 0 offen offset:2048
1923 ; GFX11-NEXT:  .LBB8_1: ; %atomicrmw.start
1924 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
1925 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1926 ; GFX11-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
1927 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1928 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1929 ; GFX11-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
1930 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
1931 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
1932 ; GFX11-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v6, s[0:3], 0 offen glc
1933 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1934 ; GFX11-NEXT:    buffer_gl1_inv
1935 ; GFX11-NEXT:    buffer_gl0_inv
1936 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
1937 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
1938 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1939 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
1940 ; GFX11-NEXT:    s_cbranch_execnz .LBB8_1
1941 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
1942 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1943 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1945 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
1946 ; GFX10:       ; %bb.0:
1947 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1948 ; GFX10-NEXT:    v_mov_b32_e32 v4, v0
1949 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
1950 ; GFX10-NEXT:    v_mov_b32_e32 v5, v1
1951 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x800
1952 ; GFX10-NEXT:    v_mov_b32_e32 v6, s4
1953 ; GFX10-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
1954 ; GFX10-NEXT:    s_mov_b32 s4, 0
1955 ; GFX10-NEXT:  .LBB8_1: ; %atomicrmw.start
1956 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
1957 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1958 ; GFX10-NEXT:    v_mov_b32_e32 v10, v1
1959 ; GFX10-NEXT:    v_mov_b32_e32 v9, v0
1960 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1961 ; GFX10-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
1962 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
1963 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
1964 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
1965 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
1966 ; GFX10-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
1967 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1968 ; GFX10-NEXT:    buffer_gl1_inv
1969 ; GFX10-NEXT:    buffer_gl0_inv
1970 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
1971 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
1972 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
1973 ; GFX10-NEXT:    s_cbranch_execnz .LBB8_1
1974 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
1975 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
1976 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1978 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
1979 ; GFX90A:       ; %bb.0:
1980 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1981 ; GFX90A-NEXT:    v_mov_b32_e32 v2, s20
1982 ; GFX90A-NEXT:    buffer_atomic_add_f64 v[0:1], v2, s[16:19], 0 offen offset:2048 glc
1983 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1984 ; GFX90A-NEXT:    buffer_wbinvl1
1985 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1987 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
1988 ; GFX908:       ; %bb.0:
1989 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1990 ; GFX908-NEXT:    v_mov_b32_e32 v4, v0
1991 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
1992 ; GFX908-NEXT:    v_mov_b32_e32 v5, v1
1993 ; GFX908-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
1994 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x800
1995 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
1996 ; GFX908-NEXT:    v_mov_b32_e32 v6, s6
1997 ; GFX908-NEXT:  .LBB8_1: ; %atomicrmw.start
1998 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
1999 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
2000 ; GFX908-NEXT:    v_mov_b32_e32 v10, v1
2001 ; GFX908-NEXT:    v_mov_b32_e32 v9, v0
2002 ; GFX908-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
2003 ; GFX908-NEXT:    v_mov_b32_e32 v0, v7
2004 ; GFX908-NEXT:    v_mov_b32_e32 v1, v8
2005 ; GFX908-NEXT:    v_mov_b32_e32 v2, v9
2006 ; GFX908-NEXT:    v_mov_b32_e32 v3, v10
2007 ; GFX908-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
2008 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
2009 ; GFX908-NEXT:    buffer_wbinvl1
2010 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
2011 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2012 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2013 ; GFX908-NEXT:    s_cbranch_execnz .LBB8_1
2014 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
2015 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
2016 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
2018 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
2019 ; GFX8:       ; %bb.0:
2020 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2021 ; GFX8-NEXT:    v_mov_b32_e32 v4, v0
2022 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
2023 ; GFX8-NEXT:    v_mov_b32_e32 v5, v1
2024 ; GFX8-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
2025 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x800
2026 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
2027 ; GFX8-NEXT:    v_mov_b32_e32 v6, s6
2028 ; GFX8-NEXT:  .LBB8_1: ; %atomicrmw.start
2029 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
2030 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2031 ; GFX8-NEXT:    v_mov_b32_e32 v10, v1
2032 ; GFX8-NEXT:    v_mov_b32_e32 v9, v0
2033 ; GFX8-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
2034 ; GFX8-NEXT:    v_mov_b32_e32 v0, v7
2035 ; GFX8-NEXT:    v_mov_b32_e32 v1, v8
2036 ; GFX8-NEXT:    v_mov_b32_e32 v2, v9
2037 ; GFX8-NEXT:    v_mov_b32_e32 v3, v10
2038 ; GFX8-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
2039 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2040 ; GFX8-NEXT:    buffer_wbinvl1
2041 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
2042 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2043 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2044 ; GFX8-NEXT:    s_cbranch_execnz .LBB8_1
2045 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
2046 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
2047 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2049 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
2050 ; GFX7:       ; %bb.0:
2051 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2052 ; GFX7-NEXT:    v_mov_b32_e32 v4, v0
2053 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
2054 ; GFX7-NEXT:    v_mov_b32_e32 v5, v1
2055 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
2056 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x800
2057 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
2058 ; GFX7-NEXT:    v_mov_b32_e32 v6, s6
2059 ; GFX7-NEXT:  .LBB8_1: ; %atomicrmw.start
2060 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
2061 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2062 ; GFX7-NEXT:    v_mov_b32_e32 v10, v1
2063 ; GFX7-NEXT:    v_mov_b32_e32 v9, v0
2064 ; GFX7-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
2065 ; GFX7-NEXT:    v_mov_b32_e32 v0, v7
2066 ; GFX7-NEXT:    v_mov_b32_e32 v1, v8
2067 ; GFX7-NEXT:    v_mov_b32_e32 v2, v9
2068 ; GFX7-NEXT:    v_mov_b32_e32 v3, v10
2069 ; GFX7-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
2070 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2071 ; GFX7-NEXT:    buffer_wbinvl1
2072 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
2073 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2074 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2075 ; GFX7-NEXT:    s_cbranch_execnz .LBB8_1
2076 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
2077 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
2078 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2080 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory:
2081 ; GFX6:       ; %bb.0:
2082 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2083 ; GFX6-NEXT:    v_mov_b32_e32 v4, v0
2084 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
2085 ; GFX6-NEXT:    v_mov_b32_e32 v5, v1
2086 ; GFX6-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
2087 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x800
2088 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
2089 ; GFX6-NEXT:    v_mov_b32_e32 v6, s6
2090 ; GFX6-NEXT:  .LBB8_1: ; %atomicrmw.start
2091 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
2092 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
2093 ; GFX6-NEXT:    v_mov_b32_e32 v10, v1
2094 ; GFX6-NEXT:    v_mov_b32_e32 v9, v0
2095 ; GFX6-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
2096 ; GFX6-NEXT:    s_waitcnt expcnt(0)
2097 ; GFX6-NEXT:    v_mov_b32_e32 v0, v7
2098 ; GFX6-NEXT:    v_mov_b32_e32 v1, v8
2099 ; GFX6-NEXT:    v_mov_b32_e32 v2, v9
2100 ; GFX6-NEXT:    v_mov_b32_e32 v3, v10
2101 ; GFX6-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
2102 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
2103 ; GFX6-NEXT:    buffer_wbinvl1
2104 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
2105 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2106 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2107 ; GFX6-NEXT:    s_cbranch_execnz .LBB8_1
2108 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
2109 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
2110 ; GFX6-NEXT:    s_waitcnt expcnt(0)
2111 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
2112   %gep = getelementptr double, ptr addrspace(7) %ptr, i32 256
2113   %result = atomicrmw fadd ptr addrspace(7) %gep, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
2114   ret double %result
2117 define void @buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, double %val) #0 {
2118 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2119 ; GFX12:       ; %bb.0:
2120 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2121 ; GFX12-NEXT:    s_wait_expcnt 0x0
2122 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2123 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2124 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2125 ; GFX12-NEXT:    v_mov_b32_e32 v2, s16
2126 ; GFX12-NEXT:    s_add_co_i32 s4, s16, 0x800
2127 ; GFX12-NEXT:    s_wait_alu 0xfffe
2128 ; GFX12-NEXT:    v_mov_b32_e32 v6, s4
2129 ; GFX12-NEXT:    s_mov_b32 s4, 0
2130 ; GFX12-NEXT:    buffer_load_b64 v[4:5], v2, s[0:3], null offen offset:2048
2131 ; GFX12-NEXT:  .LBB9_1: ; %atomicrmw.start
2132 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
2133 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2134 ; GFX12-NEXT:    v_add_f64_e32 v[2:3], v[4:5], v[0:1]
2135 ; GFX12-NEXT:    v_dual_mov_b32 v10, v5 :: v_dual_mov_b32 v9, v4
2136 ; GFX12-NEXT:    s_wait_storecnt 0x0
2137 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
2138 ; GFX12-NEXT:    v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v7, v2
2139 ; GFX12-NEXT:    buffer_atomic_cmpswap_b64 v[7:10], v6, s[0:3], null offen th:TH_ATOMIC_RETURN
2140 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2141 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
2142 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[7:8], v[4:5]
2143 ; GFX12-NEXT:    v_dual_mov_b32 v4, v7 :: v_dual_mov_b32 v5, v8
2144 ; GFX12-NEXT:    s_or_b32 s4, vcc_lo, s4
2145 ; GFX12-NEXT:    s_wait_alu 0xfffe
2146 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
2147 ; GFX12-NEXT:    s_cbranch_execnz .LBB9_1
2148 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
2149 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s4
2150 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2152 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2153 ; GFX940:       ; %bb.0:
2154 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2155 ; GFX940-NEXT:    v_mov_b32_e32 v2, s16
2156 ; GFX940-NEXT:    buffer_wbl2 sc1
2157 ; GFX940-NEXT:    buffer_atomic_add_f64 v[0:1], v2, s[0:3], 0 offen offset:2048
2158 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2159 ; GFX940-NEXT:    buffer_inv sc1
2160 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2162 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2163 ; GFX11:       ; %bb.0:
2164 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2165 ; GFX11-NEXT:    v_mov_b32_e32 v2, s16
2166 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x800
2167 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2168 ; GFX11-NEXT:    v_mov_b32_e32 v6, s4
2169 ; GFX11-NEXT:    s_mov_b32 s4, 0
2170 ; GFX11-NEXT:    buffer_load_b64 v[4:5], v2, s[0:3], 0 offen offset:2048
2171 ; GFX11-NEXT:  .LBB9_1: ; %atomicrmw.start
2172 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
2173 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2174 ; GFX11-NEXT:    v_add_f64 v[2:3], v[4:5], v[0:1]
2175 ; GFX11-NEXT:    v_dual_mov_b32 v10, v5 :: v_dual_mov_b32 v9, v4
2176 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
2177 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
2178 ; GFX11-NEXT:    v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v7, v2
2179 ; GFX11-NEXT:    buffer_atomic_cmpswap_b64 v[7:10], v6, s[0:3], 0 offen glc
2180 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2181 ; GFX11-NEXT:    buffer_gl1_inv
2182 ; GFX11-NEXT:    buffer_gl0_inv
2183 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[7:8], v[4:5]
2184 ; GFX11-NEXT:    v_dual_mov_b32 v4, v7 :: v_dual_mov_b32 v5, v8
2185 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
2186 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2187 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
2188 ; GFX11-NEXT:    s_cbranch_execnz .LBB9_1
2189 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
2190 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
2191 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2193 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2194 ; GFX10:       ; %bb.0:
2195 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2196 ; GFX10-NEXT:    v_mov_b32_e32 v2, s20
2197 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x800
2198 ; GFX10-NEXT:    v_mov_b32_e32 v6, s4
2199 ; GFX10-NEXT:    s_mov_b32 s4, 0
2200 ; GFX10-NEXT:    buffer_load_dwordx2 v[4:5], v2, s[16:19], 0 offen offset:2048
2201 ; GFX10-NEXT:  .LBB9_1: ; %atomicrmw.start
2202 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
2203 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2204 ; GFX10-NEXT:    v_add_f64 v[2:3], v[4:5], v[0:1]
2205 ; GFX10-NEXT:    v_mov_b32_e32 v10, v5
2206 ; GFX10-NEXT:    v_mov_b32_e32 v9, v4
2207 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2208 ; GFX10-NEXT:    v_mov_b32_e32 v8, v3
2209 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
2210 ; GFX10-NEXT:    buffer_atomic_cmpswap_x2 v[7:10], v6, s[16:19], 0 offen glc
2211 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2212 ; GFX10-NEXT:    buffer_gl1_inv
2213 ; GFX10-NEXT:    buffer_gl0_inv
2214 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[7:8], v[4:5]
2215 ; GFX10-NEXT:    v_mov_b32_e32 v4, v7
2216 ; GFX10-NEXT:    v_mov_b32_e32 v5, v8
2217 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
2218 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
2219 ; GFX10-NEXT:    s_cbranch_execnz .LBB9_1
2220 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
2221 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
2222 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2224 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2225 ; GFX90A:       ; %bb.0:
2226 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2227 ; GFX90A-NEXT:    v_mov_b32_e32 v2, s20
2228 ; GFX90A-NEXT:    buffer_atomic_add_f64 v[0:1], v2, s[16:19], 0 offen offset:2048
2229 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2230 ; GFX90A-NEXT:    buffer_wbinvl1
2231 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2233 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2234 ; GFX908:       ; %bb.0:
2235 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2236 ; GFX908-NEXT:    v_mov_b32_e32 v2, s20
2237 ; GFX908-NEXT:    buffer_load_dwordx2 v[4:5], v2, s[16:19], 0 offen offset:2048
2238 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x800
2239 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
2240 ; GFX908-NEXT:    v_mov_b32_e32 v6, s6
2241 ; GFX908-NEXT:  .LBB9_1: ; %atomicrmw.start
2242 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
2243 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
2244 ; GFX908-NEXT:    v_add_f64 v[2:3], v[4:5], v[0:1]
2245 ; GFX908-NEXT:    v_mov_b32_e32 v10, v5
2246 ; GFX908-NEXT:    v_mov_b32_e32 v9, v4
2247 ; GFX908-NEXT:    v_mov_b32_e32 v8, v3
2248 ; GFX908-NEXT:    v_mov_b32_e32 v7, v2
2249 ; GFX908-NEXT:    buffer_atomic_cmpswap_x2 v[7:10], v6, s[16:19], 0 offen glc
2250 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
2251 ; GFX908-NEXT:    buffer_wbinvl1
2252 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, v[7:8], v[4:5]
2253 ; GFX908-NEXT:    v_mov_b32_e32 v4, v7
2254 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2255 ; GFX908-NEXT:    v_mov_b32_e32 v5, v8
2256 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2257 ; GFX908-NEXT:    s_cbranch_execnz .LBB9_1
2258 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
2259 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
2260 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
2262 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2263 ; GFX8:       ; %bb.0:
2264 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2265 ; GFX8-NEXT:    v_mov_b32_e32 v2, s20
2266 ; GFX8-NEXT:    buffer_load_dwordx2 v[4:5], v2, s[16:19], 0 offen offset:2048
2267 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x800
2268 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
2269 ; GFX8-NEXT:    v_mov_b32_e32 v6, s6
2270 ; GFX8-NEXT:  .LBB9_1: ; %atomicrmw.start
2271 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
2272 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2273 ; GFX8-NEXT:    v_add_f64 v[2:3], v[4:5], v[0:1]
2274 ; GFX8-NEXT:    v_mov_b32_e32 v10, v5
2275 ; GFX8-NEXT:    v_mov_b32_e32 v9, v4
2276 ; GFX8-NEXT:    v_mov_b32_e32 v8, v3
2277 ; GFX8-NEXT:    v_mov_b32_e32 v7, v2
2278 ; GFX8-NEXT:    buffer_atomic_cmpswap_x2 v[7:10], v6, s[16:19], 0 offen glc
2279 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2280 ; GFX8-NEXT:    buffer_wbinvl1
2281 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, v[7:8], v[4:5]
2282 ; GFX8-NEXT:    v_mov_b32_e32 v4, v7
2283 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2284 ; GFX8-NEXT:    v_mov_b32_e32 v5, v8
2285 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2286 ; GFX8-NEXT:    s_cbranch_execnz .LBB9_1
2287 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
2288 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
2289 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2291 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2292 ; GFX7:       ; %bb.0:
2293 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2294 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
2295 ; GFX7-NEXT:    buffer_load_dwordx2 v[4:5], v2, s[16:19], 0 offen offset:2048
2296 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x800
2297 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
2298 ; GFX7-NEXT:    v_mov_b32_e32 v6, s6
2299 ; GFX7-NEXT:  .LBB9_1: ; %atomicrmw.start
2300 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
2301 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2302 ; GFX7-NEXT:    v_add_f64 v[2:3], v[4:5], v[0:1]
2303 ; GFX7-NEXT:    v_mov_b32_e32 v10, v5
2304 ; GFX7-NEXT:    v_mov_b32_e32 v9, v4
2305 ; GFX7-NEXT:    v_mov_b32_e32 v8, v3
2306 ; GFX7-NEXT:    v_mov_b32_e32 v7, v2
2307 ; GFX7-NEXT:    buffer_atomic_cmpswap_x2 v[7:10], v6, s[16:19], 0 offen glc
2308 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2309 ; GFX7-NEXT:    buffer_wbinvl1
2310 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, v[7:8], v[4:5]
2311 ; GFX7-NEXT:    v_mov_b32_e32 v4, v7
2312 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2313 ; GFX7-NEXT:    v_mov_b32_e32 v5, v8
2314 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2315 ; GFX7-NEXT:    s_cbranch_execnz .LBB9_1
2316 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
2317 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
2318 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2320 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f64__offset__amdgpu_no_fine_grained_memory:
2321 ; GFX6:       ; %bb.0:
2322 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2323 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
2324 ; GFX6-NEXT:    buffer_load_dwordx2 v[4:5], v2, s[16:19], 0 offen offset:2048
2325 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x800
2326 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
2327 ; GFX6-NEXT:    v_mov_b32_e32 v6, s6
2328 ; GFX6-NEXT:  .LBB9_1: ; %atomicrmw.start
2329 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
2330 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
2331 ; GFX6-NEXT:    v_add_f64 v[2:3], v[4:5], v[0:1]
2332 ; GFX6-NEXT:    s_waitcnt expcnt(0)
2333 ; GFX6-NEXT:    v_mov_b32_e32 v10, v5
2334 ; GFX6-NEXT:    v_mov_b32_e32 v9, v4
2335 ; GFX6-NEXT:    v_mov_b32_e32 v8, v3
2336 ; GFX6-NEXT:    v_mov_b32_e32 v7, v2
2337 ; GFX6-NEXT:    buffer_atomic_cmpswap_x2 v[7:10], v6, s[16:19], 0 offen glc
2338 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
2339 ; GFX6-NEXT:    buffer_wbinvl1
2340 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, v[7:8], v[4:5]
2341 ; GFX6-NEXT:    v_mov_b32_e32 v4, v7
2342 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2343 ; GFX6-NEXT:    v_mov_b32_e32 v5, v8
2344 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2345 ; GFX6-NEXT:    s_cbranch_execnz .LBB9_1
2346 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
2347 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
2348 ; GFX6-NEXT:    s_waitcnt expcnt(0)
2349 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
2350   %gep = getelementptr double, ptr addrspace(7) %ptr, i32 256
2351   %unused = atomicrmw fadd ptr addrspace(7) %gep, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
2352   ret void
2355 define double @buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory(ptr addrspace(7) %ptr, double %val) #0 {
2356 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2357 ; GFX12:       ; %bb.0:
2358 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2359 ; GFX12-NEXT:    s_wait_expcnt 0x0
2360 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2361 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2362 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2363 ; GFX12-NEXT:    v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v7, v2
2364 ; GFX12-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
2365 ; GFX12-NEXT:    v_add_nc_u32_e32 v15, 0x800, v4
2366 ; GFX12-NEXT:    s_mov_b32 s1, exec_lo
2367 ; GFX12-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2368 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
2369 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v9
2370 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v10
2371 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v7
2372 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v8
2373 ; GFX12-NEXT:    s_wait_alu 0xf1ff
2374 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2375 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[9:10]
2376 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[7:8]
2377 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2378 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
2379 ; GFX12-NEXT:    s_wait_alu 0xfffe
2380 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
2381 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2382 ; GFX12-NEXT:    buffer_load_b64 v[13:14], v4, s[4:7], null offen offset:2048
2383 ; GFX12-NEXT:    ; implicit-def: $vgpr4
2384 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
2385 ; GFX12-NEXT:    s_cbranch_execnz .LBB10_1
2386 ; GFX12-NEXT:  ; %bb.2:
2387 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
2388 ; GFX12-NEXT:    s_mov_b32 s1, 0
2389 ; GFX12-NEXT:  .LBB10_3: ; %atomicrmw.start
2390 ; GFX12-NEXT:    ; =>This Loop Header: Depth=1
2391 ; GFX12-NEXT:    ; Child Loop BB10_4 Depth 2
2392 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2393 ; GFX12-NEXT:    v_add_f64_e32 v[11:12], v[13:14], v[5:6]
2394 ; GFX12-NEXT:    s_mov_b32 s2, exec_lo
2395 ; GFX12-NEXT:    s_wait_storecnt 0x0
2396 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2397 ; GFX12-NEXT:    v_dual_mov_b32 v0, v11 :: v_dual_mov_b32 v1, v12
2398 ; GFX12-NEXT:    v_dual_mov_b32 v2, v13 :: v_dual_mov_b32 v3, v14
2399 ; GFX12-NEXT:  .LBB10_4: ; Parent Loop BB10_3 Depth=1
2400 ; GFX12-NEXT:    ; => This Inner Loop Header: Depth=2
2401 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v9
2402 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v10
2403 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v7
2404 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v8
2405 ; GFX12-NEXT:    s_wait_alu 0xf1ff
2406 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2407 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[9:10]
2408 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[7:8]
2409 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2410 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
2411 ; GFX12-NEXT:    s_wait_alu 0xfffe
2412 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
2413 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2414 ; GFX12-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v15, s[4:7], null offen th:TH_ATOMIC_RETURN
2415 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
2416 ; GFX12-NEXT:    s_cbranch_execnz .LBB10_4
2417 ; GFX12-NEXT:  ; %bb.5: ; in Loop: Header=BB10_3 Depth=1
2418 ; GFX12-NEXT:    s_mov_b32 exec_lo, s2
2419 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2420 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[13:14]
2421 ; GFX12-NEXT:    v_dual_mov_b32 v14, v1 :: v_dual_mov_b32 v13, v0
2422 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
2423 ; GFX12-NEXT:    s_or_b32 s1, vcc_lo, s1
2424 ; GFX12-NEXT:    s_wait_alu 0xfffe
2425 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
2426 ; GFX12-NEXT:    s_cbranch_execnz .LBB10_3
2427 ; GFX12-NEXT:  ; %bb.6: ; %atomicrmw.end
2428 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s1
2429 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2431 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2432 ; GFX940:       ; %bb.0:
2433 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2434 ; GFX940-NEXT:    v_mov_b32_e32 v7, v6
2435 ; GFX940-NEXT:    v_mov_b32_e32 v6, v5
2436 ; GFX940-NEXT:    s_mov_b64 s[2:3], exec
2437 ; GFX940-NEXT:    buffer_wbl2 sc1
2438 ; GFX940-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2439 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
2440 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
2441 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
2442 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
2443 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
2444 ; GFX940-NEXT:    s_nop 0
2445 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
2446 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
2447 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
2448 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2449 ; GFX940-NEXT:    buffer_atomic_add_f64 v[6:7], v4, s[4:7], 0 offen offset:2048 sc0
2450 ; GFX940-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
2451 ; GFX940-NEXT:    ; implicit-def: $vgpr4
2452 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
2453 ; GFX940-NEXT:    s_cbranch_execnz .LBB10_1
2454 ; GFX940-NEXT:  ; %bb.2:
2455 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
2456 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2457 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
2458 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
2459 ; GFX940-NEXT:    buffer_inv sc1
2460 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2462 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2463 ; GFX11:       ; %bb.0:
2464 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2465 ; GFX11-NEXT:    v_dual_mov_b32 v8, v3 :: v_dual_mov_b32 v7, v2
2466 ; GFX11-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
2467 ; GFX11-NEXT:    v_add_nc_u32_e32 v15, 0x800, v4
2468 ; GFX11-NEXT:    s_mov_b32 s1, 0
2469 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
2470 ; GFX11-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2471 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)
2472 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v9
2473 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v10
2474 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v7
2475 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v8
2476 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[9:10]
2477 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2478 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[7:8]
2479 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
2480 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2481 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
2482 ; GFX11-NEXT:    buffer_load_b64 v[13:14], v4, s[4:7], 0 offen offset:2048
2483 ; GFX11-NEXT:    ; implicit-def: $vgpr4
2484 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
2485 ; GFX11-NEXT:    s_cbranch_execnz .LBB10_1
2486 ; GFX11-NEXT:  ; %bb.2:
2487 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
2488 ; GFX11-NEXT:    .p2align 6
2489 ; GFX11-NEXT:  .LBB10_3: ; %atomicrmw.start
2490 ; GFX11-NEXT:    ; =>This Loop Header: Depth=1
2491 ; GFX11-NEXT:    ; Child Loop BB10_4 Depth 2
2492 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2493 ; GFX11-NEXT:    v_add_f64 v[11:12], v[13:14], v[5:6]
2494 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
2495 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
2496 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2497 ; GFX11-NEXT:    v_dual_mov_b32 v0, v11 :: v_dual_mov_b32 v1, v12
2498 ; GFX11-NEXT:    v_dual_mov_b32 v2, v13 :: v_dual_mov_b32 v3, v14
2499 ; GFX11-NEXT:  .LBB10_4: ; Parent Loop BB10_3 Depth=1
2500 ; GFX11-NEXT:    ; => This Inner Loop Header: Depth=2
2501 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v9
2502 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v10
2503 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v7
2504 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v8
2505 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
2506 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[9:10]
2507 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[7:8]
2508 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
2509 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
2510 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
2511 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2512 ; GFX11-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v15, s[4:7], 0 offen glc
2513 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
2514 ; GFX11-NEXT:    s_cbranch_execnz .LBB10_4
2515 ; GFX11-NEXT:  ; %bb.5: ; in Loop: Header=BB10_3 Depth=1
2516 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
2517 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2518 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[13:14]
2519 ; GFX11-NEXT:    v_dual_mov_b32 v14, v1 :: v_dual_mov_b32 v13, v0
2520 ; GFX11-NEXT:    buffer_gl1_inv
2521 ; GFX11-NEXT:    buffer_gl0_inv
2522 ; GFX11-NEXT:    s_or_b32 s1, vcc_lo, s1
2523 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2524 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
2525 ; GFX11-NEXT:    s_cbranch_execnz .LBB10_3
2526 ; GFX11-NEXT:  ; %bb.6: ; %atomicrmw.end
2527 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s1
2528 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2530 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2531 ; GFX10:       ; %bb.0:
2532 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2533 ; GFX10-NEXT:    v_mov_b32_e32 v8, v3
2534 ; GFX10-NEXT:    v_mov_b32_e32 v7, v2
2535 ; GFX10-NEXT:    v_mov_b32_e32 v10, v1
2536 ; GFX10-NEXT:    v_mov_b32_e32 v9, v0
2537 ; GFX10-NEXT:    v_add_nc_u32_e32 v15, 0x800, v4
2538 ; GFX10-NEXT:    s_mov_b32 s5, 0
2539 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
2540 ; GFX10-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2541 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v9
2542 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v10
2543 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v7
2544 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v8
2545 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[9:10]
2546 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[7:8]
2547 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
2548 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
2549 ; GFX10-NEXT:    buffer_load_dwordx2 v[13:14], v4, s[8:11], 0 offen offset:2048
2550 ; GFX10-NEXT:    ; implicit-def: $vgpr4
2551 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2552 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
2553 ; GFX10-NEXT:    s_cbranch_execnz .LBB10_1
2554 ; GFX10-NEXT:  ; %bb.2:
2555 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
2556 ; GFX10-NEXT:  .LBB10_3: ; %atomicrmw.start
2557 ; GFX10-NEXT:    ; =>This Loop Header: Depth=1
2558 ; GFX10-NEXT:    ; Child Loop BB10_4 Depth 2
2559 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2560 ; GFX10-NEXT:    v_add_f64 v[11:12], v[13:14], v[5:6]
2561 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
2562 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2563 ; GFX10-NEXT:    v_mov_b32_e32 v0, v11
2564 ; GFX10-NEXT:    v_mov_b32_e32 v1, v12
2565 ; GFX10-NEXT:    v_mov_b32_e32 v2, v13
2566 ; GFX10-NEXT:    v_mov_b32_e32 v3, v14
2567 ; GFX10-NEXT:  .LBB10_4: ; Parent Loop BB10_3 Depth=1
2568 ; GFX10-NEXT:    ; => This Inner Loop Header: Depth=2
2569 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v9
2570 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v10
2571 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v7
2572 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v8
2573 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[9:10]
2574 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[7:8]
2575 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
2576 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
2577 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2578 ; GFX10-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v15, s[8:11], 0 offen glc
2579 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2580 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
2581 ; GFX10-NEXT:    s_cbranch_execnz .LBB10_4
2582 ; GFX10-NEXT:  ; %bb.5: ; in Loop: Header=BB10_3 Depth=1
2583 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
2584 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2585 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[13:14]
2586 ; GFX10-NEXT:    v_mov_b32_e32 v14, v1
2587 ; GFX10-NEXT:    v_mov_b32_e32 v13, v0
2588 ; GFX10-NEXT:    buffer_gl1_inv
2589 ; GFX10-NEXT:    buffer_gl0_inv
2590 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
2591 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
2592 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
2593 ; GFX10-NEXT:    s_cbranch_execnz .LBB10_3
2594 ; GFX10-NEXT:  ; %bb.6: ; %atomicrmw.end
2595 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
2596 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2598 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2599 ; GFX90A:       ; %bb.0:
2600 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2601 ; GFX90A-NEXT:    v_mov_b32_e32 v7, v6
2602 ; GFX90A-NEXT:    v_mov_b32_e32 v6, v5
2603 ; GFX90A-NEXT:    s_mov_b64 s[6:7], exec
2604 ; GFX90A-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2605 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
2606 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
2607 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
2608 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
2609 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
2610 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
2611 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2612 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2613 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2614 ; GFX90A-NEXT:    buffer_atomic_add_f64 v[6:7], v4, s[8:11], 0 offen offset:2048 glc
2615 ; GFX90A-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
2616 ; GFX90A-NEXT:    ; implicit-def: $vgpr4
2617 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
2618 ; GFX90A-NEXT:    s_cbranch_execnz .LBB10_1
2619 ; GFX90A-NEXT:  ; %bb.2:
2620 ; GFX90A-NEXT:    s_mov_b64 exec, s[6:7]
2621 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2622 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
2623 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
2624 ; GFX90A-NEXT:    buffer_wbinvl1
2625 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2627 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2628 ; GFX908:       ; %bb.0:
2629 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2630 ; GFX908-NEXT:    v_mov_b32_e32 v8, v3
2631 ; GFX908-NEXT:    v_mov_b32_e32 v7, v2
2632 ; GFX908-NEXT:    v_mov_b32_e32 v10, v1
2633 ; GFX908-NEXT:    v_mov_b32_e32 v9, v0
2634 ; GFX908-NEXT:    v_add_u32_e32 v15, 0x800, v4
2635 ; GFX908-NEXT:    s_mov_b64 s[6:7], exec
2636 ; GFX908-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2637 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v9
2638 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v10
2639 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v7
2640 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v8
2641 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2642 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2643 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2644 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2645 ; GFX908-NEXT:    s_nop 0
2646 ; GFX908-NEXT:    buffer_load_dwordx2 v[13:14], v4, s[8:11], 0 offen offset:2048
2647 ; GFX908-NEXT:    ; implicit-def: $vgpr4
2648 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
2649 ; GFX908-NEXT:    s_cbranch_execnz .LBB10_1
2650 ; GFX908-NEXT:  ; %bb.2:
2651 ; GFX908-NEXT:    s_mov_b64 exec, s[6:7]
2652 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
2653 ; GFX908-NEXT:  .LBB10_3: ; %atomicrmw.start
2654 ; GFX908-NEXT:    ; =>This Loop Header: Depth=1
2655 ; GFX908-NEXT:    ; Child Loop BB10_4 Depth 2
2656 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
2657 ; GFX908-NEXT:    v_add_f64 v[11:12], v[13:14], v[5:6]
2658 ; GFX908-NEXT:    s_mov_b64 s[12:13], exec
2659 ; GFX908-NEXT:    v_mov_b32_e32 v0, v11
2660 ; GFX908-NEXT:    v_mov_b32_e32 v1, v12
2661 ; GFX908-NEXT:    v_mov_b32_e32 v2, v13
2662 ; GFX908-NEXT:    v_mov_b32_e32 v3, v14
2663 ; GFX908-NEXT:  .LBB10_4: ; Parent Loop BB10_3 Depth=1
2664 ; GFX908-NEXT:    ; => This Inner Loop Header: Depth=2
2665 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v9
2666 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v10
2667 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v7
2668 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v8
2669 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2670 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2671 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2672 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2673 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
2674 ; GFX908-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v15, s[8:11], 0 offen glc
2675 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
2676 ; GFX908-NEXT:    s_cbranch_execnz .LBB10_4
2677 ; GFX908-NEXT:  ; %bb.5: ; in Loop: Header=BB10_3 Depth=1
2678 ; GFX908-NEXT:    s_mov_b64 exec, s[12:13]
2679 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
2680 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[13:14]
2681 ; GFX908-NEXT:    v_mov_b32_e32 v14, v1
2682 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
2683 ; GFX908-NEXT:    v_mov_b32_e32 v13, v0
2684 ; GFX908-NEXT:    buffer_wbinvl1
2685 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
2686 ; GFX908-NEXT:    s_cbranch_execnz .LBB10_3
2687 ; GFX908-NEXT:  ; %bb.6: ; %atomicrmw.end
2688 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
2689 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
2691 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2692 ; GFX8:       ; %bb.0:
2693 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2694 ; GFX8-NEXT:    v_mov_b32_e32 v8, v3
2695 ; GFX8-NEXT:    v_mov_b32_e32 v7, v2
2696 ; GFX8-NEXT:    v_mov_b32_e32 v10, v1
2697 ; GFX8-NEXT:    v_mov_b32_e32 v9, v0
2698 ; GFX8-NEXT:    v_add_u32_e32 v15, vcc, 0x800, v4
2699 ; GFX8-NEXT:    s_mov_b64 s[6:7], exec
2700 ; GFX8-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2701 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v9
2702 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v10
2703 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v7
2704 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v8
2705 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2706 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2707 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2708 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2709 ; GFX8-NEXT:    s_nop 0
2710 ; GFX8-NEXT:    buffer_load_dwordx2 v[13:14], v4, s[8:11], 0 offen offset:2048
2711 ; GFX8-NEXT:    ; implicit-def: $vgpr4
2712 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
2713 ; GFX8-NEXT:    s_cbranch_execnz .LBB10_1
2714 ; GFX8-NEXT:  ; %bb.2:
2715 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
2716 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
2717 ; GFX8-NEXT:  .LBB10_3: ; %atomicrmw.start
2718 ; GFX8-NEXT:    ; =>This Loop Header: Depth=1
2719 ; GFX8-NEXT:    ; Child Loop BB10_4 Depth 2
2720 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2721 ; GFX8-NEXT:    v_add_f64 v[11:12], v[13:14], v[5:6]
2722 ; GFX8-NEXT:    s_mov_b64 s[12:13], exec
2723 ; GFX8-NEXT:    v_mov_b32_e32 v0, v11
2724 ; GFX8-NEXT:    v_mov_b32_e32 v1, v12
2725 ; GFX8-NEXT:    v_mov_b32_e32 v2, v13
2726 ; GFX8-NEXT:    v_mov_b32_e32 v3, v14
2727 ; GFX8-NEXT:  .LBB10_4: ; Parent Loop BB10_3 Depth=1
2728 ; GFX8-NEXT:    ; => This Inner Loop Header: Depth=2
2729 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v9
2730 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v10
2731 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v7
2732 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v8
2733 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2734 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2735 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2736 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2737 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2738 ; GFX8-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v15, s[8:11], 0 offen glc
2739 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
2740 ; GFX8-NEXT:    s_cbranch_execnz .LBB10_4
2741 ; GFX8-NEXT:  ; %bb.5: ; in Loop: Header=BB10_3 Depth=1
2742 ; GFX8-NEXT:    s_mov_b64 exec, s[12:13]
2743 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2744 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[13:14]
2745 ; GFX8-NEXT:    v_mov_b32_e32 v14, v1
2746 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
2747 ; GFX8-NEXT:    v_mov_b32_e32 v13, v0
2748 ; GFX8-NEXT:    buffer_wbinvl1
2749 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
2750 ; GFX8-NEXT:    s_cbranch_execnz .LBB10_3
2751 ; GFX8-NEXT:  ; %bb.6: ; %atomicrmw.end
2752 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
2753 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2755 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2756 ; GFX7:       ; %bb.0:
2757 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2758 ; GFX7-NEXT:    v_mov_b32_e32 v8, v3
2759 ; GFX7-NEXT:    v_mov_b32_e32 v7, v2
2760 ; GFX7-NEXT:    v_mov_b32_e32 v10, v1
2761 ; GFX7-NEXT:    v_mov_b32_e32 v9, v0
2762 ; GFX7-NEXT:    v_add_i32_e32 v15, vcc, 0x800, v4
2763 ; GFX7-NEXT:    s_mov_b64 s[6:7], exec
2764 ; GFX7-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2765 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v9
2766 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v10
2767 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v7
2768 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v8
2769 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2770 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2771 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2772 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2773 ; GFX7-NEXT:    buffer_load_dwordx2 v[13:14], v4, s[8:11], 0 offen offset:2048
2774 ; GFX7-NEXT:    ; implicit-def: $vgpr4
2775 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
2776 ; GFX7-NEXT:    s_cbranch_execnz .LBB10_1
2777 ; GFX7-NEXT:  ; %bb.2:
2778 ; GFX7-NEXT:    s_mov_b64 exec, s[6:7]
2779 ; GFX7-NEXT:    s_mov_b64 s[6:7], 0
2780 ; GFX7-NEXT:  .LBB10_3: ; %atomicrmw.start
2781 ; GFX7-NEXT:    ; =>This Loop Header: Depth=1
2782 ; GFX7-NEXT:    ; Child Loop BB10_4 Depth 2
2783 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2784 ; GFX7-NEXT:    v_add_f64 v[11:12], v[13:14], v[5:6]
2785 ; GFX7-NEXT:    s_mov_b64 s[12:13], exec
2786 ; GFX7-NEXT:    v_mov_b32_e32 v0, v11
2787 ; GFX7-NEXT:    v_mov_b32_e32 v1, v12
2788 ; GFX7-NEXT:    v_mov_b32_e32 v2, v13
2789 ; GFX7-NEXT:    v_mov_b32_e32 v3, v14
2790 ; GFX7-NEXT:  .LBB10_4: ; Parent Loop BB10_3 Depth=1
2791 ; GFX7-NEXT:    ; => This Inner Loop Header: Depth=2
2792 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v9
2793 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v10
2794 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v7
2795 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v8
2796 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2797 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2798 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2799 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2800 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2801 ; GFX7-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v15, s[8:11], 0 offen glc
2802 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
2803 ; GFX7-NEXT:    s_cbranch_execnz .LBB10_4
2804 ; GFX7-NEXT:  ; %bb.5: ; in Loop: Header=BB10_3 Depth=1
2805 ; GFX7-NEXT:    s_mov_b64 exec, s[12:13]
2806 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2807 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[13:14]
2808 ; GFX7-NEXT:    v_mov_b32_e32 v14, v1
2809 ; GFX7-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
2810 ; GFX7-NEXT:    v_mov_b32_e32 v13, v0
2811 ; GFX7-NEXT:    buffer_wbinvl1
2812 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[6:7]
2813 ; GFX7-NEXT:    s_cbranch_execnz .LBB10_3
2814 ; GFX7-NEXT:  ; %bb.6: ; %atomicrmw.end
2815 ; GFX7-NEXT:    s_or_b64 exec, exec, s[6:7]
2816 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2818 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__waterfall__amdgpu_no_fine_grained_memory:
2819 ; GFX6:       ; %bb.0:
2820 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2821 ; GFX6-NEXT:    v_mov_b32_e32 v8, v3
2822 ; GFX6-NEXT:    v_mov_b32_e32 v7, v2
2823 ; GFX6-NEXT:    v_mov_b32_e32 v10, v1
2824 ; GFX6-NEXT:    v_mov_b32_e32 v9, v0
2825 ; GFX6-NEXT:    v_add_i32_e32 v15, vcc, 0x800, v4
2826 ; GFX6-NEXT:    s_mov_b64 s[6:7], exec
2827 ; GFX6-NEXT:  .LBB10_1: ; =>This Inner Loop Header: Depth=1
2828 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v9
2829 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v10
2830 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v7
2831 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v8
2832 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2833 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2834 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2835 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2836 ; GFX6-NEXT:    buffer_load_dwordx2 v[13:14], v4, s[8:11], 0 offen offset:2048
2837 ; GFX6-NEXT:    ; implicit-def: $vgpr4
2838 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
2839 ; GFX6-NEXT:    s_cbranch_execnz .LBB10_1
2840 ; GFX6-NEXT:  ; %bb.2:
2841 ; GFX6-NEXT:    s_mov_b64 exec, s[6:7]
2842 ; GFX6-NEXT:    s_mov_b64 s[6:7], 0
2843 ; GFX6-NEXT:  .LBB10_3: ; %atomicrmw.start
2844 ; GFX6-NEXT:    ; =>This Loop Header: Depth=1
2845 ; GFX6-NEXT:    ; Child Loop BB10_4 Depth 2
2846 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
2847 ; GFX6-NEXT:    v_add_f64 v[11:12], v[13:14], v[5:6]
2848 ; GFX6-NEXT:    s_mov_b64 s[12:13], exec
2849 ; GFX6-NEXT:    s_waitcnt expcnt(0)
2850 ; GFX6-NEXT:    v_mov_b32_e32 v0, v11
2851 ; GFX6-NEXT:    v_mov_b32_e32 v1, v12
2852 ; GFX6-NEXT:    v_mov_b32_e32 v2, v13
2853 ; GFX6-NEXT:    v_mov_b32_e32 v3, v14
2854 ; GFX6-NEXT:  .LBB10_4: ; Parent Loop BB10_3 Depth=1
2855 ; GFX6-NEXT:    ; => This Inner Loop Header: Depth=2
2856 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v9
2857 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v10
2858 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v7
2859 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v8
2860 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[9:10]
2861 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[7:8]
2862 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
2863 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
2864 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2865 ; GFX6-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v15, s[8:11], 0 offen glc
2866 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
2867 ; GFX6-NEXT:    s_cbranch_execnz .LBB10_4
2868 ; GFX6-NEXT:  ; %bb.5: ; in Loop: Header=BB10_3 Depth=1
2869 ; GFX6-NEXT:    s_mov_b64 exec, s[12:13]
2870 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
2871 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[13:14]
2872 ; GFX6-NEXT:    v_mov_b32_e32 v14, v1
2873 ; GFX6-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
2874 ; GFX6-NEXT:    v_mov_b32_e32 v13, v0
2875 ; GFX6-NEXT:    buffer_wbinvl1
2876 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[6:7]
2877 ; GFX6-NEXT:    s_cbranch_execnz .LBB10_3
2878 ; GFX6-NEXT:  ; %bb.6: ; %atomicrmw.end
2879 ; GFX6-NEXT:    s_or_b64 exec, exec, s[6:7]
2880 ; GFX6-NEXT:    s_waitcnt expcnt(0)
2881 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
2882   %gep = getelementptr double, ptr addrspace(7) %ptr, i32 256
2883   %result = atomicrmw fadd ptr addrspace(7) %gep, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
2884   ret double %result
2887 define double @buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, double %val) #0 {
2888 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
2889 ; GFX12:       ; %bb.0:
2890 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
2891 ; GFX12-NEXT:    s_wait_expcnt 0x0
2892 ; GFX12-NEXT:    s_wait_samplecnt 0x0
2893 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
2894 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2895 ; GFX12-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
2896 ; GFX12-NEXT:    v_mov_b32_e32 v0, s16
2897 ; GFX12-NEXT:    s_add_co_i32 s4, s16, 0x800
2898 ; GFX12-NEXT:    s_wait_alu 0xfffe
2899 ; GFX12-NEXT:    v_mov_b32_e32 v6, s4
2900 ; GFX12-NEXT:    s_mov_b32 s4, 0
2901 ; GFX12-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], null offen offset:2048
2902 ; GFX12-NEXT:  .LBB11_1: ; %atomicrmw.start
2903 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
2904 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2905 ; GFX12-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
2906 ; GFX12-NEXT:    s_wait_storecnt 0x0
2907 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2908 ; GFX12-NEXT:    v_add_f64_e32 v[7:8], v[9:10], v[4:5]
2909 ; GFX12-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
2910 ; GFX12-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
2911 ; GFX12-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v6, s[0:3], null offen th:TH_ATOMIC_RETURN
2912 ; GFX12-NEXT:    s_wait_loadcnt 0x0
2913 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
2914 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
2915 ; GFX12-NEXT:    s_or_b32 s4, vcc_lo, s4
2916 ; GFX12-NEXT:    s_wait_alu 0xfffe
2917 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
2918 ; GFX12-NEXT:    s_cbranch_execnz .LBB11_1
2919 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
2920 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s4
2921 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
2923 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
2924 ; GFX940:       ; %bb.0:
2925 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2926 ; GFX940-NEXT:    v_mov_b32_e32 v2, s16
2927 ; GFX940-NEXT:    buffer_wbl2 sc1
2928 ; GFX940-NEXT:    buffer_atomic_add_f64 v[0:1], v2, s[0:3], 0 offen offset:2048 sc0
2929 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2930 ; GFX940-NEXT:    buffer_inv sc1
2931 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2933 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
2934 ; GFX11:       ; %bb.0:
2935 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2936 ; GFX11-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
2937 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
2938 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x800
2939 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2940 ; GFX11-NEXT:    v_mov_b32_e32 v6, s4
2941 ; GFX11-NEXT:    s_mov_b32 s4, 0
2942 ; GFX11-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], 0 offen offset:2048
2943 ; GFX11-NEXT:  .LBB11_1: ; %atomicrmw.start
2944 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
2945 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2946 ; GFX11-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
2947 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
2948 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2949 ; GFX11-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
2950 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
2951 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
2952 ; GFX11-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v6, s[0:3], 0 offen glc
2953 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2954 ; GFX11-NEXT:    buffer_gl1_inv
2955 ; GFX11-NEXT:    buffer_gl0_inv
2956 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
2957 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
2958 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2959 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
2960 ; GFX11-NEXT:    s_cbranch_execnz .LBB11_1
2961 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
2962 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
2963 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
2965 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
2966 ; GFX10:       ; %bb.0:
2967 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2968 ; GFX10-NEXT:    v_mov_b32_e32 v4, v0
2969 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
2970 ; GFX10-NEXT:    v_mov_b32_e32 v5, v1
2971 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x800
2972 ; GFX10-NEXT:    v_mov_b32_e32 v6, s4
2973 ; GFX10-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
2974 ; GFX10-NEXT:    s_mov_b32 s4, 0
2975 ; GFX10-NEXT:  .LBB11_1: ; %atomicrmw.start
2976 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
2977 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2978 ; GFX10-NEXT:    v_mov_b32_e32 v10, v1
2979 ; GFX10-NEXT:    v_mov_b32_e32 v9, v0
2980 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2981 ; GFX10-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
2982 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
2983 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
2984 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
2985 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
2986 ; GFX10-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
2987 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2988 ; GFX10-NEXT:    buffer_gl1_inv
2989 ; GFX10-NEXT:    buffer_gl0_inv
2990 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
2991 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
2992 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
2993 ; GFX10-NEXT:    s_cbranch_execnz .LBB11_1
2994 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
2995 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
2996 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2998 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
2999 ; GFX90A:       ; %bb.0:
3000 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3001 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
3002 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
3003 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
3004 ; GFX90A-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3005 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x800
3006 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
3007 ; GFX90A-NEXT:    v_mov_b32_e32 v6, s6
3008 ; GFX90A-NEXT:  .LBB11_1: ; %atomicrmw.start
3009 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
3010 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3011 ; GFX90A-NEXT:    v_pk_mov_b32 v[10:11], v[0:1], v[0:1] op_sel:[0,1]
3012 ; GFX90A-NEXT:    v_add_f64 v[8:9], v[10:11], v[4:5]
3013 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[8:9], v[8:9] op_sel:[0,1]
3014 ; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[10:11], v[10:11] op_sel:[0,1]
3015 ; GFX90A-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3016 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3017 ; GFX90A-NEXT:    buffer_wbinvl1
3018 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[10:11]
3019 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3020 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3021 ; GFX90A-NEXT:    s_cbranch_execnz .LBB11_1
3022 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
3023 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
3024 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3026 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
3027 ; GFX908:       ; %bb.0:
3028 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3029 ; GFX908-NEXT:    v_mov_b32_e32 v4, v0
3030 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
3031 ; GFX908-NEXT:    v_mov_b32_e32 v5, v1
3032 ; GFX908-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3033 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x800
3034 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
3035 ; GFX908-NEXT:    v_mov_b32_e32 v6, s6
3036 ; GFX908-NEXT:  .LBB11_1: ; %atomicrmw.start
3037 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
3038 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3039 ; GFX908-NEXT:    v_mov_b32_e32 v10, v1
3040 ; GFX908-NEXT:    v_mov_b32_e32 v9, v0
3041 ; GFX908-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3042 ; GFX908-NEXT:    v_mov_b32_e32 v0, v7
3043 ; GFX908-NEXT:    v_mov_b32_e32 v1, v8
3044 ; GFX908-NEXT:    v_mov_b32_e32 v2, v9
3045 ; GFX908-NEXT:    v_mov_b32_e32 v3, v10
3046 ; GFX908-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3047 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3048 ; GFX908-NEXT:    buffer_wbinvl1
3049 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3050 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3051 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3052 ; GFX908-NEXT:    s_cbranch_execnz .LBB11_1
3053 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
3054 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
3055 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
3057 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
3058 ; GFX8:       ; %bb.0:
3059 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3060 ; GFX8-NEXT:    v_mov_b32_e32 v4, v0
3061 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
3062 ; GFX8-NEXT:    v_mov_b32_e32 v5, v1
3063 ; GFX8-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3064 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x800
3065 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
3066 ; GFX8-NEXT:    v_mov_b32_e32 v6, s6
3067 ; GFX8-NEXT:  .LBB11_1: ; %atomicrmw.start
3068 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
3069 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3070 ; GFX8-NEXT:    v_mov_b32_e32 v10, v1
3071 ; GFX8-NEXT:    v_mov_b32_e32 v9, v0
3072 ; GFX8-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3073 ; GFX8-NEXT:    v_mov_b32_e32 v0, v7
3074 ; GFX8-NEXT:    v_mov_b32_e32 v1, v8
3075 ; GFX8-NEXT:    v_mov_b32_e32 v2, v9
3076 ; GFX8-NEXT:    v_mov_b32_e32 v3, v10
3077 ; GFX8-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3078 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3079 ; GFX8-NEXT:    buffer_wbinvl1
3080 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3081 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3082 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3083 ; GFX8-NEXT:    s_cbranch_execnz .LBB11_1
3084 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
3085 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
3086 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3088 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
3089 ; GFX7:       ; %bb.0:
3090 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3091 ; GFX7-NEXT:    v_mov_b32_e32 v4, v0
3092 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
3093 ; GFX7-NEXT:    v_mov_b32_e32 v5, v1
3094 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3095 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x800
3096 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
3097 ; GFX7-NEXT:    v_mov_b32_e32 v6, s6
3098 ; GFX7-NEXT:  .LBB11_1: ; %atomicrmw.start
3099 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
3100 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3101 ; GFX7-NEXT:    v_mov_b32_e32 v10, v1
3102 ; GFX7-NEXT:    v_mov_b32_e32 v9, v0
3103 ; GFX7-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3104 ; GFX7-NEXT:    v_mov_b32_e32 v0, v7
3105 ; GFX7-NEXT:    v_mov_b32_e32 v1, v8
3106 ; GFX7-NEXT:    v_mov_b32_e32 v2, v9
3107 ; GFX7-NEXT:    v_mov_b32_e32 v3, v10
3108 ; GFX7-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3109 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3110 ; GFX7-NEXT:    buffer_wbinvl1
3111 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3112 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3113 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3114 ; GFX7-NEXT:    s_cbranch_execnz .LBB11_1
3115 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
3116 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
3117 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3119 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_remote_memory:
3120 ; GFX6:       ; %bb.0:
3121 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3122 ; GFX6-NEXT:    v_mov_b32_e32 v4, v0
3123 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
3124 ; GFX6-NEXT:    v_mov_b32_e32 v5, v1
3125 ; GFX6-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3126 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x800
3127 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
3128 ; GFX6-NEXT:    v_mov_b32_e32 v6, s6
3129 ; GFX6-NEXT:  .LBB11_1: ; %atomicrmw.start
3130 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
3131 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
3132 ; GFX6-NEXT:    v_mov_b32_e32 v10, v1
3133 ; GFX6-NEXT:    v_mov_b32_e32 v9, v0
3134 ; GFX6-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3135 ; GFX6-NEXT:    s_waitcnt expcnt(0)
3136 ; GFX6-NEXT:    v_mov_b32_e32 v0, v7
3137 ; GFX6-NEXT:    v_mov_b32_e32 v1, v8
3138 ; GFX6-NEXT:    v_mov_b32_e32 v2, v9
3139 ; GFX6-NEXT:    v_mov_b32_e32 v3, v10
3140 ; GFX6-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3141 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
3142 ; GFX6-NEXT:    buffer_wbinvl1
3143 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3144 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3145 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3146 ; GFX6-NEXT:    s_cbranch_execnz .LBB11_1
3147 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
3148 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
3149 ; GFX6-NEXT:    s_waitcnt expcnt(0)
3150 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
3151   %gep = getelementptr double, ptr addrspace(7) %ptr, i32 256
3152   %result = atomicrmw fadd ptr addrspace(7) %gep, double %val syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0
3153   ret double %result
3156 define double @buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, double %val) #0 {
3157 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3158 ; GFX12:       ; %bb.0:
3159 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
3160 ; GFX12-NEXT:    s_wait_expcnt 0x0
3161 ; GFX12-NEXT:    s_wait_samplecnt 0x0
3162 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
3163 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3164 ; GFX12-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
3165 ; GFX12-NEXT:    v_mov_b32_e32 v0, s16
3166 ; GFX12-NEXT:    s_add_co_i32 s4, s16, 0x800
3167 ; GFX12-NEXT:    s_wait_alu 0xfffe
3168 ; GFX12-NEXT:    v_mov_b32_e32 v6, s4
3169 ; GFX12-NEXT:    s_mov_b32 s4, 0
3170 ; GFX12-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], null offen offset:2048
3171 ; GFX12-NEXT:  .LBB12_1: ; %atomicrmw.start
3172 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
3173 ; GFX12-NEXT:    s_wait_loadcnt 0x0
3174 ; GFX12-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
3175 ; GFX12-NEXT:    s_wait_storecnt 0x0
3176 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3177 ; GFX12-NEXT:    v_add_f64_e32 v[7:8], v[9:10], v[4:5]
3178 ; GFX12-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
3179 ; GFX12-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
3180 ; GFX12-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v6, s[0:3], null offen th:TH_ATOMIC_RETURN
3181 ; GFX12-NEXT:    s_wait_loadcnt 0x0
3182 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
3183 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
3184 ; GFX12-NEXT:    s_or_b32 s4, vcc_lo, s4
3185 ; GFX12-NEXT:    s_wait_alu 0xfffe
3186 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
3187 ; GFX12-NEXT:    s_cbranch_execnz .LBB12_1
3188 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
3189 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s4
3190 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
3192 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3193 ; GFX940:       ; %bb.0:
3194 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3195 ; GFX940-NEXT:    v_mov_b32_e32 v2, s16
3196 ; GFX940-NEXT:    buffer_wbl2 sc1
3197 ; GFX940-NEXT:    buffer_atomic_add_f64 v[0:1], v2, s[0:3], 0 offen offset:2048 sc0
3198 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3199 ; GFX940-NEXT:    buffer_inv sc1
3200 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3202 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3203 ; GFX11:       ; %bb.0:
3204 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3205 ; GFX11-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
3206 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
3207 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x800
3208 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3209 ; GFX11-NEXT:    v_mov_b32_e32 v6, s4
3210 ; GFX11-NEXT:    s_mov_b32 s4, 0
3211 ; GFX11-NEXT:    buffer_load_b64 v[0:1], v0, s[0:3], 0 offen offset:2048
3212 ; GFX11-NEXT:  .LBB12_1: ; %atomicrmw.start
3213 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
3214 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3215 ; GFX11-NEXT:    v_dual_mov_b32 v10, v1 :: v_dual_mov_b32 v9, v0
3216 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
3217 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3218 ; GFX11-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3219 ; GFX11-NEXT:    v_dual_mov_b32 v0, v7 :: v_dual_mov_b32 v1, v8
3220 ; GFX11-NEXT:    v_dual_mov_b32 v2, v9 :: v_dual_mov_b32 v3, v10
3221 ; GFX11-NEXT:    buffer_atomic_cmpswap_b64 v[0:3], v6, s[0:3], 0 offen glc
3222 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3223 ; GFX11-NEXT:    buffer_gl1_inv
3224 ; GFX11-NEXT:    buffer_gl0_inv
3225 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
3226 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
3227 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3228 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
3229 ; GFX11-NEXT:    s_cbranch_execnz .LBB12_1
3230 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
3231 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
3232 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3234 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3235 ; GFX10:       ; %bb.0:
3236 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3237 ; GFX10-NEXT:    v_mov_b32_e32 v4, v0
3238 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
3239 ; GFX10-NEXT:    v_mov_b32_e32 v5, v1
3240 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x800
3241 ; GFX10-NEXT:    v_mov_b32_e32 v6, s4
3242 ; GFX10-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3243 ; GFX10-NEXT:    s_mov_b32 s4, 0
3244 ; GFX10-NEXT:  .LBB12_1: ; %atomicrmw.start
3245 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
3246 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3247 ; GFX10-NEXT:    v_mov_b32_e32 v10, v1
3248 ; GFX10-NEXT:    v_mov_b32_e32 v9, v0
3249 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
3250 ; GFX10-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3251 ; GFX10-NEXT:    v_mov_b32_e32 v0, v7
3252 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
3253 ; GFX10-NEXT:    v_mov_b32_e32 v2, v9
3254 ; GFX10-NEXT:    v_mov_b32_e32 v3, v10
3255 ; GFX10-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3256 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3257 ; GFX10-NEXT:    buffer_gl1_inv
3258 ; GFX10-NEXT:    buffer_gl0_inv
3259 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, v[0:1], v[9:10]
3260 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
3261 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
3262 ; GFX10-NEXT:    s_cbranch_execnz .LBB12_1
3263 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
3264 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
3265 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3267 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3268 ; GFX90A:       ; %bb.0:
3269 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3270 ; GFX90A-NEXT:    v_mov_b32_e32 v2, s20
3271 ; GFX90A-NEXT:    buffer_atomic_add_f64 v[0:1], v2, s[16:19], 0 offen offset:2048 glc
3272 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3273 ; GFX90A-NEXT:    buffer_wbinvl1
3274 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3276 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3277 ; GFX908:       ; %bb.0:
3278 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3279 ; GFX908-NEXT:    v_mov_b32_e32 v4, v0
3280 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
3281 ; GFX908-NEXT:    v_mov_b32_e32 v5, v1
3282 ; GFX908-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3283 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x800
3284 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
3285 ; GFX908-NEXT:    v_mov_b32_e32 v6, s6
3286 ; GFX908-NEXT:  .LBB12_1: ; %atomicrmw.start
3287 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
3288 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3289 ; GFX908-NEXT:    v_mov_b32_e32 v10, v1
3290 ; GFX908-NEXT:    v_mov_b32_e32 v9, v0
3291 ; GFX908-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3292 ; GFX908-NEXT:    v_mov_b32_e32 v0, v7
3293 ; GFX908-NEXT:    v_mov_b32_e32 v1, v8
3294 ; GFX908-NEXT:    v_mov_b32_e32 v2, v9
3295 ; GFX908-NEXT:    v_mov_b32_e32 v3, v10
3296 ; GFX908-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3297 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3298 ; GFX908-NEXT:    buffer_wbinvl1
3299 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3300 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3301 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3302 ; GFX908-NEXT:    s_cbranch_execnz .LBB12_1
3303 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
3304 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
3305 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
3307 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3308 ; GFX8:       ; %bb.0:
3309 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3310 ; GFX8-NEXT:    v_mov_b32_e32 v4, v0
3311 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
3312 ; GFX8-NEXT:    v_mov_b32_e32 v5, v1
3313 ; GFX8-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3314 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x800
3315 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
3316 ; GFX8-NEXT:    v_mov_b32_e32 v6, s6
3317 ; GFX8-NEXT:  .LBB12_1: ; %atomicrmw.start
3318 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
3319 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3320 ; GFX8-NEXT:    v_mov_b32_e32 v10, v1
3321 ; GFX8-NEXT:    v_mov_b32_e32 v9, v0
3322 ; GFX8-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3323 ; GFX8-NEXT:    v_mov_b32_e32 v0, v7
3324 ; GFX8-NEXT:    v_mov_b32_e32 v1, v8
3325 ; GFX8-NEXT:    v_mov_b32_e32 v2, v9
3326 ; GFX8-NEXT:    v_mov_b32_e32 v3, v10
3327 ; GFX8-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3328 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3329 ; GFX8-NEXT:    buffer_wbinvl1
3330 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3331 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3332 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3333 ; GFX8-NEXT:    s_cbranch_execnz .LBB12_1
3334 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
3335 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
3336 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3338 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3339 ; GFX7:       ; %bb.0:
3340 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3341 ; GFX7-NEXT:    v_mov_b32_e32 v4, v0
3342 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
3343 ; GFX7-NEXT:    v_mov_b32_e32 v5, v1
3344 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3345 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x800
3346 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
3347 ; GFX7-NEXT:    v_mov_b32_e32 v6, s6
3348 ; GFX7-NEXT:  .LBB12_1: ; %atomicrmw.start
3349 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
3350 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3351 ; GFX7-NEXT:    v_mov_b32_e32 v10, v1
3352 ; GFX7-NEXT:    v_mov_b32_e32 v9, v0
3353 ; GFX7-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3354 ; GFX7-NEXT:    v_mov_b32_e32 v0, v7
3355 ; GFX7-NEXT:    v_mov_b32_e32 v1, v8
3356 ; GFX7-NEXT:    v_mov_b32_e32 v2, v9
3357 ; GFX7-NEXT:    v_mov_b32_e32 v3, v10
3358 ; GFX7-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3359 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3360 ; GFX7-NEXT:    buffer_wbinvl1
3361 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3362 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3363 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3364 ; GFX7-NEXT:    s_cbranch_execnz .LBB12_1
3365 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
3366 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
3367 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3369 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f64__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
3370 ; GFX6:       ; %bb.0:
3371 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3372 ; GFX6-NEXT:    v_mov_b32_e32 v4, v0
3373 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
3374 ; GFX6-NEXT:    v_mov_b32_e32 v5, v1
3375 ; GFX6-NEXT:    buffer_load_dwordx2 v[0:1], v0, s[16:19], 0 offen offset:2048
3376 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x800
3377 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
3378 ; GFX6-NEXT:    v_mov_b32_e32 v6, s6
3379 ; GFX6-NEXT:  .LBB12_1: ; %atomicrmw.start
3380 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
3381 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
3382 ; GFX6-NEXT:    v_mov_b32_e32 v10, v1
3383 ; GFX6-NEXT:    v_mov_b32_e32 v9, v0
3384 ; GFX6-NEXT:    v_add_f64 v[7:8], v[9:10], v[4:5]
3385 ; GFX6-NEXT:    s_waitcnt expcnt(0)
3386 ; GFX6-NEXT:    v_mov_b32_e32 v0, v7
3387 ; GFX6-NEXT:    v_mov_b32_e32 v1, v8
3388 ; GFX6-NEXT:    v_mov_b32_e32 v2, v9
3389 ; GFX6-NEXT:    v_mov_b32_e32 v3, v10
3390 ; GFX6-NEXT:    buffer_atomic_cmpswap_x2 v[0:3], v6, s[16:19], 0 offen glc
3391 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
3392 ; GFX6-NEXT:    buffer_wbinvl1
3393 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, v[0:1], v[9:10]
3394 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3395 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3396 ; GFX6-NEXT:    s_cbranch_execnz .LBB12_1
3397 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
3398 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
3399 ; GFX6-NEXT:    s_waitcnt expcnt(0)
3400 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
3401   %gep = getelementptr double, ptr addrspace(7) %ptr, i32 256
3402   %result = atomicrmw fadd ptr addrspace(7) %gep, double %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0
3403   ret double %result
3406 ; --------------------------------------------------------------------
3407 ; half
3408 ; --------------------------------------------------------------------
3410 define half @buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, half %val) #0 {
3411 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3412 ; GFX12:       ; %bb.0:
3413 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
3414 ; GFX12-NEXT:    s_wait_expcnt 0x0
3415 ; GFX12-NEXT:    s_wait_samplecnt 0x0
3416 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
3417 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3418 ; GFX12-NEXT:    s_addk_co_i32 s16, 0x200
3419 ; GFX12-NEXT:    s_wait_alu 0xfffe
3420 ; GFX12-NEXT:    s_and_b32 s4, s16, -4
3421 ; GFX12-NEXT:    s_wait_alu 0xfffe
3422 ; GFX12-NEXT:    v_mov_b32_e32 v5, s4
3423 ; GFX12-NEXT:    s_and_b32 s4, s16, 3
3424 ; GFX12-NEXT:    s_wait_alu 0xfffe
3425 ; GFX12-NEXT:    s_lshl_b32 s4, s4, 3
3426 ; GFX12-NEXT:    s_wait_alu 0xfffe
3427 ; GFX12-NEXT:    s_lshl_b32 s5, 0xffff, s4
3428 ; GFX12-NEXT:    buffer_load_b32 v2, v5, s[0:3], null offen
3429 ; GFX12-NEXT:    s_not_b32 s6, s5
3430 ; GFX12-NEXT:    s_mov_b32 s5, 0
3431 ; GFX12-NEXT:  .LBB13_1: ; %atomicrmw.start
3432 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
3433 ; GFX12-NEXT:    s_wait_loadcnt 0x0
3434 ; GFX12-NEXT:    v_lshrrev_b32_e32 v1, s4, v2
3435 ; GFX12-NEXT:    s_wait_storecnt 0x0
3436 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3437 ; GFX12-NEXT:    v_add_f16_e32 v1, v1, v0
3438 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
3439 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3440 ; GFX12-NEXT:    v_lshlrev_b32_e32 v1, s4, v1
3441 ; GFX12-NEXT:    s_wait_alu 0xfffe
3442 ; GFX12-NEXT:    v_and_or_b32 v1, v2, s6, v1
3443 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3444 ; GFX12-NEXT:    v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v3, v1
3445 ; GFX12-NEXT:    buffer_atomic_cmpswap_b32 v[3:4], v5, s[0:3], null offen th:TH_ATOMIC_RETURN
3446 ; GFX12-NEXT:    s_wait_loadcnt 0x0
3447 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
3448 ; GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v3, v2
3449 ; GFX12-NEXT:    v_mov_b32_e32 v2, v3
3450 ; GFX12-NEXT:    s_or_b32 s5, vcc_lo, s5
3451 ; GFX12-NEXT:    s_wait_alu 0xfffe
3452 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
3453 ; GFX12-NEXT:    s_cbranch_execnz .LBB13_1
3454 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
3455 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s5
3456 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, s4, v3
3457 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
3459 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3460 ; GFX940:       ; %bb.0:
3461 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3462 ; GFX940-NEXT:    s_addk_i32 s16, 0x200
3463 ; GFX940-NEXT:    s_and_b32 s4, s16, -4
3464 ; GFX940-NEXT:    v_mov_b32_e32 v1, s4
3465 ; GFX940-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen
3466 ; GFX940-NEXT:    s_and_b32 s4, s16, 3
3467 ; GFX940-NEXT:    s_lshl_b32 s6, s4, 3
3468 ; GFX940-NEXT:    s_lshl_b32 s4, 0xffff, s6
3469 ; GFX940-NEXT:    s_not_b32 s7, s4
3470 ; GFX940-NEXT:    s_mov_b64 s[4:5], 0
3471 ; GFX940-NEXT:  .LBB13_1: ; %atomicrmw.start
3472 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
3473 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3474 ; GFX940-NEXT:    v_lshrrev_b32_e32 v2, s6, v3
3475 ; GFX940-NEXT:    v_add_f16_e32 v2, v2, v0
3476 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, s6, v2
3477 ; GFX940-NEXT:    v_and_or_b32 v2, v3, s7, v2
3478 ; GFX940-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]
3479 ; GFX940-NEXT:    buffer_wbl2 sc1
3480 ; GFX940-NEXT:    buffer_atomic_cmpswap v[4:5], v1, s[0:3], 0 offen sc0
3481 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3482 ; GFX940-NEXT:    buffer_inv sc1
3483 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v3
3484 ; GFX940-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3485 ; GFX940-NEXT:    v_mov_b32_e32 v3, v4
3486 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3487 ; GFX940-NEXT:    s_cbranch_execnz .LBB13_1
3488 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
3489 ; GFX940-NEXT:    s_or_b64 exec, exec, s[4:5]
3490 ; GFX940-NEXT:    v_lshrrev_b32_e32 v0, s6, v4
3491 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3493 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3494 ; GFX11:       ; %bb.0:
3495 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3496 ; GFX11-NEXT:    s_addk_i32 s16, 0x200
3497 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3498 ; GFX11-NEXT:    s_and_b32 s4, s16, -4
3499 ; GFX11-NEXT:    v_mov_b32_e32 v5, s4
3500 ; GFX11-NEXT:    s_and_b32 s4, s16, 3
3501 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3502 ; GFX11-NEXT:    s_lshl_b32 s4, s4, 3
3503 ; GFX11-NEXT:    s_lshl_b32 s5, 0xffff, s4
3504 ; GFX11-NEXT:    buffer_load_b32 v2, v5, s[0:3], 0 offen
3505 ; GFX11-NEXT:    s_not_b32 s6, s5
3506 ; GFX11-NEXT:    s_mov_b32 s5, 0
3507 ; GFX11-NEXT:  .LBB13_1: ; %atomicrmw.start
3508 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
3509 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3510 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, s4, v2
3511 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
3512 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3513 ; GFX11-NEXT:    v_add_f16_e32 v1, v1, v0
3514 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v1
3515 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3516 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, s4, v1
3517 ; GFX11-NEXT:    v_and_or_b32 v1, v2, s6, v1
3518 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3519 ; GFX11-NEXT:    v_dual_mov_b32 v4, v2 :: v_dual_mov_b32 v3, v1
3520 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[3:4], v5, s[0:3], 0 offen glc
3521 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3522 ; GFX11-NEXT:    buffer_gl1_inv
3523 ; GFX11-NEXT:    buffer_gl0_inv
3524 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v3, v2
3525 ; GFX11-NEXT:    v_mov_b32_e32 v2, v3
3526 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
3527 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3528 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
3529 ; GFX11-NEXT:    s_cbranch_execnz .LBB13_1
3530 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
3531 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
3532 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, s4, v3
3533 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3535 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3536 ; GFX10:       ; %bb.0:
3537 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3538 ; GFX10-NEXT:    s_addk_i32 s20, 0x200
3539 ; GFX10-NEXT:    s_and_b32 s4, s20, -4
3540 ; GFX10-NEXT:    v_mov_b32_e32 v5, s4
3541 ; GFX10-NEXT:    s_and_b32 s4, s20, 3
3542 ; GFX10-NEXT:    s_lshl_b32 s4, s4, 3
3543 ; GFX10-NEXT:    s_lshl_b32 s5, 0xffff, s4
3544 ; GFX10-NEXT:    buffer_load_dword v2, v5, s[16:19], 0 offen
3545 ; GFX10-NEXT:    s_not_b32 s6, s5
3546 ; GFX10-NEXT:    s_mov_b32 s5, 0
3547 ; GFX10-NEXT:  .LBB13_1: ; %atomicrmw.start
3548 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
3549 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3550 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, s4, v2
3551 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
3552 ; GFX10-NEXT:    v_add_f16_e32 v1, v1, v0
3553 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v1, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3554 ; GFX10-NEXT:    v_and_or_b32 v1, v2, s6, v1
3555 ; GFX10-NEXT:    v_mov_b32_e32 v4, v2
3556 ; GFX10-NEXT:    v_mov_b32_e32 v3, v1
3557 ; GFX10-NEXT:    buffer_atomic_cmpswap v[3:4], v5, s[16:19], 0 offen glc
3558 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3559 ; GFX10-NEXT:    buffer_gl1_inv
3560 ; GFX10-NEXT:    buffer_gl0_inv
3561 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v3, v2
3562 ; GFX10-NEXT:    v_mov_b32_e32 v2, v3
3563 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
3564 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
3565 ; GFX10-NEXT:    s_cbranch_execnz .LBB13_1
3566 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
3567 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
3568 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, s4, v3
3569 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3571 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3572 ; GFX90A:       ; %bb.0:
3573 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3574 ; GFX90A-NEXT:    s_addk_i32 s20, 0x200
3575 ; GFX90A-NEXT:    s_and_b32 s4, s20, -4
3576 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s4
3577 ; GFX90A-NEXT:    buffer_load_dword v3, v1, s[16:19], 0 offen
3578 ; GFX90A-NEXT:    s_and_b32 s4, s20, 3
3579 ; GFX90A-NEXT:    s_lshl_b32 s6, s4, 3
3580 ; GFX90A-NEXT:    s_lshl_b32 s4, 0xffff, s6
3581 ; GFX90A-NEXT:    s_not_b32 s7, s4
3582 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
3583 ; GFX90A-NEXT:  .LBB13_1: ; %atomicrmw.start
3584 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
3585 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3586 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v2, s6, v3
3587 ; GFX90A-NEXT:    v_add_f16_e32 v2, v2, v0
3588 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, s6, v2
3589 ; GFX90A-NEXT:    v_and_or_b32 v2, v3, s7, v2
3590 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]
3591 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v1, s[16:19], 0 offen glc
3592 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3593 ; GFX90A-NEXT:    buffer_wbinvl1
3594 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v3
3595 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3596 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v4
3597 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3598 ; GFX90A-NEXT:    s_cbranch_execnz .LBB13_1
3599 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
3600 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
3601 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, s6, v4
3602 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3604 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3605 ; GFX908:       ; %bb.0:
3606 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3607 ; GFX908-NEXT:    s_addk_i32 s20, 0x200
3608 ; GFX908-NEXT:    s_and_b32 s4, s20, -4
3609 ; GFX908-NEXT:    v_mov_b32_e32 v5, s4
3610 ; GFX908-NEXT:    buffer_load_dword v2, v5, s[16:19], 0 offen
3611 ; GFX908-NEXT:    s_and_b32 s4, s20, 3
3612 ; GFX908-NEXT:    s_lshl_b32 s6, s4, 3
3613 ; GFX908-NEXT:    s_lshl_b32 s4, 0xffff, s6
3614 ; GFX908-NEXT:    s_not_b32 s7, s4
3615 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
3616 ; GFX908-NEXT:  .LBB13_1: ; %atomicrmw.start
3617 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
3618 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3619 ; GFX908-NEXT:    v_lshrrev_b32_e32 v1, s6, v2
3620 ; GFX908-NEXT:    v_add_f16_e32 v1, v1, v0
3621 ; GFX908-NEXT:    v_lshlrev_b32_e32 v1, s6, v1
3622 ; GFX908-NEXT:    v_and_or_b32 v1, v2, s7, v1
3623 ; GFX908-NEXT:    v_mov_b32_e32 v4, v2
3624 ; GFX908-NEXT:    v_mov_b32_e32 v3, v1
3625 ; GFX908-NEXT:    buffer_atomic_cmpswap v[3:4], v5, s[16:19], 0 offen glc
3626 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3627 ; GFX908-NEXT:    buffer_wbinvl1
3628 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v2
3629 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3630 ; GFX908-NEXT:    v_mov_b32_e32 v2, v3
3631 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3632 ; GFX908-NEXT:    s_cbranch_execnz .LBB13_1
3633 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
3634 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
3635 ; GFX908-NEXT:    v_lshrrev_b32_e32 v0, s6, v3
3636 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
3638 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3639 ; GFX8:       ; %bb.0:
3640 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3641 ; GFX8-NEXT:    s_addk_i32 s20, 0x200
3642 ; GFX8-NEXT:    s_and_b32 s4, s20, -4
3643 ; GFX8-NEXT:    v_mov_b32_e32 v5, s4
3644 ; GFX8-NEXT:    buffer_load_dword v2, v5, s[16:19], 0 offen
3645 ; GFX8-NEXT:    s_and_b32 s4, s20, 3
3646 ; GFX8-NEXT:    s_lshl_b32 s6, s4, 3
3647 ; GFX8-NEXT:    s_lshl_b32 s4, 0xffff, s6
3648 ; GFX8-NEXT:    s_not_b32 s7, s4
3649 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
3650 ; GFX8-NEXT:  .LBB13_1: ; %atomicrmw.start
3651 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
3652 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3653 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, s6, v2
3654 ; GFX8-NEXT:    v_add_f16_e32 v1, v1, v0
3655 ; GFX8-NEXT:    v_and_b32_e32 v3, s7, v2
3656 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, s6, v1
3657 ; GFX8-NEXT:    v_or_b32_e32 v1, v3, v1
3658 ; GFX8-NEXT:    v_mov_b32_e32 v4, v2
3659 ; GFX8-NEXT:    v_mov_b32_e32 v3, v1
3660 ; GFX8-NEXT:    buffer_atomic_cmpswap v[3:4], v5, s[16:19], 0 offen glc
3661 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3662 ; GFX8-NEXT:    buffer_wbinvl1
3663 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v2
3664 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3665 ; GFX8-NEXT:    v_mov_b32_e32 v2, v3
3666 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3667 ; GFX8-NEXT:    s_cbranch_execnz .LBB13_1
3668 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
3669 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
3670 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, s6, v3
3671 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
3673 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3674 ; GFX7:       ; %bb.0:
3675 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3676 ; GFX7-NEXT:    s_addk_i32 s20, 0x200
3677 ; GFX7-NEXT:    s_and_b32 s4, s20, -4
3678 ; GFX7-NEXT:    v_mov_b32_e32 v4, s4
3679 ; GFX7-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
3680 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
3681 ; GFX7-NEXT:    s_and_b32 s4, s20, 3
3682 ; GFX7-NEXT:    s_lshl_b32 s6, s4, 3
3683 ; GFX7-NEXT:    s_lshl_b32 s4, 0xffff, s6
3684 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v0
3685 ; GFX7-NEXT:    s_not_b32 s7, s4
3686 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
3687 ; GFX7-NEXT:  .LBB13_1: ; %atomicrmw.start
3688 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
3689 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3690 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
3691 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v0
3692 ; GFX7-NEXT:    v_and_b32_e32 v2, s7, v1
3693 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v5
3694 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
3695 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
3696 ; GFX7-NEXT:    v_or_b32_e32 v0, v2, v0
3697 ; GFX7-NEXT:    v_mov_b32_e32 v3, v1
3698 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
3699 ; GFX7-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
3700 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3701 ; GFX7-NEXT:    buffer_wbinvl1
3702 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
3703 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3704 ; GFX7-NEXT:    v_mov_b32_e32 v1, v2
3705 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3706 ; GFX7-NEXT:    s_cbranch_execnz .LBB13_1
3707 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
3708 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
3709 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
3710 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v0
3711 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
3713 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__amdgpu_no_fine_grained_memory:
3714 ; GFX6:       ; %bb.0:
3715 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3716 ; GFX6-NEXT:    s_addk_i32 s20, 0x200
3717 ; GFX6-NEXT:    s_and_b32 s4, s20, -4
3718 ; GFX6-NEXT:    v_mov_b32_e32 v4, s4
3719 ; GFX6-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
3720 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0
3721 ; GFX6-NEXT:    s_and_b32 s4, s20, 3
3722 ; GFX6-NEXT:    s_lshl_b32 s6, s4, 3
3723 ; GFX6-NEXT:    s_lshl_b32 s4, 0xffff, s6
3724 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v0
3725 ; GFX6-NEXT:    s_not_b32 s7, s4
3726 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
3727 ; GFX6-NEXT:  .LBB13_1: ; %atomicrmw.start
3728 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
3729 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
3730 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
3731 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v0
3732 ; GFX6-NEXT:    s_waitcnt expcnt(0)
3733 ; GFX6-NEXT:    v_and_b32_e32 v2, s7, v1
3734 ; GFX6-NEXT:    v_add_f32_e32 v0, v0, v5
3735 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0
3736 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
3737 ; GFX6-NEXT:    v_or_b32_e32 v0, v2, v0
3738 ; GFX6-NEXT:    v_mov_b32_e32 v3, v1
3739 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
3740 ; GFX6-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
3741 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
3742 ; GFX6-NEXT:    buffer_wbinvl1
3743 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
3744 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3745 ; GFX6-NEXT:    v_mov_b32_e32 v1, v2
3746 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3747 ; GFX6-NEXT:    s_cbranch_execnz .LBB13_1
3748 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
3749 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
3750 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
3751 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v0
3752 ; GFX6-NEXT:    s_waitcnt expcnt(0)
3753 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
3754   %gep = getelementptr half, ptr addrspace(7) %ptr, i32 256
3755   %result = atomicrmw fadd ptr addrspace(7) %gep, half %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
3756   ret half %result
3759 define void @buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, half %val) #0 {
3760 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
3761 ; GFX12:       ; %bb.0:
3762 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
3763 ; GFX12-NEXT:    s_wait_expcnt 0x0
3764 ; GFX12-NEXT:    s_wait_samplecnt 0x0
3765 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
3766 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3767 ; GFX12-NEXT:    s_addk_co_i32 s16, 0x200
3768 ; GFX12-NEXT:    s_wait_alu 0xfffe
3769 ; GFX12-NEXT:    s_and_b32 s4, s16, -4
3770 ; GFX12-NEXT:    s_wait_alu 0xfffe
3771 ; GFX12-NEXT:    v_mov_b32_e32 v3, s4
3772 ; GFX12-NEXT:    s_and_b32 s4, s16, 3
3773 ; GFX12-NEXT:    s_wait_alu 0xfffe
3774 ; GFX12-NEXT:    s_lshl_b32 s4, s4, 3
3775 ; GFX12-NEXT:    s_wait_alu 0xfffe
3776 ; GFX12-NEXT:    s_lshl_b32 s5, 0xffff, s4
3777 ; GFX12-NEXT:    buffer_load_b32 v2, v3, s[0:3], null offen
3778 ; GFX12-NEXT:    s_not_b32 s6, s5
3779 ; GFX12-NEXT:    s_mov_b32 s5, 0
3780 ; GFX12-NEXT:  .LBB14_1: ; %atomicrmw.start
3781 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
3782 ; GFX12-NEXT:    s_wait_loadcnt 0x0
3783 ; GFX12-NEXT:    v_lshrrev_b32_e32 v1, s4, v2
3784 ; GFX12-NEXT:    s_wait_storecnt 0x0
3785 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3786 ; GFX12-NEXT:    v_add_f16_e32 v1, v1, v0
3787 ; GFX12-NEXT:    v_and_b32_e32 v1, 0xffff, v1
3788 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
3789 ; GFX12-NEXT:    v_lshlrev_b32_e32 v1, s4, v1
3790 ; GFX12-NEXT:    s_wait_alu 0xfffe
3791 ; GFX12-NEXT:    v_and_or_b32 v1, v2, s6, v1
3792 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3793 ; GFX12-NEXT:    v_dual_mov_b32 v5, v2 :: v_dual_mov_b32 v4, v1
3794 ; GFX12-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v3, s[0:3], null offen th:TH_ATOMIC_RETURN
3795 ; GFX12-NEXT:    s_wait_loadcnt 0x0
3796 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
3797 ; GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
3798 ; GFX12-NEXT:    v_mov_b32_e32 v2, v4
3799 ; GFX12-NEXT:    s_or_b32 s5, vcc_lo, s5
3800 ; GFX12-NEXT:    s_wait_alu 0xfffe
3801 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
3802 ; GFX12-NEXT:    s_cbranch_execnz .LBB14_1
3803 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
3804 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s5
3805 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
3807 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
3808 ; GFX940:       ; %bb.0:
3809 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3810 ; GFX940-NEXT:    s_addk_i32 s16, 0x200
3811 ; GFX940-NEXT:    s_and_b32 s4, s16, -4
3812 ; GFX940-NEXT:    v_mov_b32_e32 v1, s4
3813 ; GFX940-NEXT:    buffer_load_dword v3, v1, s[0:3], 0 offen
3814 ; GFX940-NEXT:    s_and_b32 s4, s16, 3
3815 ; GFX940-NEXT:    s_lshl_b32 s6, s4, 3
3816 ; GFX940-NEXT:    s_lshl_b32 s4, 0xffff, s6
3817 ; GFX940-NEXT:    s_not_b32 s7, s4
3818 ; GFX940-NEXT:    s_mov_b64 s[4:5], 0
3819 ; GFX940-NEXT:  .LBB14_1: ; %atomicrmw.start
3820 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
3821 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3822 ; GFX940-NEXT:    v_lshrrev_b32_e32 v2, s6, v3
3823 ; GFX940-NEXT:    v_add_f16_e32 v2, v2, v0
3824 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, s6, v2
3825 ; GFX940-NEXT:    v_and_or_b32 v2, v3, s7, v2
3826 ; GFX940-NEXT:    v_mov_b64_e32 v[4:5], v[2:3]
3827 ; GFX940-NEXT:    buffer_wbl2 sc1
3828 ; GFX940-NEXT:    buffer_atomic_cmpswap v[4:5], v1, s[0:3], 0 offen sc0
3829 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3830 ; GFX940-NEXT:    buffer_inv sc1
3831 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v3
3832 ; GFX940-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3833 ; GFX940-NEXT:    v_mov_b32_e32 v3, v4
3834 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3835 ; GFX940-NEXT:    s_cbranch_execnz .LBB14_1
3836 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
3837 ; GFX940-NEXT:    s_or_b64 exec, exec, s[4:5]
3838 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3840 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
3841 ; GFX11:       ; %bb.0:
3842 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3843 ; GFX11-NEXT:    s_addk_i32 s16, 0x200
3844 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3845 ; GFX11-NEXT:    s_and_b32 s4, s16, -4
3846 ; GFX11-NEXT:    v_mov_b32_e32 v3, s4
3847 ; GFX11-NEXT:    s_and_b32 s4, s16, 3
3848 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3849 ; GFX11-NEXT:    s_lshl_b32 s4, s4, 3
3850 ; GFX11-NEXT:    s_lshl_b32 s5, 0xffff, s4
3851 ; GFX11-NEXT:    buffer_load_b32 v2, v3, s[0:3], 0 offen
3852 ; GFX11-NEXT:    s_not_b32 s6, s5
3853 ; GFX11-NEXT:    s_mov_b32 s5, 0
3854 ; GFX11-NEXT:  .LBB14_1: ; %atomicrmw.start
3855 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
3856 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3857 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, s4, v2
3858 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
3859 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3860 ; GFX11-NEXT:    v_add_f16_e32 v1, v1, v0
3861 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v1
3862 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3863 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, s4, v1
3864 ; GFX11-NEXT:    v_and_or_b32 v1, v2, s6, v1
3865 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3866 ; GFX11-NEXT:    v_dual_mov_b32 v5, v2 :: v_dual_mov_b32 v4, v1
3867 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v3, s[0:3], 0 offen glc
3868 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3869 ; GFX11-NEXT:    buffer_gl1_inv
3870 ; GFX11-NEXT:    buffer_gl0_inv
3871 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
3872 ; GFX11-NEXT:    v_mov_b32_e32 v2, v4
3873 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
3874 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3875 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
3876 ; GFX11-NEXT:    s_cbranch_execnz .LBB14_1
3877 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
3878 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
3879 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
3881 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
3882 ; GFX10:       ; %bb.0:
3883 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3884 ; GFX10-NEXT:    s_addk_i32 s20, 0x200
3885 ; GFX10-NEXT:    s_and_b32 s4, s20, -4
3886 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
3887 ; GFX10-NEXT:    s_and_b32 s4, s20, 3
3888 ; GFX10-NEXT:    s_lshl_b32 s4, s4, 3
3889 ; GFX10-NEXT:    s_lshl_b32 s5, 0xffff, s4
3890 ; GFX10-NEXT:    buffer_load_dword v2, v3, s[16:19], 0 offen
3891 ; GFX10-NEXT:    s_not_b32 s6, s5
3892 ; GFX10-NEXT:    s_mov_b32 s5, 0
3893 ; GFX10-NEXT:  .LBB14_1: ; %atomicrmw.start
3894 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
3895 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3896 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, s4, v2
3897 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
3898 ; GFX10-NEXT:    v_add_f16_e32 v1, v1, v0
3899 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v1, s4, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3900 ; GFX10-NEXT:    v_and_or_b32 v1, v2, s6, v1
3901 ; GFX10-NEXT:    v_mov_b32_e32 v5, v2
3902 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
3903 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
3904 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3905 ; GFX10-NEXT:    buffer_gl1_inv
3906 ; GFX10-NEXT:    buffer_gl0_inv
3907 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
3908 ; GFX10-NEXT:    v_mov_b32_e32 v2, v4
3909 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
3910 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
3911 ; GFX10-NEXT:    s_cbranch_execnz .LBB14_1
3912 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
3913 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
3914 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
3916 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
3917 ; GFX90A:       ; %bb.0:
3918 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3919 ; GFX90A-NEXT:    s_addk_i32 s20, 0x200
3920 ; GFX90A-NEXT:    s_and_b32 s4, s20, -4
3921 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s4
3922 ; GFX90A-NEXT:    buffer_load_dword v3, v1, s[16:19], 0 offen
3923 ; GFX90A-NEXT:    s_and_b32 s4, s20, 3
3924 ; GFX90A-NEXT:    s_lshl_b32 s6, s4, 3
3925 ; GFX90A-NEXT:    s_lshl_b32 s4, 0xffff, s6
3926 ; GFX90A-NEXT:    s_not_b32 s7, s4
3927 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
3928 ; GFX90A-NEXT:  .LBB14_1: ; %atomicrmw.start
3929 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
3930 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3931 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v2, s6, v3
3932 ; GFX90A-NEXT:    v_add_f16_e32 v2, v2, v0
3933 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, s6, v2
3934 ; GFX90A-NEXT:    v_and_or_b32 v2, v3, s7, v2
3935 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]
3936 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v1, s[16:19], 0 offen glc
3937 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3938 ; GFX90A-NEXT:    buffer_wbinvl1
3939 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v3
3940 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3941 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v4
3942 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3943 ; GFX90A-NEXT:    s_cbranch_execnz .LBB14_1
3944 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
3945 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
3946 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3948 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
3949 ; GFX908:       ; %bb.0:
3950 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3951 ; GFX908-NEXT:    s_addk_i32 s20, 0x200
3952 ; GFX908-NEXT:    s_and_b32 s4, s20, -4
3953 ; GFX908-NEXT:    v_mov_b32_e32 v3, s4
3954 ; GFX908-NEXT:    buffer_load_dword v2, v3, s[16:19], 0 offen
3955 ; GFX908-NEXT:    s_and_b32 s4, s20, 3
3956 ; GFX908-NEXT:    s_lshl_b32 s6, s4, 3
3957 ; GFX908-NEXT:    s_lshl_b32 s4, 0xffff, s6
3958 ; GFX908-NEXT:    s_not_b32 s7, s4
3959 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
3960 ; GFX908-NEXT:  .LBB14_1: ; %atomicrmw.start
3961 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
3962 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3963 ; GFX908-NEXT:    v_lshrrev_b32_e32 v1, s6, v2
3964 ; GFX908-NEXT:    v_add_f16_e32 v1, v1, v0
3965 ; GFX908-NEXT:    v_lshlrev_b32_e32 v1, s6, v1
3966 ; GFX908-NEXT:    v_and_or_b32 v1, v2, s7, v1
3967 ; GFX908-NEXT:    v_mov_b32_e32 v5, v2
3968 ; GFX908-NEXT:    v_mov_b32_e32 v4, v1
3969 ; GFX908-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
3970 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
3971 ; GFX908-NEXT:    buffer_wbinvl1
3972 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
3973 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
3974 ; GFX908-NEXT:    v_mov_b32_e32 v2, v4
3975 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
3976 ; GFX908-NEXT:    s_cbranch_execnz .LBB14_1
3977 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
3978 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
3979 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
3981 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
3982 ; GFX8:       ; %bb.0:
3983 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3984 ; GFX8-NEXT:    s_addk_i32 s20, 0x200
3985 ; GFX8-NEXT:    s_and_b32 s4, s20, -4
3986 ; GFX8-NEXT:    v_mov_b32_e32 v3, s4
3987 ; GFX8-NEXT:    buffer_load_dword v2, v3, s[16:19], 0 offen
3988 ; GFX8-NEXT:    s_and_b32 s4, s20, 3
3989 ; GFX8-NEXT:    s_lshl_b32 s6, s4, 3
3990 ; GFX8-NEXT:    s_lshl_b32 s4, 0xffff, s6
3991 ; GFX8-NEXT:    s_not_b32 s7, s4
3992 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
3993 ; GFX8-NEXT:  .LBB14_1: ; %atomicrmw.start
3994 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
3995 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3996 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, s6, v2
3997 ; GFX8-NEXT:    v_add_f16_e32 v1, v1, v0
3998 ; GFX8-NEXT:    v_and_b32_e32 v4, s7, v2
3999 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, s6, v1
4000 ; GFX8-NEXT:    v_or_b32_e32 v1, v4, v1
4001 ; GFX8-NEXT:    v_mov_b32_e32 v5, v2
4002 ; GFX8-NEXT:    v_mov_b32_e32 v4, v1
4003 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
4004 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4005 ; GFX8-NEXT:    buffer_wbinvl1
4006 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
4007 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
4008 ; GFX8-NEXT:    v_mov_b32_e32 v2, v4
4009 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
4010 ; GFX8-NEXT:    s_cbranch_execnz .LBB14_1
4011 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
4012 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
4013 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4015 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
4016 ; GFX7:       ; %bb.0:
4017 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4018 ; GFX7-NEXT:    s_addk_i32 s20, 0x200
4019 ; GFX7-NEXT:    s_and_b32 s4, s20, -4
4020 ; GFX7-NEXT:    v_mov_b32_e32 v2, s4
4021 ; GFX7-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
4022 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
4023 ; GFX7-NEXT:    s_and_b32 s4, s20, 3
4024 ; GFX7-NEXT:    s_lshl_b32 s6, s4, 3
4025 ; GFX7-NEXT:    s_lshl_b32 s4, 0xffff, s6
4026 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v0
4027 ; GFX7-NEXT:    s_not_b32 s7, s4
4028 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
4029 ; GFX7-NEXT:  .LBB14_1: ; %atomicrmw.start
4030 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
4031 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4032 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
4033 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v0
4034 ; GFX7-NEXT:    v_and_b32_e32 v4, s7, v1
4035 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v3
4036 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
4037 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
4038 ; GFX7-NEXT:    v_or_b32_e32 v0, v4, v0
4039 ; GFX7-NEXT:    v_mov_b32_e32 v5, v1
4040 ; GFX7-NEXT:    v_mov_b32_e32 v4, v0
4041 ; GFX7-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
4042 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4043 ; GFX7-NEXT:    buffer_wbinvl1
4044 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
4045 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
4046 ; GFX7-NEXT:    v_mov_b32_e32 v1, v4
4047 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
4048 ; GFX7-NEXT:    s_cbranch_execnz .LBB14_1
4049 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
4050 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
4051 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4053 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_f16__offset__amdgpu_no_fine_grained_memory:
4054 ; GFX6:       ; %bb.0:
4055 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4056 ; GFX6-NEXT:    s_addk_i32 s20, 0x200
4057 ; GFX6-NEXT:    s_and_b32 s4, s20, -4
4058 ; GFX6-NEXT:    v_mov_b32_e32 v2, s4
4059 ; GFX6-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
4060 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0
4061 ; GFX6-NEXT:    s_and_b32 s4, s20, 3
4062 ; GFX6-NEXT:    s_lshl_b32 s6, s4, 3
4063 ; GFX6-NEXT:    s_lshl_b32 s4, 0xffff, s6
4064 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v0
4065 ; GFX6-NEXT:    s_not_b32 s7, s4
4066 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
4067 ; GFX6-NEXT:  .LBB14_1: ; %atomicrmw.start
4068 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
4069 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
4070 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
4071 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v0
4072 ; GFX6-NEXT:    s_waitcnt expcnt(0)
4073 ; GFX6-NEXT:    v_and_b32_e32 v4, s7, v1
4074 ; GFX6-NEXT:    v_add_f32_e32 v0, v0, v3
4075 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0
4076 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
4077 ; GFX6-NEXT:    v_or_b32_e32 v0, v4, v0
4078 ; GFX6-NEXT:    v_mov_b32_e32 v5, v1
4079 ; GFX6-NEXT:    v_mov_b32_e32 v4, v0
4080 ; GFX6-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
4081 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
4082 ; GFX6-NEXT:    buffer_wbinvl1
4083 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
4084 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
4085 ; GFX6-NEXT:    v_mov_b32_e32 v1, v4
4086 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
4087 ; GFX6-NEXT:    s_cbranch_execnz .LBB14_1
4088 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
4089 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
4090 ; GFX6-NEXT:    s_waitcnt expcnt(0)
4091 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
4092   %gep = getelementptr half, ptr addrspace(7) %ptr, i32 256
4093   %unused = atomicrmw fadd ptr addrspace(7) %gep, half %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
4094   ret void
4097 define half @buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory(ptr addrspace(7) %ptr, half %val) #0 {
4098 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4099 ; GFX12:       ; %bb.0:
4100 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
4101 ; GFX12-NEXT:    s_wait_expcnt 0x0
4102 ; GFX12-NEXT:    s_wait_samplecnt 0x0
4103 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
4104 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4105 ; GFX12-NEXT:    v_add_nc_u32_e32 v6, 0x200, v4
4106 ; GFX12-NEXT:    s_mov_b32 s1, exec_lo
4107 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4108 ; GFX12-NEXT:    v_and_b32_e32 v4, 3, v6
4109 ; GFX12-NEXT:    v_and_b32_e32 v10, -4, v6
4110 ; GFX12-NEXT:    v_lshlrev_b32_e32 v4, 3, v4
4111 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4112 ; GFX12-NEXT:    v_lshlrev_b32_e64 v7, v4, 0xffff
4113 ; GFX12-NEXT:    v_not_b32_e32 v11, v7
4114 ; GFX12-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4115 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v0
4116 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v1
4117 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v2
4118 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v3
4119 ; GFX12-NEXT:    s_wait_alu 0xf1ff
4120 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
4121 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
4122 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
4123 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4124 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
4125 ; GFX12-NEXT:    s_wait_alu 0xfffe
4126 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
4127 ; GFX12-NEXT:    s_wait_loadcnt 0x0
4128 ; GFX12-NEXT:    buffer_load_b32 v7, v10, s[4:7], null offen
4129 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
4130 ; GFX12-NEXT:    s_cbranch_execnz .LBB15_1
4131 ; GFX12-NEXT:  ; %bb.2:
4132 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
4133 ; GFX12-NEXT:    s_mov_b32 s1, 0
4134 ; GFX12-NEXT:  .LBB15_3: ; %atomicrmw.start
4135 ; GFX12-NEXT:    ; =>This Loop Header: Depth=1
4136 ; GFX12-NEXT:    ; Child Loop BB15_4 Depth 2
4137 ; GFX12-NEXT:    s_wait_loadcnt 0x0
4138 ; GFX12-NEXT:    v_lshrrev_b32_e32 v6, v4, v7
4139 ; GFX12-NEXT:    s_mov_b32 s2, exec_lo
4140 ; GFX12-NEXT:    s_wait_storecnt 0x0
4141 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4142 ; GFX12-NEXT:    v_add_f16_e32 v6, v6, v5
4143 ; GFX12-NEXT:    v_and_b32_e32 v6, 0xffff, v6
4144 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4145 ; GFX12-NEXT:    v_lshlrev_b32_e32 v6, v4, v6
4146 ; GFX12-NEXT:    v_and_or_b32 v6, v7, v11, v6
4147 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4148 ; GFX12-NEXT:    v_dual_mov_b32 v9, v7 :: v_dual_mov_b32 v8, v6
4149 ; GFX12-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4150 ; GFX12-NEXT:    ; => This Inner Loop Header: Depth=2
4151 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v0
4152 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v1
4153 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v2
4154 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v3
4155 ; GFX12-NEXT:    s_wait_alu 0xf1ff
4156 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
4157 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
4158 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
4159 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4160 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
4161 ; GFX12-NEXT:    s_wait_alu 0xfffe
4162 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
4163 ; GFX12-NEXT:    s_wait_loadcnt 0x0
4164 ; GFX12-NEXT:    buffer_atomic_cmpswap_b32 v[8:9], v10, s[4:7], null offen th:TH_ATOMIC_RETURN
4165 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
4166 ; GFX12-NEXT:    s_cbranch_execnz .LBB15_4
4167 ; GFX12-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4168 ; GFX12-NEXT:    s_mov_b32 exec_lo, s2
4169 ; GFX12-NEXT:    s_wait_loadcnt 0x0
4170 ; GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v8, v7
4171 ; GFX12-NEXT:    v_mov_b32_e32 v7, v8
4172 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
4173 ; GFX12-NEXT:    s_or_b32 s1, vcc_lo, s1
4174 ; GFX12-NEXT:    s_wait_alu 0xfffe
4175 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
4176 ; GFX12-NEXT:    s_cbranch_execnz .LBB15_3
4177 ; GFX12-NEXT:  ; %bb.6: ; %atomicrmw.end
4178 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s1
4179 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, v4, v8
4180 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
4182 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4183 ; GFX940:       ; %bb.0:
4184 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4185 ; GFX940-NEXT:    v_add_u32_e32 v4, 0x200, v4
4186 ; GFX940-NEXT:    v_and_b32_e32 v10, -4, v4
4187 ; GFX940-NEXT:    v_and_b32_e32 v4, 3, v4
4188 ; GFX940-NEXT:    v_lshlrev_b32_e32 v4, 3, v4
4189 ; GFX940-NEXT:    s_mov_b32 s0, 0xffff
4190 ; GFX940-NEXT:    v_lshlrev_b32_e64 v6, v4, s0
4191 ; GFX940-NEXT:    v_not_b32_e32 v11, v6
4192 ; GFX940-NEXT:    s_mov_b64 s[2:3], exec
4193 ; GFX940-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4194 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
4195 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
4196 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
4197 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
4198 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
4199 ; GFX940-NEXT:    s_nop 0
4200 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
4201 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
4202 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
4203 ; GFX940-NEXT:    buffer_load_dword v7, v10, s[4:7], 0 offen
4204 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
4205 ; GFX940-NEXT:    s_cbranch_execnz .LBB15_1
4206 ; GFX940-NEXT:  ; %bb.2:
4207 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
4208 ; GFX940-NEXT:    s_mov_b64 s[2:3], 0
4209 ; GFX940-NEXT:  .LBB15_3: ; %atomicrmw.start
4210 ; GFX940-NEXT:    ; =>This Loop Header: Depth=1
4211 ; GFX940-NEXT:    ; Child Loop BB15_4 Depth 2
4212 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
4213 ; GFX940-NEXT:    v_lshrrev_b32_e32 v6, v4, v7
4214 ; GFX940-NEXT:    v_add_f16_e32 v6, v6, v5
4215 ; GFX940-NEXT:    v_lshlrev_b32_e32 v6, v4, v6
4216 ; GFX940-NEXT:    v_and_or_b32 v6, v7, v11, v6
4217 ; GFX940-NEXT:    s_mov_b64 s[8:9], exec
4218 ; GFX940-NEXT:    v_mov_b64_e32 v[8:9], v[6:7]
4219 ; GFX940-NEXT:    buffer_wbl2 sc1
4220 ; GFX940-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4221 ; GFX940-NEXT:    ; => This Inner Loop Header: Depth=2
4222 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
4223 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
4224 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
4225 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
4226 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
4227 ; GFX940-NEXT:    s_nop 0
4228 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
4229 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
4230 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
4231 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
4232 ; GFX940-NEXT:    buffer_atomic_cmpswap v[8:9], v10, s[4:7], 0 offen sc0
4233 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
4234 ; GFX940-NEXT:    s_cbranch_execnz .LBB15_4
4235 ; GFX940-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4236 ; GFX940-NEXT:    s_mov_b64 exec, s[8:9]
4237 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
4238 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v8, v7
4239 ; GFX940-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4240 ; GFX940-NEXT:    v_mov_b32_e32 v7, v8
4241 ; GFX940-NEXT:    buffer_inv sc1
4242 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4243 ; GFX940-NEXT:    s_cbranch_execnz .LBB15_3
4244 ; GFX940-NEXT:  ; %bb.6: ; %atomicrmw.end
4245 ; GFX940-NEXT:    s_or_b64 exec, exec, s[2:3]
4246 ; GFX940-NEXT:    v_lshrrev_b32_e32 v0, v4, v8
4247 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4249 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4250 ; GFX11:       ; %bb.0:
4251 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4252 ; GFX11-NEXT:    v_add_nc_u32_e32 v6, 0x200, v4
4253 ; GFX11-NEXT:    s_mov_b32 s1, 0
4254 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
4255 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4256 ; GFX11-NEXT:    v_and_b32_e32 v4, 3, v6
4257 ; GFX11-NEXT:    v_and_b32_e32 v10, -4, v6
4258 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 3, v4
4259 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4260 ; GFX11-NEXT:    v_lshlrev_b32_e64 v7, v4, 0xffff
4261 ; GFX11-NEXT:    v_not_b32_e32 v11, v7
4262 ; GFX11-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4263 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
4264 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
4265 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
4266 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
4267 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
4268 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
4269 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
4270 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
4271 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
4272 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
4273 ; GFX11-NEXT:    buffer_load_b32 v7, v10, s[4:7], 0 offen
4274 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
4275 ; GFX11-NEXT:    s_cbranch_execnz .LBB15_1
4276 ; GFX11-NEXT:  ; %bb.2:
4277 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
4278 ; GFX11-NEXT:    .p2align 6
4279 ; GFX11-NEXT:  .LBB15_3: ; %atomicrmw.start
4280 ; GFX11-NEXT:    ; =>This Loop Header: Depth=1
4281 ; GFX11-NEXT:    ; Child Loop BB15_4 Depth 2
4282 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4283 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, v4, v7
4284 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
4285 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
4286 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4287 ; GFX11-NEXT:    v_add_f16_e32 v6, v6, v5
4288 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff, v6
4289 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4290 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, v4, v6
4291 ; GFX11-NEXT:    v_and_or_b32 v6, v7, v11, v6
4292 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4293 ; GFX11-NEXT:    v_dual_mov_b32 v9, v7 :: v_dual_mov_b32 v8, v6
4294 ; GFX11-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4295 ; GFX11-NEXT:    ; => This Inner Loop Header: Depth=2
4296 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
4297 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
4298 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
4299 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
4300 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
4301 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
4302 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
4303 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
4304 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
4305 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
4306 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4307 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[8:9], v10, s[4:7], 0 offen glc
4308 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
4309 ; GFX11-NEXT:    s_cbranch_execnz .LBB15_4
4310 ; GFX11-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4311 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
4312 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4313 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v8, v7
4314 ; GFX11-NEXT:    v_mov_b32_e32 v7, v8
4315 ; GFX11-NEXT:    buffer_gl1_inv
4316 ; GFX11-NEXT:    buffer_gl0_inv
4317 ; GFX11-NEXT:    s_or_b32 s1, vcc_lo, s1
4318 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4319 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
4320 ; GFX11-NEXT:    s_cbranch_execnz .LBB15_3
4321 ; GFX11-NEXT:  ; %bb.6: ; %atomicrmw.end
4322 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s1
4323 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, v4, v8
4324 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4326 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4327 ; GFX10:       ; %bb.0:
4328 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4329 ; GFX10-NEXT:    v_add_nc_u32_e32 v6, 0x200, v4
4330 ; GFX10-NEXT:    s_mov_b32 s5, 0
4331 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
4332 ; GFX10-NEXT:    v_and_b32_e32 v4, 3, v6
4333 ; GFX10-NEXT:    v_and_b32_e32 v10, -4, v6
4334 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 3, v4
4335 ; GFX10-NEXT:    v_lshlrev_b32_e64 v7, v4, 0xffff
4336 ; GFX10-NEXT:    v_not_b32_e32 v11, v7
4337 ; GFX10-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4338 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
4339 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
4340 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
4341 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
4342 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
4343 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
4344 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
4345 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
4346 ; GFX10-NEXT:    buffer_load_dword v7, v10, s[8:11], 0 offen
4347 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4348 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
4349 ; GFX10-NEXT:    s_cbranch_execnz .LBB15_1
4350 ; GFX10-NEXT:  ; %bb.2:
4351 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
4352 ; GFX10-NEXT:  .LBB15_3: ; %atomicrmw.start
4353 ; GFX10-NEXT:    ; =>This Loop Header: Depth=1
4354 ; GFX10-NEXT:    ; Child Loop BB15_4 Depth 2
4355 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4356 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, v4, v7
4357 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
4358 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4359 ; GFX10-NEXT:    v_add_f16_e32 v6, v6, v5
4360 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v6, v4, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4361 ; GFX10-NEXT:    v_and_or_b32 v6, v7, v11, v6
4362 ; GFX10-NEXT:    v_mov_b32_e32 v9, v7
4363 ; GFX10-NEXT:    v_mov_b32_e32 v8, v6
4364 ; GFX10-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4365 ; GFX10-NEXT:    ; => This Inner Loop Header: Depth=2
4366 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
4367 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
4368 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
4369 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
4370 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
4371 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
4372 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
4373 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
4374 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4375 ; GFX10-NEXT:    buffer_atomic_cmpswap v[8:9], v10, s[8:11], 0 offen glc
4376 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4377 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
4378 ; GFX10-NEXT:    s_cbranch_execnz .LBB15_4
4379 ; GFX10-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4380 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
4381 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4382 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v8, v7
4383 ; GFX10-NEXT:    v_mov_b32_e32 v7, v8
4384 ; GFX10-NEXT:    buffer_gl1_inv
4385 ; GFX10-NEXT:    buffer_gl0_inv
4386 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
4387 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
4388 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
4389 ; GFX10-NEXT:    s_cbranch_execnz .LBB15_3
4390 ; GFX10-NEXT:  ; %bb.6: ; %atomicrmw.end
4391 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
4392 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, v4, v8
4393 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4395 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4396 ; GFX90A:       ; %bb.0:
4397 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4398 ; GFX90A-NEXT:    v_add_u32_e32 v4, 0x200, v4
4399 ; GFX90A-NEXT:    v_and_b32_e32 v10, -4, v4
4400 ; GFX90A-NEXT:    v_and_b32_e32 v4, 3, v4
4401 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 3, v4
4402 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
4403 ; GFX90A-NEXT:    v_lshlrev_b32_e64 v6, v4, s4
4404 ; GFX90A-NEXT:    v_not_b32_e32 v11, v6
4405 ; GFX90A-NEXT:    s_mov_b64 s[6:7], exec
4406 ; GFX90A-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4407 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
4408 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
4409 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
4410 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
4411 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4412 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4413 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4414 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4415 ; GFX90A-NEXT:    s_nop 0
4416 ; GFX90A-NEXT:    buffer_load_dword v7, v10, s[8:11], 0 offen
4417 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
4418 ; GFX90A-NEXT:    s_cbranch_execnz .LBB15_1
4419 ; GFX90A-NEXT:  ; %bb.2:
4420 ; GFX90A-NEXT:    s_mov_b64 exec, s[6:7]
4421 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
4422 ; GFX90A-NEXT:  .LBB15_3: ; %atomicrmw.start
4423 ; GFX90A-NEXT:    ; =>This Loop Header: Depth=1
4424 ; GFX90A-NEXT:    ; Child Loop BB15_4 Depth 2
4425 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
4426 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v6, v4, v7
4427 ; GFX90A-NEXT:    v_add_f16_e32 v6, v6, v5
4428 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v6, v4, v6
4429 ; GFX90A-NEXT:    v_and_or_b32 v6, v7, v11, v6
4430 ; GFX90A-NEXT:    s_mov_b64 s[12:13], exec
4431 ; GFX90A-NEXT:    v_pk_mov_b32 v[8:9], v[6:7], v[6:7] op_sel:[0,1]
4432 ; GFX90A-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4433 ; GFX90A-NEXT:    ; => This Inner Loop Header: Depth=2
4434 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
4435 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
4436 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
4437 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
4438 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4439 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4440 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4441 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4442 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
4443 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[8:9], v10, s[8:11], 0 offen glc
4444 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
4445 ; GFX90A-NEXT:    s_cbranch_execnz .LBB15_4
4446 ; GFX90A-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4447 ; GFX90A-NEXT:    s_mov_b64 exec, s[12:13]
4448 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
4449 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v8, v7
4450 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
4451 ; GFX90A-NEXT:    v_mov_b32_e32 v7, v8
4452 ; GFX90A-NEXT:    buffer_wbinvl1
4453 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
4454 ; GFX90A-NEXT:    s_cbranch_execnz .LBB15_3
4455 ; GFX90A-NEXT:  ; %bb.6: ; %atomicrmw.end
4456 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
4457 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, v4, v8
4458 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4460 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4461 ; GFX908:       ; %bb.0:
4462 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4463 ; GFX908-NEXT:    v_add_u32_e32 v4, 0x200, v4
4464 ; GFX908-NEXT:    v_and_b32_e32 v10, -4, v4
4465 ; GFX908-NEXT:    v_and_b32_e32 v4, 3, v4
4466 ; GFX908-NEXT:    v_lshlrev_b32_e32 v4, 3, v4
4467 ; GFX908-NEXT:    s_mov_b32 s4, 0xffff
4468 ; GFX908-NEXT:    v_lshlrev_b32_e64 v6, v4, s4
4469 ; GFX908-NEXT:    v_not_b32_e32 v11, v6
4470 ; GFX908-NEXT:    s_mov_b64 s[6:7], exec
4471 ; GFX908-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4472 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
4473 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
4474 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
4475 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
4476 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4477 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4478 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4479 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4480 ; GFX908-NEXT:    s_nop 0
4481 ; GFX908-NEXT:    buffer_load_dword v7, v10, s[8:11], 0 offen
4482 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
4483 ; GFX908-NEXT:    s_cbranch_execnz .LBB15_1
4484 ; GFX908-NEXT:  ; %bb.2:
4485 ; GFX908-NEXT:    s_mov_b64 exec, s[6:7]
4486 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
4487 ; GFX908-NEXT:  .LBB15_3: ; %atomicrmw.start
4488 ; GFX908-NEXT:    ; =>This Loop Header: Depth=1
4489 ; GFX908-NEXT:    ; Child Loop BB15_4 Depth 2
4490 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
4491 ; GFX908-NEXT:    v_lshrrev_b32_e32 v6, v4, v7
4492 ; GFX908-NEXT:    v_add_f16_e32 v6, v6, v5
4493 ; GFX908-NEXT:    v_lshlrev_b32_e32 v6, v4, v6
4494 ; GFX908-NEXT:    v_and_or_b32 v6, v7, v11, v6
4495 ; GFX908-NEXT:    v_mov_b32_e32 v9, v7
4496 ; GFX908-NEXT:    s_mov_b64 s[12:13], exec
4497 ; GFX908-NEXT:    v_mov_b32_e32 v8, v6
4498 ; GFX908-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4499 ; GFX908-NEXT:    ; => This Inner Loop Header: Depth=2
4500 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
4501 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
4502 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
4503 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
4504 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4505 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4506 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4507 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4508 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
4509 ; GFX908-NEXT:    buffer_atomic_cmpswap v[8:9], v10, s[8:11], 0 offen glc
4510 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
4511 ; GFX908-NEXT:    s_cbranch_execnz .LBB15_4
4512 ; GFX908-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4513 ; GFX908-NEXT:    s_mov_b64 exec, s[12:13]
4514 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
4515 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v8, v7
4516 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
4517 ; GFX908-NEXT:    v_mov_b32_e32 v7, v8
4518 ; GFX908-NEXT:    buffer_wbinvl1
4519 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
4520 ; GFX908-NEXT:    s_cbranch_execnz .LBB15_3
4521 ; GFX908-NEXT:  ; %bb.6: ; %atomicrmw.end
4522 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
4523 ; GFX908-NEXT:    v_lshrrev_b32_e32 v0, v4, v8
4524 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
4526 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4527 ; GFX8:       ; %bb.0:
4528 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4529 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x200, v4
4530 ; GFX8-NEXT:    v_and_b32_e32 v10, -4, v4
4531 ; GFX8-NEXT:    v_and_b32_e32 v4, 3, v4
4532 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 3, v4
4533 ; GFX8-NEXT:    s_mov_b32 s4, 0xffff
4534 ; GFX8-NEXT:    v_lshlrev_b32_e64 v6, v4, s4
4535 ; GFX8-NEXT:    v_not_b32_e32 v11, v6
4536 ; GFX8-NEXT:    s_mov_b64 s[6:7], exec
4537 ; GFX8-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4538 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
4539 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
4540 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
4541 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
4542 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4543 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4544 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4545 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4546 ; GFX8-NEXT:    s_nop 0
4547 ; GFX8-NEXT:    buffer_load_dword v7, v10, s[8:11], 0 offen
4548 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
4549 ; GFX8-NEXT:    s_cbranch_execnz .LBB15_1
4550 ; GFX8-NEXT:  ; %bb.2:
4551 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
4552 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
4553 ; GFX8-NEXT:  .LBB15_3: ; %atomicrmw.start
4554 ; GFX8-NEXT:    ; =>This Loop Header: Depth=1
4555 ; GFX8-NEXT:    ; Child Loop BB15_4 Depth 2
4556 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4557 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, v4, v7
4558 ; GFX8-NEXT:    v_add_f16_e32 v6, v6, v5
4559 ; GFX8-NEXT:    v_lshlrev_b32_e32 v6, v4, v6
4560 ; GFX8-NEXT:    v_and_b32_e32 v8, v7, v11
4561 ; GFX8-NEXT:    v_or_b32_e32 v6, v8, v6
4562 ; GFX8-NEXT:    v_mov_b32_e32 v9, v7
4563 ; GFX8-NEXT:    s_mov_b64 s[12:13], exec
4564 ; GFX8-NEXT:    v_mov_b32_e32 v8, v6
4565 ; GFX8-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4566 ; GFX8-NEXT:    ; => This Inner Loop Header: Depth=2
4567 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
4568 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
4569 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
4570 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
4571 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4572 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4573 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4574 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4575 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4576 ; GFX8-NEXT:    buffer_atomic_cmpswap v[8:9], v10, s[8:11], 0 offen glc
4577 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
4578 ; GFX8-NEXT:    s_cbranch_execnz .LBB15_4
4579 ; GFX8-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4580 ; GFX8-NEXT:    s_mov_b64 exec, s[12:13]
4581 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4582 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v8, v7
4583 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
4584 ; GFX8-NEXT:    v_mov_b32_e32 v7, v8
4585 ; GFX8-NEXT:    buffer_wbinvl1
4586 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
4587 ; GFX8-NEXT:    s_cbranch_execnz .LBB15_3
4588 ; GFX8-NEXT:  ; %bb.6: ; %atomicrmw.end
4589 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
4590 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, v4, v8
4591 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
4593 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4594 ; GFX7:       ; %bb.0:
4595 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4596 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 0x200, v4
4597 ; GFX7-NEXT:    v_and_b32_e32 v8, -4, v4
4598 ; GFX7-NEXT:    v_and_b32_e32 v4, 3, v4
4599 ; GFX7-NEXT:    v_lshlrev_b32_e32 v7, 3, v4
4600 ; GFX7-NEXT:    v_lshl_b32_e32 v4, 0xffff, v7
4601 ; GFX7-NEXT:    v_not_b32_e32 v9, v4
4602 ; GFX7-NEXT:    s_mov_b64 s[6:7], exec
4603 ; GFX7-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4604 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
4605 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
4606 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
4607 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
4608 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4609 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4610 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4611 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4612 ; GFX7-NEXT:    buffer_load_dword v6, v8, s[8:11], 0 offen
4613 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
4614 ; GFX7-NEXT:    s_cbranch_execnz .LBB15_1
4615 ; GFX7-NEXT:  ; %bb.2:
4616 ; GFX7-NEXT:    s_mov_b64 exec, s[6:7]
4617 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v5
4618 ; GFX7-NEXT:    s_mov_b64 s[6:7], 0
4619 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v10, v4
4620 ; GFX7-NEXT:  .LBB15_3: ; %atomicrmw.start
4621 ; GFX7-NEXT:    ; =>This Loop Header: Depth=1
4622 ; GFX7-NEXT:    ; Child Loop BB15_4 Depth 2
4623 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4624 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, v7, v6
4625 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v4
4626 ; GFX7-NEXT:    v_and_b32_e32 v5, v6, v9
4627 ; GFX7-NEXT:    s_mov_b64 s[12:13], exec
4628 ; GFX7-NEXT:    v_add_f32_e32 v4, v4, v10
4629 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v4
4630 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, v7, v4
4631 ; GFX7-NEXT:    v_or_b32_e32 v5, v5, v4
4632 ; GFX7-NEXT:    v_mov_b32_e32 v4, v5
4633 ; GFX7-NEXT:    v_mov_b32_e32 v5, v6
4634 ; GFX7-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4635 ; GFX7-NEXT:    ; => This Inner Loop Header: Depth=2
4636 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
4637 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
4638 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
4639 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
4640 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4641 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4642 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4643 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4644 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4645 ; GFX7-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
4646 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
4647 ; GFX7-NEXT:    s_cbranch_execnz .LBB15_4
4648 ; GFX7-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4649 ; GFX7-NEXT:    s_mov_b64 exec, s[12:13]
4650 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4651 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
4652 ; GFX7-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
4653 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
4654 ; GFX7-NEXT:    buffer_wbinvl1
4655 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[6:7]
4656 ; GFX7-NEXT:    s_cbranch_execnz .LBB15_3
4657 ; GFX7-NEXT:  ; %bb.6: ; %atomicrmw.end
4658 ; GFX7-NEXT:    s_or_b64 exec, exec, s[6:7]
4659 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
4660 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v0
4661 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
4663 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_f16__offset__waterfall__amdgpu_no_fine_grained_memory:
4664 ; GFX6:       ; %bb.0:
4665 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4666 ; GFX6-NEXT:    v_add_i32_e32 v4, vcc, 0x200, v4
4667 ; GFX6-NEXT:    v_and_b32_e32 v8, -4, v4
4668 ; GFX6-NEXT:    v_and_b32_e32 v4, 3, v4
4669 ; GFX6-NEXT:    v_lshlrev_b32_e32 v7, 3, v4
4670 ; GFX6-NEXT:    v_lshl_b32_e32 v4, 0xffff, v7
4671 ; GFX6-NEXT:    v_not_b32_e32 v9, v4
4672 ; GFX6-NEXT:    s_mov_b64 s[6:7], exec
4673 ; GFX6-NEXT:  .LBB15_1: ; =>This Inner Loop Header: Depth=1
4674 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
4675 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
4676 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
4677 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
4678 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4679 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4680 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4681 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4682 ; GFX6-NEXT:    buffer_load_dword v6, v8, s[8:11], 0 offen
4683 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
4684 ; GFX6-NEXT:    s_cbranch_execnz .LBB15_1
4685 ; GFX6-NEXT:  ; %bb.2:
4686 ; GFX6-NEXT:    s_mov_b64 exec, s[6:7]
4687 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v5
4688 ; GFX6-NEXT:    s_mov_b64 s[6:7], 0
4689 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v10, v4
4690 ; GFX6-NEXT:  .LBB15_3: ; %atomicrmw.start
4691 ; GFX6-NEXT:    ; =>This Loop Header: Depth=1
4692 ; GFX6-NEXT:    ; Child Loop BB15_4 Depth 2
4693 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4694 ; GFX6-NEXT:    v_lshrrev_b32_e32 v4, v7, v6
4695 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v4
4696 ; GFX6-NEXT:    v_and_b32_e32 v5, v6, v9
4697 ; GFX6-NEXT:    s_mov_b64 s[12:13], exec
4698 ; GFX6-NEXT:    v_add_f32_e32 v4, v4, v10
4699 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v4
4700 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, v7, v4
4701 ; GFX6-NEXT:    v_or_b32_e32 v5, v5, v4
4702 ; GFX6-NEXT:    v_mov_b32_e32 v4, v5
4703 ; GFX6-NEXT:    v_mov_b32_e32 v5, v6
4704 ; GFX6-NEXT:  .LBB15_4: ; Parent Loop BB15_3 Depth=1
4705 ; GFX6-NEXT:    ; => This Inner Loop Header: Depth=2
4706 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
4707 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
4708 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
4709 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
4710 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
4711 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
4712 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
4713 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
4714 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
4715 ; GFX6-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
4716 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
4717 ; GFX6-NEXT:    s_cbranch_execnz .LBB15_4
4718 ; GFX6-NEXT:  ; %bb.5: ; in Loop: Header=BB15_3 Depth=1
4719 ; GFX6-NEXT:    s_mov_b64 exec, s[12:13]
4720 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
4721 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
4722 ; GFX6-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
4723 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
4724 ; GFX6-NEXT:    buffer_wbinvl1
4725 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[6:7]
4726 ; GFX6-NEXT:    s_cbranch_execnz .LBB15_3
4727 ; GFX6-NEXT:  ; %bb.6: ; %atomicrmw.end
4728 ; GFX6-NEXT:    s_or_b64 exec, exec, s[6:7]
4729 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
4730 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v0
4731 ; GFX6-NEXT:    s_waitcnt expcnt(0)
4732 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
4733   %gep = getelementptr half, ptr addrspace(7) %ptr, i32 256
4734   %result = atomicrmw fadd ptr addrspace(7) %gep, half %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
4735   ret half %result
4738 ; --------------------------------------------------------------------
4739 ; bfloat
4740 ; --------------------------------------------------------------------
4742 define bfloat @buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, bfloat %val) #0 {
4743 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
4744 ; GFX12:       ; %bb.0:
4745 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
4746 ; GFX12-NEXT:    s_wait_expcnt 0x0
4747 ; GFX12-NEXT:    s_wait_samplecnt 0x0
4748 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
4749 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4750 ; GFX12-NEXT:    s_addk_co_i32 s16, 0x200
4751 ; GFX12-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
4752 ; GFX12-NEXT:    s_wait_alu 0xfffe
4753 ; GFX12-NEXT:    s_and_b32 s4, s16, -4
4754 ; GFX12-NEXT:    s_wait_alu 0xfffe
4755 ; GFX12-NEXT:    v_mov_b32_e32 v4, s4
4756 ; GFX12-NEXT:    s_and_b32 s4, s16, 3
4757 ; GFX12-NEXT:    s_wait_alu 0xfffe
4758 ; GFX12-NEXT:    s_lshl_b32 s4, s4, 3
4759 ; GFX12-NEXT:    s_wait_alu 0xfffe
4760 ; GFX12-NEXT:    s_lshl_b32 s5, 0xffff, s4
4761 ; GFX12-NEXT:    buffer_load_b32 v1, v4, s[0:3], null offen
4762 ; GFX12-NEXT:    s_not_b32 s6, s5
4763 ; GFX12-NEXT:    s_mov_b32 s5, 0
4764 ; GFX12-NEXT:  .LBB16_1: ; %atomicrmw.start
4765 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
4766 ; GFX12-NEXT:    s_wait_loadcnt 0x0
4767 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, s4, v1
4768 ; GFX12-NEXT:    s_wait_storecnt 0x0
4769 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4770 ; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
4771 ; GFX12-NEXT:    v_add_f32_e32 v0, v0, v5
4772 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
4773 ; GFX12-NEXT:    v_bfe_u32 v2, v0, 16, 1
4774 ; GFX12-NEXT:    v_or_b32_e32 v3, 0x400000, v0
4775 ; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
4776 ; GFX12-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
4777 ; GFX12-NEXT:    s_wait_alu 0xfffd
4778 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4779 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc_lo
4780 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4781 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
4782 ; GFX12-NEXT:    v_lshlrev_b32_e32 v0, s4, v0
4783 ; GFX12-NEXT:    s_wait_alu 0xfffe
4784 ; GFX12-NEXT:    v_and_or_b32 v0, v1, s6, v0
4785 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4786 ; GFX12-NEXT:    v_dual_mov_b32 v3, v1 :: v_dual_mov_b32 v2, v0
4787 ; GFX12-NEXT:    buffer_atomic_cmpswap_b32 v[2:3], v4, s[0:3], null offen th:TH_ATOMIC_RETURN
4788 ; GFX12-NEXT:    s_wait_loadcnt 0x0
4789 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
4790 ; GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v2, v1
4791 ; GFX12-NEXT:    v_mov_b32_e32 v1, v2
4792 ; GFX12-NEXT:    s_or_b32 s5, vcc_lo, s5
4793 ; GFX12-NEXT:    s_wait_alu 0xfffe
4794 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
4795 ; GFX12-NEXT:    s_cbranch_execnz .LBB16_1
4796 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
4797 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s5
4798 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, s4, v2
4799 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
4801 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
4802 ; GFX940:       ; %bb.0:
4803 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4804 ; GFX940-NEXT:    s_addk_i32 s16, 0x200
4805 ; GFX940-NEXT:    s_and_b32 s4, s16, -4
4806 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
4807 ; GFX940-NEXT:    buffer_load_dword v1, v4, s[0:3], 0 offen
4808 ; GFX940-NEXT:    s_and_b32 s4, s16, 3
4809 ; GFX940-NEXT:    s_lshl_b32 s6, s4, 3
4810 ; GFX940-NEXT:    s_lshl_b32 s4, 0xffff, s6
4811 ; GFX940-NEXT:    s_not_b32 s7, s4
4812 ; GFX940-NEXT:    s_mov_b64 s[4:5], 0
4813 ; GFX940-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
4814 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
4815 ; GFX940-NEXT:  .LBB16_1: ; %atomicrmw.start
4816 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
4817 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
4818 ; GFX940-NEXT:    v_lshrrev_b32_sdwa v0, s6, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
4819 ; GFX940-NEXT:    buffer_wbl2 sc1
4820 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v5
4821 ; GFX940-NEXT:    v_bfe_u32 v2, v0, 16, 1
4822 ; GFX940-NEXT:    v_or_b32_e32 v3, 0x400000, v0
4823 ; GFX940-NEXT:    v_add3_u32 v2, v2, v0, s8
4824 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
4825 ; GFX940-NEXT:    s_nop 1
4826 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
4827 ; GFX940-NEXT:    v_lshlrev_b32_sdwa v0, s6, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
4828 ; GFX940-NEXT:    v_and_or_b32 v0, v1, s7, v0
4829 ; GFX940-NEXT:    v_mov_b64_e32 v[2:3], v[0:1]
4830 ; GFX940-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[0:3], 0 offen sc0
4831 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
4832 ; GFX940-NEXT:    buffer_inv sc1
4833 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
4834 ; GFX940-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
4835 ; GFX940-NEXT:    v_mov_b32_e32 v1, v2
4836 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[4:5]
4837 ; GFX940-NEXT:    s_cbranch_execnz .LBB16_1
4838 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
4839 ; GFX940-NEXT:    s_or_b64 exec, exec, s[4:5]
4840 ; GFX940-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
4841 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4843 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
4844 ; GFX11:       ; %bb.0:
4845 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4846 ; GFX11-NEXT:    s_addk_i32 s16, 0x200
4847 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
4848 ; GFX11-NEXT:    s_and_b32 s4, s16, -4
4849 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
4850 ; GFX11-NEXT:    v_mov_b32_e32 v4, s4
4851 ; GFX11-NEXT:    s_and_b32 s4, s16, 3
4852 ; GFX11-NEXT:    s_lshl_b32 s4, s4, 3
4853 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4854 ; GFX11-NEXT:    s_lshl_b32 s5, 0xffff, s4
4855 ; GFX11-NEXT:    buffer_load_b32 v1, v4, s[0:3], 0 offen
4856 ; GFX11-NEXT:    s_not_b32 s6, s5
4857 ; GFX11-NEXT:    s_mov_b32 s5, 0
4858 ; GFX11-NEXT:    .p2align 6
4859 ; GFX11-NEXT:  .LBB16_1: ; %atomicrmw.start
4860 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
4861 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4862 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, s4, v1
4863 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
4864 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4865 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
4866 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v5
4867 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
4868 ; GFX11-NEXT:    v_bfe_u32 v2, v0, 16, 1
4869 ; GFX11-NEXT:    v_or_b32_e32 v3, 0x400000, v0
4870 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
4871 ; GFX11-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
4872 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4873 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc_lo
4874 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
4875 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4876 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, s4, v0
4877 ; GFX11-NEXT:    v_and_or_b32 v0, v1, s6, v0
4878 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4879 ; GFX11-NEXT:    v_dual_mov_b32 v3, v1 :: v_dual_mov_b32 v2, v0
4880 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[2:3], v4, s[0:3], 0 offen glc
4881 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4882 ; GFX11-NEXT:    buffer_gl1_inv
4883 ; GFX11-NEXT:    buffer_gl0_inv
4884 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v2, v1
4885 ; GFX11-NEXT:    v_mov_b32_e32 v1, v2
4886 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
4887 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4888 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
4889 ; GFX11-NEXT:    s_cbranch_execnz .LBB16_1
4890 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
4891 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
4892 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, s4, v2
4893 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
4895 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
4896 ; GFX10:       ; %bb.0:
4897 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4898 ; GFX10-NEXT:    s_addk_i32 s20, 0x200
4899 ; GFX10-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
4900 ; GFX10-NEXT:    s_and_b32 s4, s20, -4
4901 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
4902 ; GFX10-NEXT:    s_and_b32 s4, s20, 3
4903 ; GFX10-NEXT:    s_lshl_b32 s4, s4, 3
4904 ; GFX10-NEXT:    s_lshl_b32 s5, 0xffff, s4
4905 ; GFX10-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
4906 ; GFX10-NEXT:    s_not_b32 s6, s5
4907 ; GFX10-NEXT:    s_mov_b32 s5, 0
4908 ; GFX10-NEXT:  .LBB16_1: ; %atomicrmw.start
4909 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
4910 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4911 ; GFX10-NEXT:    v_lshrrev_b32_sdwa v0, s4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
4912 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
4913 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v5
4914 ; GFX10-NEXT:    v_bfe_u32 v2, v0, 16, 1
4915 ; GFX10-NEXT:    v_or_b32_e32 v3, 0x400000, v0
4916 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
4917 ; GFX10-NEXT:    v_add3_u32 v2, v2, v0, 0x7fff
4918 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc_lo
4919 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v0, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
4920 ; GFX10-NEXT:    v_and_or_b32 v0, v1, s6, v0
4921 ; GFX10-NEXT:    v_mov_b32_e32 v3, v1
4922 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
4923 ; GFX10-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
4924 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4925 ; GFX10-NEXT:    buffer_gl1_inv
4926 ; GFX10-NEXT:    buffer_gl0_inv
4927 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v2, v1
4928 ; GFX10-NEXT:    v_mov_b32_e32 v1, v2
4929 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
4930 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
4931 ; GFX10-NEXT:    s_cbranch_execnz .LBB16_1
4932 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
4933 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
4934 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, s4, v2
4935 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
4937 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
4938 ; GFX90A:       ; %bb.0:
4939 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4940 ; GFX90A-NEXT:    s_addk_i32 s20, 0x200
4941 ; GFX90A-NEXT:    s_and_b32 s4, s20, -4
4942 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
4943 ; GFX90A-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
4944 ; GFX90A-NEXT:    s_and_b32 s4, s20, 3
4945 ; GFX90A-NEXT:    s_lshl_b32 s6, s4, 3
4946 ; GFX90A-NEXT:    s_lshl_b32 s4, 0xffff, s6
4947 ; GFX90A-NEXT:    s_not_b32 s7, s4
4948 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
4949 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
4950 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
4951 ; GFX90A-NEXT:  .LBB16_1: ; %atomicrmw.start
4952 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
4953 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
4954 ; GFX90A-NEXT:    v_lshrrev_b32_sdwa v0, s6, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
4955 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v5
4956 ; GFX90A-NEXT:    v_bfe_u32 v2, v0, 16, 1
4957 ; GFX90A-NEXT:    v_or_b32_e32 v3, 0x400000, v0
4958 ; GFX90A-NEXT:    v_add3_u32 v2, v2, v0, s8
4959 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
4960 ; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
4961 ; GFX90A-NEXT:    v_lshlrev_b32_sdwa v0, s6, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
4962 ; GFX90A-NEXT:    v_and_or_b32 v0, v1, s7, v0
4963 ; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[0,1]
4964 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
4965 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
4966 ; GFX90A-NEXT:    buffer_wbinvl1
4967 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
4968 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
4969 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
4970 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
4971 ; GFX90A-NEXT:    s_cbranch_execnz .LBB16_1
4972 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
4973 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
4974 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
4975 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4977 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
4978 ; GFX908:       ; %bb.0:
4979 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4980 ; GFX908-NEXT:    s_addk_i32 s20, 0x200
4981 ; GFX908-NEXT:    s_and_b32 s4, s20, -4
4982 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
4983 ; GFX908-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
4984 ; GFX908-NEXT:    s_and_b32 s4, s20, 3
4985 ; GFX908-NEXT:    s_lshl_b32 s6, s4, 3
4986 ; GFX908-NEXT:    s_lshl_b32 s4, 0xffff, s6
4987 ; GFX908-NEXT:    s_not_b32 s7, s4
4988 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
4989 ; GFX908-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
4990 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
4991 ; GFX908-NEXT:  .LBB16_1: ; %atomicrmw.start
4992 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
4993 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
4994 ; GFX908-NEXT:    v_lshrrev_b32_sdwa v0, s6, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
4995 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v5
4996 ; GFX908-NEXT:    v_bfe_u32 v2, v0, 16, 1
4997 ; GFX908-NEXT:    v_or_b32_e32 v3, 0x400000, v0
4998 ; GFX908-NEXT:    v_add3_u32 v2, v2, v0, s8
4999 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
5000 ; GFX908-NEXT:    v_cndmask_b32_e32 v0, v2, v3, vcc
5001 ; GFX908-NEXT:    v_lshlrev_b32_sdwa v0, s6, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5002 ; GFX908-NEXT:    v_and_or_b32 v0, v1, s7, v0
5003 ; GFX908-NEXT:    v_mov_b32_e32 v3, v1
5004 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
5005 ; GFX908-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
5006 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
5007 ; GFX908-NEXT:    buffer_wbinvl1
5008 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
5009 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5010 ; GFX908-NEXT:    v_mov_b32_e32 v1, v2
5011 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5012 ; GFX908-NEXT:    s_cbranch_execnz .LBB16_1
5013 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
5014 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
5015 ; GFX908-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
5016 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
5018 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
5019 ; GFX8:       ; %bb.0:
5020 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5021 ; GFX8-NEXT:    s_addk_i32 s20, 0x200
5022 ; GFX8-NEXT:    s_and_b32 s4, s20, -4
5023 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
5024 ; GFX8-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
5025 ; GFX8-NEXT:    s_and_b32 s4, s20, 3
5026 ; GFX8-NEXT:    s_lshl_b32 s6, s4, 3
5027 ; GFX8-NEXT:    s_lshl_b32 s4, 0xffff, s6
5028 ; GFX8-NEXT:    s_not_b32 s7, s4
5029 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
5030 ; GFX8-NEXT:    v_lshlrev_b32_e32 v5, 16, v0
5031 ; GFX8-NEXT:  .LBB16_1: ; %atomicrmw.start
5032 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
5033 ; GFX8-NEXT:    v_mov_b32_e32 v0, s6
5034 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5035 ; GFX8-NEXT:    v_lshrrev_b32_sdwa v3, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5036 ; GFX8-NEXT:    v_add_f32_e32 v3, v3, v5
5037 ; GFX8-NEXT:    v_bfe_u32 v6, v3, 16, 1
5038 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v3
5039 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 0x7fff, v6
5040 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v3
5041 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v3, v3
5042 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v6, v7, vcc
5043 ; GFX8-NEXT:    v_and_b32_e32 v2, s7, v1
5044 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v0, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5045 ; GFX8-NEXT:    v_or_b32_e32 v0, v2, v0
5046 ; GFX8-NEXT:    v_mov_b32_e32 v3, v1
5047 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
5048 ; GFX8-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
5049 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5050 ; GFX8-NEXT:    buffer_wbinvl1
5051 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
5052 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5053 ; GFX8-NEXT:    v_mov_b32_e32 v1, v2
5054 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5055 ; GFX8-NEXT:    s_cbranch_execnz .LBB16_1
5056 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
5057 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
5058 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
5059 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5061 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
5062 ; GFX7:       ; %bb.0:
5063 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5064 ; GFX7-NEXT:    s_addk_i32 s20, 0x200
5065 ; GFX7-NEXT:    s_and_b32 s4, s20, -4
5066 ; GFX7-NEXT:    v_mov_b32_e32 v4, s4
5067 ; GFX7-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
5068 ; GFX7-NEXT:    s_and_b32 s4, s20, 3
5069 ; GFX7-NEXT:    s_lshl_b32 s6, s4, 3
5070 ; GFX7-NEXT:    s_lshl_b32 s4, 0xffff, s6
5071 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
5072 ; GFX7-NEXT:    s_not_b32 s7, s4
5073 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
5074 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
5075 ; GFX7-NEXT:  .LBB16_1: ; %atomicrmw.start
5076 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
5077 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5078 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
5079 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5080 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v5
5081 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5082 ; GFX7-NEXT:    v_and_b32_e32 v2, s7, v1
5083 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
5084 ; GFX7-NEXT:    v_or_b32_e32 v0, v2, v0
5085 ; GFX7-NEXT:    v_mov_b32_e32 v3, v1
5086 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
5087 ; GFX7-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
5088 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5089 ; GFX7-NEXT:    buffer_wbinvl1
5090 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
5091 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5092 ; GFX7-NEXT:    v_mov_b32_e32 v1, v2
5093 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5094 ; GFX7-NEXT:    s_cbranch_execnz .LBB16_1
5095 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
5096 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
5097 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
5098 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5099 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5101 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__amdgpu_no_fine_grained_memory:
5102 ; GFX6:       ; %bb.0:
5103 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5104 ; GFX6-NEXT:    s_addk_i32 s20, 0x200
5105 ; GFX6-NEXT:    s_and_b32 s4, s20, -4
5106 ; GFX6-NEXT:    v_mov_b32_e32 v4, s4
5107 ; GFX6-NEXT:    buffer_load_dword v1, v4, s[16:19], 0 offen
5108 ; GFX6-NEXT:    s_and_b32 s4, s20, 3
5109 ; GFX6-NEXT:    s_lshl_b32 s6, s4, 3
5110 ; GFX6-NEXT:    s_lshl_b32 s4, 0xffff, s6
5111 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
5112 ; GFX6-NEXT:    s_not_b32 s7, s4
5113 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
5114 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
5115 ; GFX6-NEXT:  .LBB16_1: ; %atomicrmw.start
5116 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
5117 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
5118 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
5119 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5120 ; GFX6-NEXT:    v_add_f32_e32 v0, v0, v5
5121 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5122 ; GFX6-NEXT:    s_waitcnt expcnt(0)
5123 ; GFX6-NEXT:    v_and_b32_e32 v2, s7, v1
5124 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
5125 ; GFX6-NEXT:    v_or_b32_e32 v0, v2, v0
5126 ; GFX6-NEXT:    v_mov_b32_e32 v3, v1
5127 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
5128 ; GFX6-NEXT:    buffer_atomic_cmpswap v[2:3], v4, s[16:19], 0 offen glc
5129 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
5130 ; GFX6-NEXT:    buffer_wbinvl1
5131 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v2, v1
5132 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5133 ; GFX6-NEXT:    v_mov_b32_e32 v1, v2
5134 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5135 ; GFX6-NEXT:    s_cbranch_execnz .LBB16_1
5136 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
5137 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
5138 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, s6, v2
5139 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5140 ; GFX6-NEXT:    s_waitcnt expcnt(0)
5141 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
5142   %gep = getelementptr bfloat, ptr addrspace(7) %ptr, i32 256
5143   %result = atomicrmw fadd ptr addrspace(7) %gep, bfloat %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
5144   ret bfloat %result
5147 define void @buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, bfloat %val) #0 {
5148 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5149 ; GFX12:       ; %bb.0:
5150 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
5151 ; GFX12-NEXT:    s_wait_expcnt 0x0
5152 ; GFX12-NEXT:    s_wait_samplecnt 0x0
5153 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
5154 ; GFX12-NEXT:    s_wait_kmcnt 0x0
5155 ; GFX12-NEXT:    s_addk_co_i32 s16, 0x200
5156 ; GFX12-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
5157 ; GFX12-NEXT:    s_wait_alu 0xfffe
5158 ; GFX12-NEXT:    s_and_b32 s4, s16, -4
5159 ; GFX12-NEXT:    s_wait_alu 0xfffe
5160 ; GFX12-NEXT:    v_mov_b32_e32 v2, s4
5161 ; GFX12-NEXT:    s_and_b32 s4, s16, 3
5162 ; GFX12-NEXT:    s_wait_alu 0xfffe
5163 ; GFX12-NEXT:    s_lshl_b32 s4, s4, 3
5164 ; GFX12-NEXT:    s_wait_alu 0xfffe
5165 ; GFX12-NEXT:    s_lshl_b32 s5, 0xffff, s4
5166 ; GFX12-NEXT:    buffer_load_b32 v1, v2, s[0:3], null offen
5167 ; GFX12-NEXT:    s_not_b32 s6, s5
5168 ; GFX12-NEXT:    s_mov_b32 s5, 0
5169 ; GFX12-NEXT:  .LBB17_1: ; %atomicrmw.start
5170 ; GFX12-NEXT:    ; =>This Inner Loop Header: Depth=1
5171 ; GFX12-NEXT:    s_wait_loadcnt 0x0
5172 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, s4, v1
5173 ; GFX12-NEXT:    s_wait_storecnt 0x0
5174 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5175 ; GFX12-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5176 ; GFX12-NEXT:    v_add_f32_e32 v0, v0, v3
5177 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
5178 ; GFX12-NEXT:    v_bfe_u32 v4, v0, 16, 1
5179 ; GFX12-NEXT:    v_or_b32_e32 v5, 0x400000, v0
5180 ; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
5181 ; GFX12-NEXT:    v_add3_u32 v4, v4, v0, 0x7fff
5182 ; GFX12-NEXT:    s_wait_alu 0xfffd
5183 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5184 ; GFX12-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc_lo
5185 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5186 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
5187 ; GFX12-NEXT:    v_lshlrev_b32_e32 v0, s4, v0
5188 ; GFX12-NEXT:    s_wait_alu 0xfffe
5189 ; GFX12-NEXT:    v_and_or_b32 v0, v1, s6, v0
5190 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5191 ; GFX12-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
5192 ; GFX12-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v2, s[0:3], null offen th:TH_ATOMIC_RETURN
5193 ; GFX12-NEXT:    s_wait_loadcnt 0x0
5194 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
5195 ; GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v1
5196 ; GFX12-NEXT:    v_mov_b32_e32 v1, v4
5197 ; GFX12-NEXT:    s_or_b32 s5, vcc_lo, s5
5198 ; GFX12-NEXT:    s_wait_alu 0xfffe
5199 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
5200 ; GFX12-NEXT:    s_cbranch_execnz .LBB17_1
5201 ; GFX12-NEXT:  ; %bb.2: ; %atomicrmw.end
5202 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s5
5203 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
5205 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5206 ; GFX940:       ; %bb.0:
5207 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5208 ; GFX940-NEXT:    s_addk_i32 s16, 0x200
5209 ; GFX940-NEXT:    s_and_b32 s4, s16, -4
5210 ; GFX940-NEXT:    v_mov_b32_e32 v2, s4
5211 ; GFX940-NEXT:    buffer_load_dword v1, v2, s[0:3], 0 offen
5212 ; GFX940-NEXT:    s_and_b32 s4, s16, 3
5213 ; GFX940-NEXT:    s_lshl_b32 s6, s4, 3
5214 ; GFX940-NEXT:    s_lshl_b32 s4, 0xffff, s6
5215 ; GFX940-NEXT:    s_not_b32 s7, s4
5216 ; GFX940-NEXT:    s_mov_b64 s[4:5], 0
5217 ; GFX940-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
5218 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
5219 ; GFX940-NEXT:  .LBB17_1: ; %atomicrmw.start
5220 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
5221 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
5222 ; GFX940-NEXT:    v_lshrrev_b32_sdwa v0, s6, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5223 ; GFX940-NEXT:    buffer_wbl2 sc1
5224 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v3
5225 ; GFX940-NEXT:    v_bfe_u32 v4, v0, 16, 1
5226 ; GFX940-NEXT:    v_or_b32_e32 v5, 0x400000, v0
5227 ; GFX940-NEXT:    v_add3_u32 v4, v4, v0, s8
5228 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
5229 ; GFX940-NEXT:    s_nop 1
5230 ; GFX940-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
5231 ; GFX940-NEXT:    v_lshlrev_b32_sdwa v0, s6, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5232 ; GFX940-NEXT:    v_and_or_b32 v0, v1, s7, v0
5233 ; GFX940-NEXT:    v_mov_b64_e32 v[4:5], v[0:1]
5234 ; GFX940-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[0:3], 0 offen sc0
5235 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
5236 ; GFX940-NEXT:    buffer_inv sc1
5237 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
5238 ; GFX940-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5239 ; GFX940-NEXT:    v_mov_b32_e32 v1, v4
5240 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5241 ; GFX940-NEXT:    s_cbranch_execnz .LBB17_1
5242 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
5243 ; GFX940-NEXT:    s_or_b64 exec, exec, s[4:5]
5244 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
5246 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5247 ; GFX11:       ; %bb.0:
5248 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5249 ; GFX11-NEXT:    s_addk_i32 s16, 0x200
5250 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
5251 ; GFX11-NEXT:    s_and_b32 s4, s16, -4
5252 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
5253 ; GFX11-NEXT:    v_mov_b32_e32 v2, s4
5254 ; GFX11-NEXT:    s_and_b32 s4, s16, 3
5255 ; GFX11-NEXT:    s_lshl_b32 s4, s4, 3
5256 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
5257 ; GFX11-NEXT:    s_lshl_b32 s5, 0xffff, s4
5258 ; GFX11-NEXT:    buffer_load_b32 v1, v2, s[0:3], 0 offen
5259 ; GFX11-NEXT:    s_not_b32 s6, s5
5260 ; GFX11-NEXT:    s_mov_b32 s5, 0
5261 ; GFX11-NEXT:    .p2align 6
5262 ; GFX11-NEXT:  .LBB17_1: ; %atomicrmw.start
5263 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
5264 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5265 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, s4, v1
5266 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
5267 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5268 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5269 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v3
5270 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
5271 ; GFX11-NEXT:    v_bfe_u32 v4, v0, 16, 1
5272 ; GFX11-NEXT:    v_or_b32_e32 v5, 0x400000, v0
5273 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
5274 ; GFX11-NEXT:    v_add3_u32 v4, v4, v0, 0x7fff
5275 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5276 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc_lo
5277 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5278 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5279 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, s4, v0
5280 ; GFX11-NEXT:    v_and_or_b32 v0, v1, s6, v0
5281 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5282 ; GFX11-NEXT:    v_dual_mov_b32 v5, v1 :: v_dual_mov_b32 v4, v0
5283 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v2, s[0:3], 0 offen glc
5284 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5285 ; GFX11-NEXT:    buffer_gl1_inv
5286 ; GFX11-NEXT:    buffer_gl0_inv
5287 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v1
5288 ; GFX11-NEXT:    v_mov_b32_e32 v1, v4
5289 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
5290 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
5291 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
5292 ; GFX11-NEXT:    s_cbranch_execnz .LBB17_1
5293 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
5294 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
5295 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5297 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5298 ; GFX10:       ; %bb.0:
5299 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5300 ; GFX10-NEXT:    s_addk_i32 s20, 0x200
5301 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
5302 ; GFX10-NEXT:    s_and_b32 s4, s20, -4
5303 ; GFX10-NEXT:    v_mov_b32_e32 v2, s4
5304 ; GFX10-NEXT:    s_and_b32 s4, s20, 3
5305 ; GFX10-NEXT:    s_lshl_b32 s4, s4, 3
5306 ; GFX10-NEXT:    s_lshl_b32 s5, 0xffff, s4
5307 ; GFX10-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
5308 ; GFX10-NEXT:    s_not_b32 s6, s5
5309 ; GFX10-NEXT:    s_mov_b32 s5, 0
5310 ; GFX10-NEXT:  .LBB17_1: ; %atomicrmw.start
5311 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
5312 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5313 ; GFX10-NEXT:    v_lshrrev_b32_sdwa v0, s4, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5314 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5315 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v3
5316 ; GFX10-NEXT:    v_bfe_u32 v4, v0, 16, 1
5317 ; GFX10-NEXT:    v_or_b32_e32 v5, 0x400000, v0
5318 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v0, v0
5319 ; GFX10-NEXT:    v_add3_u32 v4, v4, v0, 0x7fff
5320 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc_lo
5321 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v0, s4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5322 ; GFX10-NEXT:    v_and_or_b32 v0, v1, s6, v0
5323 ; GFX10-NEXT:    v_mov_b32_e32 v5, v1
5324 ; GFX10-NEXT:    v_mov_b32_e32 v4, v0
5325 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
5326 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5327 ; GFX10-NEXT:    buffer_gl1_inv
5328 ; GFX10-NEXT:    buffer_gl0_inv
5329 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v1
5330 ; GFX10-NEXT:    v_mov_b32_e32 v1, v4
5331 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
5332 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
5333 ; GFX10-NEXT:    s_cbranch_execnz .LBB17_1
5334 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
5335 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
5336 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5338 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5339 ; GFX90A:       ; %bb.0:
5340 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5341 ; GFX90A-NEXT:    s_addk_i32 s20, 0x200
5342 ; GFX90A-NEXT:    s_and_b32 s4, s20, -4
5343 ; GFX90A-NEXT:    v_mov_b32_e32 v2, s4
5344 ; GFX90A-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
5345 ; GFX90A-NEXT:    s_and_b32 s4, s20, 3
5346 ; GFX90A-NEXT:    s_lshl_b32 s6, s4, 3
5347 ; GFX90A-NEXT:    s_lshl_b32 s4, 0xffff, s6
5348 ; GFX90A-NEXT:    s_not_b32 s7, s4
5349 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
5350 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
5351 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
5352 ; GFX90A-NEXT:  .LBB17_1: ; %atomicrmw.start
5353 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
5354 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
5355 ; GFX90A-NEXT:    v_lshrrev_b32_sdwa v0, s6, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5356 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v3
5357 ; GFX90A-NEXT:    v_bfe_u32 v4, v0, 16, 1
5358 ; GFX90A-NEXT:    v_or_b32_e32 v5, 0x400000, v0
5359 ; GFX90A-NEXT:    v_add3_u32 v4, v4, v0, s8
5360 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
5361 ; GFX90A-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
5362 ; GFX90A-NEXT:    v_lshlrev_b32_sdwa v0, s6, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5363 ; GFX90A-NEXT:    v_and_or_b32 v0, v1, s7, v0
5364 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[0:1], v[0:1] op_sel:[0,1]
5365 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
5366 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
5367 ; GFX90A-NEXT:    buffer_wbinvl1
5368 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
5369 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5370 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v4
5371 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5372 ; GFX90A-NEXT:    s_cbranch_execnz .LBB17_1
5373 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
5374 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
5375 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5377 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5378 ; GFX908:       ; %bb.0:
5379 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5380 ; GFX908-NEXT:    s_addk_i32 s20, 0x200
5381 ; GFX908-NEXT:    s_and_b32 s4, s20, -4
5382 ; GFX908-NEXT:    v_mov_b32_e32 v2, s4
5383 ; GFX908-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
5384 ; GFX908-NEXT:    s_and_b32 s4, s20, 3
5385 ; GFX908-NEXT:    s_lshl_b32 s6, s4, 3
5386 ; GFX908-NEXT:    s_lshl_b32 s4, 0xffff, s6
5387 ; GFX908-NEXT:    s_not_b32 s7, s4
5388 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
5389 ; GFX908-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
5390 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
5391 ; GFX908-NEXT:  .LBB17_1: ; %atomicrmw.start
5392 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
5393 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
5394 ; GFX908-NEXT:    v_lshrrev_b32_sdwa v0, s6, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5395 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v3
5396 ; GFX908-NEXT:    v_bfe_u32 v4, v0, 16, 1
5397 ; GFX908-NEXT:    v_or_b32_e32 v5, 0x400000, v0
5398 ; GFX908-NEXT:    v_add3_u32 v4, v4, v0, s8
5399 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v0, v0
5400 ; GFX908-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
5401 ; GFX908-NEXT:    v_lshlrev_b32_sdwa v0, s6, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5402 ; GFX908-NEXT:    v_and_or_b32 v0, v1, s7, v0
5403 ; GFX908-NEXT:    v_mov_b32_e32 v5, v1
5404 ; GFX908-NEXT:    v_mov_b32_e32 v4, v0
5405 ; GFX908-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
5406 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
5407 ; GFX908-NEXT:    buffer_wbinvl1
5408 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
5409 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5410 ; GFX908-NEXT:    v_mov_b32_e32 v1, v4
5411 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5412 ; GFX908-NEXT:    s_cbranch_execnz .LBB17_1
5413 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
5414 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
5415 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
5417 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5418 ; GFX8:       ; %bb.0:
5419 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5420 ; GFX8-NEXT:    s_addk_i32 s20, 0x200
5421 ; GFX8-NEXT:    s_and_b32 s4, s20, -4
5422 ; GFX8-NEXT:    v_mov_b32_e32 v2, s4
5423 ; GFX8-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
5424 ; GFX8-NEXT:    s_and_b32 s4, s20, 3
5425 ; GFX8-NEXT:    s_lshl_b32 s6, s4, 3
5426 ; GFX8-NEXT:    s_lshl_b32 s4, 0xffff, s6
5427 ; GFX8-NEXT:    s_not_b32 s7, s4
5428 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
5429 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 16, v0
5430 ; GFX8-NEXT:  .LBB17_1: ; %atomicrmw.start
5431 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
5432 ; GFX8-NEXT:    v_mov_b32_e32 v0, s6
5433 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5434 ; GFX8-NEXT:    v_lshrrev_b32_sdwa v5, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5435 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v3
5436 ; GFX8-NEXT:    v_bfe_u32 v6, v5, 16, 1
5437 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v5
5438 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 0x7fff, v6
5439 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v5
5440 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
5441 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v6, v7, vcc
5442 ; GFX8-NEXT:    v_and_b32_e32 v4, s7, v1
5443 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v0, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5444 ; GFX8-NEXT:    v_or_b32_e32 v0, v4, v0
5445 ; GFX8-NEXT:    v_mov_b32_e32 v5, v1
5446 ; GFX8-NEXT:    v_mov_b32_e32 v4, v0
5447 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
5448 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
5449 ; GFX8-NEXT:    buffer_wbinvl1
5450 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
5451 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5452 ; GFX8-NEXT:    v_mov_b32_e32 v1, v4
5453 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5454 ; GFX8-NEXT:    s_cbranch_execnz .LBB17_1
5455 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
5456 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
5457 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
5459 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5460 ; GFX7:       ; %bb.0:
5461 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5462 ; GFX7-NEXT:    s_addk_i32 s20, 0x200
5463 ; GFX7-NEXT:    s_and_b32 s4, s20, -4
5464 ; GFX7-NEXT:    v_mov_b32_e32 v2, s4
5465 ; GFX7-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
5466 ; GFX7-NEXT:    s_and_b32 s4, s20, 3
5467 ; GFX7-NEXT:    s_lshl_b32 s6, s4, 3
5468 ; GFX7-NEXT:    s_lshl_b32 s4, 0xffff, s6
5469 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
5470 ; GFX7-NEXT:    s_not_b32 s7, s4
5471 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
5472 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
5473 ; GFX7-NEXT:  .LBB17_1: ; %atomicrmw.start
5474 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
5475 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5476 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
5477 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5478 ; GFX7-NEXT:    v_add_f32_e32 v0, v0, v3
5479 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5480 ; GFX7-NEXT:    v_and_b32_e32 v4, s7, v1
5481 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
5482 ; GFX7-NEXT:    v_or_b32_e32 v0, v4, v0
5483 ; GFX7-NEXT:    v_mov_b32_e32 v5, v1
5484 ; GFX7-NEXT:    v_mov_b32_e32 v4, v0
5485 ; GFX7-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
5486 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
5487 ; GFX7-NEXT:    buffer_wbinvl1
5488 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
5489 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5490 ; GFX7-NEXT:    v_mov_b32_e32 v1, v4
5491 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5492 ; GFX7-NEXT:    s_cbranch_execnz .LBB17_1
5493 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
5494 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
5495 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
5497 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_bf16__offset__amdgpu_no_fine_grained_memory:
5498 ; GFX6:       ; %bb.0:
5499 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5500 ; GFX6-NEXT:    s_addk_i32 s20, 0x200
5501 ; GFX6-NEXT:    s_and_b32 s4, s20, -4
5502 ; GFX6-NEXT:    v_mov_b32_e32 v2, s4
5503 ; GFX6-NEXT:    buffer_load_dword v1, v2, s[16:19], 0 offen
5504 ; GFX6-NEXT:    s_and_b32 s4, s20, 3
5505 ; GFX6-NEXT:    s_lshl_b32 s6, s4, 3
5506 ; GFX6-NEXT:    s_lshl_b32 s4, 0xffff, s6
5507 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
5508 ; GFX6-NEXT:    s_not_b32 s7, s4
5509 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
5510 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
5511 ; GFX6-NEXT:  .LBB17_1: ; %atomicrmw.start
5512 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
5513 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
5514 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, s6, v1
5515 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
5516 ; GFX6-NEXT:    v_add_f32_e32 v0, v0, v3
5517 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, 16, v0
5518 ; GFX6-NEXT:    s_waitcnt expcnt(0)
5519 ; GFX6-NEXT:    v_and_b32_e32 v4, s7, v1
5520 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, s6, v0
5521 ; GFX6-NEXT:    v_or_b32_e32 v0, v4, v0
5522 ; GFX6-NEXT:    v_mov_b32_e32 v5, v1
5523 ; GFX6-NEXT:    v_mov_b32_e32 v4, v0
5524 ; GFX6-NEXT:    buffer_atomic_cmpswap v[4:5], v2, s[16:19], 0 offen glc
5525 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
5526 ; GFX6-NEXT:    buffer_wbinvl1
5527 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v1
5528 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
5529 ; GFX6-NEXT:    v_mov_b32_e32 v1, v4
5530 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
5531 ; GFX6-NEXT:    s_cbranch_execnz .LBB17_1
5532 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
5533 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
5534 ; GFX6-NEXT:    s_waitcnt expcnt(0)
5535 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
5536   %gep = getelementptr bfloat, ptr addrspace(7) %ptr, i32 256
5537   %unused = atomicrmw fadd ptr addrspace(7) %gep, bfloat %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
5538   ret void
5541 define bfloat @buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory(ptr addrspace(7) %ptr, bfloat %val) #0 {
5542 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
5543 ; GFX12:       ; %bb.0:
5544 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
5545 ; GFX12-NEXT:    s_wait_expcnt 0x0
5546 ; GFX12-NEXT:    s_wait_samplecnt 0x0
5547 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
5548 ; GFX12-NEXT:    s_wait_kmcnt 0x0
5549 ; GFX12-NEXT:    v_add_nc_u32_e32 v4, 0x200, v4
5550 ; GFX12-NEXT:    s_mov_b32 s1, exec_lo
5551 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
5552 ; GFX12-NEXT:    v_and_b32_e32 v6, 3, v4
5553 ; GFX12-NEXT:    v_and_b32_e32 v8, -4, v4
5554 ; GFX12-NEXT:    v_lshlrev_b32_e32 v7, 3, v6
5555 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5556 ; GFX12-NEXT:    v_lshlrev_b32_e64 v6, v7, 0xffff
5557 ; GFX12-NEXT:    v_not_b32_e32 v9, v6
5558 ; GFX12-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
5559 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v0
5560 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v1
5561 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v2
5562 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v3
5563 ; GFX12-NEXT:    s_wait_alu 0xf1ff
5564 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
5565 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
5566 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
5567 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5568 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
5569 ; GFX12-NEXT:    s_wait_alu 0xfffe
5570 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
5571 ; GFX12-NEXT:    s_wait_loadcnt 0x0
5572 ; GFX12-NEXT:    buffer_load_b32 v6, v8, s[4:7], null offen
5573 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
5574 ; GFX12-NEXT:    s_cbranch_execnz .LBB18_1
5575 ; GFX12-NEXT:  ; %bb.2:
5576 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
5577 ; GFX12-NEXT:    v_lshlrev_b32_e32 v10, 16, v5
5578 ; GFX12-NEXT:    s_mov_b32 s1, 0
5579 ; GFX12-NEXT:  .LBB18_3: ; %atomicrmw.start
5580 ; GFX12-NEXT:    ; =>This Loop Header: Depth=1
5581 ; GFX12-NEXT:    ; Child Loop BB18_4 Depth 2
5582 ; GFX12-NEXT:    s_wait_loadcnt 0x0
5583 ; GFX12-NEXT:    v_lshrrev_b32_e32 v4, v7, v6
5584 ; GFX12-NEXT:    s_mov_b32 s2, exec_lo
5585 ; GFX12-NEXT:    s_wait_storecnt 0x0
5586 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5587 ; GFX12-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
5588 ; GFX12-NEXT:    v_add_f32_e32 v4, v4, v10
5589 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
5590 ; GFX12-NEXT:    v_bfe_u32 v5, v4, 16, 1
5591 ; GFX12-NEXT:    v_or_b32_e32 v11, 0x400000, v4
5592 ; GFX12-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
5593 ; GFX12-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
5594 ; GFX12-NEXT:    s_wait_alu 0xfffd
5595 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5596 ; GFX12-NEXT:    v_cndmask_b32_e32 v4, v5, v11, vcc_lo
5597 ; GFX12-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
5598 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5599 ; GFX12-NEXT:    v_lshlrev_b32_e32 v4, v7, v4
5600 ; GFX12-NEXT:    v_and_or_b32 v5, v6, v9, v4
5601 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5602 ; GFX12-NEXT:    v_mov_b32_e32 v4, v5
5603 ; GFX12-NEXT:    v_mov_b32_e32 v5, v6
5604 ; GFX12-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
5605 ; GFX12-NEXT:    ; => This Inner Loop Header: Depth=2
5606 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v0
5607 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v1
5608 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v2
5609 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v3
5610 ; GFX12-NEXT:    s_wait_alu 0xf1ff
5611 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
5612 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
5613 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
5614 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5615 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
5616 ; GFX12-NEXT:    s_wait_alu 0xfffe
5617 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
5618 ; GFX12-NEXT:    s_wait_loadcnt 0x0
5619 ; GFX12-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v8, s[4:7], null offen th:TH_ATOMIC_RETURN
5620 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
5621 ; GFX12-NEXT:    s_cbranch_execnz .LBB18_4
5622 ; GFX12-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
5623 ; GFX12-NEXT:    s_mov_b32 exec_lo, s2
5624 ; GFX12-NEXT:    s_wait_loadcnt 0x0
5625 ; GFX12-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v6
5626 ; GFX12-NEXT:    v_mov_b32_e32 v6, v4
5627 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
5628 ; GFX12-NEXT:    s_or_b32 s1, vcc_lo, s1
5629 ; GFX12-NEXT:    s_wait_alu 0xfffe
5630 ; GFX12-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
5631 ; GFX12-NEXT:    s_cbranch_execnz .LBB18_3
5632 ; GFX12-NEXT:  ; %bb.6: ; %atomicrmw.end
5633 ; GFX12-NEXT:    s_or_b32 exec_lo, exec_lo, s1
5634 ; GFX12-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
5635 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
5637 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
5638 ; GFX940:       ; %bb.0:
5639 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5640 ; GFX940-NEXT:    v_add_u32_e32 v4, 0x200, v4
5641 ; GFX940-NEXT:    v_and_b32_e32 v9, -4, v4
5642 ; GFX940-NEXT:    v_and_b32_e32 v4, 3, v4
5643 ; GFX940-NEXT:    v_lshlrev_b32_e32 v8, 3, v4
5644 ; GFX940-NEXT:    s_mov_b32 s0, 0xffff
5645 ; GFX940-NEXT:    v_lshlrev_b32_e64 v4, v8, s0
5646 ; GFX940-NEXT:    v_not_b32_e32 v10, v4
5647 ; GFX940-NEXT:    s_mov_b64 s[2:3], exec
5648 ; GFX940-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
5649 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
5650 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
5651 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
5652 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
5653 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
5654 ; GFX940-NEXT:    s_nop 0
5655 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
5656 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
5657 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
5658 ; GFX940-NEXT:    buffer_load_dword v7, v9, s[4:7], 0 offen
5659 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
5660 ; GFX940-NEXT:    s_cbranch_execnz .LBB18_1
5661 ; GFX940-NEXT:  ; %bb.2:
5662 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
5663 ; GFX940-NEXT:    s_mov_b64 s[2:3], 0
5664 ; GFX940-NEXT:    v_lshlrev_b32_e32 v11, 16, v5
5665 ; GFX940-NEXT:    s_movk_i32 s10, 0x7fff
5666 ; GFX940-NEXT:  .LBB18_3: ; %atomicrmw.start
5667 ; GFX940-NEXT:    ; =>This Loop Header: Depth=1
5668 ; GFX940-NEXT:    ; Child Loop BB18_4 Depth 2
5669 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
5670 ; GFX940-NEXT:    v_lshrrev_b32_sdwa v4, v8, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5671 ; GFX940-NEXT:    s_mov_b64 s[8:9], exec
5672 ; GFX940-NEXT:    v_add_f32_e32 v4, v4, v11
5673 ; GFX940-NEXT:    v_bfe_u32 v5, v4, 16, 1
5674 ; GFX940-NEXT:    v_add3_u32 v5, v5, v4, s10
5675 ; GFX940-NEXT:    v_or_b32_e32 v6, 0x400000, v4
5676 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
5677 ; GFX940-NEXT:    buffer_wbl2 sc1
5678 ; GFX940-NEXT:    s_nop 0
5679 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
5680 ; GFX940-NEXT:    v_lshlrev_b32_sdwa v4, v8, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5681 ; GFX940-NEXT:    v_and_or_b32 v6, v7, v10, v4
5682 ; GFX940-NEXT:    v_mov_b64_e32 v[4:5], v[6:7]
5683 ; GFX940-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
5684 ; GFX940-NEXT:    ; => This Inner Loop Header: Depth=2
5685 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
5686 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
5687 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
5688 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
5689 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
5690 ; GFX940-NEXT:    s_nop 0
5691 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
5692 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
5693 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
5694 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
5695 ; GFX940-NEXT:    buffer_atomic_cmpswap v[4:5], v9, s[4:7], 0 offen sc0
5696 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
5697 ; GFX940-NEXT:    s_cbranch_execnz .LBB18_4
5698 ; GFX940-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
5699 ; GFX940-NEXT:    s_mov_b64 exec, s[8:9]
5700 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
5701 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v7
5702 ; GFX940-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
5703 ; GFX940-NEXT:    v_mov_b32_e32 v7, v4
5704 ; GFX940-NEXT:    buffer_inv sc1
5705 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[2:3]
5706 ; GFX940-NEXT:    s_cbranch_execnz .LBB18_3
5707 ; GFX940-NEXT:  ; %bb.6: ; %atomicrmw.end
5708 ; GFX940-NEXT:    s_or_b64 exec, exec, s[2:3]
5709 ; GFX940-NEXT:    v_lshrrev_b32_e32 v0, v8, v4
5710 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
5712 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
5713 ; GFX11:       ; %bb.0:
5714 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5715 ; GFX11-NEXT:    v_add_nc_u32_e32 v4, 0x200, v4
5716 ; GFX11-NEXT:    s_mov_b32 s1, 0
5717 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
5718 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
5719 ; GFX11-NEXT:    v_and_b32_e32 v6, 3, v4
5720 ; GFX11-NEXT:    v_and_b32_e32 v8, -4, v4
5721 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 3, v6
5722 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5723 ; GFX11-NEXT:    v_lshlrev_b32_e64 v6, v7, 0xffff
5724 ; GFX11-NEXT:    v_not_b32_e32 v9, v6
5725 ; GFX11-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
5726 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
5727 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
5728 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
5729 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
5730 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
5731 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
5732 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
5733 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
5734 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
5735 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
5736 ; GFX11-NEXT:    buffer_load_b32 v6, v8, s[4:7], 0 offen
5737 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
5738 ; GFX11-NEXT:    s_cbranch_execnz .LBB18_1
5739 ; GFX11-NEXT:  ; %bb.2:
5740 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
5741 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v5
5742 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
5743 ; GFX11-NEXT:    .p2align 6
5744 ; GFX11-NEXT:  .LBB18_3: ; %atomicrmw.start
5745 ; GFX11-NEXT:    ; =>This Loop Header: Depth=1
5746 ; GFX11-NEXT:    ; Child Loop BB18_4 Depth 2
5747 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5748 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, v7, v6
5749 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
5750 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
5751 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5752 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
5753 ; GFX11-NEXT:    v_add_f32_e32 v4, v4, v10
5754 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
5755 ; GFX11-NEXT:    v_bfe_u32 v5, v4, 16, 1
5756 ; GFX11-NEXT:    v_or_b32_e32 v11, 0x400000, v4
5757 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
5758 ; GFX11-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
5759 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5760 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v5, v11, vcc_lo
5761 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
5762 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5763 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, v7, v4
5764 ; GFX11-NEXT:    v_and_or_b32 v5, v6, v9, v4
5765 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5766 ; GFX11-NEXT:    v_mov_b32_e32 v4, v5
5767 ; GFX11-NEXT:    v_mov_b32_e32 v5, v6
5768 ; GFX11-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
5769 ; GFX11-NEXT:    ; => This Inner Loop Header: Depth=2
5770 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
5771 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
5772 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
5773 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
5774 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
5775 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
5776 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
5777 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
5778 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
5779 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
5780 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5781 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v8, s[4:7], 0 offen glc
5782 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
5783 ; GFX11-NEXT:    s_cbranch_execnz .LBB18_4
5784 ; GFX11-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
5785 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
5786 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
5787 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v6
5788 ; GFX11-NEXT:    v_mov_b32_e32 v6, v4
5789 ; GFX11-NEXT:    buffer_gl1_inv
5790 ; GFX11-NEXT:    buffer_gl0_inv
5791 ; GFX11-NEXT:    s_or_b32 s1, vcc_lo, s1
5792 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
5793 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
5794 ; GFX11-NEXT:    s_cbranch_execnz .LBB18_3
5795 ; GFX11-NEXT:  ; %bb.6: ; %atomicrmw.end
5796 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
5797 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s1
5798 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
5799 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
5801 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
5802 ; GFX10:       ; %bb.0:
5803 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5804 ; GFX10-NEXT:    v_add_nc_u32_e32 v4, 0x200, v4
5805 ; GFX10-NEXT:    s_mov_b32 s5, 0
5806 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
5807 ; GFX10-NEXT:    v_and_b32_e32 v6, 3, v4
5808 ; GFX10-NEXT:    v_and_b32_e32 v8, -4, v4
5809 ; GFX10-NEXT:    v_lshlrev_b32_e32 v7, 3, v6
5810 ; GFX10-NEXT:    v_lshlrev_b32_e64 v6, v7, 0xffff
5811 ; GFX10-NEXT:    v_not_b32_e32 v9, v6
5812 ; GFX10-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
5813 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
5814 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
5815 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
5816 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
5817 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
5818 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
5819 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
5820 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
5821 ; GFX10-NEXT:    buffer_load_dword v6, v8, s[8:11], 0 offen
5822 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5823 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
5824 ; GFX10-NEXT:    s_cbranch_execnz .LBB18_1
5825 ; GFX10-NEXT:  ; %bb.2:
5826 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
5827 ; GFX10-NEXT:    v_lshlrev_b32_e32 v10, 16, v5
5828 ; GFX10-NEXT:  .LBB18_3: ; %atomicrmw.start
5829 ; GFX10-NEXT:    ; =>This Loop Header: Depth=1
5830 ; GFX10-NEXT:    ; Child Loop BB18_4 Depth 2
5831 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5832 ; GFX10-NEXT:    v_lshrrev_b32_sdwa v4, v7, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5833 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
5834 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
5835 ; GFX10-NEXT:    v_add_f32_e32 v4, v4, v10
5836 ; GFX10-NEXT:    v_bfe_u32 v5, v4, 16, 1
5837 ; GFX10-NEXT:    v_or_b32_e32 v11, 0x400000, v4
5838 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
5839 ; GFX10-NEXT:    v_add3_u32 v5, v5, v4, 0x7fff
5840 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v5, v11, vcc_lo
5841 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v4, v7, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5842 ; GFX10-NEXT:    v_and_or_b32 v5, v6, v9, v4
5843 ; GFX10-NEXT:    v_mov_b32_e32 v4, v5
5844 ; GFX10-NEXT:    v_mov_b32_e32 v5, v6
5845 ; GFX10-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
5846 ; GFX10-NEXT:    ; => This Inner Loop Header: Depth=2
5847 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
5848 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
5849 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
5850 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
5851 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
5852 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
5853 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
5854 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
5855 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5856 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
5857 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5858 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
5859 ; GFX10-NEXT:    s_cbranch_execnz .LBB18_4
5860 ; GFX10-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
5861 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
5862 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
5863 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v6
5864 ; GFX10-NEXT:    v_mov_b32_e32 v6, v4
5865 ; GFX10-NEXT:    buffer_gl1_inv
5866 ; GFX10-NEXT:    buffer_gl0_inv
5867 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
5868 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
5869 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
5870 ; GFX10-NEXT:    s_cbranch_execnz .LBB18_3
5871 ; GFX10-NEXT:  ; %bb.6: ; %atomicrmw.end
5872 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
5873 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
5874 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
5876 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
5877 ; GFX90A:       ; %bb.0:
5878 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5879 ; GFX90A-NEXT:    v_add_u32_e32 v4, 0x200, v4
5880 ; GFX90A-NEXT:    v_and_b32_e32 v9, -4, v4
5881 ; GFX90A-NEXT:    v_and_b32_e32 v4, 3, v4
5882 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v8, 3, v4
5883 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
5884 ; GFX90A-NEXT:    v_lshlrev_b32_e64 v4, v8, s4
5885 ; GFX90A-NEXT:    v_not_b32_e32 v10, v4
5886 ; GFX90A-NEXT:    s_mov_b64 s[6:7], exec
5887 ; GFX90A-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
5888 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
5889 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
5890 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
5891 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
5892 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
5893 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
5894 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
5895 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
5896 ; GFX90A-NEXT:    s_nop 0
5897 ; GFX90A-NEXT:    buffer_load_dword v7, v9, s[8:11], 0 offen
5898 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
5899 ; GFX90A-NEXT:    s_cbranch_execnz .LBB18_1
5900 ; GFX90A-NEXT:  ; %bb.2:
5901 ; GFX90A-NEXT:    s_mov_b64 exec, s[6:7]
5902 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
5903 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v11, 16, v5
5904 ; GFX90A-NEXT:    s_movk_i32 s14, 0x7fff
5905 ; GFX90A-NEXT:  .LBB18_3: ; %atomicrmw.start
5906 ; GFX90A-NEXT:    ; =>This Loop Header: Depth=1
5907 ; GFX90A-NEXT:    ; Child Loop BB18_4 Depth 2
5908 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
5909 ; GFX90A-NEXT:    v_lshrrev_b32_sdwa v4, v8, v7 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5910 ; GFX90A-NEXT:    v_add_f32_e32 v4, v4, v11
5911 ; GFX90A-NEXT:    v_bfe_u32 v5, v4, 16, 1
5912 ; GFX90A-NEXT:    v_add3_u32 v5, v5, v4, s14
5913 ; GFX90A-NEXT:    v_or_b32_e32 v6, 0x400000, v4
5914 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
5915 ; GFX90A-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
5916 ; GFX90A-NEXT:    v_lshlrev_b32_sdwa v4, v8, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5917 ; GFX90A-NEXT:    v_and_or_b32 v6, v7, v10, v4
5918 ; GFX90A-NEXT:    s_mov_b64 s[12:13], exec
5919 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[6:7], v[6:7] op_sel:[0,1]
5920 ; GFX90A-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
5921 ; GFX90A-NEXT:    ; => This Inner Loop Header: Depth=2
5922 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
5923 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
5924 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
5925 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
5926 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
5927 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
5928 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
5929 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
5930 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
5931 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v9, s[8:11], 0 offen glc
5932 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
5933 ; GFX90A-NEXT:    s_cbranch_execnz .LBB18_4
5934 ; GFX90A-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
5935 ; GFX90A-NEXT:    s_mov_b64 exec, s[12:13]
5936 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
5937 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v7
5938 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
5939 ; GFX90A-NEXT:    v_mov_b32_e32 v7, v4
5940 ; GFX90A-NEXT:    buffer_wbinvl1
5941 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
5942 ; GFX90A-NEXT:    s_cbranch_execnz .LBB18_3
5943 ; GFX90A-NEXT:  ; %bb.6: ; %atomicrmw.end
5944 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
5945 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v0, v8, v4
5946 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5948 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
5949 ; GFX908:       ; %bb.0:
5950 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5951 ; GFX908-NEXT:    v_add_u32_e32 v4, 0x200, v4
5952 ; GFX908-NEXT:    v_and_b32_e32 v8, -4, v4
5953 ; GFX908-NEXT:    v_and_b32_e32 v4, 3, v4
5954 ; GFX908-NEXT:    v_lshlrev_b32_e32 v7, 3, v4
5955 ; GFX908-NEXT:    s_mov_b32 s4, 0xffff
5956 ; GFX908-NEXT:    v_lshlrev_b32_e64 v4, v7, s4
5957 ; GFX908-NEXT:    v_not_b32_e32 v9, v4
5958 ; GFX908-NEXT:    s_mov_b64 s[6:7], exec
5959 ; GFX908-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
5960 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
5961 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
5962 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
5963 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
5964 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
5965 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
5966 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
5967 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
5968 ; GFX908-NEXT:    s_nop 0
5969 ; GFX908-NEXT:    buffer_load_dword v6, v8, s[8:11], 0 offen
5970 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
5971 ; GFX908-NEXT:    s_cbranch_execnz .LBB18_1
5972 ; GFX908-NEXT:  ; %bb.2:
5973 ; GFX908-NEXT:    s_mov_b64 exec, s[6:7]
5974 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
5975 ; GFX908-NEXT:    v_lshlrev_b32_e32 v10, 16, v5
5976 ; GFX908-NEXT:    s_movk_i32 s14, 0x7fff
5977 ; GFX908-NEXT:  .LBB18_3: ; %atomicrmw.start
5978 ; GFX908-NEXT:    ; =>This Loop Header: Depth=1
5979 ; GFX908-NEXT:    ; Child Loop BB18_4 Depth 2
5980 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
5981 ; GFX908-NEXT:    v_lshrrev_b32_sdwa v4, v7, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
5982 ; GFX908-NEXT:    v_add_f32_e32 v4, v4, v10
5983 ; GFX908-NEXT:    v_bfe_u32 v5, v4, 16, 1
5984 ; GFX908-NEXT:    v_add3_u32 v5, v5, v4, s14
5985 ; GFX908-NEXT:    v_or_b32_e32 v11, 0x400000, v4
5986 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
5987 ; GFX908-NEXT:    v_cndmask_b32_e32 v4, v5, v11, vcc
5988 ; GFX908-NEXT:    v_lshlrev_b32_sdwa v4, v7, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
5989 ; GFX908-NEXT:    v_and_or_b32 v5, v6, v9, v4
5990 ; GFX908-NEXT:    v_mov_b32_e32 v4, v5
5991 ; GFX908-NEXT:    s_mov_b64 s[12:13], exec
5992 ; GFX908-NEXT:    v_mov_b32_e32 v5, v6
5993 ; GFX908-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
5994 ; GFX908-NEXT:    ; => This Inner Loop Header: Depth=2
5995 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
5996 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
5997 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
5998 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
5999 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6000 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6001 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6002 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6003 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6004 ; GFX908-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
6005 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
6006 ; GFX908-NEXT:    s_cbranch_execnz .LBB18_4
6007 ; GFX908-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
6008 ; GFX908-NEXT:    s_mov_b64 exec, s[12:13]
6009 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6010 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
6011 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
6012 ; GFX908-NEXT:    v_mov_b32_e32 v6, v4
6013 ; GFX908-NEXT:    buffer_wbinvl1
6014 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
6015 ; GFX908-NEXT:    s_cbranch_execnz .LBB18_3
6016 ; GFX908-NEXT:  ; %bb.6: ; %atomicrmw.end
6017 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
6018 ; GFX908-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
6019 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
6021 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
6022 ; GFX8:       ; %bb.0:
6023 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6024 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 0x200, v4
6025 ; GFX8-NEXT:    v_and_b32_e32 v8, -4, v4
6026 ; GFX8-NEXT:    v_and_b32_e32 v4, 3, v4
6027 ; GFX8-NEXT:    v_lshlrev_b32_e32 v7, 3, v4
6028 ; GFX8-NEXT:    s_mov_b32 s4, 0xffff
6029 ; GFX8-NEXT:    v_lshlrev_b32_e64 v4, v7, s4
6030 ; GFX8-NEXT:    v_not_b32_e32 v9, v4
6031 ; GFX8-NEXT:    s_mov_b64 s[6:7], exec
6032 ; GFX8-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
6033 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
6034 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
6035 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
6036 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
6037 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6038 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6039 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6040 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6041 ; GFX8-NEXT:    s_nop 0
6042 ; GFX8-NEXT:    buffer_load_dword v6, v8, s[8:11], 0 offen
6043 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
6044 ; GFX8-NEXT:    s_cbranch_execnz .LBB18_1
6045 ; GFX8-NEXT:  ; %bb.2:
6046 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
6047 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
6048 ; GFX8-NEXT:    v_lshlrev_b32_e32 v10, 16, v5
6049 ; GFX8-NEXT:  .LBB18_3: ; %atomicrmw.start
6050 ; GFX8-NEXT:    ; =>This Loop Header: Depth=1
6051 ; GFX8-NEXT:    ; Child Loop BB18_4 Depth 2
6052 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6053 ; GFX8-NEXT:    v_lshrrev_b32_sdwa v4, v7, v6 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
6054 ; GFX8-NEXT:    v_add_f32_e32 v4, v4, v10
6055 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
6056 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
6057 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
6058 ; GFX8-NEXT:    v_or_b32_e32 v11, 0x400000, v4
6059 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
6060 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v11, vcc
6061 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v4, v7, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
6062 ; GFX8-NEXT:    v_and_b32_e32 v5, v6, v9
6063 ; GFX8-NEXT:    v_or_b32_e32 v5, v5, v4
6064 ; GFX8-NEXT:    v_mov_b32_e32 v4, v5
6065 ; GFX8-NEXT:    s_mov_b64 s[12:13], exec
6066 ; GFX8-NEXT:    v_mov_b32_e32 v5, v6
6067 ; GFX8-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
6068 ; GFX8-NEXT:    ; => This Inner Loop Header: Depth=2
6069 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
6070 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
6071 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
6072 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
6073 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6074 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6075 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6076 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6077 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6078 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
6079 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
6080 ; GFX8-NEXT:    s_cbranch_execnz .LBB18_4
6081 ; GFX8-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
6082 ; GFX8-NEXT:    s_mov_b64 exec, s[12:13]
6083 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6084 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
6085 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
6086 ; GFX8-NEXT:    v_mov_b32_e32 v6, v4
6087 ; GFX8-NEXT:    buffer_wbinvl1
6088 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
6089 ; GFX8-NEXT:    s_cbranch_execnz .LBB18_3
6090 ; GFX8-NEXT:  ; %bb.6: ; %atomicrmw.end
6091 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
6092 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
6093 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6095 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
6096 ; GFX7:       ; %bb.0:
6097 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6098 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, 0x200, v4
6099 ; GFX7-NEXT:    v_and_b32_e32 v8, -4, v4
6100 ; GFX7-NEXT:    v_and_b32_e32 v4, 3, v4
6101 ; GFX7-NEXT:    v_lshlrev_b32_e32 v7, 3, v4
6102 ; GFX7-NEXT:    v_lshl_b32_e32 v4, 0xffff, v7
6103 ; GFX7-NEXT:    v_not_b32_e32 v9, v4
6104 ; GFX7-NEXT:    s_mov_b64 s[6:7], exec
6105 ; GFX7-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
6106 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
6107 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
6108 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
6109 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
6110 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6111 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6112 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6113 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6114 ; GFX7-NEXT:    buffer_load_dword v6, v8, s[8:11], 0 offen
6115 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
6116 ; GFX7-NEXT:    s_cbranch_execnz .LBB18_1
6117 ; GFX7-NEXT:  ; %bb.2:
6118 ; GFX7-NEXT:    s_mov_b64 exec, s[6:7]
6119 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v5
6120 ; GFX7-NEXT:    s_mov_b64 s[6:7], 0
6121 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v4
6122 ; GFX7-NEXT:  .LBB18_3: ; %atomicrmw.start
6123 ; GFX7-NEXT:    ; =>This Loop Header: Depth=1
6124 ; GFX7-NEXT:    ; Child Loop BB18_4 Depth 2
6125 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6126 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, v7, v6
6127 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
6128 ; GFX7-NEXT:    v_add_f32_e32 v4, v4, v10
6129 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
6130 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, v7, v4
6131 ; GFX7-NEXT:    v_and_b32_e32 v5, v6, v9
6132 ; GFX7-NEXT:    v_or_b32_e32 v5, v5, v4
6133 ; GFX7-NEXT:    v_mov_b32_e32 v4, v5
6134 ; GFX7-NEXT:    s_mov_b64 s[12:13], exec
6135 ; GFX7-NEXT:    v_mov_b32_e32 v5, v6
6136 ; GFX7-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
6137 ; GFX7-NEXT:    ; => This Inner Loop Header: Depth=2
6138 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
6139 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
6140 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
6141 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
6142 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6143 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6144 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6145 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6146 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6147 ; GFX7-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
6148 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
6149 ; GFX7-NEXT:    s_cbranch_execnz .LBB18_4
6150 ; GFX7-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
6151 ; GFX7-NEXT:    s_mov_b64 exec, s[12:13]
6152 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6153 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
6154 ; GFX7-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
6155 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
6156 ; GFX7-NEXT:    buffer_wbinvl1
6157 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[6:7]
6158 ; GFX7-NEXT:    s_cbranch_execnz .LBB18_3
6159 ; GFX7-NEXT:  ; %bb.6: ; %atomicrmw.end
6160 ; GFX7-NEXT:    s_or_b64 exec, exec, s[6:7]
6161 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
6162 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
6163 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6165 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
6166 ; GFX6:       ; %bb.0:
6167 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6168 ; GFX6-NEXT:    v_add_i32_e32 v4, vcc, 0x200, v4
6169 ; GFX6-NEXT:    v_and_b32_e32 v8, -4, v4
6170 ; GFX6-NEXT:    v_and_b32_e32 v4, 3, v4
6171 ; GFX6-NEXT:    v_lshlrev_b32_e32 v7, 3, v4
6172 ; GFX6-NEXT:    v_lshl_b32_e32 v4, 0xffff, v7
6173 ; GFX6-NEXT:    v_not_b32_e32 v9, v4
6174 ; GFX6-NEXT:    s_mov_b64 s[6:7], exec
6175 ; GFX6-NEXT:  .LBB18_1: ; =>This Inner Loop Header: Depth=1
6176 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
6177 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
6178 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
6179 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
6180 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6181 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6182 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6183 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6184 ; GFX6-NEXT:    buffer_load_dword v6, v8, s[8:11], 0 offen
6185 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
6186 ; GFX6-NEXT:    s_cbranch_execnz .LBB18_1
6187 ; GFX6-NEXT:  ; %bb.2:
6188 ; GFX6-NEXT:    s_mov_b64 exec, s[6:7]
6189 ; GFX6-NEXT:    v_mul_f32_e32 v4, 1.0, v5
6190 ; GFX6-NEXT:    s_mov_b64 s[6:7], 0
6191 ; GFX6-NEXT:    v_and_b32_e32 v10, 0xffff0000, v4
6192 ; GFX6-NEXT:  .LBB18_3: ; %atomicrmw.start
6193 ; GFX6-NEXT:    ; =>This Loop Header: Depth=1
6194 ; GFX6-NEXT:    ; Child Loop BB18_4 Depth 2
6195 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
6196 ; GFX6-NEXT:    v_lshrrev_b32_e32 v4, v7, v6
6197 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
6198 ; GFX6-NEXT:    v_add_f32_e32 v4, v4, v10
6199 ; GFX6-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
6200 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, v7, v4
6201 ; GFX6-NEXT:    v_and_b32_e32 v5, v6, v9
6202 ; GFX6-NEXT:    v_or_b32_e32 v5, v5, v4
6203 ; GFX6-NEXT:    v_mov_b32_e32 v4, v5
6204 ; GFX6-NEXT:    s_mov_b64 s[12:13], exec
6205 ; GFX6-NEXT:    v_mov_b32_e32 v5, v6
6206 ; GFX6-NEXT:  .LBB18_4: ; Parent Loop BB18_3 Depth=1
6207 ; GFX6-NEXT:    ; => This Inner Loop Header: Depth=2
6208 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
6209 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
6210 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
6211 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
6212 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6213 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6214 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6215 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6216 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
6217 ; GFX6-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
6218 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
6219 ; GFX6-NEXT:    s_cbranch_execnz .LBB18_4
6220 ; GFX6-NEXT:  ; %bb.5: ; in Loop: Header=BB18_3 Depth=1
6221 ; GFX6-NEXT:    s_mov_b64 exec, s[12:13]
6222 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
6223 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
6224 ; GFX6-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
6225 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
6226 ; GFX6-NEXT:    buffer_wbinvl1
6227 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[6:7]
6228 ; GFX6-NEXT:    s_cbranch_execnz .LBB18_3
6229 ; GFX6-NEXT:  ; %bb.6: ; %atomicrmw.end
6230 ; GFX6-NEXT:    s_or_b64 exec, exec, s[6:7]
6231 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, v7, v4
6232 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
6233 ; GFX6-NEXT:    s_waitcnt expcnt(0)
6234 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
6235   %gep = getelementptr bfloat, ptr addrspace(7) %ptr, i32 256
6236   %result = atomicrmw fadd ptr addrspace(7) %gep, bfloat %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
6237   ret bfloat %result
6240 ; --------------------------------------------------------------------
6241 ; <2 x half>
6242 ; --------------------------------------------------------------------
6244 define <2 x half> @buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, <2 x half> %val) #0 {
6245 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6246 ; GFX12:       ; %bb.0:
6247 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
6248 ; GFX12-NEXT:    s_wait_expcnt 0x0
6249 ; GFX12-NEXT:    s_wait_samplecnt 0x0
6250 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
6251 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6252 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
6253 ; GFX12-NEXT:    s_wait_storecnt 0x0
6254 ; GFX12-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
6255 ; GFX12-NEXT:    s_wait_loadcnt 0x0
6256 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
6257 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
6259 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6260 ; GFX940:       ; %bb.0:
6261 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6262 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
6263 ; GFX940-NEXT:    buffer_wbl2 sc1
6264 ; GFX940-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], 0 offen offset:1024 sc0
6265 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
6266 ; GFX940-NEXT:    buffer_inv sc1
6267 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
6269 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6270 ; GFX11:       ; %bb.0:
6271 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6272 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
6273 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
6274 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, s4
6275 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
6276 ; GFX11-NEXT:    s_mov_b32 s4, 0
6277 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
6278 ; GFX11-NEXT:  .LBB19_1: ; %atomicrmw.start
6279 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
6280 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6281 ; GFX11-NEXT:    v_mov_b32_e32 v5, v0
6282 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
6283 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
6284 ; GFX11-NEXT:    v_pk_add_f16 v4, v5, v2
6285 ; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5
6286 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v3, s[0:3], 0 offen glc
6287 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6288 ; GFX11-NEXT:    buffer_gl1_inv
6289 ; GFX11-NEXT:    buffer_gl0_inv
6290 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
6291 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
6292 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
6293 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
6294 ; GFX11-NEXT:    s_cbranch_execnz .LBB19_1
6295 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
6296 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
6297 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6299 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6300 ; GFX10:       ; %bb.0:
6301 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6302 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
6303 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
6304 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
6305 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
6306 ; GFX10-NEXT:    s_mov_b32 s4, 0
6307 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
6308 ; GFX10-NEXT:  .LBB19_1: ; %atomicrmw.start
6309 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
6310 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6311 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
6312 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
6313 ; GFX10-NEXT:    v_pk_add_f16 v4, v5, v2
6314 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
6315 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
6316 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
6317 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6318 ; GFX10-NEXT:    buffer_gl1_inv
6319 ; GFX10-NEXT:    buffer_gl0_inv
6320 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
6321 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
6322 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
6323 ; GFX10-NEXT:    s_cbranch_execnz .LBB19_1
6324 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
6325 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
6326 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6328 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6329 ; GFX90A:       ; %bb.0:
6330 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6331 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
6332 ; GFX90A-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[16:19], 0 offen offset:1024 glc
6333 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
6334 ; GFX90A-NEXT:    buffer_wbinvl1
6335 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6337 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6338 ; GFX908:       ; %bb.0:
6339 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6340 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
6341 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
6342 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
6343 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
6344 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
6345 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
6346 ; GFX908-NEXT:  .LBB19_1: ; %atomicrmw.start
6347 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
6348 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6349 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
6350 ; GFX908-NEXT:    v_pk_add_f16 v4, v5, v2
6351 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
6352 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
6353 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
6354 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6355 ; GFX908-NEXT:    buffer_wbinvl1
6356 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
6357 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
6358 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
6359 ; GFX908-NEXT:    s_cbranch_execnz .LBB19_1
6360 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
6361 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
6362 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
6364 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6365 ; GFX8:       ; %bb.0:
6366 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6367 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
6368 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
6369 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
6370 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
6371 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
6372 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
6373 ; GFX8-NEXT:  .LBB19_1: ; %atomicrmw.start
6374 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
6375 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6376 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
6377 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v5
6378 ; GFX8-NEXT:    v_add_f16_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
6379 ; GFX8-NEXT:    v_add_f16_e32 v1, v5, v2
6380 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
6381 ; GFX8-NEXT:    v_or_b32_e32 v4, v1, v0
6382 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
6383 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
6384 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
6385 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6386 ; GFX8-NEXT:    buffer_wbinvl1
6387 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
6388 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
6389 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
6390 ; GFX8-NEXT:    s_cbranch_execnz .LBB19_1
6391 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
6392 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
6393 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6395 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6396 ; GFX7:       ; %bb.0:
6397 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6398 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
6399 ; GFX7-NEXT:    buffer_load_dword v3, v2, s[16:19], 0 offen offset:1024
6400 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
6401 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v0
6402 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
6403 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
6404 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v2, v1
6405 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6406 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v3
6407 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v3
6408 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
6409 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v4
6410 ; GFX7-NEXT:    v_mov_b32_e32 v4, s6
6411 ; GFX7-NEXT:  .LBB19_1: ; %atomicrmw.start
6412 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
6413 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
6414 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
6415 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v1
6416 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v6, v0
6417 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
6418 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v2
6419 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v3
6420 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v5, v5
6421 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v7, v6
6422 ; GFX7-NEXT:    v_or_b32_e32 v6, v0, v1
6423 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
6424 ; GFX7-NEXT:    v_or_b32_e32 v5, v7, v0
6425 ; GFX7-NEXT:    v_mov_b32_e32 v8, v6
6426 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
6427 ; GFX7-NEXT:    buffer_atomic_cmpswap v[7:8], v4, s[16:19], 0 offen glc
6428 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6429 ; GFX7-NEXT:    buffer_wbinvl1
6430 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v7
6431 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v7
6432 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
6433 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
6434 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
6435 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
6436 ; GFX7-NEXT:    s_cbranch_execnz .LBB19_1
6437 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
6438 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
6439 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6441 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_fine_grained_memory:
6442 ; GFX6:       ; %bb.0:
6443 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6444 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
6445 ; GFX6-NEXT:    buffer_load_dword v3, v2, s[16:19], 0 offen offset:1024
6446 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
6447 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v0
6448 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
6449 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
6450 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v2, v1
6451 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
6452 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v3
6453 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v3
6454 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v1
6455 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v4
6456 ; GFX6-NEXT:    v_mov_b32_e32 v4, s6
6457 ; GFX6-NEXT:  .LBB19_1: ; %atomicrmw.start
6458 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
6459 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
6460 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0
6461 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v1
6462 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v6, v0
6463 ; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
6464 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v2
6465 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v3
6466 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v5, v5
6467 ; GFX6-NEXT:    s_waitcnt expcnt(0)
6468 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v7, v6
6469 ; GFX6-NEXT:    v_or_b32_e32 v6, v0, v1
6470 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
6471 ; GFX6-NEXT:    v_or_b32_e32 v5, v7, v0
6472 ; GFX6-NEXT:    v_mov_b32_e32 v8, v6
6473 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
6474 ; GFX6-NEXT:    buffer_atomic_cmpswap v[7:8], v4, s[16:19], 0 offen glc
6475 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
6476 ; GFX6-NEXT:    buffer_wbinvl1
6477 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v7
6478 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v7
6479 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v1
6480 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
6481 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
6482 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
6483 ; GFX6-NEXT:    s_cbranch_execnz .LBB19_1
6484 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
6485 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
6486 ; GFX6-NEXT:    s_waitcnt expcnt(0)
6487 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
6488   %gep = getelementptr <2 x half>, ptr addrspace(7) %ptr, i32 256
6489   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x half> %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
6490   ret <2 x half> %result
6493 define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, <2 x half> %val) #0 {
6494 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6495 ; GFX12:       ; %bb.0:
6496 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
6497 ; GFX12-NEXT:    s_wait_expcnt 0x0
6498 ; GFX12-NEXT:    s_wait_samplecnt 0x0
6499 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
6500 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6501 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
6502 ; GFX12-NEXT:    s_wait_storecnt 0x0
6503 ; GFX12-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], null offen offset:1024
6504 ; GFX12-NEXT:    s_wait_storecnt 0x0
6505 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
6506 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
6508 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6509 ; GFX940:       ; %bb.0:
6510 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6511 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
6512 ; GFX940-NEXT:    buffer_wbl2 sc1
6513 ; GFX940-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], 0 offen offset:1024
6514 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
6515 ; GFX940-NEXT:    buffer_inv sc1
6516 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
6518 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6519 ; GFX11:       ; %bb.0:
6520 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6521 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
6522 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
6523 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
6524 ; GFX11-NEXT:    v_mov_b32_e32 v3, s4
6525 ; GFX11-NEXT:    s_mov_b32 s4, 0
6526 ; GFX11-NEXT:    buffer_load_b32 v2, v1, s[0:3], 0 offen offset:1024
6527 ; GFX11-NEXT:  .LBB20_1: ; %atomicrmw.start
6528 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
6529 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6530 ; GFX11-NEXT:    v_pk_add_f16 v1, v2, v0
6531 ; GFX11-NEXT:    v_mov_b32_e32 v5, v2
6532 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
6533 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
6534 ; GFX11-NEXT:    v_mov_b32_e32 v4, v1
6535 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v3, s[0:3], 0 offen glc
6536 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6537 ; GFX11-NEXT:    buffer_gl1_inv
6538 ; GFX11-NEXT:    buffer_gl0_inv
6539 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
6540 ; GFX11-NEXT:    v_mov_b32_e32 v2, v4
6541 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
6542 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
6543 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
6544 ; GFX11-NEXT:    s_cbranch_execnz .LBB20_1
6545 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
6546 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
6547 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6549 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6550 ; GFX10:       ; %bb.0:
6551 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6552 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
6553 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
6554 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
6555 ; GFX10-NEXT:    s_mov_b32 s4, 0
6556 ; GFX10-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
6557 ; GFX10-NEXT:  .LBB20_1: ; %atomicrmw.start
6558 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
6559 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6560 ; GFX10-NEXT:    v_pk_add_f16 v1, v2, v0
6561 ; GFX10-NEXT:    v_mov_b32_e32 v5, v2
6562 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
6563 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
6564 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
6565 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6566 ; GFX10-NEXT:    buffer_gl1_inv
6567 ; GFX10-NEXT:    buffer_gl0_inv
6568 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
6569 ; GFX10-NEXT:    v_mov_b32_e32 v2, v4
6570 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
6571 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
6572 ; GFX10-NEXT:    s_cbranch_execnz .LBB20_1
6573 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
6574 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
6575 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6577 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6578 ; GFX90A:       ; %bb.0:
6579 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6580 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
6581 ; GFX90A-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[16:19], 0 offen offset:1024
6582 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
6583 ; GFX90A-NEXT:    buffer_wbinvl1
6584 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6586 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6587 ; GFX908:       ; %bb.0:
6588 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6589 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
6590 ; GFX908-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[16:19], 0 offen offset:1024
6591 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6592 ; GFX908-NEXT:    buffer_wbinvl1
6593 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
6595 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6596 ; GFX8:       ; %bb.0:
6597 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6598 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
6599 ; GFX8-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
6600 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
6601 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
6602 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
6603 ; GFX8-NEXT:  .LBB20_1: ; %atomicrmw.start
6604 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
6605 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6606 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
6607 ; GFX8-NEXT:    v_add_f16_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
6608 ; GFX8-NEXT:    v_add_f16_e32 v4, v2, v0
6609 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
6610 ; GFX8-NEXT:    v_or_b32_e32 v1, v4, v1
6611 ; GFX8-NEXT:    v_mov_b32_e32 v5, v2
6612 ; GFX8-NEXT:    v_mov_b32_e32 v4, v1
6613 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
6614 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
6615 ; GFX8-NEXT:    buffer_wbinvl1
6616 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
6617 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
6618 ; GFX8-NEXT:    v_mov_b32_e32 v2, v4
6619 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
6620 ; GFX8-NEXT:    s_cbranch_execnz .LBB20_1
6621 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
6622 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
6623 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
6625 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6626 ; GFX7:       ; %bb.0:
6627 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6628 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
6629 ; GFX7-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
6630 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
6631 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v5, v0
6632 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
6633 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
6634 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v1
6635 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6636 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
6637 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v2
6638 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v1
6639 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v5
6640 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
6641 ; GFX7-NEXT:  .LBB20_1: ; %atomicrmw.start
6642 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
6643 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v4
6644 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v3, v3
6645 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v4
6646 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v6, v3
6647 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
6648 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v0
6649 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v1
6650 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v7, v5
6651 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v6, v6
6652 ; GFX7-NEXT:    v_or_b32_e32 v5, v3, v4
6653 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
6654 ; GFX7-NEXT:    v_or_b32_e32 v4, v6, v3
6655 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
6656 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
6657 ; GFX7-NEXT:    buffer_atomic_cmpswap v[6:7], v2, s[16:19], 0 offen glc
6658 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
6659 ; GFX7-NEXT:    buffer_wbinvl1
6660 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v6
6661 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v6
6662 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v4
6663 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
6664 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
6665 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
6666 ; GFX7-NEXT:    s_cbranch_execnz .LBB20_1
6667 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
6668 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
6669 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
6671 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_fine_grained_memory:
6672 ; GFX6:       ; %bb.0:
6673 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6674 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
6675 ; GFX6-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
6676 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
6677 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v5, v0
6678 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
6679 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
6680 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v1
6681 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
6682 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
6683 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v2
6684 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v1
6685 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v5
6686 ; GFX6-NEXT:    v_mov_b32_e32 v2, s6
6687 ; GFX6-NEXT:  .LBB20_1: ; %atomicrmw.start
6688 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
6689 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v4
6690 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v3, v3
6691 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v4
6692 ; GFX6-NEXT:    s_waitcnt expcnt(0)
6693 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v6, v3
6694 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
6695 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v0
6696 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v1
6697 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v7, v5
6698 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v6, v6
6699 ; GFX6-NEXT:    v_or_b32_e32 v5, v3, v4
6700 ; GFX6-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
6701 ; GFX6-NEXT:    v_or_b32_e32 v4, v6, v3
6702 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
6703 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
6704 ; GFX6-NEXT:    buffer_atomic_cmpswap v[6:7], v2, s[16:19], 0 offen glc
6705 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
6706 ; GFX6-NEXT:    buffer_wbinvl1
6707 ; GFX6-NEXT:    v_lshrrev_b32_e32 v4, 16, v6
6708 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v6
6709 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v4
6710 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
6711 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
6712 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
6713 ; GFX6-NEXT:    s_cbranch_execnz .LBB20_1
6714 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
6715 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
6716 ; GFX6-NEXT:    s_waitcnt expcnt(0)
6717 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
6718   %gep = getelementptr <2 x half>, ptr addrspace(7) %ptr, i32 256
6719   %unused = atomicrmw fadd ptr addrspace(7) %gep, <2 x half> %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
6720   ret void
6723 define <2 x half> @buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory(ptr addrspace(7) %ptr, <2 x half> %val) #0 {
6724 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
6725 ; GFX12:       ; %bb.0:
6726 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
6727 ; GFX12-NEXT:    s_wait_expcnt 0x0
6728 ; GFX12-NEXT:    s_wait_samplecnt 0x0
6729 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
6730 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6731 ; GFX12-NEXT:    s_mov_b32 s1, exec_lo
6732 ; GFX12-NEXT:    s_wait_storecnt 0x0
6733 ; GFX12-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
6734 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v0
6735 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v1
6736 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v2
6737 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v3
6738 ; GFX12-NEXT:    s_wait_alu 0xf1ff
6739 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
6740 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
6741 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
6742 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6743 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
6744 ; GFX12-NEXT:    s_wait_alu 0xfffe
6745 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
6746 ; GFX12-NEXT:    s_wait_loadcnt 0x0
6747 ; GFX12-NEXT:    buffer_atomic_pk_add_f16 v5, v4, s[4:7], null offen offset:1024 th:TH_ATOMIC_RETURN
6748 ; GFX12-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
6749 ; GFX12-NEXT:    ; implicit-def: $vgpr4
6750 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
6751 ; GFX12-NEXT:    s_cbranch_execnz .LBB21_1
6752 ; GFX12-NEXT:  ; %bb.2:
6753 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
6754 ; GFX12-NEXT:    s_wait_loadcnt 0x0
6755 ; GFX12-NEXT:    v_mov_b32_e32 v0, v5
6756 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
6757 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
6759 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
6760 ; GFX940:       ; %bb.0:
6761 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6762 ; GFX940-NEXT:    s_mov_b64 s[2:3], exec
6763 ; GFX940-NEXT:    buffer_wbl2 sc1
6764 ; GFX940-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
6765 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
6766 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
6767 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
6768 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
6769 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
6770 ; GFX940-NEXT:    s_nop 0
6771 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
6772 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
6773 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
6774 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
6775 ; GFX940-NEXT:    buffer_atomic_pk_add_f16 v5, v4, s[4:7], 0 offen offset:1024 sc0
6776 ; GFX940-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
6777 ; GFX940-NEXT:    ; implicit-def: $vgpr4
6778 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
6779 ; GFX940-NEXT:    s_cbranch_execnz .LBB21_1
6780 ; GFX940-NEXT:  ; %bb.2:
6781 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
6782 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
6783 ; GFX940-NEXT:    v_mov_b32_e32 v0, v5
6784 ; GFX940-NEXT:    buffer_inv sc1
6785 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
6787 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
6788 ; GFX11:       ; %bb.0:
6789 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6790 ; GFX11-NEXT:    v_add_nc_u32_e32 v9, 0x400, v4
6791 ; GFX11-NEXT:    s_mov_b32 s1, 0
6792 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
6793 ; GFX11-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
6794 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
6795 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
6796 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
6797 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
6798 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
6799 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
6800 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
6801 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
6802 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
6803 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
6804 ; GFX11-NEXT:    buffer_load_b32 v8, v4, s[4:7], 0 offen offset:1024
6805 ; GFX11-NEXT:    ; implicit-def: $vgpr4
6806 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
6807 ; GFX11-NEXT:    s_cbranch_execnz .LBB21_1
6808 ; GFX11-NEXT:  ; %bb.2:
6809 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
6810 ; GFX11-NEXT:    .p2align 6
6811 ; GFX11-NEXT:  .LBB21_3: ; %atomicrmw.start
6812 ; GFX11-NEXT:    ; =>This Loop Header: Depth=1
6813 ; GFX11-NEXT:    ; Child Loop BB21_4 Depth 2
6814 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6815 ; GFX11-NEXT:    v_pk_add_f16 v7, v8, v5
6816 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
6817 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
6818 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6819 ; GFX11-NEXT:    v_mov_b32_e32 v6, v7
6820 ; GFX11-NEXT:    v_mov_b32_e32 v7, v8
6821 ; GFX11-NEXT:  .LBB21_4: ; Parent Loop BB21_3 Depth=1
6822 ; GFX11-NEXT:    ; => This Inner Loop Header: Depth=2
6823 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
6824 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
6825 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
6826 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
6827 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
6828 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
6829 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
6830 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
6831 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
6832 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
6833 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6834 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[6:7], v9, s[4:7], 0 offen glc
6835 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
6836 ; GFX11-NEXT:    s_cbranch_execnz .LBB21_4
6837 ; GFX11-NEXT:  ; %bb.5: ; in Loop: Header=BB21_3 Depth=1
6838 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
6839 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
6840 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v6, v8
6841 ; GFX11-NEXT:    v_mov_b32_e32 v8, v6
6842 ; GFX11-NEXT:    buffer_gl1_inv
6843 ; GFX11-NEXT:    buffer_gl0_inv
6844 ; GFX11-NEXT:    s_or_b32 s1, vcc_lo, s1
6845 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
6846 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
6847 ; GFX11-NEXT:    s_cbranch_execnz .LBB21_3
6848 ; GFX11-NEXT:  ; %bb.6: ; %atomicrmw.end
6849 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s1
6850 ; GFX11-NEXT:    v_mov_b32_e32 v0, v6
6851 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
6853 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
6854 ; GFX10:       ; %bb.0:
6855 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6856 ; GFX10-NEXT:    v_add_nc_u32_e32 v9, 0x400, v4
6857 ; GFX10-NEXT:    s_mov_b32 s5, 0
6858 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
6859 ; GFX10-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
6860 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
6861 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
6862 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
6863 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
6864 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
6865 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
6866 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
6867 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
6868 ; GFX10-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
6869 ; GFX10-NEXT:    ; implicit-def: $vgpr4
6870 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6871 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
6872 ; GFX10-NEXT:    s_cbranch_execnz .LBB21_1
6873 ; GFX10-NEXT:  ; %bb.2:
6874 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
6875 ; GFX10-NEXT:  .LBB21_3: ; %atomicrmw.start
6876 ; GFX10-NEXT:    ; =>This Loop Header: Depth=1
6877 ; GFX10-NEXT:    ; Child Loop BB21_4 Depth 2
6878 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6879 ; GFX10-NEXT:    v_pk_add_f16 v7, v8, v5
6880 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
6881 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
6882 ; GFX10-NEXT:    v_mov_b32_e32 v6, v7
6883 ; GFX10-NEXT:    v_mov_b32_e32 v7, v8
6884 ; GFX10-NEXT:  .LBB21_4: ; Parent Loop BB21_3 Depth=1
6885 ; GFX10-NEXT:    ; => This Inner Loop Header: Depth=2
6886 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
6887 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
6888 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
6889 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
6890 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
6891 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
6892 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
6893 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
6894 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6895 ; GFX10-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
6896 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6897 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
6898 ; GFX10-NEXT:    s_cbranch_execnz .LBB21_4
6899 ; GFX10-NEXT:  ; %bb.5: ; in Loop: Header=BB21_3 Depth=1
6900 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
6901 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
6902 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v6, v8
6903 ; GFX10-NEXT:    v_mov_b32_e32 v8, v6
6904 ; GFX10-NEXT:    buffer_gl1_inv
6905 ; GFX10-NEXT:    buffer_gl0_inv
6906 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
6907 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
6908 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
6909 ; GFX10-NEXT:    s_cbranch_execnz .LBB21_3
6910 ; GFX10-NEXT:  ; %bb.6: ; %atomicrmw.end
6911 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
6912 ; GFX10-NEXT:    v_mov_b32_e32 v0, v6
6913 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
6915 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
6916 ; GFX90A:       ; %bb.0:
6917 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6918 ; GFX90A-NEXT:    s_mov_b64 s[6:7], exec
6919 ; GFX90A-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
6920 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
6921 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
6922 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
6923 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
6924 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6925 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6926 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6927 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6928 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
6929 ; GFX90A-NEXT:    buffer_atomic_pk_add_f16 v5, v4, s[8:11], 0 offen offset:1024 glc
6930 ; GFX90A-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
6931 ; GFX90A-NEXT:    ; implicit-def: $vgpr4
6932 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
6933 ; GFX90A-NEXT:    s_cbranch_execnz .LBB21_1
6934 ; GFX90A-NEXT:  ; %bb.2:
6935 ; GFX90A-NEXT:    s_mov_b64 exec, s[6:7]
6936 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
6937 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v5
6938 ; GFX90A-NEXT:    buffer_wbinvl1
6939 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6941 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
6942 ; GFX908:       ; %bb.0:
6943 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6944 ; GFX908-NEXT:    v_add_u32_e32 v9, 0x400, v4
6945 ; GFX908-NEXT:    s_mov_b64 s[6:7], exec
6946 ; GFX908-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
6947 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
6948 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
6949 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
6950 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
6951 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6952 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6953 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6954 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6955 ; GFX908-NEXT:    s_nop 0
6956 ; GFX908-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
6957 ; GFX908-NEXT:    ; implicit-def: $vgpr4
6958 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
6959 ; GFX908-NEXT:    s_cbranch_execnz .LBB21_1
6960 ; GFX908-NEXT:  ; %bb.2:
6961 ; GFX908-NEXT:    s_mov_b64 exec, s[6:7]
6962 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
6963 ; GFX908-NEXT:  .LBB21_3: ; %atomicrmw.start
6964 ; GFX908-NEXT:    ; =>This Loop Header: Depth=1
6965 ; GFX908-NEXT:    ; Child Loop BB21_4 Depth 2
6966 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6967 ; GFX908-NEXT:    v_pk_add_f16 v7, v8, v5
6968 ; GFX908-NEXT:    v_mov_b32_e32 v6, v7
6969 ; GFX908-NEXT:    s_mov_b64 s[12:13], exec
6970 ; GFX908-NEXT:    v_mov_b32_e32 v7, v8
6971 ; GFX908-NEXT:  .LBB21_4: ; Parent Loop BB21_3 Depth=1
6972 ; GFX908-NEXT:    ; => This Inner Loop Header: Depth=2
6973 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
6974 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
6975 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
6976 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
6977 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
6978 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
6979 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
6980 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
6981 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6982 ; GFX908-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
6983 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
6984 ; GFX908-NEXT:    s_cbranch_execnz .LBB21_4
6985 ; GFX908-NEXT:  ; %bb.5: ; in Loop: Header=BB21_3 Depth=1
6986 ; GFX908-NEXT:    s_mov_b64 exec, s[12:13]
6987 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
6988 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v8
6989 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
6990 ; GFX908-NEXT:    v_mov_b32_e32 v8, v6
6991 ; GFX908-NEXT:    buffer_wbinvl1
6992 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
6993 ; GFX908-NEXT:    s_cbranch_execnz .LBB21_3
6994 ; GFX908-NEXT:  ; %bb.6: ; %atomicrmw.end
6995 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
6996 ; GFX908-NEXT:    v_mov_b32_e32 v0, v6
6997 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
6999 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
7000 ; GFX8:       ; %bb.0:
7001 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7002 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, 0x400, v4
7003 ; GFX8-NEXT:    s_mov_b64 s[6:7], exec
7004 ; GFX8-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
7005 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
7006 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
7007 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
7008 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
7009 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
7010 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
7011 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
7012 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
7013 ; GFX8-NEXT:    s_nop 0
7014 ; GFX8-NEXT:    buffer_load_dword v8, v4, s[8:11], 0 offen offset:1024
7015 ; GFX8-NEXT:    ; implicit-def: $vgpr4
7016 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
7017 ; GFX8-NEXT:    s_cbranch_execnz .LBB21_1
7018 ; GFX8-NEXT:  ; %bb.2:
7019 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
7020 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
7021 ; GFX8-NEXT:  .LBB21_3: ; %atomicrmw.start
7022 ; GFX8-NEXT:    ; =>This Loop Header: Depth=1
7023 ; GFX8-NEXT:    ; Child Loop BB21_4 Depth 2
7024 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7025 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 16, v8
7026 ; GFX8-NEXT:    v_add_f16_sdwa v4, v4, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
7027 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
7028 ; GFX8-NEXT:    v_add_f16_e32 v6, v8, v5
7029 ; GFX8-NEXT:    v_or_b32_e32 v7, v6, v4
7030 ; GFX8-NEXT:    v_mov_b32_e32 v6, v7
7031 ; GFX8-NEXT:    s_mov_b64 s[12:13], exec
7032 ; GFX8-NEXT:    v_mov_b32_e32 v7, v8
7033 ; GFX8-NEXT:  .LBB21_4: ; Parent Loop BB21_3 Depth=1
7034 ; GFX8-NEXT:    ; => This Inner Loop Header: Depth=2
7035 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
7036 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
7037 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
7038 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
7039 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
7040 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
7041 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
7042 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
7043 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7044 ; GFX8-NEXT:    buffer_atomic_cmpswap v[6:7], v9, s[8:11], 0 offen glc
7045 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
7046 ; GFX8-NEXT:    s_cbranch_execnz .LBB21_4
7047 ; GFX8-NEXT:  ; %bb.5: ; in Loop: Header=BB21_3 Depth=1
7048 ; GFX8-NEXT:    s_mov_b64 exec, s[12:13]
7049 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7050 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v8
7051 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
7052 ; GFX8-NEXT:    v_mov_b32_e32 v8, v6
7053 ; GFX8-NEXT:    buffer_wbinvl1
7054 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
7055 ; GFX8-NEXT:    s_cbranch_execnz .LBB21_3
7056 ; GFX8-NEXT:  ; %bb.6: ; %atomicrmw.end
7057 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
7058 ; GFX8-NEXT:    v_mov_b32_e32 v0, v6
7059 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7061 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
7062 ; GFX7:       ; %bb.0:
7063 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7064 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, 0x400, v4
7065 ; GFX7-NEXT:    s_mov_b64 s[6:7], exec
7066 ; GFX7-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
7067 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
7068 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
7069 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
7070 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
7071 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
7072 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
7073 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
7074 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
7075 ; GFX7-NEXT:    buffer_load_dword v7, v4, s[8:11], 0 offen offset:1024
7076 ; GFX7-NEXT:    ; implicit-def: $vgpr4
7077 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
7078 ; GFX7-NEXT:    s_cbranch_execnz .LBB21_1
7079 ; GFX7-NEXT:  ; %bb.2:
7080 ; GFX7-NEXT:    s_mov_b64 exec, s[6:7]
7081 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v6, v6
7082 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v8, v5
7083 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7084 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v7
7085 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v7
7086 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v5
7087 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v10, v6
7088 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v11, v8
7089 ; GFX7-NEXT:    s_mov_b64 s[6:7], 0
7090 ; GFX7-NEXT:  .LBB21_3: ; %atomicrmw.start
7091 ; GFX7-NEXT:    ; =>This Loop Header: Depth=1
7092 ; GFX7-NEXT:    ; Child Loop BB21_4 Depth 2
7093 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v5, v5
7094 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v4
7095 ; GFX7-NEXT:    s_mov_b64 s[12:13], exec
7096 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v6, v5
7097 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v7, v4
7098 ; GFX7-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
7099 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v10
7100 ; GFX7-NEXT:    v_add_f32_e32 v7, v7, v11
7101 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v8, v6
7102 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v7, v7
7103 ; GFX7-NEXT:    v_or_b32_e32 v6, v4, v5
7104 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v8
7105 ; GFX7-NEXT:    v_or_b32_e32 v5, v7, v4
7106 ; GFX7-NEXT:    v_mov_b32_e32 v8, v6
7107 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
7108 ; GFX7-NEXT:  .LBB21_4: ; Parent Loop BB21_3 Depth=1
7109 ; GFX7-NEXT:    ; => This Inner Loop Header: Depth=2
7110 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
7111 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
7112 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
7113 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
7114 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
7115 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
7116 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
7117 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
7118 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7119 ; GFX7-NEXT:    buffer_atomic_cmpswap v[7:8], v9, s[8:11], 0 offen glc
7120 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
7121 ; GFX7-NEXT:    s_cbranch_execnz .LBB21_4
7122 ; GFX7-NEXT:  ; %bb.5: ; in Loop: Header=BB21_3 Depth=1
7123 ; GFX7-NEXT:    s_mov_b64 exec, s[12:13]
7124 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7125 ; GFX7-NEXT:    v_lshrrev_b32_e32 v5, 16, v7
7126 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v7
7127 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v5
7128 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
7129 ; GFX7-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
7130 ; GFX7-NEXT:    buffer_wbinvl1
7131 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[6:7]
7132 ; GFX7-NEXT:    s_cbranch_execnz .LBB21_3
7133 ; GFX7-NEXT:  ; %bb.6: ; %atomicrmw.end
7134 ; GFX7-NEXT:    s_or_b64 exec, exec, s[6:7]
7135 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
7136 ; GFX7-NEXT:    v_mov_b32_e32 v1, v5
7137 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
7139 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__waterfall__amdgpu_no_fine_grained_memory:
7140 ; GFX6:       ; %bb.0:
7141 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7142 ; GFX6-NEXT:    v_add_i32_e32 v9, vcc, 0x400, v4
7143 ; GFX6-NEXT:    s_mov_b64 s[6:7], exec
7144 ; GFX6-NEXT:  .LBB21_1: ; =>This Inner Loop Header: Depth=1
7145 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
7146 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
7147 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
7148 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
7149 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
7150 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
7151 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
7152 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
7153 ; GFX6-NEXT:    buffer_load_dword v7, v4, s[8:11], 0 offen offset:1024
7154 ; GFX6-NEXT:    ; implicit-def: $vgpr4
7155 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
7156 ; GFX6-NEXT:    s_cbranch_execnz .LBB21_1
7157 ; GFX6-NEXT:  ; %bb.2:
7158 ; GFX6-NEXT:    s_mov_b64 exec, s[6:7]
7159 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v6, v6
7160 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v8, v5
7161 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
7162 ; GFX6-NEXT:    v_lshrrev_b32_e32 v5, 16, v7
7163 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v7
7164 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v5
7165 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v10, v6
7166 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v11, v8
7167 ; GFX6-NEXT:    s_mov_b64 s[6:7], 0
7168 ; GFX6-NEXT:  .LBB21_3: ; %atomicrmw.start
7169 ; GFX6-NEXT:    ; =>This Loop Header: Depth=1
7170 ; GFX6-NEXT:    ; Child Loop BB21_4 Depth 2
7171 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v5, v5
7172 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v4
7173 ; GFX6-NEXT:    s_mov_b64 s[12:13], exec
7174 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v6, v5
7175 ; GFX6-NEXT:    s_waitcnt expcnt(0)
7176 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v7, v4
7177 ; GFX6-NEXT:    v_lshlrev_b32_e32 v5, 16, v5
7178 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v10
7179 ; GFX6-NEXT:    v_add_f32_e32 v7, v7, v11
7180 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v8, v6
7181 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v7, v7
7182 ; GFX6-NEXT:    v_or_b32_e32 v6, v4, v5
7183 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v8
7184 ; GFX6-NEXT:    v_or_b32_e32 v5, v7, v4
7185 ; GFX6-NEXT:    v_mov_b32_e32 v8, v6
7186 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
7187 ; GFX6-NEXT:  .LBB21_4: ; Parent Loop BB21_3 Depth=1
7188 ; GFX6-NEXT:    ; => This Inner Loop Header: Depth=2
7189 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
7190 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
7191 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
7192 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
7193 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
7194 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
7195 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
7196 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
7197 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
7198 ; GFX6-NEXT:    buffer_atomic_cmpswap v[7:8], v9, s[8:11], 0 offen glc
7199 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
7200 ; GFX6-NEXT:    s_cbranch_execnz .LBB21_4
7201 ; GFX6-NEXT:  ; %bb.5: ; in Loop: Header=BB21_3 Depth=1
7202 ; GFX6-NEXT:    s_mov_b64 exec, s[12:13]
7203 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
7204 ; GFX6-NEXT:    v_lshrrev_b32_e32 v5, 16, v7
7205 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v7
7206 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v5
7207 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
7208 ; GFX6-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
7209 ; GFX6-NEXT:    buffer_wbinvl1
7210 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[6:7]
7211 ; GFX6-NEXT:    s_cbranch_execnz .LBB21_3
7212 ; GFX6-NEXT:  ; %bb.6: ; %atomicrmw.end
7213 ; GFX6-NEXT:    s_or_b64 exec, exec, s[6:7]
7214 ; GFX6-NEXT:    v_mov_b32_e32 v0, v4
7215 ; GFX6-NEXT:    v_mov_b32_e32 v1, v5
7216 ; GFX6-NEXT:    s_waitcnt expcnt(0)
7217 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
7218   %gep = getelementptr <2 x half>, ptr addrspace(7) %ptr, i32 256
7219   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x half> %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
7220   ret <2 x half> %result
7223 define <2 x half> @buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset(ptr addrspace(7) inreg %ptr, <2 x half> %val) {
7224 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7225 ; GFX12:       ; %bb.0:
7226 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
7227 ; GFX12-NEXT:    s_wait_expcnt 0x0
7228 ; GFX12-NEXT:    s_wait_samplecnt 0x0
7229 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
7230 ; GFX12-NEXT:    s_wait_kmcnt 0x0
7231 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
7232 ; GFX12-NEXT:    s_wait_storecnt 0x0
7233 ; GFX12-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
7234 ; GFX12-NEXT:    s_wait_loadcnt 0x0
7235 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
7236 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
7238 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7239 ; GFX940:       ; %bb.0:
7240 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7241 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
7242 ; GFX940-NEXT:    buffer_wbl2 sc1
7243 ; GFX940-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], 0 offen offset:1024 sc0
7244 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
7245 ; GFX940-NEXT:    buffer_inv sc1
7246 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
7248 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7249 ; GFX11:       ; %bb.0:
7250 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7251 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
7252 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
7253 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, s4
7254 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
7255 ; GFX11-NEXT:    s_mov_b32 s4, 0
7256 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
7257 ; GFX11-NEXT:  .LBB22_1: ; %atomicrmw.start
7258 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
7259 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7260 ; GFX11-NEXT:    v_mov_b32_e32 v5, v0
7261 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
7262 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
7263 ; GFX11-NEXT:    v_pk_add_f16 v4, v5, v2
7264 ; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5
7265 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v3, s[0:3], 0 offen glc
7266 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7267 ; GFX11-NEXT:    buffer_gl1_inv
7268 ; GFX11-NEXT:    buffer_gl0_inv
7269 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
7270 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
7271 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
7272 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
7273 ; GFX11-NEXT:    s_cbranch_execnz .LBB22_1
7274 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
7275 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
7276 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7278 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7279 ; GFX10:       ; %bb.0:
7280 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7281 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
7282 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
7283 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
7284 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
7285 ; GFX10-NEXT:    s_mov_b32 s4, 0
7286 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7287 ; GFX10-NEXT:  .LBB22_1: ; %atomicrmw.start
7288 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
7289 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7290 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
7291 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
7292 ; GFX10-NEXT:    v_pk_add_f16 v4, v5, v2
7293 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
7294 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
7295 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7296 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7297 ; GFX10-NEXT:    buffer_gl1_inv
7298 ; GFX10-NEXT:    buffer_gl0_inv
7299 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
7300 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
7301 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
7302 ; GFX10-NEXT:    s_cbranch_execnz .LBB22_1
7303 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
7304 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
7305 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7307 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7308 ; GFX90A:       ; %bb.0:
7309 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7310 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
7311 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
7312 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7313 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
7314 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
7315 ; GFX90A-NEXT:    v_mov_b32_e32 v3, s6
7316 ; GFX90A-NEXT:  .LBB22_1: ; %atomicrmw.start
7317 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
7318 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7319 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
7320 ; GFX90A-NEXT:    v_pk_add_f16 v4, v5, v2
7321 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]
7322 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7323 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7324 ; GFX90A-NEXT:    buffer_wbinvl1
7325 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
7326 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7327 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7328 ; GFX90A-NEXT:    s_cbranch_execnz .LBB22_1
7329 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
7330 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
7331 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
7333 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7334 ; GFX908:       ; %bb.0:
7335 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7336 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
7337 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
7338 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7339 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
7340 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
7341 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
7342 ; GFX908-NEXT:  .LBB22_1: ; %atomicrmw.start
7343 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
7344 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
7345 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
7346 ; GFX908-NEXT:    v_pk_add_f16 v4, v5, v2
7347 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
7348 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
7349 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7350 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
7351 ; GFX908-NEXT:    buffer_wbinvl1
7352 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
7353 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7354 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7355 ; GFX908-NEXT:    s_cbranch_execnz .LBB22_1
7356 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
7357 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
7358 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
7360 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7361 ; GFX8:       ; %bb.0:
7362 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7363 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
7364 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
7365 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7366 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
7367 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
7368 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
7369 ; GFX8-NEXT:  .LBB22_1: ; %atomicrmw.start
7370 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
7371 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7372 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
7373 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v5
7374 ; GFX8-NEXT:    v_add_f16_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
7375 ; GFX8-NEXT:    v_add_f16_e32 v1, v5, v2
7376 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
7377 ; GFX8-NEXT:    v_or_b32_e32 v4, v1, v0
7378 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
7379 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
7380 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7381 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7382 ; GFX8-NEXT:    buffer_wbinvl1
7383 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
7384 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7385 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7386 ; GFX8-NEXT:    s_cbranch_execnz .LBB22_1
7387 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
7388 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
7389 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7391 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7392 ; GFX7:       ; %bb.0:
7393 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7394 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
7395 ; GFX7-NEXT:    buffer_load_dword v3, v2, s[16:19], 0 offen offset:1024
7396 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
7397 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v0
7398 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
7399 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
7400 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v2, v1
7401 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7402 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v3
7403 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v3
7404 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
7405 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v4
7406 ; GFX7-NEXT:    v_mov_b32_e32 v4, s6
7407 ; GFX7-NEXT:  .LBB22_1: ; %atomicrmw.start
7408 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
7409 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
7410 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
7411 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v1
7412 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v6, v0
7413 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7414 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v2
7415 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v3
7416 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v5, v5
7417 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v7, v6
7418 ; GFX7-NEXT:    v_or_b32_e32 v6, v0, v1
7419 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
7420 ; GFX7-NEXT:    v_or_b32_e32 v5, v7, v0
7421 ; GFX7-NEXT:    v_mov_b32_e32 v8, v6
7422 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
7423 ; GFX7-NEXT:    buffer_atomic_cmpswap v[7:8], v4, s[16:19], 0 offen glc
7424 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7425 ; GFX7-NEXT:    buffer_wbinvl1
7426 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v7
7427 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v7
7428 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
7429 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
7430 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7431 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7432 ; GFX7-NEXT:    s_cbranch_execnz .LBB22_1
7433 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
7434 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
7435 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
7437 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset:
7438 ; GFX6:       ; %bb.0:
7439 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7440 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
7441 ; GFX6-NEXT:    buffer_load_dword v3, v2, s[16:19], 0 offen offset:1024
7442 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
7443 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v0
7444 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
7445 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
7446 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v2, v1
7447 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
7448 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v3
7449 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v3
7450 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v1
7451 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v4
7452 ; GFX6-NEXT:    v_mov_b32_e32 v4, s6
7453 ; GFX6-NEXT:  .LBB22_1: ; %atomicrmw.start
7454 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
7455 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
7456 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0
7457 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v1
7458 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v6, v0
7459 ; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7460 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v2
7461 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v3
7462 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v5, v5
7463 ; GFX6-NEXT:    s_waitcnt expcnt(0)
7464 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v7, v6
7465 ; GFX6-NEXT:    v_or_b32_e32 v6, v0, v1
7466 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
7467 ; GFX6-NEXT:    v_or_b32_e32 v5, v7, v0
7468 ; GFX6-NEXT:    v_mov_b32_e32 v8, v6
7469 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
7470 ; GFX6-NEXT:    buffer_atomic_cmpswap v[7:8], v4, s[16:19], 0 offen glc
7471 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
7472 ; GFX6-NEXT:    buffer_wbinvl1
7473 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v7
7474 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v7
7475 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v1
7476 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
7477 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7478 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7479 ; GFX6-NEXT:    s_cbranch_execnz .LBB22_1
7480 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
7481 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
7482 ; GFX6-NEXT:    s_waitcnt expcnt(0)
7483 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
7484   %gep = getelementptr <2 x half>, ptr addrspace(7) %ptr, i32 256
7485   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x half> %val syncscope("agent") seq_cst
7486   ret <2 x half> %result
7489 define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset(ptr addrspace(7) inreg %ptr, <2 x half> %val) {
7490 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7491 ; GFX12:       ; %bb.0:
7492 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
7493 ; GFX12-NEXT:    s_wait_expcnt 0x0
7494 ; GFX12-NEXT:    s_wait_samplecnt 0x0
7495 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
7496 ; GFX12-NEXT:    s_wait_kmcnt 0x0
7497 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
7498 ; GFX12-NEXT:    s_wait_storecnt 0x0
7499 ; GFX12-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], null offen offset:1024
7500 ; GFX12-NEXT:    s_wait_storecnt 0x0
7501 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
7502 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
7504 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7505 ; GFX940:       ; %bb.0:
7506 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7507 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
7508 ; GFX940-NEXT:    buffer_wbl2 sc1
7509 ; GFX940-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], 0 offen offset:1024
7510 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
7511 ; GFX940-NEXT:    buffer_inv sc1
7512 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
7514 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7515 ; GFX11:       ; %bb.0:
7516 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7517 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
7518 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
7519 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
7520 ; GFX11-NEXT:    v_mov_b32_e32 v3, s4
7521 ; GFX11-NEXT:    s_mov_b32 s4, 0
7522 ; GFX11-NEXT:    buffer_load_b32 v2, v1, s[0:3], 0 offen offset:1024
7523 ; GFX11-NEXT:  .LBB23_1: ; %atomicrmw.start
7524 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
7525 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7526 ; GFX11-NEXT:    v_pk_add_f16 v1, v2, v0
7527 ; GFX11-NEXT:    v_mov_b32_e32 v5, v2
7528 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
7529 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
7530 ; GFX11-NEXT:    v_mov_b32_e32 v4, v1
7531 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v3, s[0:3], 0 offen glc
7532 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7533 ; GFX11-NEXT:    buffer_gl1_inv
7534 ; GFX11-NEXT:    buffer_gl0_inv
7535 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
7536 ; GFX11-NEXT:    v_mov_b32_e32 v2, v4
7537 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
7538 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
7539 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
7540 ; GFX11-NEXT:    s_cbranch_execnz .LBB23_1
7541 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
7542 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
7543 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7545 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7546 ; GFX10:       ; %bb.0:
7547 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7548 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
7549 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
7550 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
7551 ; GFX10-NEXT:    s_mov_b32 s4, 0
7552 ; GFX10-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
7553 ; GFX10-NEXT:  .LBB23_1: ; %atomicrmw.start
7554 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
7555 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7556 ; GFX10-NEXT:    v_pk_add_f16 v1, v2, v0
7557 ; GFX10-NEXT:    v_mov_b32_e32 v5, v2
7558 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
7559 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
7560 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
7561 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7562 ; GFX10-NEXT:    buffer_gl1_inv
7563 ; GFX10-NEXT:    buffer_gl0_inv
7564 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
7565 ; GFX10-NEXT:    v_mov_b32_e32 v2, v4
7566 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
7567 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
7568 ; GFX10-NEXT:    s_cbranch_execnz .LBB23_1
7569 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
7570 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
7571 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7573 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7574 ; GFX90A:       ; %bb.0:
7575 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7576 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
7577 ; GFX90A-NEXT:    buffer_load_dword v3, v1, s[16:19], 0 offen offset:1024
7578 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
7579 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
7580 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s6
7581 ; GFX90A-NEXT:  .LBB23_1: ; %atomicrmw.start
7582 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
7583 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7584 ; GFX90A-NEXT:    v_pk_add_f16 v2, v3, v0
7585 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]
7586 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v1, s[16:19], 0 offen glc
7587 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7588 ; GFX90A-NEXT:    buffer_wbinvl1
7589 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v3
7590 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7591 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v4
7592 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7593 ; GFX90A-NEXT:    s_cbranch_execnz .LBB23_1
7594 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
7595 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
7596 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
7598 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7599 ; GFX908:       ; %bb.0:
7600 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7601 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
7602 ; GFX908-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
7603 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
7604 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
7605 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
7606 ; GFX908-NEXT:  .LBB23_1: ; %atomicrmw.start
7607 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
7608 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
7609 ; GFX908-NEXT:    v_pk_add_f16 v1, v2, v0
7610 ; GFX908-NEXT:    v_mov_b32_e32 v5, v2
7611 ; GFX908-NEXT:    v_mov_b32_e32 v4, v1
7612 ; GFX908-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
7613 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
7614 ; GFX908-NEXT:    buffer_wbinvl1
7615 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
7616 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7617 ; GFX908-NEXT:    v_mov_b32_e32 v2, v4
7618 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7619 ; GFX908-NEXT:    s_cbranch_execnz .LBB23_1
7620 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
7621 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
7622 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
7624 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7625 ; GFX8:       ; %bb.0:
7626 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7627 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
7628 ; GFX8-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
7629 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
7630 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
7631 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
7632 ; GFX8-NEXT:  .LBB23_1: ; %atomicrmw.start
7633 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
7634 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7635 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
7636 ; GFX8-NEXT:    v_add_f16_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
7637 ; GFX8-NEXT:    v_add_f16_e32 v4, v2, v0
7638 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7639 ; GFX8-NEXT:    v_or_b32_e32 v1, v4, v1
7640 ; GFX8-NEXT:    v_mov_b32_e32 v5, v2
7641 ; GFX8-NEXT:    v_mov_b32_e32 v4, v1
7642 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
7643 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7644 ; GFX8-NEXT:    buffer_wbinvl1
7645 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
7646 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7647 ; GFX8-NEXT:    v_mov_b32_e32 v2, v4
7648 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7649 ; GFX8-NEXT:    s_cbranch_execnz .LBB23_1
7650 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
7651 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
7652 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7654 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7655 ; GFX7:       ; %bb.0:
7656 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7657 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
7658 ; GFX7-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
7659 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
7660 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v5, v0
7661 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
7662 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
7663 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v1
7664 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7665 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
7666 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v2
7667 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v1
7668 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v5
7669 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
7670 ; GFX7-NEXT:  .LBB23_1: ; %atomicrmw.start
7671 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
7672 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v4
7673 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v3, v3
7674 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v4
7675 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v6, v3
7676 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
7677 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v0
7678 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v1
7679 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v7, v5
7680 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v6, v6
7681 ; GFX7-NEXT:    v_or_b32_e32 v5, v3, v4
7682 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
7683 ; GFX7-NEXT:    v_or_b32_e32 v4, v6, v3
7684 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
7685 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
7686 ; GFX7-NEXT:    buffer_atomic_cmpswap v[6:7], v2, s[16:19], 0 offen glc
7687 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7688 ; GFX7-NEXT:    buffer_wbinvl1
7689 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v6
7690 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v6
7691 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v4
7692 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
7693 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7694 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7695 ; GFX7-NEXT:    s_cbranch_execnz .LBB23_1
7696 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
7697 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
7698 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
7700 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset:
7701 ; GFX6:       ; %bb.0:
7702 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7703 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
7704 ; GFX6-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
7705 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
7706 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v5, v0
7707 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
7708 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
7709 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v1
7710 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
7711 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
7712 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v2
7713 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v1
7714 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v5
7715 ; GFX6-NEXT:    v_mov_b32_e32 v2, s6
7716 ; GFX6-NEXT:  .LBB23_1: ; %atomicrmw.start
7717 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
7718 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v4
7719 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v3, v3
7720 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v4
7721 ; GFX6-NEXT:    s_waitcnt expcnt(0)
7722 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v6, v3
7723 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
7724 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v0
7725 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v1
7726 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v7, v5
7727 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v6, v6
7728 ; GFX6-NEXT:    v_or_b32_e32 v5, v3, v4
7729 ; GFX6-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
7730 ; GFX6-NEXT:    v_or_b32_e32 v4, v6, v3
7731 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
7732 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
7733 ; GFX6-NEXT:    buffer_atomic_cmpswap v[6:7], v2, s[16:19], 0 offen glc
7734 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
7735 ; GFX6-NEXT:    buffer_wbinvl1
7736 ; GFX6-NEXT:    v_lshrrev_b32_e32 v4, 16, v6
7737 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v6
7738 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v4
7739 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
7740 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7741 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7742 ; GFX6-NEXT:    s_cbranch_execnz .LBB23_1
7743 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
7744 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
7745 ; GFX6-NEXT:    s_waitcnt expcnt(0)
7746 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
7747   %gep = getelementptr <2 x half>, ptr addrspace(7) %ptr, i32 256
7748   %unused = atomicrmw fadd ptr addrspace(7) %gep, <2 x half> %val syncscope("agent") seq_cst
7749   ret void
7752 define <2 x half> @buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, <2 x half> %val) #0 {
7753 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7754 ; GFX12:       ; %bb.0:
7755 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
7756 ; GFX12-NEXT:    s_wait_expcnt 0x0
7757 ; GFX12-NEXT:    s_wait_samplecnt 0x0
7758 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
7759 ; GFX12-NEXT:    s_wait_kmcnt 0x0
7760 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
7761 ; GFX12-NEXT:    s_wait_storecnt 0x0
7762 ; GFX12-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
7763 ; GFX12-NEXT:    s_wait_loadcnt 0x0
7764 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
7765 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
7767 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7768 ; GFX940:       ; %bb.0:
7769 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7770 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
7771 ; GFX940-NEXT:    buffer_wbl2 sc1
7772 ; GFX940-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], 0 offen offset:1024 sc0
7773 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
7774 ; GFX940-NEXT:    buffer_inv sc1
7775 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
7777 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7778 ; GFX11:       ; %bb.0:
7779 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7780 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
7781 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
7782 ; GFX11-NEXT:    v_dual_mov_b32 v2, v0 :: v_dual_mov_b32 v3, s4
7783 ; GFX11-NEXT:    v_mov_b32_e32 v0, s16
7784 ; GFX11-NEXT:    s_mov_b32 s4, 0
7785 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
7786 ; GFX11-NEXT:  .LBB24_1: ; %atomicrmw.start
7787 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
7788 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7789 ; GFX11-NEXT:    v_mov_b32_e32 v5, v0
7790 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
7791 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
7792 ; GFX11-NEXT:    v_pk_add_f16 v4, v5, v2
7793 ; GFX11-NEXT:    v_dual_mov_b32 v0, v4 :: v_dual_mov_b32 v1, v5
7794 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v3, s[0:3], 0 offen glc
7795 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
7796 ; GFX11-NEXT:    buffer_gl1_inv
7797 ; GFX11-NEXT:    buffer_gl0_inv
7798 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
7799 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
7800 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
7801 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
7802 ; GFX11-NEXT:    s_cbranch_execnz .LBB24_1
7803 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
7804 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
7805 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
7807 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7808 ; GFX10:       ; %bb.0:
7809 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7810 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
7811 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
7812 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
7813 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
7814 ; GFX10-NEXT:    s_mov_b32 s4, 0
7815 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7816 ; GFX10-NEXT:  .LBB24_1: ; %atomicrmw.start
7817 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
7818 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7819 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
7820 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
7821 ; GFX10-NEXT:    v_pk_add_f16 v4, v5, v2
7822 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
7823 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
7824 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7825 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
7826 ; GFX10-NEXT:    buffer_gl1_inv
7827 ; GFX10-NEXT:    buffer_gl0_inv
7828 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
7829 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
7830 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
7831 ; GFX10-NEXT:    s_cbranch_execnz .LBB24_1
7832 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
7833 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
7834 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
7836 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7837 ; GFX90A:       ; %bb.0:
7838 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7839 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
7840 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
7841 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7842 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
7843 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
7844 ; GFX90A-NEXT:    v_mov_b32_e32 v3, s6
7845 ; GFX90A-NEXT:  .LBB24_1: ; %atomicrmw.start
7846 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
7847 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7848 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
7849 ; GFX90A-NEXT:    v_pk_add_f16 v4, v5, v2
7850 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]
7851 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7852 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
7853 ; GFX90A-NEXT:    buffer_wbinvl1
7854 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
7855 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7856 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7857 ; GFX90A-NEXT:    s_cbranch_execnz .LBB24_1
7858 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
7859 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
7860 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
7862 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7863 ; GFX908:       ; %bb.0:
7864 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7865 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
7866 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
7867 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7868 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
7869 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
7870 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
7871 ; GFX908-NEXT:  .LBB24_1: ; %atomicrmw.start
7872 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
7873 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
7874 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
7875 ; GFX908-NEXT:    v_pk_add_f16 v4, v5, v2
7876 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
7877 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
7878 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7879 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
7880 ; GFX908-NEXT:    buffer_wbinvl1
7881 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
7882 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7883 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7884 ; GFX908-NEXT:    s_cbranch_execnz .LBB24_1
7885 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
7886 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
7887 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
7889 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7890 ; GFX8:       ; %bb.0:
7891 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7892 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
7893 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
7894 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
7895 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
7896 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
7897 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
7898 ; GFX8-NEXT:  .LBB24_1: ; %atomicrmw.start
7899 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
7900 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7901 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
7902 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 16, v5
7903 ; GFX8-NEXT:    v_add_f16_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
7904 ; GFX8-NEXT:    v_add_f16_e32 v1, v5, v2
7905 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
7906 ; GFX8-NEXT:    v_or_b32_e32 v4, v1, v0
7907 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
7908 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
7909 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
7910 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
7911 ; GFX8-NEXT:    buffer_wbinvl1
7912 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
7913 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7914 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7915 ; GFX8-NEXT:    s_cbranch_execnz .LBB24_1
7916 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
7917 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
7918 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
7920 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7921 ; GFX7:       ; %bb.0:
7922 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7923 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
7924 ; GFX7-NEXT:    buffer_load_dword v3, v2, s[16:19], 0 offen offset:1024
7925 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
7926 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v0
7927 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
7928 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
7929 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v2, v1
7930 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7931 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v3
7932 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v3
7933 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
7934 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v4
7935 ; GFX7-NEXT:    v_mov_b32_e32 v4, s6
7936 ; GFX7-NEXT:  .LBB24_1: ; %atomicrmw.start
7937 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
7938 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
7939 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v0, v0
7940 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v1
7941 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v6, v0
7942 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7943 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v2
7944 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v3
7945 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v5, v5
7946 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v7, v6
7947 ; GFX7-NEXT:    v_or_b32_e32 v6, v0, v1
7948 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
7949 ; GFX7-NEXT:    v_or_b32_e32 v5, v7, v0
7950 ; GFX7-NEXT:    v_mov_b32_e32 v8, v6
7951 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
7952 ; GFX7-NEXT:    buffer_atomic_cmpswap v[7:8], v4, s[16:19], 0 offen glc
7953 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
7954 ; GFX7-NEXT:    buffer_wbinvl1
7955 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v7
7956 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v7
7957 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v1
7958 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
7959 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
7960 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
7961 ; GFX7-NEXT:    s_cbranch_execnz .LBB24_1
7962 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
7963 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
7964 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
7966 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2f16__offset__amdgpu_no_remote_memory:
7967 ; GFX6:       ; %bb.0:
7968 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
7969 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
7970 ; GFX6-NEXT:    buffer_load_dword v3, v2, s[16:19], 0 offen offset:1024
7971 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
7972 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v0
7973 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
7974 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
7975 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v2, v1
7976 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
7977 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v3
7978 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v3
7979 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v1
7980 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v4
7981 ; GFX6-NEXT:    v_mov_b32_e32 v4, s6
7982 ; GFX6-NEXT:  .LBB24_1: ; %atomicrmw.start
7983 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
7984 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
7985 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v0, v0
7986 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v1
7987 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v6, v0
7988 ; GFX6-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
7989 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v2
7990 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v3
7991 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v5, v5
7992 ; GFX6-NEXT:    s_waitcnt expcnt(0)
7993 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v7, v6
7994 ; GFX6-NEXT:    v_or_b32_e32 v6, v0, v1
7995 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
7996 ; GFX6-NEXT:    v_or_b32_e32 v5, v7, v0
7997 ; GFX6-NEXT:    v_mov_b32_e32 v8, v6
7998 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
7999 ; GFX6-NEXT:    buffer_atomic_cmpswap v[7:8], v4, s[16:19], 0 offen glc
8000 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
8001 ; GFX6-NEXT:    buffer_wbinvl1
8002 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v7
8003 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v7
8004 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v1
8005 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v7, v6
8006 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8007 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8008 ; GFX6-NEXT:    s_cbranch_execnz .LBB24_1
8009 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
8010 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
8011 ; GFX6-NEXT:    s_waitcnt expcnt(0)
8012 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
8013   %gep = getelementptr <2 x half>, ptr addrspace(7) %ptr, i32 256
8014   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x half> %val syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0
8015   ret <2 x half> %result
8018 define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, <2 x half> %val) #0 {
8019 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8020 ; GFX12:       ; %bb.0:
8021 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8022 ; GFX12-NEXT:    s_wait_expcnt 0x0
8023 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8024 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8025 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8026 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
8027 ; GFX12-NEXT:    s_wait_storecnt 0x0
8028 ; GFX12-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], null offen offset:1024
8029 ; GFX12-NEXT:    s_wait_storecnt 0x0
8030 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
8031 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8033 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8034 ; GFX940:       ; %bb.0:
8035 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8036 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
8037 ; GFX940-NEXT:    buffer_wbl2 sc1
8038 ; GFX940-NEXT:    buffer_atomic_pk_add_f16 v0, v1, s[0:3], 0 offen offset:1024
8039 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
8040 ; GFX940-NEXT:    buffer_inv sc1
8041 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
8043 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8044 ; GFX11:       ; %bb.0:
8045 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8046 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
8047 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
8048 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
8049 ; GFX11-NEXT:    v_mov_b32_e32 v3, s4
8050 ; GFX11-NEXT:    s_mov_b32 s4, 0
8051 ; GFX11-NEXT:    buffer_load_b32 v2, v1, s[0:3], 0 offen offset:1024
8052 ; GFX11-NEXT:  .LBB25_1: ; %atomicrmw.start
8053 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
8054 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8055 ; GFX11-NEXT:    v_pk_add_f16 v1, v2, v0
8056 ; GFX11-NEXT:    v_mov_b32_e32 v5, v2
8057 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
8058 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
8059 ; GFX11-NEXT:    v_mov_b32_e32 v4, v1
8060 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v3, s[0:3], 0 offen glc
8061 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8062 ; GFX11-NEXT:    buffer_gl1_inv
8063 ; GFX11-NEXT:    buffer_gl0_inv
8064 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
8065 ; GFX11-NEXT:    v_mov_b32_e32 v2, v4
8066 ; GFX11-NEXT:    s_or_b32 s4, vcc_lo, s4
8067 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
8068 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s4
8069 ; GFX11-NEXT:    s_cbranch_execnz .LBB25_1
8070 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
8071 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s4
8072 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8074 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8075 ; GFX10:       ; %bb.0:
8076 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8077 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
8078 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
8079 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
8080 ; GFX10-NEXT:    s_mov_b32 s4, 0
8081 ; GFX10-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
8082 ; GFX10-NEXT:  .LBB25_1: ; %atomicrmw.start
8083 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
8084 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8085 ; GFX10-NEXT:    v_pk_add_f16 v1, v2, v0
8086 ; GFX10-NEXT:    v_mov_b32_e32 v5, v2
8087 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
8088 ; GFX10-NEXT:    v_mov_b32_e32 v4, v1
8089 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
8090 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8091 ; GFX10-NEXT:    buffer_gl1_inv
8092 ; GFX10-NEXT:    buffer_gl0_inv
8093 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v2
8094 ; GFX10-NEXT:    v_mov_b32_e32 v2, v4
8095 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
8096 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
8097 ; GFX10-NEXT:    s_cbranch_execnz .LBB25_1
8098 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
8099 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
8100 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8102 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8103 ; GFX90A:       ; %bb.0:
8104 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8105 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
8106 ; GFX90A-NEXT:    buffer_load_dword v3, v1, s[16:19], 0 offen offset:1024
8107 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
8108 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
8109 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s6
8110 ; GFX90A-NEXT:  .LBB25_1: ; %atomicrmw.start
8111 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
8112 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8113 ; GFX90A-NEXT:    v_pk_add_f16 v2, v3, v0
8114 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[2:3], v[2:3] op_sel:[0,1]
8115 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v1, s[16:19], 0 offen glc
8116 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8117 ; GFX90A-NEXT:    buffer_wbinvl1
8118 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v3
8119 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8120 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v4
8121 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8122 ; GFX90A-NEXT:    s_cbranch_execnz .LBB25_1
8123 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
8124 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
8125 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
8127 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8128 ; GFX908:       ; %bb.0:
8129 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8130 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
8131 ; GFX908-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
8132 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
8133 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
8134 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
8135 ; GFX908-NEXT:  .LBB25_1: ; %atomicrmw.start
8136 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
8137 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
8138 ; GFX908-NEXT:    v_pk_add_f16 v1, v2, v0
8139 ; GFX908-NEXT:    v_mov_b32_e32 v5, v2
8140 ; GFX908-NEXT:    v_mov_b32_e32 v4, v1
8141 ; GFX908-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
8142 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
8143 ; GFX908-NEXT:    buffer_wbinvl1
8144 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
8145 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8146 ; GFX908-NEXT:    v_mov_b32_e32 v2, v4
8147 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8148 ; GFX908-NEXT:    s_cbranch_execnz .LBB25_1
8149 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
8150 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
8151 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
8153 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8154 ; GFX8:       ; %bb.0:
8155 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8156 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
8157 ; GFX8-NEXT:    buffer_load_dword v2, v1, s[16:19], 0 offen offset:1024
8158 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
8159 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
8160 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
8161 ; GFX8-NEXT:  .LBB25_1: ; %atomicrmw.start
8162 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
8163 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
8164 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
8165 ; GFX8-NEXT:    v_add_f16_sdwa v1, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
8166 ; GFX8-NEXT:    v_add_f16_e32 v4, v2, v0
8167 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
8168 ; GFX8-NEXT:    v_or_b32_e32 v1, v4, v1
8169 ; GFX8-NEXT:    v_mov_b32_e32 v5, v2
8170 ; GFX8-NEXT:    v_mov_b32_e32 v4, v1
8171 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v3, s[16:19], 0 offen glc
8172 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
8173 ; GFX8-NEXT:    buffer_wbinvl1
8174 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v2
8175 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8176 ; GFX8-NEXT:    v_mov_b32_e32 v2, v4
8177 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8178 ; GFX8-NEXT:    s_cbranch_execnz .LBB25_1
8179 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
8180 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
8181 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
8183 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8184 ; GFX7:       ; %bb.0:
8185 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8186 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
8187 ; GFX7-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
8188 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v1, v1
8189 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v5, v0
8190 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
8191 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
8192 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v0, v1
8193 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
8194 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
8195 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v2
8196 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v1
8197 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v1, v5
8198 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
8199 ; GFX7-NEXT:  .LBB25_1: ; %atomicrmw.start
8200 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
8201 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v4, v4
8202 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v3, v3
8203 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v5, v4
8204 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v6, v3
8205 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
8206 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v0
8207 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v1
8208 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v7, v5
8209 ; GFX7-NEXT:    v_cvt_f16_f32_e32 v6, v6
8210 ; GFX7-NEXT:    v_or_b32_e32 v5, v3, v4
8211 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
8212 ; GFX7-NEXT:    v_or_b32_e32 v4, v6, v3
8213 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
8214 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
8215 ; GFX7-NEXT:    buffer_atomic_cmpswap v[6:7], v2, s[16:19], 0 offen glc
8216 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
8217 ; GFX7-NEXT:    buffer_wbinvl1
8218 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v6
8219 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v3, v6
8220 ; GFX7-NEXT:    v_cvt_f32_f16_e32 v4, v4
8221 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
8222 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8223 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8224 ; GFX7-NEXT:    s_cbranch_execnz .LBB25_1
8225 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
8226 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
8227 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
8229 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2f16__offset__amdgpu_no_remote_memory:
8230 ; GFX6:       ; %bb.0:
8231 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8232 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
8233 ; GFX6-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
8234 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v1, v1
8235 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v5, v0
8236 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
8237 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
8238 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v0, v1
8239 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
8240 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
8241 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v2
8242 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v1
8243 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v1, v5
8244 ; GFX6-NEXT:    v_mov_b32_e32 v2, s6
8245 ; GFX6-NEXT:  .LBB25_1: ; %atomicrmw.start
8246 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
8247 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v4, v4
8248 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v3, v3
8249 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v5, v4
8250 ; GFX6-NEXT:    s_waitcnt expcnt(0)
8251 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v6, v3
8252 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
8253 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v0
8254 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v1
8255 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v7, v5
8256 ; GFX6-NEXT:    v_cvt_f16_f32_e32 v6, v6
8257 ; GFX6-NEXT:    v_or_b32_e32 v5, v3, v4
8258 ; GFX6-NEXT:    v_lshlrev_b32_e32 v3, 16, v7
8259 ; GFX6-NEXT:    v_or_b32_e32 v4, v6, v3
8260 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
8261 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
8262 ; GFX6-NEXT:    buffer_atomic_cmpswap v[6:7], v2, s[16:19], 0 offen glc
8263 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
8264 ; GFX6-NEXT:    buffer_wbinvl1
8265 ; GFX6-NEXT:    v_lshrrev_b32_e32 v4, 16, v6
8266 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v3, v6
8267 ; GFX6-NEXT:    v_cvt_f32_f16_e32 v4, v4
8268 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
8269 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8270 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8271 ; GFX6-NEXT:    s_cbranch_execnz .LBB25_1
8272 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
8273 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
8274 ; GFX6-NEXT:    s_waitcnt expcnt(0)
8275 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
8276   %gep = getelementptr <2 x half>, ptr addrspace(7) %ptr, i32 256
8277   %unused = atomicrmw fadd ptr addrspace(7) %gep, <2 x half> %val syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0
8278   ret void
8281 ; --------------------------------------------------------------------
8282 ; <2 x bfloat>
8283 ; --------------------------------------------------------------------
8285 define <2 x bfloat> @buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, <2 x bfloat> %val) #0 {
8286 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8287 ; GFX12:       ; %bb.0:
8288 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8289 ; GFX12-NEXT:    s_wait_expcnt 0x0
8290 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8291 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8292 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8293 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
8294 ; GFX12-NEXT:    s_wait_storecnt 0x0
8295 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
8296 ; GFX12-NEXT:    s_wait_loadcnt 0x0
8297 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
8298 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8300 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8301 ; GFX940:       ; %bb.0:
8302 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8303 ; GFX940-NEXT:    v_mov_b32_e32 v1, v0
8304 ; GFX940-NEXT:    v_mov_b32_e32 v0, s16
8305 ; GFX940-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen offset:1024
8306 ; GFX940-NEXT:    s_add_i32 s4, s16, 0x400
8307 ; GFX940-NEXT:    s_mov_b64 s[6:7], 0
8308 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
8309 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
8310 ; GFX940-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8311 ; GFX940-NEXT:    s_mov_b32 s9, 0x7060302
8312 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
8313 ; GFX940-NEXT:  .LBB26_1: ; %atomicrmw.start
8314 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
8315 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
8316 ; GFX940-NEXT:    v_mov_b32_e32 v7, v0
8317 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
8318 ; GFX940-NEXT:    v_and_b32_e32 v1, 0xffff0000, v7
8319 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v2
8320 ; GFX940-NEXT:    v_add_f32_e32 v1, v1, v3
8321 ; GFX940-NEXT:    v_bfe_u32 v5, v0, 16, 1
8322 ; GFX940-NEXT:    v_bfe_u32 v8, v1, 16, 1
8323 ; GFX940-NEXT:    v_or_b32_e32 v6, 0x400000, v0
8324 ; GFX940-NEXT:    v_or_b32_e32 v9, 0x400000, v1
8325 ; GFX940-NEXT:    v_add3_u32 v5, v5, v0, s8
8326 ; GFX940-NEXT:    v_add3_u32 v8, v8, v1, s8
8327 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
8328 ; GFX940-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8329 ; GFX940-NEXT:    buffer_wbl2 sc1
8330 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
8331 ; GFX940-NEXT:    v_cndmask_b32_e64 v0, v5, v6, s[4:5]
8332 ; GFX940-NEXT:    v_perm_b32 v6, v1, v0, s9
8333 ; GFX940-NEXT:    v_mov_b64_e32 v[0:1], v[6:7]
8334 ; GFX940-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[0:3], 0 offen sc0
8335 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
8336 ; GFX940-NEXT:    buffer_inv sc1
8337 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v7
8338 ; GFX940-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8339 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8340 ; GFX940-NEXT:    s_cbranch_execnz .LBB26_1
8341 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
8342 ; GFX940-NEXT:    s_or_b64 exec, exec, s[6:7]
8343 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
8345 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8346 ; GFX11:       ; %bb.0:
8347 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8348 ; GFX11-NEXT:    v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s16
8349 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
8350 ; GFX11-NEXT:    s_mov_b32 s5, 0
8351 ; GFX11-NEXT:    v_mov_b32_e32 v4, s4
8352 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
8353 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
8354 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
8355 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8356 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
8357 ; GFX11-NEXT:    .p2align 6
8358 ; GFX11-NEXT:  .LBB26_1: ; %atomicrmw.start
8359 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
8360 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8361 ; GFX11-NEXT:    v_mov_b32_e32 v6, v0
8362 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
8363 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
8364 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
8365 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v3
8366 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
8367 ; GFX11-NEXT:    v_bfe_u32 v7, v1, 16, 1
8368 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
8369 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
8370 ; GFX11-NEXT:    v_add3_u32 v7, v7, v1, 0x7fff
8371 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
8372 ; GFX11-NEXT:    v_dual_cndmask_b32 v1, v7, v9 :: v_dual_lshlrev_b32 v0, 16, v6
8373 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v2
8374 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
8375 ; GFX11-NEXT:    v_bfe_u32 v5, v0, 16, 1
8376 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
8377 ; GFX11-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
8378 ; GFX11-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
8379 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
8380 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v5, v8, s4
8381 ; GFX11-NEXT:    v_perm_b32 v5, v1, v0, 0x7060302
8382 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8383 ; GFX11-NEXT:    v_dual_mov_b32 v0, v5 :: v_dual_mov_b32 v1, v6
8384 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v4, s[0:3], 0 offen glc
8385 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8386 ; GFX11-NEXT:    buffer_gl1_inv
8387 ; GFX11-NEXT:    buffer_gl0_inv
8388 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v6
8389 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
8390 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
8391 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
8392 ; GFX11-NEXT:    s_cbranch_execnz .LBB26_1
8393 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
8394 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
8395 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
8396 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8398 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8399 ; GFX10:       ; %bb.0:
8400 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8401 ; GFX10-NEXT:    v_mov_b32_e32 v1, v0
8402 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
8403 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
8404 ; GFX10-NEXT:    s_mov_b32 s5, 0
8405 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
8406 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
8407 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
8408 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8409 ; GFX10-NEXT:  .LBB26_1: ; %atomicrmw.start
8410 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
8411 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8412 ; GFX10-NEXT:    v_mov_b32_e32 v6, v0
8413 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
8414 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
8415 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
8416 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
8417 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
8418 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
8419 ; GFX10-NEXT:    v_bfe_u32 v7, v1, 16, 1
8420 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
8421 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
8422 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
8423 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
8424 ; GFX10-NEXT:    v_add3_u32 v7, v7, v1, 0x7fff
8425 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
8426 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v7, v9, vcc_lo
8427 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v5, v8, s4
8428 ; GFX10-NEXT:    v_perm_b32 v5, v1, v0, 0x7060302
8429 ; GFX10-NEXT:    v_mov_b32_e32 v0, v5
8430 ; GFX10-NEXT:    v_mov_b32_e32 v1, v6
8431 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
8432 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8433 ; GFX10-NEXT:    buffer_gl1_inv
8434 ; GFX10-NEXT:    buffer_gl0_inv
8435 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v6
8436 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
8437 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
8438 ; GFX10-NEXT:    s_cbranch_execnz .LBB26_1
8439 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
8440 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
8441 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8443 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8444 ; GFX90A:       ; %bb.0:
8445 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8446 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
8447 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
8448 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
8449 ; GFX90A-NEXT:    s_add_i32 s4, s20, 0x400
8450 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
8451 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
8452 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
8453 ; GFX90A-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8454 ; GFX90A-NEXT:    s_mov_b32 s9, 0x7060302
8455 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
8456 ; GFX90A-NEXT:  .LBB26_1: ; %atomicrmw.start
8457 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
8458 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8459 ; GFX90A-NEXT:    v_mov_b32_e32 v7, v0
8460 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
8461 ; GFX90A-NEXT:    v_and_b32_e32 v1, 0xffff0000, v7
8462 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v2
8463 ; GFX90A-NEXT:    v_add_f32_e32 v1, v1, v3
8464 ; GFX90A-NEXT:    v_bfe_u32 v5, v0, 16, 1
8465 ; GFX90A-NEXT:    v_bfe_u32 v8, v1, 16, 1
8466 ; GFX90A-NEXT:    v_or_b32_e32 v6, 0x400000, v0
8467 ; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v1
8468 ; GFX90A-NEXT:    v_add3_u32 v5, v5, v0, s8
8469 ; GFX90A-NEXT:    v_add3_u32 v8, v8, v1, s8
8470 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
8471 ; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8472 ; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v5, v6, s[4:5]
8473 ; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
8474 ; GFX90A-NEXT:    v_perm_b32 v6, v1, v0, s9
8475 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[6:7], v[6:7] op_sel:[0,1]
8476 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
8477 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8478 ; GFX90A-NEXT:    buffer_wbinvl1
8479 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v7
8480 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8481 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8482 ; GFX90A-NEXT:    s_cbranch_execnz .LBB26_1
8483 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
8484 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
8485 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
8487 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8488 ; GFX908:       ; %bb.0:
8489 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8490 ; GFX908-NEXT:    v_mov_b32_e32 v1, v0
8491 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
8492 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
8493 ; GFX908-NEXT:    s_add_i32 s4, s20, 0x400
8494 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
8495 ; GFX908-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
8496 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
8497 ; GFX908-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8498 ; GFX908-NEXT:    s_mov_b32 s9, 0x7060302
8499 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
8500 ; GFX908-NEXT:  .LBB26_1: ; %atomicrmw.start
8501 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
8502 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
8503 ; GFX908-NEXT:    v_mov_b32_e32 v6, v0
8504 ; GFX908-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
8505 ; GFX908-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
8506 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v2
8507 ; GFX908-NEXT:    v_add_f32_e32 v1, v1, v3
8508 ; GFX908-NEXT:    v_bfe_u32 v5, v0, 16, 1
8509 ; GFX908-NEXT:    v_bfe_u32 v8, v1, 16, 1
8510 ; GFX908-NEXT:    v_or_b32_e32 v7, 0x400000, v0
8511 ; GFX908-NEXT:    v_or_b32_e32 v9, 0x400000, v1
8512 ; GFX908-NEXT:    v_add3_u32 v5, v5, v0, s8
8513 ; GFX908-NEXT:    v_add3_u32 v8, v8, v1, s8
8514 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
8515 ; GFX908-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8516 ; GFX908-NEXT:    v_cndmask_b32_e64 v0, v5, v7, s[4:5]
8517 ; GFX908-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
8518 ; GFX908-NEXT:    v_perm_b32 v5, v1, v0, s9
8519 ; GFX908-NEXT:    v_mov_b32_e32 v0, v5
8520 ; GFX908-NEXT:    v_mov_b32_e32 v1, v6
8521 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
8522 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
8523 ; GFX908-NEXT:    buffer_wbinvl1
8524 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v6
8525 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8526 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8527 ; GFX908-NEXT:    s_cbranch_execnz .LBB26_1
8528 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
8529 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
8530 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
8532 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8533 ; GFX8:       ; %bb.0:
8534 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8535 ; GFX8-NEXT:    v_mov_b32_e32 v1, v0
8536 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
8537 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
8538 ; GFX8-NEXT:    s_add_i32 s4, s20, 0x400
8539 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
8540 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
8541 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8542 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
8543 ; GFX8-NEXT:  .LBB26_1: ; %atomicrmw.start
8544 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
8545 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
8546 ; GFX8-NEXT:    v_mov_b32_e32 v6, v0
8547 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
8548 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
8549 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
8550 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
8551 ; GFX8-NEXT:    v_bfe_u32 v5, v0, 16, 1
8552 ; GFX8-NEXT:    v_bfe_u32 v8, v1, 16, 1
8553 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v0
8554 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v1
8555 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
8556 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 0x7fff, v8
8557 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v1
8558 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
8559 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v0
8560 ; GFX8-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8561 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
8562 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v5, v7, s[4:5]
8563 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
8564 ; GFX8-NEXT:    v_alignbit_b32 v5, v1, v0, 16
8565 ; GFX8-NEXT:    v_mov_b32_e32 v0, v5
8566 ; GFX8-NEXT:    v_mov_b32_e32 v1, v6
8567 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
8568 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
8569 ; GFX8-NEXT:    buffer_wbinvl1
8570 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v6
8571 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8572 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8573 ; GFX8-NEXT:    s_cbranch_execnz .LBB26_1
8574 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
8575 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
8576 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
8578 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8579 ; GFX7:       ; %bb.0:
8580 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8581 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
8582 ; GFX7-NEXT:    buffer_load_dword v4, v2, s[16:19], 0 offen offset:1024
8583 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
8584 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
8585 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
8586 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
8587 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
8588 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8589 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
8590 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
8591 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
8592 ; GFX7-NEXT:    v_mov_b32_e32 v4, s6
8593 ; GFX7-NEXT:  .LBB26_1: ; %atomicrmw.start
8594 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
8595 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
8596 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
8597 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
8598 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
8599 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
8600 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v3
8601 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v2
8602 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v0, 16
8603 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v6
8604 ; GFX7-NEXT:    v_alignbit_b32 v0, v0, v5, 16
8605 ; GFX7-NEXT:    v_mov_b32_e32 v6, v1
8606 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
8607 ; GFX7-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
8608 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
8609 ; GFX7-NEXT:    buffer_wbinvl1
8610 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
8611 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v5
8612 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8613 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
8614 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8615 ; GFX7-NEXT:    s_cbranch_execnz .LBB26_1
8616 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
8617 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
8618 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
8620 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8621 ; GFX6:       ; %bb.0:
8622 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8623 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
8624 ; GFX6-NEXT:    buffer_load_dword v4, v2, s[16:19], 0 offen offset:1024
8625 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
8626 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
8627 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
8628 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
8629 ; GFX6-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
8630 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
8631 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
8632 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
8633 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
8634 ; GFX6-NEXT:    v_mov_b32_e32 v4, s6
8635 ; GFX6-NEXT:  .LBB26_1: ; %atomicrmw.start
8636 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
8637 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
8638 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
8639 ; GFX6-NEXT:    s_waitcnt expcnt(0)
8640 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
8641 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
8642 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
8643 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v3
8644 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v2
8645 ; GFX6-NEXT:    v_alignbit_b32 v1, v1, v0, 16
8646 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, 16, v6
8647 ; GFX6-NEXT:    v_alignbit_b32 v0, v0, v5, 16
8648 ; GFX6-NEXT:    v_mov_b32_e32 v6, v1
8649 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
8650 ; GFX6-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
8651 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
8652 ; GFX6-NEXT:    buffer_wbinvl1
8653 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
8654 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v5
8655 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8656 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
8657 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8658 ; GFX6-NEXT:    s_cbranch_execnz .LBB26_1
8659 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
8660 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
8661 ; GFX6-NEXT:    s_waitcnt expcnt(0)
8662 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
8663   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
8664   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
8665   ret <2 x bfloat> %result
8668 define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, <2 x bfloat> %val) #0 {
8669 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8670 ; GFX12:       ; %bb.0:
8671 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8672 ; GFX12-NEXT:    s_wait_expcnt 0x0
8673 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8674 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8675 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8676 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
8677 ; GFX12-NEXT:    s_wait_storecnt 0x0
8678 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024
8679 ; GFX12-NEXT:    s_wait_storecnt 0x0
8680 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
8681 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8683 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8684 ; GFX940:       ; %bb.0:
8685 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8686 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
8687 ; GFX940-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:1024
8688 ; GFX940-NEXT:    s_add_i32 s4, s16, 0x400
8689 ; GFX940-NEXT:    s_mov_b64 s[6:7], 0
8690 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
8691 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
8692 ; GFX940-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
8693 ; GFX940-NEXT:    s_mov_b32 s9, 0x7060302
8694 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
8695 ; GFX940-NEXT:  .LBB27_1: ; %atomicrmw.start
8696 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
8697 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
8698 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
8699 ; GFX940-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
8700 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v2
8701 ; GFX940-NEXT:    v_add_f32_e32 v5, v5, v3
8702 ; GFX940-NEXT:    v_bfe_u32 v6, v0, 16, 1
8703 ; GFX940-NEXT:    v_bfe_u32 v8, v5, 16, 1
8704 ; GFX940-NEXT:    v_or_b32_e32 v7, 0x400000, v0
8705 ; GFX940-NEXT:    v_or_b32_e32 v9, 0x400000, v5
8706 ; GFX940-NEXT:    v_add3_u32 v6, v6, v0, s8
8707 ; GFX940-NEXT:    v_add3_u32 v8, v8, v5, s8
8708 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
8709 ; GFX940-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8710 ; GFX940-NEXT:    buffer_wbl2 sc1
8711 ; GFX940-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
8712 ; GFX940-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
8713 ; GFX940-NEXT:    v_perm_b32 v0, v5, v0, s9
8714 ; GFX940-NEXT:    v_mov_b64_e32 v[6:7], v[0:1]
8715 ; GFX940-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[0:3], 0 offen sc0
8716 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
8717 ; GFX940-NEXT:    buffer_inv sc1
8718 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
8719 ; GFX940-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8720 ; GFX940-NEXT:    v_mov_b32_e32 v1, v6
8721 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8722 ; GFX940-NEXT:    s_cbranch_execnz .LBB27_1
8723 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
8724 ; GFX940-NEXT:    s_or_b64 exec, exec, s[6:7]
8725 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
8727 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8728 ; GFX11:       ; %bb.0:
8729 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8730 ; GFX11-NEXT:    v_dual_mov_b32 v1, s16 :: v_dual_lshlrev_b32 v2, 16, v0
8731 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
8732 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
8733 ; GFX11-NEXT:    v_dual_mov_b32 v4, s4 :: v_dual_and_b32 v3, 0xffff0000, v0
8734 ; GFX11-NEXT:    buffer_load_b32 v1, v1, s[0:3], 0 offen offset:1024
8735 ; GFX11-NEXT:    s_mov_b32 s5, 0
8736 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
8737 ; GFX11-NEXT:    .p2align 6
8738 ; GFX11-NEXT:  .LBB27_1: ; %atomicrmw.start
8739 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
8740 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8741 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
8742 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
8743 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
8744 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
8745 ; GFX11-NEXT:    v_dual_add_f32 v5, v5, v3 :: v_dual_add_f32 v0, v0, v2
8746 ; GFX11-NEXT:    v_bfe_u32 v7, v5, 16, 1
8747 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
8748 ; GFX11-NEXT:    v_bfe_u32 v6, v0, 16, 1
8749 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
8750 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v5
8751 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
8752 ; GFX11-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
8753 ; GFX11-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
8754 ; GFX11-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
8755 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
8756 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
8757 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
8758 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
8759 ; GFX11-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
8760 ; GFX11-NEXT:    v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v5, v0
8761 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[5:6], v4, s[0:3], 0 offen glc
8762 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
8763 ; GFX11-NEXT:    buffer_gl1_inv
8764 ; GFX11-NEXT:    buffer_gl0_inv
8765 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
8766 ; GFX11-NEXT:    v_mov_b32_e32 v1, v5
8767 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
8768 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
8769 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
8770 ; GFX11-NEXT:    s_cbranch_execnz .LBB27_1
8771 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
8772 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
8773 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
8774 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8776 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8777 ; GFX10:       ; %bb.0:
8778 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8779 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
8780 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
8781 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
8782 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
8783 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
8784 ; GFX10-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
8785 ; GFX10-NEXT:    s_mov_b32 s5, 0
8786 ; GFX10-NEXT:  .LBB27_1: ; %atomicrmw.start
8787 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
8788 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8789 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
8790 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
8791 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
8792 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
8793 ; GFX10-NEXT:    v_add_f32_e32 v5, v5, v3
8794 ; GFX10-NEXT:    v_bfe_u32 v6, v0, 16, 1
8795 ; GFX10-NEXT:    v_bfe_u32 v7, v5, 16, 1
8796 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
8797 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v5
8798 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
8799 ; GFX10-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
8800 ; GFX10-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
8801 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
8802 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
8803 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
8804 ; GFX10-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
8805 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
8806 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
8807 ; GFX10-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
8808 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
8809 ; GFX10-NEXT:    buffer_gl1_inv
8810 ; GFX10-NEXT:    buffer_gl0_inv
8811 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
8812 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
8813 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
8814 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
8815 ; GFX10-NEXT:    s_cbranch_execnz .LBB27_1
8816 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
8817 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
8818 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8820 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8821 ; GFX90A:       ; %bb.0:
8822 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8823 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
8824 ; GFX90A-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
8825 ; GFX90A-NEXT:    s_add_i32 s4, s20, 0x400
8826 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
8827 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
8828 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
8829 ; GFX90A-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
8830 ; GFX90A-NEXT:    s_mov_b32 s9, 0x7060302
8831 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
8832 ; GFX90A-NEXT:  .LBB27_1: ; %atomicrmw.start
8833 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
8834 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8835 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
8836 ; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
8837 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v2
8838 ; GFX90A-NEXT:    v_add_f32_e32 v5, v5, v3
8839 ; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 1
8840 ; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 1
8841 ; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v0
8842 ; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v5
8843 ; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s8
8844 ; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s8
8845 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
8846 ; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8847 ; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
8848 ; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
8849 ; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s9
8850 ; GFX90A-NEXT:    v_pk_mov_b32 v[6:7], v[0:1], v[0:1] op_sel:[0,1]
8851 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[16:19], 0 offen glc
8852 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
8853 ; GFX90A-NEXT:    buffer_wbinvl1
8854 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
8855 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8856 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v6
8857 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8858 ; GFX90A-NEXT:    s_cbranch_execnz .LBB27_1
8859 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
8860 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
8861 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
8863 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8864 ; GFX908:       ; %bb.0:
8865 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8866 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
8867 ; GFX908-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
8868 ; GFX908-NEXT:    s_add_i32 s4, s20, 0x400
8869 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
8870 ; GFX908-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
8871 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
8872 ; GFX908-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
8873 ; GFX908-NEXT:    s_mov_b32 s9, 0x7060302
8874 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
8875 ; GFX908-NEXT:  .LBB27_1: ; %atomicrmw.start
8876 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
8877 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
8878 ; GFX908-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
8879 ; GFX908-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
8880 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v2
8881 ; GFX908-NEXT:    v_add_f32_e32 v5, v5, v3
8882 ; GFX908-NEXT:    v_bfe_u32 v6, v0, 16, 1
8883 ; GFX908-NEXT:    v_bfe_u32 v8, v5, 16, 1
8884 ; GFX908-NEXT:    v_or_b32_e32 v7, 0x400000, v0
8885 ; GFX908-NEXT:    v_or_b32_e32 v9, 0x400000, v5
8886 ; GFX908-NEXT:    v_add3_u32 v6, v6, v0, s8
8887 ; GFX908-NEXT:    v_add3_u32 v8, v8, v5, s8
8888 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
8889 ; GFX908-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8890 ; GFX908-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
8891 ; GFX908-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
8892 ; GFX908-NEXT:    v_perm_b32 v0, v5, v0, s9
8893 ; GFX908-NEXT:    v_mov_b32_e32 v6, v1
8894 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
8895 ; GFX908-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
8896 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
8897 ; GFX908-NEXT:    buffer_wbinvl1
8898 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
8899 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8900 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
8901 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8902 ; GFX908-NEXT:    s_cbranch_execnz .LBB27_1
8903 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
8904 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
8905 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
8907 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8908 ; GFX8:       ; %bb.0:
8909 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8910 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
8911 ; GFX8-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
8912 ; GFX8-NEXT:    s_add_i32 s4, s20, 0x400
8913 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
8914 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
8915 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
8916 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
8917 ; GFX8-NEXT:  .LBB27_1: ; %atomicrmw.start
8918 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
8919 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
8920 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
8921 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
8922 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
8923 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v3
8924 ; GFX8-NEXT:    v_bfe_u32 v6, v0, 16, 1
8925 ; GFX8-NEXT:    v_bfe_u32 v8, v5, 16, 1
8926 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v0
8927 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v5
8928 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 0x7fff, v6
8929 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 0x7fff, v8
8930 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v5
8931 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
8932 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v0
8933 ; GFX8-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
8934 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
8935 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
8936 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
8937 ; GFX8-NEXT:    v_alignbit_b32 v0, v5, v0, 16
8938 ; GFX8-NEXT:    v_mov_b32_e32 v6, v1
8939 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
8940 ; GFX8-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
8941 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
8942 ; GFX8-NEXT:    buffer_wbinvl1
8943 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
8944 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
8945 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
8946 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
8947 ; GFX8-NEXT:    s_cbranch_execnz .LBB27_1
8948 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
8949 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
8950 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
8952 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8953 ; GFX7:       ; %bb.0:
8954 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8955 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
8956 ; GFX7-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
8957 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
8958 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
8959 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
8960 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
8961 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
8962 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
8963 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
8964 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
8965 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
8966 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
8967 ; GFX7-NEXT:  .LBB27_1: ; %atomicrmw.start
8968 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
8969 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
8970 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
8971 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
8972 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
8973 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
8974 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v1
8975 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v0
8976 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v4, 16
8977 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
8978 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v5, 16
8979 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
8980 ; GFX7-NEXT:    v_mov_b32_e32 v5, v3
8981 ; GFX7-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
8982 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
8983 ; GFX7-NEXT:    buffer_wbinvl1
8984 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
8985 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
8986 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
8987 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
8988 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
8989 ; GFX7-NEXT:    s_cbranch_execnz .LBB27_1
8990 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
8991 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
8992 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
8994 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory:
8995 ; GFX6:       ; %bb.0:
8996 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8997 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
8998 ; GFX6-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
8999 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
9000 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
9001 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
9002 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
9003 ; GFX6-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
9004 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
9005 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
9006 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
9007 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
9008 ; GFX6-NEXT:    v_mov_b32_e32 v2, s6
9009 ; GFX6-NEXT:  .LBB27_1: ; %atomicrmw.start
9010 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
9011 ; GFX6-NEXT:    v_mul_f32_e32 v3, 1.0, v3
9012 ; GFX6-NEXT:    v_mul_f32_e32 v4, 1.0, v4
9013 ; GFX6-NEXT:    s_waitcnt expcnt(0)
9014 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
9015 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
9016 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
9017 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v1
9018 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v0
9019 ; GFX6-NEXT:    v_alignbit_b32 v4, v3, v4, 16
9020 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
9021 ; GFX6-NEXT:    v_alignbit_b32 v3, v3, v5, 16
9022 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
9023 ; GFX6-NEXT:    v_mov_b32_e32 v5, v3
9024 ; GFX6-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
9025 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
9026 ; GFX6-NEXT:    buffer_wbinvl1
9027 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
9028 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
9029 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
9030 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
9031 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
9032 ; GFX6-NEXT:    s_cbranch_execnz .LBB27_1
9033 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
9034 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
9035 ; GFX6-NEXT:    s_waitcnt expcnt(0)
9036 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
9037   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
9038   %unused = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
9039   ret void
9042 define <2 x bfloat> @buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory(ptr addrspace(7) %ptr, <2 x bfloat> %val) #0 {
9043 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9044 ; GFX12:       ; %bb.0:
9045 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
9046 ; GFX12-NEXT:    s_wait_expcnt 0x0
9047 ; GFX12-NEXT:    s_wait_samplecnt 0x0
9048 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
9049 ; GFX12-NEXT:    s_wait_kmcnt 0x0
9050 ; GFX12-NEXT:    s_mov_b32 s1, exec_lo
9051 ; GFX12-NEXT:    s_wait_storecnt 0x0
9052 ; GFX12-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9053 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v0
9054 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v1
9055 ; GFX12-NEXT:    v_readfirstlane_b32 s6, v2
9056 ; GFX12-NEXT:    v_readfirstlane_b32 s7, v3
9057 ; GFX12-NEXT:    s_wait_alu 0xf1ff
9058 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
9059 ; GFX12-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
9060 ; GFX12-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
9061 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9062 ; GFX12-NEXT:    s_and_b32 s0, vcc_lo, s0
9063 ; GFX12-NEXT:    s_wait_alu 0xfffe
9064 ; GFX12-NEXT:    s_and_saveexec_b32 s0, s0
9065 ; GFX12-NEXT:    s_wait_loadcnt 0x0
9066 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v5, v4, s[4:7], null offen offset:1024 th:TH_ATOMIC_RETURN
9067 ; GFX12-NEXT:    ; implicit-def: $vgpr0_vgpr1_vgpr2_vgpr3
9068 ; GFX12-NEXT:    ; implicit-def: $vgpr4
9069 ; GFX12-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
9070 ; GFX12-NEXT:    s_cbranch_execnz .LBB28_1
9071 ; GFX12-NEXT:  ; %bb.2:
9072 ; GFX12-NEXT:    s_mov_b32 exec_lo, s1
9073 ; GFX12-NEXT:    s_wait_loadcnt 0x0
9074 ; GFX12-NEXT:    v_mov_b32_e32 v0, v5
9075 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
9076 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
9078 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9079 ; GFX940:       ; %bb.0:
9080 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9081 ; GFX940-NEXT:    v_add_u32_e32 v8, 0x400, v4
9082 ; GFX940-NEXT:    s_mov_b64 s[2:3], exec
9083 ; GFX940-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9084 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
9085 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
9086 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
9087 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
9088 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
9089 ; GFX940-NEXT:    s_nop 0
9090 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
9091 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
9092 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
9093 ; GFX940-NEXT:    buffer_load_dword v7, v4, s[4:7], 0 offen offset:1024
9094 ; GFX940-NEXT:    ; implicit-def: $vgpr4
9095 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
9096 ; GFX940-NEXT:    s_cbranch_execnz .LBB28_1
9097 ; GFX940-NEXT:  ; %bb.2:
9098 ; GFX940-NEXT:    s_mov_b64 exec, s[2:3]
9099 ; GFX940-NEXT:    s_mov_b64 s[2:3], 0
9100 ; GFX940-NEXT:    v_lshlrev_b32_e32 v9, 16, v5
9101 ; GFX940-NEXT:    s_movk_i32 s10, 0x7fff
9102 ; GFX940-NEXT:    v_and_b32_e32 v10, 0xffff0000, v5
9103 ; GFX940-NEXT:    s_mov_b32 s11, 0x7060302
9104 ; GFX940-NEXT:  .LBB28_3: ; %atomicrmw.start
9105 ; GFX940-NEXT:    ; =>This Loop Header: Depth=1
9106 ; GFX940-NEXT:    ; Child Loop BB28_4 Depth 2
9107 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
9108 ; GFX940-NEXT:    v_lshlrev_b32_e32 v4, 16, v7
9109 ; GFX940-NEXT:    v_add_f32_e32 v4, v4, v9
9110 ; GFX940-NEXT:    v_bfe_u32 v5, v4, 16, 1
9111 ; GFX940-NEXT:    v_add3_u32 v5, v5, v4, s10
9112 ; GFX940-NEXT:    v_or_b32_e32 v6, 0x400000, v4
9113 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
9114 ; GFX940-NEXT:    s_mov_b64 s[8:9], exec
9115 ; GFX940-NEXT:    buffer_wbl2 sc1
9116 ; GFX940-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
9117 ; GFX940-NEXT:    v_and_b32_e32 v5, 0xffff0000, v7
9118 ; GFX940-NEXT:    v_add_f32_e32 v5, v5, v10
9119 ; GFX940-NEXT:    v_bfe_u32 v6, v5, 16, 1
9120 ; GFX940-NEXT:    v_add3_u32 v6, v6, v5, s10
9121 ; GFX940-NEXT:    v_or_b32_e32 v11, 0x400000, v5
9122 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
9123 ; GFX940-NEXT:    s_nop 1
9124 ; GFX940-NEXT:    v_cndmask_b32_e32 v5, v6, v11, vcc
9125 ; GFX940-NEXT:    v_perm_b32 v6, v5, v4, s11
9126 ; GFX940-NEXT:    v_mov_b64_e32 v[4:5], v[6:7]
9127 ; GFX940-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9128 ; GFX940-NEXT:    ; => This Inner Loop Header: Depth=2
9129 ; GFX940-NEXT:    v_readfirstlane_b32 s4, v0
9130 ; GFX940-NEXT:    v_readfirstlane_b32 s5, v1
9131 ; GFX940-NEXT:    v_readfirstlane_b32 s6, v2
9132 ; GFX940-NEXT:    v_readfirstlane_b32 s7, v3
9133 ; GFX940-NEXT:    v_cmp_eq_u64_e32 vcc, s[4:5], v[0:1]
9134 ; GFX940-NEXT:    s_nop 0
9135 ; GFX940-NEXT:    v_cmp_eq_u64_e64 s[0:1], s[6:7], v[2:3]
9136 ; GFX940-NEXT:    s_and_b64 s[0:1], vcc, s[0:1]
9137 ; GFX940-NEXT:    s_and_saveexec_b64 s[0:1], s[0:1]
9138 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
9139 ; GFX940-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[4:7], 0 offen sc0
9140 ; GFX940-NEXT:    s_xor_b64 exec, exec, s[0:1]
9141 ; GFX940-NEXT:    s_cbranch_execnz .LBB28_4
9142 ; GFX940-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9143 ; GFX940-NEXT:    s_mov_b64 exec, s[8:9]
9144 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
9145 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v7
9146 ; GFX940-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
9147 ; GFX940-NEXT:    v_mov_b32_e32 v7, v4
9148 ; GFX940-NEXT:    buffer_inv sc1
9149 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[2:3]
9150 ; GFX940-NEXT:    s_cbranch_execnz .LBB28_3
9151 ; GFX940-NEXT:  ; %bb.6: ; %atomicrmw.end
9152 ; GFX940-NEXT:    s_or_b64 exec, exec, s[2:3]
9153 ; GFX940-NEXT:    v_mov_b32_e32 v0, v4
9154 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
9156 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9157 ; GFX11:       ; %bb.0:
9158 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9159 ; GFX11-NEXT:    v_add_nc_u32_e32 v7, 0x400, v4
9160 ; GFX11-NEXT:    s_mov_b32 s1, 0
9161 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
9162 ; GFX11-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9163 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
9164 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
9165 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
9166 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
9167 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
9168 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
9169 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
9170 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
9171 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
9172 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
9173 ; GFX11-NEXT:    buffer_load_b32 v6, v4, s[4:7], 0 offen offset:1024
9174 ; GFX11-NEXT:    ; implicit-def: $vgpr4
9175 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
9176 ; GFX11-NEXT:    s_cbranch_execnz .LBB28_1
9177 ; GFX11-NEXT:  ; %bb.2:
9178 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
9179 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v5
9180 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xffff0000, v5
9181 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
9182 ; GFX11-NEXT:    .p2align 6
9183 ; GFX11-NEXT:  .LBB28_3: ; %atomicrmw.start
9184 ; GFX11-NEXT:    ; =>This Loop Header: Depth=1
9185 ; GFX11-NEXT:    ; Child Loop BB28_4 Depth 2
9186 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9187 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
9188 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
9189 ; GFX11-NEXT:    s_mov_b32 s2, exec_lo
9190 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
9191 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
9192 ; GFX11-NEXT:    v_dual_add_f32 v5, v5, v9 :: v_dual_add_f32 v4, v4, v8
9193 ; GFX11-NEXT:    v_bfe_u32 v11, v5, 16, 1
9194 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
9195 ; GFX11-NEXT:    v_bfe_u32 v10, v4, 16, 1
9196 ; GFX11-NEXT:    v_or_b32_e32 v12, 0x400000, v4
9197 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
9198 ; GFX11-NEXT:    v_or_b32_e32 v13, 0x400000, v5
9199 ; GFX11-NEXT:    v_add3_u32 v11, v11, v5, 0x7fff
9200 ; GFX11-NEXT:    v_add3_u32 v10, v10, v4, 0x7fff
9201 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_4)
9202 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v10, v12, vcc_lo
9203 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
9204 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v11, v13, vcc_lo
9205 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
9206 ; GFX11-NEXT:    v_perm_b32 v5, v5, v4, 0x7060302
9207 ; GFX11-NEXT:    v_mov_b32_e32 v4, v5
9208 ; GFX11-NEXT:    v_mov_b32_e32 v5, v6
9209 ; GFX11-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9210 ; GFX11-NEXT:    ; => This Inner Loop Header: Depth=2
9211 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v0
9212 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v1
9213 ; GFX11-NEXT:    v_readfirstlane_b32 s6, v2
9214 ; GFX11-NEXT:    v_readfirstlane_b32 s7, v3
9215 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
9216 ; GFX11-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[4:5], v[0:1]
9217 ; GFX11-NEXT:    v_cmp_eq_u64_e64 s0, s[6:7], v[2:3]
9218 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
9219 ; GFX11-NEXT:    s_and_b32 s0, vcc_lo, s0
9220 ; GFX11-NEXT:    s_and_saveexec_b32 s0, s0
9221 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9222 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[4:5], v7, s[4:7], 0 offen glc
9223 ; GFX11-NEXT:    s_xor_b32 exec_lo, exec_lo, s0
9224 ; GFX11-NEXT:    s_cbranch_execnz .LBB28_4
9225 ; GFX11-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9226 ; GFX11-NEXT:    s_mov_b32 exec_lo, s2
9227 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9228 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v6
9229 ; GFX11-NEXT:    v_mov_b32_e32 v6, v4
9230 ; GFX11-NEXT:    buffer_gl1_inv
9231 ; GFX11-NEXT:    buffer_gl0_inv
9232 ; GFX11-NEXT:    s_or_b32 s1, vcc_lo, s1
9233 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
9234 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s1
9235 ; GFX11-NEXT:    s_cbranch_execnz .LBB28_3
9236 ; GFX11-NEXT:  ; %bb.6: ; %atomicrmw.end
9237 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
9238 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s1
9239 ; GFX11-NEXT:    v_mov_b32_e32 v0, v4
9240 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9242 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9243 ; GFX10:       ; %bb.0:
9244 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9245 ; GFX10-NEXT:    v_add_nc_u32_e32 v7, 0x400, v4
9246 ; GFX10-NEXT:    s_mov_b32 s5, 0
9247 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
9248 ; GFX10-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9249 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
9250 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
9251 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
9252 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
9253 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
9254 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
9255 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
9256 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
9257 ; GFX10-NEXT:    buffer_load_dword v6, v4, s[8:11], 0 offen offset:1024
9258 ; GFX10-NEXT:    ; implicit-def: $vgpr4
9259 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9260 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
9261 ; GFX10-NEXT:    s_cbranch_execnz .LBB28_1
9262 ; GFX10-NEXT:  ; %bb.2:
9263 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
9264 ; GFX10-NEXT:    v_lshlrev_b32_e32 v8, 16, v5
9265 ; GFX10-NEXT:    v_and_b32_e32 v9, 0xffff0000, v5
9266 ; GFX10-NEXT:  .LBB28_3: ; %atomicrmw.start
9267 ; GFX10-NEXT:    ; =>This Loop Header: Depth=1
9268 ; GFX10-NEXT:    ; Child Loop BB28_4 Depth 2
9269 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9270 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
9271 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
9272 ; GFX10-NEXT:    s_mov_b32 s6, exec_lo
9273 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
9274 ; GFX10-NEXT:    v_add_f32_e32 v4, v4, v8
9275 ; GFX10-NEXT:    v_add_f32_e32 v5, v5, v9
9276 ; GFX10-NEXT:    v_bfe_u32 v10, v4, 16, 1
9277 ; GFX10-NEXT:    v_bfe_u32 v11, v5, 16, 1
9278 ; GFX10-NEXT:    v_or_b32_e32 v12, 0x400000, v4
9279 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v4, v4
9280 ; GFX10-NEXT:    v_or_b32_e32 v13, 0x400000, v5
9281 ; GFX10-NEXT:    v_add3_u32 v10, v10, v4, 0x7fff
9282 ; GFX10-NEXT:    v_add3_u32 v11, v11, v5, 0x7fff
9283 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v10, v12, vcc_lo
9284 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
9285 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v11, v13, vcc_lo
9286 ; GFX10-NEXT:    v_perm_b32 v5, v5, v4, 0x7060302
9287 ; GFX10-NEXT:    v_mov_b32_e32 v4, v5
9288 ; GFX10-NEXT:    v_mov_b32_e32 v5, v6
9289 ; GFX10-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9290 ; GFX10-NEXT:    ; => This Inner Loop Header: Depth=2
9291 ; GFX10-NEXT:    v_readfirstlane_b32 s8, v0
9292 ; GFX10-NEXT:    v_readfirstlane_b32 s9, v1
9293 ; GFX10-NEXT:    v_readfirstlane_b32 s10, v2
9294 ; GFX10-NEXT:    v_readfirstlane_b32 s11, v3
9295 ; GFX10-NEXT:    v_cmp_eq_u64_e32 vcc_lo, s[8:9], v[0:1]
9296 ; GFX10-NEXT:    v_cmp_eq_u64_e64 s4, s[10:11], v[2:3]
9297 ; GFX10-NEXT:    s_and_b32 s4, vcc_lo, s4
9298 ; GFX10-NEXT:    s_and_saveexec_b32 s4, s4
9299 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9300 ; GFX10-NEXT:    buffer_atomic_cmpswap v[4:5], v7, s[8:11], 0 offen glc
9301 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9302 ; GFX10-NEXT:    s_xor_b32 exec_lo, exec_lo, s4
9303 ; GFX10-NEXT:    s_cbranch_execnz .LBB28_4
9304 ; GFX10-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9305 ; GFX10-NEXT:    s_mov_b32 exec_lo, s6
9306 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9307 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v6
9308 ; GFX10-NEXT:    v_mov_b32_e32 v6, v4
9309 ; GFX10-NEXT:    buffer_gl1_inv
9310 ; GFX10-NEXT:    buffer_gl0_inv
9311 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
9312 ; GFX10-NEXT:    s_waitcnt_depctr 0xffe3
9313 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
9314 ; GFX10-NEXT:    s_cbranch_execnz .LBB28_3
9315 ; GFX10-NEXT:  ; %bb.6: ; %atomicrmw.end
9316 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
9317 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
9318 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9320 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9321 ; GFX90A:       ; %bb.0:
9322 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9323 ; GFX90A-NEXT:    v_add_u32_e32 v8, 0x400, v4
9324 ; GFX90A-NEXT:    s_mov_b64 s[6:7], exec
9325 ; GFX90A-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9326 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
9327 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
9328 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
9329 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
9330 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9331 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9332 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9333 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9334 ; GFX90A-NEXT:    s_nop 0
9335 ; GFX90A-NEXT:    buffer_load_dword v7, v4, s[8:11], 0 offen offset:1024
9336 ; GFX90A-NEXT:    ; implicit-def: $vgpr4
9337 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
9338 ; GFX90A-NEXT:    s_cbranch_execnz .LBB28_1
9339 ; GFX90A-NEXT:  ; %bb.2:
9340 ; GFX90A-NEXT:    s_mov_b64 exec, s[6:7]
9341 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
9342 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v9, 16, v5
9343 ; GFX90A-NEXT:    s_movk_i32 s14, 0x7fff
9344 ; GFX90A-NEXT:    v_and_b32_e32 v10, 0xffff0000, v5
9345 ; GFX90A-NEXT:    s_mov_b32 s15, 0x7060302
9346 ; GFX90A-NEXT:  .LBB28_3: ; %atomicrmw.start
9347 ; GFX90A-NEXT:    ; =>This Loop Header: Depth=1
9348 ; GFX90A-NEXT:    ; Child Loop BB28_4 Depth 2
9349 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
9350 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v4, 16, v7
9351 ; GFX90A-NEXT:    v_add_f32_e32 v4, v4, v9
9352 ; GFX90A-NEXT:    v_bfe_u32 v5, v4, 16, 1
9353 ; GFX90A-NEXT:    v_add3_u32 v5, v5, v4, s14
9354 ; GFX90A-NEXT:    v_or_b32_e32 v6, 0x400000, v4
9355 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
9356 ; GFX90A-NEXT:    v_cndmask_b32_e32 v4, v5, v6, vcc
9357 ; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v7
9358 ; GFX90A-NEXT:    v_add_f32_e32 v5, v5, v10
9359 ; GFX90A-NEXT:    v_bfe_u32 v6, v5, 16, 1
9360 ; GFX90A-NEXT:    v_add3_u32 v6, v6, v5, s14
9361 ; GFX90A-NEXT:    v_or_b32_e32 v11, 0x400000, v5
9362 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
9363 ; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v6, v11, vcc
9364 ; GFX90A-NEXT:    v_perm_b32 v6, v5, v4, s15
9365 ; GFX90A-NEXT:    s_mov_b64 s[12:13], exec
9366 ; GFX90A-NEXT:    v_pk_mov_b32 v[4:5], v[6:7], v[6:7] op_sel:[0,1]
9367 ; GFX90A-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9368 ; GFX90A-NEXT:    ; => This Inner Loop Header: Depth=2
9369 ; GFX90A-NEXT:    v_readfirstlane_b32 s8, v0
9370 ; GFX90A-NEXT:    v_readfirstlane_b32 s9, v1
9371 ; GFX90A-NEXT:    v_readfirstlane_b32 s10, v2
9372 ; GFX90A-NEXT:    v_readfirstlane_b32 s11, v3
9373 ; GFX90A-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9374 ; GFX90A-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9375 ; GFX90A-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9376 ; GFX90A-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9377 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
9378 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[4:5], v8, s[8:11], 0 offen glc
9379 ; GFX90A-NEXT:    s_xor_b64 exec, exec, s[4:5]
9380 ; GFX90A-NEXT:    s_cbranch_execnz .LBB28_4
9381 ; GFX90A-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9382 ; GFX90A-NEXT:    s_mov_b64 exec, s[12:13]
9383 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
9384 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v7
9385 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9386 ; GFX90A-NEXT:    v_mov_b32_e32 v7, v4
9387 ; GFX90A-NEXT:    buffer_wbinvl1
9388 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9389 ; GFX90A-NEXT:    s_cbranch_execnz .LBB28_3
9390 ; GFX90A-NEXT:  ; %bb.6: ; %atomicrmw.end
9391 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
9392 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v4
9393 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
9395 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9396 ; GFX908:       ; %bb.0:
9397 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9398 ; GFX908-NEXT:    v_add_u32_e32 v7, 0x400, v4
9399 ; GFX908-NEXT:    s_mov_b64 s[6:7], exec
9400 ; GFX908-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9401 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
9402 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
9403 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
9404 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
9405 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9406 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9407 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9408 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9409 ; GFX908-NEXT:    s_nop 0
9410 ; GFX908-NEXT:    buffer_load_dword v6, v4, s[8:11], 0 offen offset:1024
9411 ; GFX908-NEXT:    ; implicit-def: $vgpr4
9412 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
9413 ; GFX908-NEXT:    s_cbranch_execnz .LBB28_1
9414 ; GFX908-NEXT:  ; %bb.2:
9415 ; GFX908-NEXT:    s_mov_b64 exec, s[6:7]
9416 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
9417 ; GFX908-NEXT:    v_lshlrev_b32_e32 v8, 16, v5
9418 ; GFX908-NEXT:    s_movk_i32 s14, 0x7fff
9419 ; GFX908-NEXT:    v_and_b32_e32 v9, 0xffff0000, v5
9420 ; GFX908-NEXT:    s_mov_b32 s15, 0x7060302
9421 ; GFX908-NEXT:  .LBB28_3: ; %atomicrmw.start
9422 ; GFX908-NEXT:    ; =>This Loop Header: Depth=1
9423 ; GFX908-NEXT:    ; Child Loop BB28_4 Depth 2
9424 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
9425 ; GFX908-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
9426 ; GFX908-NEXT:    v_add_f32_e32 v4, v4, v8
9427 ; GFX908-NEXT:    v_bfe_u32 v5, v4, 16, 1
9428 ; GFX908-NEXT:    v_add3_u32 v5, v5, v4, s14
9429 ; GFX908-NEXT:    v_or_b32_e32 v10, 0x400000, v4
9430 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
9431 ; GFX908-NEXT:    v_cndmask_b32_e32 v4, v5, v10, vcc
9432 ; GFX908-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
9433 ; GFX908-NEXT:    v_add_f32_e32 v5, v5, v9
9434 ; GFX908-NEXT:    v_bfe_u32 v10, v5, 16, 1
9435 ; GFX908-NEXT:    v_add3_u32 v10, v10, v5, s14
9436 ; GFX908-NEXT:    v_or_b32_e32 v11, 0x400000, v5
9437 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
9438 ; GFX908-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc
9439 ; GFX908-NEXT:    v_perm_b32 v5, v5, v4, s15
9440 ; GFX908-NEXT:    v_mov_b32_e32 v4, v5
9441 ; GFX908-NEXT:    s_mov_b64 s[12:13], exec
9442 ; GFX908-NEXT:    v_mov_b32_e32 v5, v6
9443 ; GFX908-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9444 ; GFX908-NEXT:    ; => This Inner Loop Header: Depth=2
9445 ; GFX908-NEXT:    v_readfirstlane_b32 s8, v0
9446 ; GFX908-NEXT:    v_readfirstlane_b32 s9, v1
9447 ; GFX908-NEXT:    v_readfirstlane_b32 s10, v2
9448 ; GFX908-NEXT:    v_readfirstlane_b32 s11, v3
9449 ; GFX908-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9450 ; GFX908-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9451 ; GFX908-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9452 ; GFX908-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9453 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
9454 ; GFX908-NEXT:    buffer_atomic_cmpswap v[4:5], v7, s[8:11], 0 offen glc
9455 ; GFX908-NEXT:    s_xor_b64 exec, exec, s[4:5]
9456 ; GFX908-NEXT:    s_cbranch_execnz .LBB28_4
9457 ; GFX908-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9458 ; GFX908-NEXT:    s_mov_b64 exec, s[12:13]
9459 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
9460 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
9461 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9462 ; GFX908-NEXT:    v_mov_b32_e32 v6, v4
9463 ; GFX908-NEXT:    buffer_wbinvl1
9464 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9465 ; GFX908-NEXT:    s_cbranch_execnz .LBB28_3
9466 ; GFX908-NEXT:  ; %bb.6: ; %atomicrmw.end
9467 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
9468 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
9469 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
9471 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9472 ; GFX8:       ; %bb.0:
9473 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9474 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 0x400, v4
9475 ; GFX8-NEXT:    s_mov_b64 s[6:7], exec
9476 ; GFX8-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9477 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
9478 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
9479 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
9480 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
9481 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9482 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9483 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9484 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9485 ; GFX8-NEXT:    s_nop 0
9486 ; GFX8-NEXT:    buffer_load_dword v6, v4, s[8:11], 0 offen offset:1024
9487 ; GFX8-NEXT:    ; implicit-def: $vgpr4
9488 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
9489 ; GFX8-NEXT:    s_cbranch_execnz .LBB28_1
9490 ; GFX8-NEXT:  ; %bb.2:
9491 ; GFX8-NEXT:    s_mov_b64 exec, s[6:7]
9492 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
9493 ; GFX8-NEXT:    v_lshlrev_b32_e32 v8, 16, v5
9494 ; GFX8-NEXT:    v_and_b32_e32 v9, 0xffff0000, v5
9495 ; GFX8-NEXT:  .LBB28_3: ; %atomicrmw.start
9496 ; GFX8-NEXT:    ; =>This Loop Header: Depth=1
9497 ; GFX8-NEXT:    ; Child Loop BB28_4 Depth 2
9498 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
9499 ; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 16, v6
9500 ; GFX8-NEXT:    v_add_f32_e32 v4, v4, v8
9501 ; GFX8-NEXT:    v_bfe_u32 v5, v4, 16, 1
9502 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v4
9503 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
9504 ; GFX8-NEXT:    v_or_b32_e32 v10, 0x400000, v4
9505 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v4, v4
9506 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v5, v10, vcc
9507 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v6
9508 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v9
9509 ; GFX8-NEXT:    v_bfe_u32 v10, v5, 16, 1
9510 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v5
9511 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, 0x7fff, v10
9512 ; GFX8-NEXT:    v_or_b32_e32 v11, 0x400000, v5
9513 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
9514 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v10, v11, vcc
9515 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
9516 ; GFX8-NEXT:    v_alignbit_b32 v5, v5, v4, 16
9517 ; GFX8-NEXT:    v_mov_b32_e32 v4, v5
9518 ; GFX8-NEXT:    s_mov_b64 s[12:13], exec
9519 ; GFX8-NEXT:    v_mov_b32_e32 v5, v6
9520 ; GFX8-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9521 ; GFX8-NEXT:    ; => This Inner Loop Header: Depth=2
9522 ; GFX8-NEXT:    v_readfirstlane_b32 s8, v0
9523 ; GFX8-NEXT:    v_readfirstlane_b32 s9, v1
9524 ; GFX8-NEXT:    v_readfirstlane_b32 s10, v2
9525 ; GFX8-NEXT:    v_readfirstlane_b32 s11, v3
9526 ; GFX8-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9527 ; GFX8-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9528 ; GFX8-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9529 ; GFX8-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9530 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
9531 ; GFX8-NEXT:    buffer_atomic_cmpswap v[4:5], v7, s[8:11], 0 offen glc
9532 ; GFX8-NEXT:    s_xor_b64 exec, exec, s[4:5]
9533 ; GFX8-NEXT:    s_cbranch_execnz .LBB28_4
9534 ; GFX8-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9535 ; GFX8-NEXT:    s_mov_b64 exec, s[12:13]
9536 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
9537 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v6
9538 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9539 ; GFX8-NEXT:    v_mov_b32_e32 v6, v4
9540 ; GFX8-NEXT:    buffer_wbinvl1
9541 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9542 ; GFX8-NEXT:    s_cbranch_execnz .LBB28_3
9543 ; GFX8-NEXT:  ; %bb.6: ; %atomicrmw.end
9544 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
9545 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
9546 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
9548 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9549 ; GFX7:       ; %bb.0:
9550 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9551 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, 0x400, v4
9552 ; GFX7-NEXT:    s_mov_b64 s[6:7], exec
9553 ; GFX7-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9554 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
9555 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
9556 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
9557 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
9558 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9559 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9560 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9561 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9562 ; GFX7-NEXT:    buffer_load_dword v7, v4, s[8:11], 0 offen offset:1024
9563 ; GFX7-NEXT:    ; implicit-def: $vgpr4
9564 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
9565 ; GFX7-NEXT:    s_cbranch_execnz .LBB28_1
9566 ; GFX7-NEXT:  ; %bb.2:
9567 ; GFX7-NEXT:    s_mov_b64 exec, s[6:7]
9568 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9569 ; GFX7-NEXT:    v_and_b32_e32 v9, 0xffff0000, v5
9570 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v6
9571 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
9572 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v7
9573 ; GFX7-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
9574 ; GFX7-NEXT:    s_mov_b64 s[6:7], 0
9575 ; GFX7-NEXT:    v_and_b32_e32 v10, 0xffff0000, v5
9576 ; GFX7-NEXT:  .LBB28_3: ; %atomicrmw.start
9577 ; GFX7-NEXT:    ; =>This Loop Header: Depth=1
9578 ; GFX7-NEXT:    ; Child Loop BB28_4 Depth 2
9579 ; GFX7-NEXT:    v_mul_f32_e32 v5, 1.0, v7
9580 ; GFX7-NEXT:    v_mul_f32_e32 v7, 1.0, v4
9581 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v7
9582 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v5
9583 ; GFX7-NEXT:    v_add_f32_e32 v4, v4, v10
9584 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v9
9585 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
9586 ; GFX7-NEXT:    v_alignbit_b32 v4, v4, v6, 16
9587 ; GFX7-NEXT:    v_lshrrev_b32_e32 v6, 16, v7
9588 ; GFX7-NEXT:    v_alignbit_b32 v5, v6, v5, 16
9589 ; GFX7-NEXT:    v_mov_b32_e32 v7, v5
9590 ; GFX7-NEXT:    s_mov_b64 s[12:13], exec
9591 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
9592 ; GFX7-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9593 ; GFX7-NEXT:    ; => This Inner Loop Header: Depth=2
9594 ; GFX7-NEXT:    v_readfirstlane_b32 s8, v0
9595 ; GFX7-NEXT:    v_readfirstlane_b32 s9, v1
9596 ; GFX7-NEXT:    v_readfirstlane_b32 s10, v2
9597 ; GFX7-NEXT:    v_readfirstlane_b32 s11, v3
9598 ; GFX7-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9599 ; GFX7-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9600 ; GFX7-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9601 ; GFX7-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9602 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
9603 ; GFX7-NEXT:    buffer_atomic_cmpswap v[6:7], v8, s[8:11], 0 offen glc
9604 ; GFX7-NEXT:    s_xor_b64 exec, exec, s[4:5]
9605 ; GFX7-NEXT:    s_cbranch_execnz .LBB28_4
9606 ; GFX7-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9607 ; GFX7-NEXT:    s_mov_b64 exec, s[12:13]
9608 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
9609 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
9610 ; GFX7-NEXT:    v_and_b32_e32 v4, 0xffff0000, v6
9611 ; GFX7-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9612 ; GFX7-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
9613 ; GFX7-NEXT:    buffer_wbinvl1
9614 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9615 ; GFX7-NEXT:    s_cbranch_execnz .LBB28_3
9616 ; GFX7-NEXT:  ; %bb.6: ; %atomicrmw.end
9617 ; GFX7-NEXT:    s_or_b64 exec, exec, s[6:7]
9618 ; GFX7-NEXT:    v_mov_b32_e32 v0, v7
9619 ; GFX7-NEXT:    v_mov_b32_e32 v1, v4
9620 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
9622 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__waterfall__amdgpu_no_fine_grained_memory:
9623 ; GFX6:       ; %bb.0:
9624 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9625 ; GFX6-NEXT:    v_add_i32_e32 v8, vcc, 0x400, v4
9626 ; GFX6-NEXT:    s_mov_b64 s[6:7], exec
9627 ; GFX6-NEXT:  .LBB28_1: ; =>This Inner Loop Header: Depth=1
9628 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
9629 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
9630 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
9631 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
9632 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9633 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9634 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9635 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9636 ; GFX6-NEXT:    buffer_load_dword v7, v4, s[8:11], 0 offen offset:1024
9637 ; GFX6-NEXT:    ; implicit-def: $vgpr4
9638 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
9639 ; GFX6-NEXT:    s_cbranch_execnz .LBB28_1
9640 ; GFX6-NEXT:  ; %bb.2:
9641 ; GFX6-NEXT:    s_mov_b64 exec, s[6:7]
9642 ; GFX6-NEXT:    v_mul_f32_e32 v5, 1.0, v5
9643 ; GFX6-NEXT:    v_and_b32_e32 v9, 0xffff0000, v5
9644 ; GFX6-NEXT:    v_mul_f32_e32 v5, 1.0, v6
9645 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
9646 ; GFX6-NEXT:    v_and_b32_e32 v4, 0xffff0000, v7
9647 ; GFX6-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
9648 ; GFX6-NEXT:    s_mov_b64 s[6:7], 0
9649 ; GFX6-NEXT:    v_and_b32_e32 v10, 0xffff0000, v5
9650 ; GFX6-NEXT:  .LBB28_3: ; %atomicrmw.start
9651 ; GFX6-NEXT:    ; =>This Loop Header: Depth=1
9652 ; GFX6-NEXT:    ; Child Loop BB28_4 Depth 2
9653 ; GFX6-NEXT:    v_mul_f32_e32 v5, 1.0, v7
9654 ; GFX6-NEXT:    v_mul_f32_e32 v7, 1.0, v4
9655 ; GFX6-NEXT:    v_and_b32_e32 v4, 0xffff0000, v7
9656 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v5
9657 ; GFX6-NEXT:    v_add_f32_e32 v4, v4, v10
9658 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v9
9659 ; GFX6-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
9660 ; GFX6-NEXT:    v_alignbit_b32 v4, v4, v6, 16
9661 ; GFX6-NEXT:    v_lshrrev_b32_e32 v6, 16, v7
9662 ; GFX6-NEXT:    v_alignbit_b32 v5, v6, v5, 16
9663 ; GFX6-NEXT:    v_mov_b32_e32 v7, v5
9664 ; GFX6-NEXT:    s_mov_b64 s[12:13], exec
9665 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
9666 ; GFX6-NEXT:  .LBB28_4: ; Parent Loop BB28_3 Depth=1
9667 ; GFX6-NEXT:    ; => This Inner Loop Header: Depth=2
9668 ; GFX6-NEXT:    v_readfirstlane_b32 s8, v0
9669 ; GFX6-NEXT:    v_readfirstlane_b32 s9, v1
9670 ; GFX6-NEXT:    v_readfirstlane_b32 s10, v2
9671 ; GFX6-NEXT:    v_readfirstlane_b32 s11, v3
9672 ; GFX6-NEXT:    v_cmp_eq_u64_e32 vcc, s[8:9], v[0:1]
9673 ; GFX6-NEXT:    v_cmp_eq_u64_e64 s[4:5], s[10:11], v[2:3]
9674 ; GFX6-NEXT:    s_and_b64 s[4:5], vcc, s[4:5]
9675 ; GFX6-NEXT:    s_and_saveexec_b64 s[4:5], s[4:5]
9676 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
9677 ; GFX6-NEXT:    buffer_atomic_cmpswap v[6:7], v8, s[8:11], 0 offen glc
9678 ; GFX6-NEXT:    s_xor_b64 exec, exec, s[4:5]
9679 ; GFX6-NEXT:    s_cbranch_execnz .LBB28_4
9680 ; GFX6-NEXT:  ; %bb.5: ; in Loop: Header=BB28_3 Depth=1
9681 ; GFX6-NEXT:    s_mov_b64 exec, s[12:13]
9682 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
9683 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v5
9684 ; GFX6-NEXT:    v_and_b32_e32 v4, 0xffff0000, v6
9685 ; GFX6-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9686 ; GFX6-NEXT:    s_waitcnt expcnt(0)
9687 ; GFX6-NEXT:    v_lshlrev_b32_e32 v7, 16, v6
9688 ; GFX6-NEXT:    buffer_wbinvl1
9689 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9690 ; GFX6-NEXT:    s_cbranch_execnz .LBB28_3
9691 ; GFX6-NEXT:  ; %bb.6: ; %atomicrmw.end
9692 ; GFX6-NEXT:    s_or_b64 exec, exec, s[6:7]
9693 ; GFX6-NEXT:    v_mov_b32_e32 v0, v7
9694 ; GFX6-NEXT:    v_mov_b32_e32 v1, v4
9695 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
9696   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
9697   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0
9698   ret <2 x bfloat> %result
9701 define <2 x bfloat> @buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset(ptr addrspace(7) inreg %ptr, <2 x bfloat> %val) {
9702 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9703 ; GFX12:       ; %bb.0:
9704 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
9705 ; GFX12-NEXT:    s_wait_expcnt 0x0
9706 ; GFX12-NEXT:    s_wait_samplecnt 0x0
9707 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
9708 ; GFX12-NEXT:    s_wait_kmcnt 0x0
9709 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
9710 ; GFX12-NEXT:    s_wait_storecnt 0x0
9711 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
9712 ; GFX12-NEXT:    s_wait_loadcnt 0x0
9713 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
9714 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
9716 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9717 ; GFX940:       ; %bb.0:
9718 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9719 ; GFX940-NEXT:    v_mov_b32_e32 v1, v0
9720 ; GFX940-NEXT:    v_mov_b32_e32 v0, s16
9721 ; GFX940-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen offset:1024
9722 ; GFX940-NEXT:    s_add_i32 s4, s16, 0x400
9723 ; GFX940-NEXT:    s_mov_b64 s[6:7], 0
9724 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9725 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
9726 ; GFX940-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
9727 ; GFX940-NEXT:    s_mov_b32 s9, 0x7060302
9728 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
9729 ; GFX940-NEXT:  .LBB29_1: ; %atomicrmw.start
9730 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
9731 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
9732 ; GFX940-NEXT:    v_mov_b32_e32 v7, v0
9733 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
9734 ; GFX940-NEXT:    v_and_b32_e32 v1, 0xffff0000, v7
9735 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v2
9736 ; GFX940-NEXT:    v_add_f32_e32 v1, v1, v3
9737 ; GFX940-NEXT:    v_bfe_u32 v5, v0, 16, 1
9738 ; GFX940-NEXT:    v_bfe_u32 v8, v1, 16, 1
9739 ; GFX940-NEXT:    v_or_b32_e32 v6, 0x400000, v0
9740 ; GFX940-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9741 ; GFX940-NEXT:    v_add3_u32 v5, v5, v0, s8
9742 ; GFX940-NEXT:    v_add3_u32 v8, v8, v1, s8
9743 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9744 ; GFX940-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
9745 ; GFX940-NEXT:    buffer_wbl2 sc1
9746 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
9747 ; GFX940-NEXT:    v_cndmask_b32_e64 v0, v5, v6, s[4:5]
9748 ; GFX940-NEXT:    v_perm_b32 v6, v1, v0, s9
9749 ; GFX940-NEXT:    v_mov_b64_e32 v[0:1], v[6:7]
9750 ; GFX940-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[0:3], 0 offen sc0
9751 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
9752 ; GFX940-NEXT:    buffer_inv sc1
9753 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v7
9754 ; GFX940-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9755 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9756 ; GFX940-NEXT:    s_cbranch_execnz .LBB29_1
9757 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
9758 ; GFX940-NEXT:    s_or_b64 exec, exec, s[6:7]
9759 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
9761 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9762 ; GFX11:       ; %bb.0:
9763 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9764 ; GFX11-NEXT:    v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s16
9765 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
9766 ; GFX11-NEXT:    s_mov_b32 s5, 0
9767 ; GFX11-NEXT:    v_mov_b32_e32 v4, s4
9768 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
9769 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9770 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
9771 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
9772 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
9773 ; GFX11-NEXT:    .p2align 6
9774 ; GFX11-NEXT:  .LBB29_1: ; %atomicrmw.start
9775 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
9776 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9777 ; GFX11-NEXT:    v_mov_b32_e32 v6, v0
9778 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
9779 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
9780 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
9781 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v3
9782 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
9783 ; GFX11-NEXT:    v_bfe_u32 v7, v1, 16, 1
9784 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9785 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
9786 ; GFX11-NEXT:    v_add3_u32 v7, v7, v1, 0x7fff
9787 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
9788 ; GFX11-NEXT:    v_dual_cndmask_b32 v1, v7, v9 :: v_dual_lshlrev_b32 v0, 16, v6
9789 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v2
9790 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
9791 ; GFX11-NEXT:    v_bfe_u32 v5, v0, 16, 1
9792 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
9793 ; GFX11-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
9794 ; GFX11-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
9795 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
9796 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v5, v8, s4
9797 ; GFX11-NEXT:    v_perm_b32 v5, v1, v0, 0x7060302
9798 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9799 ; GFX11-NEXT:    v_dual_mov_b32 v0, v5 :: v_dual_mov_b32 v1, v6
9800 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v4, s[0:3], 0 offen glc
9801 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
9802 ; GFX11-NEXT:    buffer_gl1_inv
9803 ; GFX11-NEXT:    buffer_gl0_inv
9804 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v6
9805 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
9806 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
9807 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
9808 ; GFX11-NEXT:    s_cbranch_execnz .LBB29_1
9809 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
9810 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
9811 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
9812 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
9814 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9815 ; GFX10:       ; %bb.0:
9816 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9817 ; GFX10-NEXT:    v_mov_b32_e32 v1, v0
9818 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
9819 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
9820 ; GFX10-NEXT:    s_mov_b32 s5, 0
9821 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
9822 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9823 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
9824 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
9825 ; GFX10-NEXT:  .LBB29_1: ; %atomicrmw.start
9826 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
9827 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9828 ; GFX10-NEXT:    v_mov_b32_e32 v6, v0
9829 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
9830 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
9831 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
9832 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
9833 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
9834 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
9835 ; GFX10-NEXT:    v_bfe_u32 v7, v1, 16, 1
9836 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
9837 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9838 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
9839 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
9840 ; GFX10-NEXT:    v_add3_u32 v7, v7, v1, 0x7fff
9841 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
9842 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v7, v9, vcc_lo
9843 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v5, v8, s4
9844 ; GFX10-NEXT:    v_perm_b32 v5, v1, v0, 0x7060302
9845 ; GFX10-NEXT:    v_mov_b32_e32 v0, v5
9846 ; GFX10-NEXT:    v_mov_b32_e32 v1, v6
9847 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
9848 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
9849 ; GFX10-NEXT:    buffer_gl1_inv
9850 ; GFX10-NEXT:    buffer_gl0_inv
9851 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v6
9852 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
9853 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
9854 ; GFX10-NEXT:    s_cbranch_execnz .LBB29_1
9855 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
9856 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
9857 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
9859 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9860 ; GFX90A:       ; %bb.0:
9861 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9862 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
9863 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
9864 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
9865 ; GFX90A-NEXT:    s_add_i32 s4, s20, 0x400
9866 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
9867 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9868 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
9869 ; GFX90A-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
9870 ; GFX90A-NEXT:    s_mov_b32 s9, 0x7060302
9871 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
9872 ; GFX90A-NEXT:  .LBB29_1: ; %atomicrmw.start
9873 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
9874 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
9875 ; GFX90A-NEXT:    v_mov_b32_e32 v7, v0
9876 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
9877 ; GFX90A-NEXT:    v_and_b32_e32 v1, 0xffff0000, v7
9878 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v2
9879 ; GFX90A-NEXT:    v_add_f32_e32 v1, v1, v3
9880 ; GFX90A-NEXT:    v_bfe_u32 v5, v0, 16, 1
9881 ; GFX90A-NEXT:    v_bfe_u32 v8, v1, 16, 1
9882 ; GFX90A-NEXT:    v_or_b32_e32 v6, 0x400000, v0
9883 ; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9884 ; GFX90A-NEXT:    v_add3_u32 v5, v5, v0, s8
9885 ; GFX90A-NEXT:    v_add3_u32 v8, v8, v1, s8
9886 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9887 ; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
9888 ; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v5, v6, s[4:5]
9889 ; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
9890 ; GFX90A-NEXT:    v_perm_b32 v6, v1, v0, s9
9891 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[6:7], v[6:7] op_sel:[0,1]
9892 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
9893 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
9894 ; GFX90A-NEXT:    buffer_wbinvl1
9895 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v7
9896 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9897 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9898 ; GFX90A-NEXT:    s_cbranch_execnz .LBB29_1
9899 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
9900 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
9901 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
9903 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9904 ; GFX908:       ; %bb.0:
9905 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9906 ; GFX908-NEXT:    v_mov_b32_e32 v1, v0
9907 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
9908 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
9909 ; GFX908-NEXT:    s_add_i32 s4, s20, 0x400
9910 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
9911 ; GFX908-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9912 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
9913 ; GFX908-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
9914 ; GFX908-NEXT:    s_mov_b32 s9, 0x7060302
9915 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
9916 ; GFX908-NEXT:  .LBB29_1: ; %atomicrmw.start
9917 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
9918 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
9919 ; GFX908-NEXT:    v_mov_b32_e32 v6, v0
9920 ; GFX908-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
9921 ; GFX908-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
9922 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v2
9923 ; GFX908-NEXT:    v_add_f32_e32 v1, v1, v3
9924 ; GFX908-NEXT:    v_bfe_u32 v5, v0, 16, 1
9925 ; GFX908-NEXT:    v_bfe_u32 v8, v1, 16, 1
9926 ; GFX908-NEXT:    v_or_b32_e32 v7, 0x400000, v0
9927 ; GFX908-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9928 ; GFX908-NEXT:    v_add3_u32 v5, v5, v0, s8
9929 ; GFX908-NEXT:    v_add3_u32 v8, v8, v1, s8
9930 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9931 ; GFX908-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
9932 ; GFX908-NEXT:    v_cndmask_b32_e64 v0, v5, v7, s[4:5]
9933 ; GFX908-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
9934 ; GFX908-NEXT:    v_perm_b32 v5, v1, v0, s9
9935 ; GFX908-NEXT:    v_mov_b32_e32 v0, v5
9936 ; GFX908-NEXT:    v_mov_b32_e32 v1, v6
9937 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
9938 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
9939 ; GFX908-NEXT:    buffer_wbinvl1
9940 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v6
9941 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9942 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9943 ; GFX908-NEXT:    s_cbranch_execnz .LBB29_1
9944 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
9945 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
9946 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
9948 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9949 ; GFX8:       ; %bb.0:
9950 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9951 ; GFX8-NEXT:    v_mov_b32_e32 v1, v0
9952 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
9953 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
9954 ; GFX8-NEXT:    s_add_i32 s4, s20, 0x400
9955 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
9956 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
9957 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
9958 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
9959 ; GFX8-NEXT:  .LBB29_1: ; %atomicrmw.start
9960 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
9961 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
9962 ; GFX8-NEXT:    v_mov_b32_e32 v6, v0
9963 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
9964 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
9965 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
9966 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
9967 ; GFX8-NEXT:    v_bfe_u32 v5, v0, 16, 1
9968 ; GFX8-NEXT:    v_bfe_u32 v8, v1, 16, 1
9969 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v0
9970 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v1
9971 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
9972 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 0x7fff, v8
9973 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v1
9974 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
9975 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v0
9976 ; GFX8-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
9977 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
9978 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v5, v7, s[4:5]
9979 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
9980 ; GFX8-NEXT:    v_alignbit_b32 v5, v1, v0, 16
9981 ; GFX8-NEXT:    v_mov_b32_e32 v0, v5
9982 ; GFX8-NEXT:    v_mov_b32_e32 v1, v6
9983 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
9984 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
9985 ; GFX8-NEXT:    buffer_wbinvl1
9986 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v6
9987 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
9988 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
9989 ; GFX8-NEXT:    s_cbranch_execnz .LBB29_1
9990 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
9991 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
9992 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
9994 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
9995 ; GFX7:       ; %bb.0:
9996 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9997 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
9998 ; GFX7-NEXT:    buffer_load_dword v4, v2, s[16:19], 0 offen offset:1024
9999 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
10000 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10001 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10002 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
10003 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
10004 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10005 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
10006 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
10007 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
10008 ; GFX7-NEXT:    v_mov_b32_e32 v4, s6
10009 ; GFX7-NEXT:  .LBB29_1: ; %atomicrmw.start
10010 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
10011 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10012 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10013 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
10014 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
10015 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
10016 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v3
10017 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v2
10018 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v0, 16
10019 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v6
10020 ; GFX7-NEXT:    v_alignbit_b32 v0, v0, v5, 16
10021 ; GFX7-NEXT:    v_mov_b32_e32 v6, v1
10022 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
10023 ; GFX7-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10024 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
10025 ; GFX7-NEXT:    buffer_wbinvl1
10026 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
10027 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v5
10028 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
10029 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
10030 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
10031 ; GFX7-NEXT:    s_cbranch_execnz .LBB29_1
10032 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
10033 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
10034 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
10036 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset:
10037 ; GFX6:       ; %bb.0:
10038 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10039 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
10040 ; GFX6-NEXT:    buffer_load_dword v4, v2, s[16:19], 0 offen offset:1024
10041 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
10042 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10043 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10044 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
10045 ; GFX6-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
10046 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10047 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
10048 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
10049 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
10050 ; GFX6-NEXT:    v_mov_b32_e32 v4, s6
10051 ; GFX6-NEXT:  .LBB29_1: ; %atomicrmw.start
10052 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
10053 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10054 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10055 ; GFX6-NEXT:    s_waitcnt expcnt(0)
10056 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
10057 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
10058 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
10059 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v3
10060 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v2
10061 ; GFX6-NEXT:    v_alignbit_b32 v1, v1, v0, 16
10062 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, 16, v6
10063 ; GFX6-NEXT:    v_alignbit_b32 v0, v0, v5, 16
10064 ; GFX6-NEXT:    v_mov_b32_e32 v6, v1
10065 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
10066 ; GFX6-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10067 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
10068 ; GFX6-NEXT:    buffer_wbinvl1
10069 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
10070 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v5
10071 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
10072 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
10073 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
10074 ; GFX6-NEXT:    s_cbranch_execnz .LBB29_1
10075 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
10076 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
10077 ; GFX6-NEXT:    s_waitcnt expcnt(0)
10078 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
10079   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
10080   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst
10081   ret <2 x bfloat> %result
10084 define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset(ptr addrspace(7) inreg %ptr, <2 x bfloat> %val) {
10085 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10086 ; GFX12:       ; %bb.0:
10087 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
10088 ; GFX12-NEXT:    s_wait_expcnt 0x0
10089 ; GFX12-NEXT:    s_wait_samplecnt 0x0
10090 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
10091 ; GFX12-NEXT:    s_wait_kmcnt 0x0
10092 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
10093 ; GFX12-NEXT:    s_wait_storecnt 0x0
10094 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024
10095 ; GFX12-NEXT:    s_wait_storecnt 0x0
10096 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
10097 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
10099 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10100 ; GFX940:       ; %bb.0:
10101 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10102 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
10103 ; GFX940-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:1024
10104 ; GFX940-NEXT:    s_add_i32 s4, s16, 0x400
10105 ; GFX940-NEXT:    s_mov_b64 s[6:7], 0
10106 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
10107 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
10108 ; GFX940-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
10109 ; GFX940-NEXT:    s_mov_b32 s9, 0x7060302
10110 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
10111 ; GFX940-NEXT:  .LBB30_1: ; %atomicrmw.start
10112 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
10113 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
10114 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10115 ; GFX940-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10116 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v2
10117 ; GFX940-NEXT:    v_add_f32_e32 v5, v5, v3
10118 ; GFX940-NEXT:    v_bfe_u32 v6, v0, 16, 1
10119 ; GFX940-NEXT:    v_bfe_u32 v8, v5, 16, 1
10120 ; GFX940-NEXT:    v_or_b32_e32 v7, 0x400000, v0
10121 ; GFX940-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10122 ; GFX940-NEXT:    v_add3_u32 v6, v6, v0, s8
10123 ; GFX940-NEXT:    v_add3_u32 v8, v8, v5, s8
10124 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
10125 ; GFX940-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10126 ; GFX940-NEXT:    buffer_wbl2 sc1
10127 ; GFX940-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
10128 ; GFX940-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
10129 ; GFX940-NEXT:    v_perm_b32 v0, v5, v0, s9
10130 ; GFX940-NEXT:    v_mov_b64_e32 v[6:7], v[0:1]
10131 ; GFX940-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[0:3], 0 offen sc0
10132 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
10133 ; GFX940-NEXT:    buffer_inv sc1
10134 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
10135 ; GFX940-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10136 ; GFX940-NEXT:    v_mov_b32_e32 v1, v6
10137 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10138 ; GFX940-NEXT:    s_cbranch_execnz .LBB30_1
10139 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
10140 ; GFX940-NEXT:    s_or_b64 exec, exec, s[6:7]
10141 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
10143 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10144 ; GFX11:       ; %bb.0:
10145 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10146 ; GFX11-NEXT:    v_dual_mov_b32 v1, s16 :: v_dual_lshlrev_b32 v2, 16, v0
10147 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
10148 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
10149 ; GFX11-NEXT:    v_dual_mov_b32 v4, s4 :: v_dual_and_b32 v3, 0xffff0000, v0
10150 ; GFX11-NEXT:    buffer_load_b32 v1, v1, s[0:3], 0 offen offset:1024
10151 ; GFX11-NEXT:    s_mov_b32 s5, 0
10152 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
10153 ; GFX11-NEXT:    .p2align 6
10154 ; GFX11-NEXT:  .LBB30_1: ; %atomicrmw.start
10155 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
10156 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10157 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10158 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10159 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
10160 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
10161 ; GFX11-NEXT:    v_dual_add_f32 v5, v5, v3 :: v_dual_add_f32 v0, v0, v2
10162 ; GFX11-NEXT:    v_bfe_u32 v7, v5, 16, 1
10163 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
10164 ; GFX11-NEXT:    v_bfe_u32 v6, v0, 16, 1
10165 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
10166 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10167 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
10168 ; GFX11-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
10169 ; GFX11-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
10170 ; GFX11-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
10171 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
10172 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
10173 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
10174 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
10175 ; GFX11-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
10176 ; GFX11-NEXT:    v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v5, v0
10177 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[5:6], v4, s[0:3], 0 offen glc
10178 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10179 ; GFX11-NEXT:    buffer_gl1_inv
10180 ; GFX11-NEXT:    buffer_gl0_inv
10181 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
10182 ; GFX11-NEXT:    v_mov_b32_e32 v1, v5
10183 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
10184 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
10185 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
10186 ; GFX11-NEXT:    s_cbranch_execnz .LBB30_1
10187 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
10188 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
10189 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
10190 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10192 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10193 ; GFX10:       ; %bb.0:
10194 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10195 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
10196 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
10197 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
10198 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
10199 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
10200 ; GFX10-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
10201 ; GFX10-NEXT:    s_mov_b32 s5, 0
10202 ; GFX10-NEXT:  .LBB30_1: ; %atomicrmw.start
10203 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
10204 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10205 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10206 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10207 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
10208 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
10209 ; GFX10-NEXT:    v_add_f32_e32 v5, v5, v3
10210 ; GFX10-NEXT:    v_bfe_u32 v6, v0, 16, 1
10211 ; GFX10-NEXT:    v_bfe_u32 v7, v5, 16, 1
10212 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
10213 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10214 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
10215 ; GFX10-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
10216 ; GFX10-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
10217 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
10218 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
10219 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
10220 ; GFX10-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
10221 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
10222 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
10223 ; GFX10-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10224 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10225 ; GFX10-NEXT:    buffer_gl1_inv
10226 ; GFX10-NEXT:    buffer_gl0_inv
10227 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
10228 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
10229 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
10230 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
10231 ; GFX10-NEXT:    s_cbranch_execnz .LBB30_1
10232 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
10233 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
10234 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10236 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10237 ; GFX90A:       ; %bb.0:
10238 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10239 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
10240 ; GFX90A-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
10241 ; GFX90A-NEXT:    s_add_i32 s4, s20, 0x400
10242 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
10243 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
10244 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
10245 ; GFX90A-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
10246 ; GFX90A-NEXT:    s_mov_b32 s9, 0x7060302
10247 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
10248 ; GFX90A-NEXT:  .LBB30_1: ; %atomicrmw.start
10249 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
10250 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
10251 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10252 ; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10253 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v2
10254 ; GFX90A-NEXT:    v_add_f32_e32 v5, v5, v3
10255 ; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 1
10256 ; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 1
10257 ; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v0
10258 ; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10259 ; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s8
10260 ; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s8
10261 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
10262 ; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10263 ; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
10264 ; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
10265 ; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s9
10266 ; GFX90A-NEXT:    v_pk_mov_b32 v[6:7], v[0:1], v[0:1] op_sel:[0,1]
10267 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[16:19], 0 offen glc
10268 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
10269 ; GFX90A-NEXT:    buffer_wbinvl1
10270 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
10271 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10272 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v6
10273 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10274 ; GFX90A-NEXT:    s_cbranch_execnz .LBB30_1
10275 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
10276 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
10277 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
10279 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10280 ; GFX908:       ; %bb.0:
10281 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10282 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
10283 ; GFX908-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
10284 ; GFX908-NEXT:    s_add_i32 s4, s20, 0x400
10285 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
10286 ; GFX908-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
10287 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
10288 ; GFX908-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
10289 ; GFX908-NEXT:    s_mov_b32 s9, 0x7060302
10290 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
10291 ; GFX908-NEXT:  .LBB30_1: ; %atomicrmw.start
10292 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
10293 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
10294 ; GFX908-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10295 ; GFX908-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10296 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v2
10297 ; GFX908-NEXT:    v_add_f32_e32 v5, v5, v3
10298 ; GFX908-NEXT:    v_bfe_u32 v6, v0, 16, 1
10299 ; GFX908-NEXT:    v_bfe_u32 v8, v5, 16, 1
10300 ; GFX908-NEXT:    v_or_b32_e32 v7, 0x400000, v0
10301 ; GFX908-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10302 ; GFX908-NEXT:    v_add3_u32 v6, v6, v0, s8
10303 ; GFX908-NEXT:    v_add3_u32 v8, v8, v5, s8
10304 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
10305 ; GFX908-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10306 ; GFX908-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
10307 ; GFX908-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
10308 ; GFX908-NEXT:    v_perm_b32 v0, v5, v0, s9
10309 ; GFX908-NEXT:    v_mov_b32_e32 v6, v1
10310 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
10311 ; GFX908-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10312 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
10313 ; GFX908-NEXT:    buffer_wbinvl1
10314 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
10315 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10316 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
10317 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10318 ; GFX908-NEXT:    s_cbranch_execnz .LBB30_1
10319 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
10320 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
10321 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
10323 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10324 ; GFX8:       ; %bb.0:
10325 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10326 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
10327 ; GFX8-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
10328 ; GFX8-NEXT:    s_add_i32 s4, s20, 0x400
10329 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
10330 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
10331 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
10332 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
10333 ; GFX8-NEXT:  .LBB30_1: ; %atomicrmw.start
10334 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
10335 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
10336 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10337 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10338 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
10339 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v3
10340 ; GFX8-NEXT:    v_bfe_u32 v6, v0, 16, 1
10341 ; GFX8-NEXT:    v_bfe_u32 v8, v5, 16, 1
10342 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v0
10343 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v5
10344 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 0x7fff, v6
10345 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 0x7fff, v8
10346 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10347 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
10348 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v0
10349 ; GFX8-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10350 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
10351 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
10352 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
10353 ; GFX8-NEXT:    v_alignbit_b32 v0, v5, v0, 16
10354 ; GFX8-NEXT:    v_mov_b32_e32 v6, v1
10355 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
10356 ; GFX8-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10357 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
10358 ; GFX8-NEXT:    buffer_wbinvl1
10359 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
10360 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10361 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
10362 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10363 ; GFX8-NEXT:    s_cbranch_execnz .LBB30_1
10364 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
10365 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
10366 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
10368 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10369 ; GFX7:       ; %bb.0:
10370 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10371 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
10372 ; GFX7-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
10373 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
10374 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10375 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10376 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
10377 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10378 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10379 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
10380 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
10381 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
10382 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
10383 ; GFX7-NEXT:  .LBB30_1: ; %atomicrmw.start
10384 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
10385 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
10386 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
10387 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
10388 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
10389 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
10390 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v1
10391 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v0
10392 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v4, 16
10393 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
10394 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v5, 16
10395 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
10396 ; GFX7-NEXT:    v_mov_b32_e32 v5, v3
10397 ; GFX7-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
10398 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
10399 ; GFX7-NEXT:    buffer_wbinvl1
10400 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
10401 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
10402 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
10403 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
10404 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
10405 ; GFX7-NEXT:    s_cbranch_execnz .LBB30_1
10406 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
10407 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
10408 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
10410 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset:
10411 ; GFX6:       ; %bb.0:
10412 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10413 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
10414 ; GFX6-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
10415 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
10416 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10417 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10418 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
10419 ; GFX6-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
10420 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
10421 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
10422 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
10423 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
10424 ; GFX6-NEXT:    v_mov_b32_e32 v2, s6
10425 ; GFX6-NEXT:  .LBB30_1: ; %atomicrmw.start
10426 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
10427 ; GFX6-NEXT:    v_mul_f32_e32 v3, 1.0, v3
10428 ; GFX6-NEXT:    v_mul_f32_e32 v4, 1.0, v4
10429 ; GFX6-NEXT:    s_waitcnt expcnt(0)
10430 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
10431 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
10432 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
10433 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v1
10434 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v0
10435 ; GFX6-NEXT:    v_alignbit_b32 v4, v3, v4, 16
10436 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
10437 ; GFX6-NEXT:    v_alignbit_b32 v3, v3, v5, 16
10438 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
10439 ; GFX6-NEXT:    v_mov_b32_e32 v5, v3
10440 ; GFX6-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
10441 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
10442 ; GFX6-NEXT:    buffer_wbinvl1
10443 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
10444 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
10445 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
10446 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
10447 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
10448 ; GFX6-NEXT:    s_cbranch_execnz .LBB30_1
10449 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
10450 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
10451 ; GFX6-NEXT:    s_waitcnt expcnt(0)
10452 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
10453   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
10454   %unused = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst
10455   ret void
10458 define <2 x bfloat> @buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, <2 x bfloat> %val) #0 {
10459 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10460 ; GFX12:       ; %bb.0:
10461 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
10462 ; GFX12-NEXT:    s_wait_expcnt 0x0
10463 ; GFX12-NEXT:    s_wait_samplecnt 0x0
10464 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
10465 ; GFX12-NEXT:    s_wait_kmcnt 0x0
10466 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
10467 ; GFX12-NEXT:    s_wait_storecnt 0x0
10468 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
10469 ; GFX12-NEXT:    s_wait_loadcnt 0x0
10470 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
10471 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
10473 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10474 ; GFX940:       ; %bb.0:
10475 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10476 ; GFX940-NEXT:    v_mov_b32_e32 v1, v0
10477 ; GFX940-NEXT:    v_mov_b32_e32 v0, s16
10478 ; GFX940-NEXT:    buffer_load_dword v0, v0, s[0:3], 0 offen offset:1024
10479 ; GFX940-NEXT:    s_add_i32 s4, s16, 0x400
10480 ; GFX940-NEXT:    s_mov_b64 s[6:7], 0
10481 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
10482 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
10483 ; GFX940-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10484 ; GFX940-NEXT:    s_mov_b32 s9, 0x7060302
10485 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
10486 ; GFX940-NEXT:  .LBB31_1: ; %atomicrmw.start
10487 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
10488 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
10489 ; GFX940-NEXT:    v_mov_b32_e32 v7, v0
10490 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
10491 ; GFX940-NEXT:    v_and_b32_e32 v1, 0xffff0000, v7
10492 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v2
10493 ; GFX940-NEXT:    v_add_f32_e32 v1, v1, v3
10494 ; GFX940-NEXT:    v_bfe_u32 v5, v0, 16, 1
10495 ; GFX940-NEXT:    v_bfe_u32 v8, v1, 16, 1
10496 ; GFX940-NEXT:    v_or_b32_e32 v6, 0x400000, v0
10497 ; GFX940-NEXT:    v_or_b32_e32 v9, 0x400000, v1
10498 ; GFX940-NEXT:    v_add3_u32 v5, v5, v0, s8
10499 ; GFX940-NEXT:    v_add3_u32 v8, v8, v1, s8
10500 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
10501 ; GFX940-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10502 ; GFX940-NEXT:    buffer_wbl2 sc1
10503 ; GFX940-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
10504 ; GFX940-NEXT:    v_cndmask_b32_e64 v0, v5, v6, s[4:5]
10505 ; GFX940-NEXT:    v_perm_b32 v6, v1, v0, s9
10506 ; GFX940-NEXT:    v_mov_b64_e32 v[0:1], v[6:7]
10507 ; GFX940-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[0:3], 0 offen sc0
10508 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
10509 ; GFX940-NEXT:    buffer_inv sc1
10510 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v7
10511 ; GFX940-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10512 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10513 ; GFX940-NEXT:    s_cbranch_execnz .LBB31_1
10514 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
10515 ; GFX940-NEXT:    s_or_b64 exec, exec, s[6:7]
10516 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
10518 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10519 ; GFX11:       ; %bb.0:
10520 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10521 ; GFX11-NEXT:    v_dual_mov_b32 v1, v0 :: v_dual_mov_b32 v0, s16
10522 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
10523 ; GFX11-NEXT:    s_mov_b32 s5, 0
10524 ; GFX11-NEXT:    v_mov_b32_e32 v4, s4
10525 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
10526 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
10527 ; GFX11-NEXT:    buffer_load_b32 v0, v0, s[0:3], 0 offen offset:1024
10528 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10529 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
10530 ; GFX11-NEXT:    .p2align 6
10531 ; GFX11-NEXT:  .LBB31_1: ; %atomicrmw.start
10532 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
10533 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10534 ; GFX11-NEXT:    v_mov_b32_e32 v6, v0
10535 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
10536 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
10537 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
10538 ; GFX11-NEXT:    v_add_f32_e32 v1, v1, v3
10539 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
10540 ; GFX11-NEXT:    v_bfe_u32 v7, v1, 16, 1
10541 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v1
10542 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
10543 ; GFX11-NEXT:    v_add3_u32 v7, v7, v1, 0x7fff
10544 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
10545 ; GFX11-NEXT:    v_dual_cndmask_b32 v1, v7, v9 :: v_dual_lshlrev_b32 v0, 16, v6
10546 ; GFX11-NEXT:    v_add_f32_e32 v0, v0, v2
10547 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
10548 ; GFX11-NEXT:    v_bfe_u32 v5, v0, 16, 1
10549 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
10550 ; GFX11-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
10551 ; GFX11-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
10552 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
10553 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v5, v8, s4
10554 ; GFX11-NEXT:    v_perm_b32 v5, v1, v0, 0x7060302
10555 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
10556 ; GFX11-NEXT:    v_dual_mov_b32 v0, v5 :: v_dual_mov_b32 v1, v6
10557 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[0:1], v4, s[0:3], 0 offen glc
10558 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10559 ; GFX11-NEXT:    buffer_gl1_inv
10560 ; GFX11-NEXT:    buffer_gl0_inv
10561 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v6
10562 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
10563 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
10564 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
10565 ; GFX11-NEXT:    s_cbranch_execnz .LBB31_1
10566 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
10567 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
10568 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
10569 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10571 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10572 ; GFX10:       ; %bb.0:
10573 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10574 ; GFX10-NEXT:    v_mov_b32_e32 v1, v0
10575 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
10576 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
10577 ; GFX10-NEXT:    s_mov_b32 s5, 0
10578 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
10579 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
10580 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
10581 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10582 ; GFX10-NEXT:  .LBB31_1: ; %atomicrmw.start
10583 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
10584 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10585 ; GFX10-NEXT:    v_mov_b32_e32 v6, v0
10586 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
10587 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
10588 ; GFX10-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
10589 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
10590 ; GFX10-NEXT:    v_add_f32_e32 v1, v1, v3
10591 ; GFX10-NEXT:    v_bfe_u32 v5, v0, 16, 1
10592 ; GFX10-NEXT:    v_bfe_u32 v7, v1, 16, 1
10593 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
10594 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v1
10595 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v1, v1
10596 ; GFX10-NEXT:    v_add3_u32 v5, v5, v0, 0x7fff
10597 ; GFX10-NEXT:    v_add3_u32 v7, v7, v1, 0x7fff
10598 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
10599 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v7, v9, vcc_lo
10600 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v5, v8, s4
10601 ; GFX10-NEXT:    v_perm_b32 v5, v1, v0, 0x7060302
10602 ; GFX10-NEXT:    v_mov_b32_e32 v0, v5
10603 ; GFX10-NEXT:    v_mov_b32_e32 v1, v6
10604 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
10605 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10606 ; GFX10-NEXT:    buffer_gl1_inv
10607 ; GFX10-NEXT:    buffer_gl0_inv
10608 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v6
10609 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
10610 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
10611 ; GFX10-NEXT:    s_cbranch_execnz .LBB31_1
10612 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
10613 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
10614 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10616 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10617 ; GFX90A:       ; %bb.0:
10618 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10619 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
10620 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
10621 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
10622 ; GFX90A-NEXT:    s_add_i32 s4, s20, 0x400
10623 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
10624 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
10625 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
10626 ; GFX90A-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10627 ; GFX90A-NEXT:    s_mov_b32 s9, 0x7060302
10628 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
10629 ; GFX90A-NEXT:  .LBB31_1: ; %atomicrmw.start
10630 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
10631 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
10632 ; GFX90A-NEXT:    v_mov_b32_e32 v7, v0
10633 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
10634 ; GFX90A-NEXT:    v_and_b32_e32 v1, 0xffff0000, v7
10635 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v2
10636 ; GFX90A-NEXT:    v_add_f32_e32 v1, v1, v3
10637 ; GFX90A-NEXT:    v_bfe_u32 v5, v0, 16, 1
10638 ; GFX90A-NEXT:    v_bfe_u32 v8, v1, 16, 1
10639 ; GFX90A-NEXT:    v_or_b32_e32 v6, 0x400000, v0
10640 ; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v1
10641 ; GFX90A-NEXT:    v_add3_u32 v5, v5, v0, s8
10642 ; GFX90A-NEXT:    v_add3_u32 v8, v8, v1, s8
10643 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
10644 ; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10645 ; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v5, v6, s[4:5]
10646 ; GFX90A-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
10647 ; GFX90A-NEXT:    v_perm_b32 v6, v1, v0, s9
10648 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[6:7], v[6:7] op_sel:[0,1]
10649 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
10650 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
10651 ; GFX90A-NEXT:    buffer_wbinvl1
10652 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v7
10653 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10654 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10655 ; GFX90A-NEXT:    s_cbranch_execnz .LBB31_1
10656 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
10657 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
10658 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
10660 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10661 ; GFX908:       ; %bb.0:
10662 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10663 ; GFX908-NEXT:    v_mov_b32_e32 v1, v0
10664 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
10665 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
10666 ; GFX908-NEXT:    s_add_i32 s4, s20, 0x400
10667 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
10668 ; GFX908-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
10669 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
10670 ; GFX908-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10671 ; GFX908-NEXT:    s_mov_b32 s9, 0x7060302
10672 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
10673 ; GFX908-NEXT:  .LBB31_1: ; %atomicrmw.start
10674 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
10675 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
10676 ; GFX908-NEXT:    v_mov_b32_e32 v6, v0
10677 ; GFX908-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
10678 ; GFX908-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
10679 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v2
10680 ; GFX908-NEXT:    v_add_f32_e32 v1, v1, v3
10681 ; GFX908-NEXT:    v_bfe_u32 v5, v0, 16, 1
10682 ; GFX908-NEXT:    v_bfe_u32 v8, v1, 16, 1
10683 ; GFX908-NEXT:    v_or_b32_e32 v7, 0x400000, v0
10684 ; GFX908-NEXT:    v_or_b32_e32 v9, 0x400000, v1
10685 ; GFX908-NEXT:    v_add3_u32 v5, v5, v0, s8
10686 ; GFX908-NEXT:    v_add3_u32 v8, v8, v1, s8
10687 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
10688 ; GFX908-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10689 ; GFX908-NEXT:    v_cndmask_b32_e64 v0, v5, v7, s[4:5]
10690 ; GFX908-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
10691 ; GFX908-NEXT:    v_perm_b32 v5, v1, v0, s9
10692 ; GFX908-NEXT:    v_mov_b32_e32 v0, v5
10693 ; GFX908-NEXT:    v_mov_b32_e32 v1, v6
10694 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
10695 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
10696 ; GFX908-NEXT:    buffer_wbinvl1
10697 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v6
10698 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10699 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10700 ; GFX908-NEXT:    s_cbranch_execnz .LBB31_1
10701 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
10702 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
10703 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
10705 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10706 ; GFX8:       ; %bb.0:
10707 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10708 ; GFX8-NEXT:    v_mov_b32_e32 v1, v0
10709 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
10710 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
10711 ; GFX8-NEXT:    s_add_i32 s4, s20, 0x400
10712 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
10713 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v1
10714 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10715 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
10716 ; GFX8-NEXT:  .LBB31_1: ; %atomicrmw.start
10717 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
10718 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
10719 ; GFX8-NEXT:    v_mov_b32_e32 v6, v0
10720 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v6
10721 ; GFX8-NEXT:    v_and_b32_e32 v1, 0xffff0000, v6
10722 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
10723 ; GFX8-NEXT:    v_add_f32_e32 v1, v1, v3
10724 ; GFX8-NEXT:    v_bfe_u32 v5, v0, 16, 1
10725 ; GFX8-NEXT:    v_bfe_u32 v8, v1, 16, 1
10726 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v0
10727 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v1
10728 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, 0x7fff, v5
10729 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 0x7fff, v8
10730 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v1
10731 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v1, v1
10732 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v0
10733 ; GFX8-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10734 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
10735 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v5, v7, s[4:5]
10736 ; GFX8-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
10737 ; GFX8-NEXT:    v_alignbit_b32 v5, v1, v0, 16
10738 ; GFX8-NEXT:    v_mov_b32_e32 v0, v5
10739 ; GFX8-NEXT:    v_mov_b32_e32 v1, v6
10740 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v4, s[16:19], 0 offen glc
10741 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
10742 ; GFX8-NEXT:    buffer_wbinvl1
10743 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v6
10744 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10745 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10746 ; GFX8-NEXT:    s_cbranch_execnz .LBB31_1
10747 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
10748 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
10749 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
10751 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10752 ; GFX7:       ; %bb.0:
10753 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10754 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
10755 ; GFX7-NEXT:    buffer_load_dword v4, v2, s[16:19], 0 offen offset:1024
10756 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
10757 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10758 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10759 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
10760 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
10761 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10762 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
10763 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
10764 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
10765 ; GFX7-NEXT:    v_mov_b32_e32 v4, s6
10766 ; GFX7-NEXT:  .LBB31_1: ; %atomicrmw.start
10767 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
10768 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10769 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10770 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
10771 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
10772 ; GFX7-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
10773 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v3
10774 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v2
10775 ; GFX7-NEXT:    v_alignbit_b32 v1, v1, v0, 16
10776 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 16, v6
10777 ; GFX7-NEXT:    v_alignbit_b32 v0, v0, v5, 16
10778 ; GFX7-NEXT:    v_mov_b32_e32 v6, v1
10779 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
10780 ; GFX7-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10781 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
10782 ; GFX7-NEXT:    buffer_wbinvl1
10783 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
10784 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v5
10785 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
10786 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
10787 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
10788 ; GFX7-NEXT:    s_cbranch_execnz .LBB31_1
10789 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
10790 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
10791 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
10793 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_ret_v2bf16__offset__amdgpu_no_remote_memory:
10794 ; GFX6:       ; %bb.0:
10795 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10796 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
10797 ; GFX6-NEXT:    buffer_load_dword v4, v2, s[16:19], 0 offen offset:1024
10798 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
10799 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10800 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10801 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
10802 ; GFX6-NEXT:    v_and_b32_e32 v2, 0xffff0000, v0
10803 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v1
10804 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
10805 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v4
10806 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v4
10807 ; GFX6-NEXT:    v_mov_b32_e32 v4, s6
10808 ; GFX6-NEXT:  .LBB31_1: ; %atomicrmw.start
10809 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
10810 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
10811 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
10812 ; GFX6-NEXT:    s_waitcnt expcnt(0)
10813 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v1
10814 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v0
10815 ; GFX6-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
10816 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v3
10817 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v2
10818 ; GFX6-NEXT:    v_alignbit_b32 v1, v1, v0, 16
10819 ; GFX6-NEXT:    v_lshrrev_b32_e32 v0, 16, v6
10820 ; GFX6-NEXT:    v_alignbit_b32 v0, v0, v5, 16
10821 ; GFX6-NEXT:    v_mov_b32_e32 v6, v1
10822 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
10823 ; GFX6-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10824 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
10825 ; GFX6-NEXT:    buffer_wbinvl1
10826 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
10827 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v5
10828 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
10829 ; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
10830 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
10831 ; GFX6-NEXT:    s_cbranch_execnz .LBB31_1
10832 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
10833 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
10834 ; GFX6-NEXT:    s_waitcnt expcnt(0)
10835 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
10836   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
10837   %result = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0
10838   ret <2 x bfloat> %result
10841 define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, <2 x bfloat> %val) #0 {
10842 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
10843 ; GFX12:       ; %bb.0:
10844 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
10845 ; GFX12-NEXT:    s_wait_expcnt 0x0
10846 ; GFX12-NEXT:    s_wait_samplecnt 0x0
10847 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
10848 ; GFX12-NEXT:    s_wait_kmcnt 0x0
10849 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
10850 ; GFX12-NEXT:    s_wait_storecnt 0x0
10851 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024
10852 ; GFX12-NEXT:    s_wait_storecnt 0x0
10853 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
10854 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
10856 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
10857 ; GFX940:       ; %bb.0:
10858 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10859 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
10860 ; GFX940-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:1024
10861 ; GFX940-NEXT:    s_add_i32 s4, s16, 0x400
10862 ; GFX940-NEXT:    s_mov_b64 s[6:7], 0
10863 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
10864 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
10865 ; GFX940-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
10866 ; GFX940-NEXT:    s_mov_b32 s9, 0x7060302
10867 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
10868 ; GFX940-NEXT:  .LBB32_1: ; %atomicrmw.start
10869 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
10870 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
10871 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10872 ; GFX940-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10873 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v2
10874 ; GFX940-NEXT:    v_add_f32_e32 v5, v5, v3
10875 ; GFX940-NEXT:    v_bfe_u32 v6, v0, 16, 1
10876 ; GFX940-NEXT:    v_bfe_u32 v8, v5, 16, 1
10877 ; GFX940-NEXT:    v_or_b32_e32 v7, 0x400000, v0
10878 ; GFX940-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10879 ; GFX940-NEXT:    v_add3_u32 v6, v6, v0, s8
10880 ; GFX940-NEXT:    v_add3_u32 v8, v8, v5, s8
10881 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
10882 ; GFX940-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
10883 ; GFX940-NEXT:    buffer_wbl2 sc1
10884 ; GFX940-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
10885 ; GFX940-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
10886 ; GFX940-NEXT:    v_perm_b32 v0, v5, v0, s9
10887 ; GFX940-NEXT:    v_mov_b64_e32 v[6:7], v[0:1]
10888 ; GFX940-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[0:3], 0 offen sc0
10889 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
10890 ; GFX940-NEXT:    buffer_inv sc1
10891 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
10892 ; GFX940-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
10893 ; GFX940-NEXT:    v_mov_b32_e32 v1, v6
10894 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[6:7]
10895 ; GFX940-NEXT:    s_cbranch_execnz .LBB32_1
10896 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
10897 ; GFX940-NEXT:    s_or_b64 exec, exec, s[6:7]
10898 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
10900 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
10901 ; GFX11:       ; %bb.0:
10902 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10903 ; GFX11-NEXT:    v_dual_mov_b32 v1, s16 :: v_dual_lshlrev_b32 v2, 16, v0
10904 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
10905 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
10906 ; GFX11-NEXT:    v_dual_mov_b32 v4, s4 :: v_dual_and_b32 v3, 0xffff0000, v0
10907 ; GFX11-NEXT:    buffer_load_b32 v1, v1, s[0:3], 0 offen offset:1024
10908 ; GFX11-NEXT:    s_mov_b32 s5, 0
10909 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
10910 ; GFX11-NEXT:    .p2align 6
10911 ; GFX11-NEXT:  .LBB32_1: ; %atomicrmw.start
10912 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
10913 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10914 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10915 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10916 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
10917 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
10918 ; GFX11-NEXT:    v_dual_add_f32 v5, v5, v3 :: v_dual_add_f32 v0, v0, v2
10919 ; GFX11-NEXT:    v_bfe_u32 v7, v5, 16, 1
10920 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
10921 ; GFX11-NEXT:    v_bfe_u32 v6, v0, 16, 1
10922 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
10923 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10924 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
10925 ; GFX11-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
10926 ; GFX11-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
10927 ; GFX11-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
10928 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
10929 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
10930 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
10931 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
10932 ; GFX11-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
10933 ; GFX11-NEXT:    v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v5, v0
10934 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[5:6], v4, s[0:3], 0 offen glc
10935 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
10936 ; GFX11-NEXT:    buffer_gl1_inv
10937 ; GFX11-NEXT:    buffer_gl0_inv
10938 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
10939 ; GFX11-NEXT:    v_mov_b32_e32 v1, v5
10940 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
10941 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
10942 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
10943 ; GFX11-NEXT:    s_cbranch_execnz .LBB32_1
10944 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
10945 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
10946 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
10947 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
10949 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
10950 ; GFX10:       ; %bb.0:
10951 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10952 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
10953 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
10954 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
10955 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
10956 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
10957 ; GFX10-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
10958 ; GFX10-NEXT:    s_mov_b32 s5, 0
10959 ; GFX10-NEXT:  .LBB32_1: ; %atomicrmw.start
10960 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
10961 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10962 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
10963 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
10964 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
10965 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
10966 ; GFX10-NEXT:    v_add_f32_e32 v5, v5, v3
10967 ; GFX10-NEXT:    v_bfe_u32 v6, v0, 16, 1
10968 ; GFX10-NEXT:    v_bfe_u32 v7, v5, 16, 1
10969 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
10970 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v5
10971 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
10972 ; GFX10-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
10973 ; GFX10-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
10974 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
10975 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
10976 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
10977 ; GFX10-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
10978 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
10979 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
10980 ; GFX10-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
10981 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
10982 ; GFX10-NEXT:    buffer_gl1_inv
10983 ; GFX10-NEXT:    buffer_gl0_inv
10984 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
10985 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
10986 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
10987 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
10988 ; GFX10-NEXT:    s_cbranch_execnz .LBB32_1
10989 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
10990 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
10991 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
10993 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
10994 ; GFX90A:       ; %bb.0:
10995 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10996 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
10997 ; GFX90A-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
10998 ; GFX90A-NEXT:    s_add_i32 s4, s20, 0x400
10999 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
11000 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11001 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
11002 ; GFX90A-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11003 ; GFX90A-NEXT:    s_mov_b32 s9, 0x7060302
11004 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
11005 ; GFX90A-NEXT:  .LBB32_1: ; %atomicrmw.start
11006 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
11007 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11008 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11009 ; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11010 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v2
11011 ; GFX90A-NEXT:    v_add_f32_e32 v5, v5, v3
11012 ; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 1
11013 ; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 1
11014 ; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v0
11015 ; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11016 ; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s8
11017 ; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s8
11018 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11019 ; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
11020 ; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
11021 ; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
11022 ; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s9
11023 ; GFX90A-NEXT:    v_pk_mov_b32 v[6:7], v[0:1], v[0:1] op_sel:[0,1]
11024 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[16:19], 0 offen glc
11025 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11026 ; GFX90A-NEXT:    buffer_wbinvl1
11027 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
11028 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
11029 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v6
11030 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
11031 ; GFX90A-NEXT:    s_cbranch_execnz .LBB32_1
11032 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
11033 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
11034 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
11036 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
11037 ; GFX908:       ; %bb.0:
11038 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11039 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
11040 ; GFX908-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
11041 ; GFX908-NEXT:    s_add_i32 s4, s20, 0x400
11042 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
11043 ; GFX908-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11044 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
11045 ; GFX908-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11046 ; GFX908-NEXT:    s_mov_b32 s9, 0x7060302
11047 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
11048 ; GFX908-NEXT:  .LBB32_1: ; %atomicrmw.start
11049 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
11050 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
11051 ; GFX908-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11052 ; GFX908-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11053 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v2
11054 ; GFX908-NEXT:    v_add_f32_e32 v5, v5, v3
11055 ; GFX908-NEXT:    v_bfe_u32 v6, v0, 16, 1
11056 ; GFX908-NEXT:    v_bfe_u32 v8, v5, 16, 1
11057 ; GFX908-NEXT:    v_or_b32_e32 v7, 0x400000, v0
11058 ; GFX908-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11059 ; GFX908-NEXT:    v_add3_u32 v6, v6, v0, s8
11060 ; GFX908-NEXT:    v_add3_u32 v8, v8, v5, s8
11061 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11062 ; GFX908-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
11063 ; GFX908-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
11064 ; GFX908-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
11065 ; GFX908-NEXT:    v_perm_b32 v0, v5, v0, s9
11066 ; GFX908-NEXT:    v_mov_b32_e32 v6, v1
11067 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
11068 ; GFX908-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
11069 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
11070 ; GFX908-NEXT:    buffer_wbinvl1
11071 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
11072 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
11073 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
11074 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
11075 ; GFX908-NEXT:    s_cbranch_execnz .LBB32_1
11076 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
11077 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
11078 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
11080 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
11081 ; GFX8:       ; %bb.0:
11082 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11083 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
11084 ; GFX8-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
11085 ; GFX8-NEXT:    s_add_i32 s4, s20, 0x400
11086 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
11087 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11088 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11089 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
11090 ; GFX8-NEXT:  .LBB32_1: ; %atomicrmw.start
11091 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
11092 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
11093 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11094 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11095 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
11096 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v3
11097 ; GFX8-NEXT:    v_bfe_u32 v6, v0, 16, 1
11098 ; GFX8-NEXT:    v_bfe_u32 v8, v5, 16, 1
11099 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v0
11100 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v5
11101 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 0x7fff, v6
11102 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 0x7fff, v8
11103 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11104 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11105 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v0
11106 ; GFX8-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
11107 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
11108 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
11109 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
11110 ; GFX8-NEXT:    v_alignbit_b32 v0, v5, v0, 16
11111 ; GFX8-NEXT:    v_mov_b32_e32 v6, v1
11112 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
11113 ; GFX8-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
11114 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
11115 ; GFX8-NEXT:    buffer_wbinvl1
11116 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
11117 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
11118 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
11119 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
11120 ; GFX8-NEXT:    s_cbranch_execnz .LBB32_1
11121 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
11122 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
11123 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
11125 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
11126 ; GFX7:       ; %bb.0:
11127 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11128 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
11129 ; GFX7-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
11130 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
11131 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
11132 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
11133 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
11134 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11135 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11136 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11137 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
11138 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
11139 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
11140 ; GFX7-NEXT:  .LBB32_1: ; %atomicrmw.start
11141 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
11142 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
11143 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
11144 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
11145 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
11146 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
11147 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v1
11148 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v0
11149 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v4, 16
11150 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
11151 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v5, 16
11152 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
11153 ; GFX7-NEXT:    v_mov_b32_e32 v5, v3
11154 ; GFX7-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
11155 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11156 ; GFX7-NEXT:    buffer_wbinvl1
11157 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
11158 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
11159 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11160 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
11161 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11162 ; GFX7-NEXT:    s_cbranch_execnz .LBB32_1
11163 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
11164 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
11165 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
11167 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_remote_memory:
11168 ; GFX6:       ; %bb.0:
11169 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11170 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
11171 ; GFX6-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
11172 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
11173 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
11174 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
11175 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
11176 ; GFX6-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11177 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11178 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
11179 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
11180 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
11181 ; GFX6-NEXT:    v_mov_b32_e32 v2, s6
11182 ; GFX6-NEXT:  .LBB32_1: ; %atomicrmw.start
11183 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
11184 ; GFX6-NEXT:    v_mul_f32_e32 v3, 1.0, v3
11185 ; GFX6-NEXT:    v_mul_f32_e32 v4, 1.0, v4
11186 ; GFX6-NEXT:    s_waitcnt expcnt(0)
11187 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
11188 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
11189 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
11190 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v1
11191 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v0
11192 ; GFX6-NEXT:    v_alignbit_b32 v4, v3, v4, 16
11193 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
11194 ; GFX6-NEXT:    v_alignbit_b32 v3, v3, v5, 16
11195 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
11196 ; GFX6-NEXT:    v_mov_b32_e32 v5, v3
11197 ; GFX6-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
11198 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
11199 ; GFX6-NEXT:    buffer_wbinvl1
11200 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
11201 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
11202 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11203 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
11204 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11205 ; GFX6-NEXT:    s_cbranch_execnz .LBB32_1
11206 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
11207 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
11208 ; GFX6-NEXT:    s_waitcnt expcnt(0)
11209 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
11210   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
11211   %unused = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst, !amdgpu.no.remote.memory !0
11212   ret void
11215 define void @buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory(ptr addrspace(7) inreg %ptr, <2 x bfloat> %val) #0 {
11216 ; GFX12-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11217 ; GFX12:       ; %bb.0:
11218 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
11219 ; GFX12-NEXT:    s_wait_expcnt 0x0
11220 ; GFX12-NEXT:    s_wait_samplecnt 0x0
11221 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
11222 ; GFX12-NEXT:    s_wait_kmcnt 0x0
11223 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
11224 ; GFX12-NEXT:    s_wait_storecnt 0x0
11225 ; GFX12-NEXT:    buffer_atomic_pk_add_bf16 v0, v1, s[0:3], null offen offset:1024
11226 ; GFX12-NEXT:    s_wait_storecnt 0x0
11227 ; GFX12-NEXT:    global_inv scope:SCOPE_DEV
11228 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
11230 ; GFX940-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11231 ; GFX940:       ; %bb.0:
11232 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11233 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
11234 ; GFX940-NEXT:    buffer_load_dword v1, v1, s[0:3], 0 offen offset:1024
11235 ; GFX940-NEXT:    s_add_i32 s4, s16, 0x400
11236 ; GFX940-NEXT:    s_mov_b64 s[6:7], 0
11237 ; GFX940-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11238 ; GFX940-NEXT:    s_movk_i32 s8, 0x7fff
11239 ; GFX940-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11240 ; GFX940-NEXT:    s_mov_b32 s9, 0x7060302
11241 ; GFX940-NEXT:    v_mov_b32_e32 v4, s4
11242 ; GFX940-NEXT:  .LBB33_1: ; %atomicrmw.start
11243 ; GFX940-NEXT:    ; =>This Inner Loop Header: Depth=1
11244 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
11245 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11246 ; GFX940-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11247 ; GFX940-NEXT:    v_add_f32_e32 v0, v0, v2
11248 ; GFX940-NEXT:    v_add_f32_e32 v5, v5, v3
11249 ; GFX940-NEXT:    v_bfe_u32 v6, v0, 16, 1
11250 ; GFX940-NEXT:    v_bfe_u32 v8, v5, 16, 1
11251 ; GFX940-NEXT:    v_or_b32_e32 v7, 0x400000, v0
11252 ; GFX940-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11253 ; GFX940-NEXT:    v_add3_u32 v6, v6, v0, s8
11254 ; GFX940-NEXT:    v_add3_u32 v8, v8, v5, s8
11255 ; GFX940-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11256 ; GFX940-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
11257 ; GFX940-NEXT:    buffer_wbl2 sc1
11258 ; GFX940-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
11259 ; GFX940-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
11260 ; GFX940-NEXT:    v_perm_b32 v0, v5, v0, s9
11261 ; GFX940-NEXT:    v_mov_b64_e32 v[6:7], v[0:1]
11262 ; GFX940-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[0:3], 0 offen sc0
11263 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
11264 ; GFX940-NEXT:    buffer_inv sc1
11265 ; GFX940-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
11266 ; GFX940-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
11267 ; GFX940-NEXT:    v_mov_b32_e32 v1, v6
11268 ; GFX940-NEXT:    s_andn2_b64 exec, exec, s[6:7]
11269 ; GFX940-NEXT:    s_cbranch_execnz .LBB33_1
11270 ; GFX940-NEXT:  ; %bb.2: ; %atomicrmw.end
11271 ; GFX940-NEXT:    s_or_b64 exec, exec, s[6:7]
11272 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
11274 ; GFX11-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11275 ; GFX11:       ; %bb.0:
11276 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11277 ; GFX11-NEXT:    v_dual_mov_b32 v1, s16 :: v_dual_lshlrev_b32 v2, 16, v0
11278 ; GFX11-NEXT:    s_add_i32 s4, s16, 0x400
11279 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
11280 ; GFX11-NEXT:    v_dual_mov_b32 v4, s4 :: v_dual_and_b32 v3, 0xffff0000, v0
11281 ; GFX11-NEXT:    buffer_load_b32 v1, v1, s[0:3], 0 offen offset:1024
11282 ; GFX11-NEXT:    s_mov_b32 s5, 0
11283 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x1
11284 ; GFX11-NEXT:    .p2align 6
11285 ; GFX11-NEXT:  .LBB33_1: ; %atomicrmw.start
11286 ; GFX11-NEXT:    ; =>This Inner Loop Header: Depth=1
11287 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11288 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11289 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11290 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
11291 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
11292 ; GFX11-NEXT:    v_dual_add_f32 v5, v5, v3 :: v_dual_add_f32 v0, v0, v2
11293 ; GFX11-NEXT:    v_bfe_u32 v7, v5, 16, 1
11294 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
11295 ; GFX11-NEXT:    v_bfe_u32 v6, v0, 16, 1
11296 ; GFX11-NEXT:    v_or_b32_e32 v8, 0x400000, v0
11297 ; GFX11-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11298 ; GFX11-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
11299 ; GFX11-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
11300 ; GFX11-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
11301 ; GFX11-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
11302 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
11303 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
11304 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
11305 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
11306 ; GFX11-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
11307 ; GFX11-NEXT:    v_dual_mov_b32 v6, v1 :: v_dual_mov_b32 v5, v0
11308 ; GFX11-NEXT:    buffer_atomic_cmpswap_b32 v[5:6], v4, s[0:3], 0 offen glc
11309 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11310 ; GFX11-NEXT:    buffer_gl1_inv
11311 ; GFX11-NEXT:    buffer_gl0_inv
11312 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
11313 ; GFX11-NEXT:    v_mov_b32_e32 v1, v5
11314 ; GFX11-NEXT:    s_or_b32 s5, vcc_lo, s5
11315 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
11316 ; GFX11-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s5
11317 ; GFX11-NEXT:    s_cbranch_execnz .LBB33_1
11318 ; GFX11-NEXT:  ; %bb.2: ; %atomicrmw.end
11319 ; GFX11-NEXT:    s_set_inst_prefetch_distance 0x2
11320 ; GFX11-NEXT:    s_or_b32 exec_lo, exec_lo, s5
11321 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11323 ; GFX10-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11324 ; GFX10:       ; %bb.0:
11325 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11326 ; GFX10-NEXT:    v_mov_b32_e32 v1, s20
11327 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
11328 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11329 ; GFX10-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11330 ; GFX10-NEXT:    v_mov_b32_e32 v4, s4
11331 ; GFX10-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
11332 ; GFX10-NEXT:    s_mov_b32 s5, 0
11333 ; GFX10-NEXT:  .LBB33_1: ; %atomicrmw.start
11334 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
11335 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11336 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11337 ; GFX10-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11338 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
11339 ; GFX10-NEXT:    v_add_f32_e32 v0, v0, v2
11340 ; GFX10-NEXT:    v_add_f32_e32 v5, v5, v3
11341 ; GFX10-NEXT:    v_bfe_u32 v6, v0, 16, 1
11342 ; GFX10-NEXT:    v_bfe_u32 v7, v5, 16, 1
11343 ; GFX10-NEXT:    v_or_b32_e32 v8, 0x400000, v0
11344 ; GFX10-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11345 ; GFX10-NEXT:    v_cmp_u_f32_e32 vcc_lo, v5, v5
11346 ; GFX10-NEXT:    v_add3_u32 v6, v6, v0, 0x7fff
11347 ; GFX10-NEXT:    v_add3_u32 v7, v7, v5, 0x7fff
11348 ; GFX10-NEXT:    v_cmp_u_f32_e64 s4, v0, v0
11349 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, v7, v9, vcc_lo
11350 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v6, v8, s4
11351 ; GFX10-NEXT:    v_perm_b32 v0, v5, v0, 0x7060302
11352 ; GFX10-NEXT:    v_mov_b32_e32 v6, v1
11353 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
11354 ; GFX10-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
11355 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11356 ; GFX10-NEXT:    buffer_gl1_inv
11357 ; GFX10-NEXT:    buffer_gl0_inv
11358 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v5, v1
11359 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
11360 ; GFX10-NEXT:    s_or_b32 s5, vcc_lo, s5
11361 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s5
11362 ; GFX10-NEXT:    s_cbranch_execnz .LBB33_1
11363 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
11364 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s5
11365 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11367 ; GFX90A-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11368 ; GFX90A:       ; %bb.0:
11369 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11370 ; GFX90A-NEXT:    v_mov_b32_e32 v1, s20
11371 ; GFX90A-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
11372 ; GFX90A-NEXT:    s_add_i32 s4, s20, 0x400
11373 ; GFX90A-NEXT:    s_mov_b64 s[6:7], 0
11374 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11375 ; GFX90A-NEXT:    s_movk_i32 s8, 0x7fff
11376 ; GFX90A-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11377 ; GFX90A-NEXT:    s_mov_b32 s9, 0x7060302
11378 ; GFX90A-NEXT:    v_mov_b32_e32 v4, s4
11379 ; GFX90A-NEXT:  .LBB33_1: ; %atomicrmw.start
11380 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
11381 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11382 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11383 ; GFX90A-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11384 ; GFX90A-NEXT:    v_add_f32_e32 v0, v0, v2
11385 ; GFX90A-NEXT:    v_add_f32_e32 v5, v5, v3
11386 ; GFX90A-NEXT:    v_bfe_u32 v6, v0, 16, 1
11387 ; GFX90A-NEXT:    v_bfe_u32 v8, v5, 16, 1
11388 ; GFX90A-NEXT:    v_or_b32_e32 v7, 0x400000, v0
11389 ; GFX90A-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11390 ; GFX90A-NEXT:    v_add3_u32 v6, v6, v0, s8
11391 ; GFX90A-NEXT:    v_add3_u32 v8, v8, v5, s8
11392 ; GFX90A-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11393 ; GFX90A-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
11394 ; GFX90A-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
11395 ; GFX90A-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
11396 ; GFX90A-NEXT:    v_perm_b32 v0, v5, v0, s9
11397 ; GFX90A-NEXT:    v_pk_mov_b32 v[6:7], v[0:1], v[0:1] op_sel:[0,1]
11398 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[6:7], v4, s[16:19], 0 offen glc
11399 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11400 ; GFX90A-NEXT:    buffer_wbinvl1
11401 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v6, v1
11402 ; GFX90A-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
11403 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v6
11404 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[6:7]
11405 ; GFX90A-NEXT:    s_cbranch_execnz .LBB33_1
11406 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
11407 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[6:7]
11408 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
11410 ; GFX908-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11411 ; GFX908:       ; %bb.0:
11412 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11413 ; GFX908-NEXT:    v_mov_b32_e32 v1, s20
11414 ; GFX908-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
11415 ; GFX908-NEXT:    s_add_i32 s4, s20, 0x400
11416 ; GFX908-NEXT:    s_mov_b64 s[6:7], 0
11417 ; GFX908-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11418 ; GFX908-NEXT:    s_movk_i32 s8, 0x7fff
11419 ; GFX908-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11420 ; GFX908-NEXT:    s_mov_b32 s9, 0x7060302
11421 ; GFX908-NEXT:    v_mov_b32_e32 v4, s4
11422 ; GFX908-NEXT:  .LBB33_1: ; %atomicrmw.start
11423 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
11424 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
11425 ; GFX908-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11426 ; GFX908-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11427 ; GFX908-NEXT:    v_add_f32_e32 v0, v0, v2
11428 ; GFX908-NEXT:    v_add_f32_e32 v5, v5, v3
11429 ; GFX908-NEXT:    v_bfe_u32 v6, v0, 16, 1
11430 ; GFX908-NEXT:    v_bfe_u32 v8, v5, 16, 1
11431 ; GFX908-NEXT:    v_or_b32_e32 v7, 0x400000, v0
11432 ; GFX908-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11433 ; GFX908-NEXT:    v_add3_u32 v6, v6, v0, s8
11434 ; GFX908-NEXT:    v_add3_u32 v8, v8, v5, s8
11435 ; GFX908-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11436 ; GFX908-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
11437 ; GFX908-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
11438 ; GFX908-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
11439 ; GFX908-NEXT:    v_perm_b32 v0, v5, v0, s9
11440 ; GFX908-NEXT:    v_mov_b32_e32 v6, v1
11441 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
11442 ; GFX908-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
11443 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
11444 ; GFX908-NEXT:    buffer_wbinvl1
11445 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
11446 ; GFX908-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
11447 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
11448 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[6:7]
11449 ; GFX908-NEXT:    s_cbranch_execnz .LBB33_1
11450 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
11451 ; GFX908-NEXT:    s_or_b64 exec, exec, s[6:7]
11452 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
11454 ; GFX8-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11455 ; GFX8:       ; %bb.0:
11456 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11457 ; GFX8-NEXT:    v_mov_b32_e32 v1, s20
11458 ; GFX8-NEXT:    buffer_load_dword v1, v1, s[16:19], 0 offen offset:1024
11459 ; GFX8-NEXT:    s_add_i32 s4, s20, 0x400
11460 ; GFX8-NEXT:    s_mov_b64 s[6:7], 0
11461 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 16, v0
11462 ; GFX8-NEXT:    v_and_b32_e32 v3, 0xffff0000, v0
11463 ; GFX8-NEXT:    v_mov_b32_e32 v4, s4
11464 ; GFX8-NEXT:  .LBB33_1: ; %atomicrmw.start
11465 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
11466 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
11467 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
11468 ; GFX8-NEXT:    v_and_b32_e32 v5, 0xffff0000, v1
11469 ; GFX8-NEXT:    v_add_f32_e32 v0, v0, v2
11470 ; GFX8-NEXT:    v_add_f32_e32 v5, v5, v3
11471 ; GFX8-NEXT:    v_bfe_u32 v6, v0, 16, 1
11472 ; GFX8-NEXT:    v_bfe_u32 v8, v5, 16, 1
11473 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v0
11474 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v5
11475 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, 0x7fff, v6
11476 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, 0x7fff, v8
11477 ; GFX8-NEXT:    v_or_b32_e32 v9, 0x400000, v5
11478 ; GFX8-NEXT:    v_cmp_u_f32_e32 vcc, v5, v5
11479 ; GFX8-NEXT:    v_or_b32_e32 v7, 0x400000, v0
11480 ; GFX8-NEXT:    v_cmp_u_f32_e64 s[4:5], v0, v0
11481 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
11482 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v6, v7, s[4:5]
11483 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 16, v5
11484 ; GFX8-NEXT:    v_alignbit_b32 v0, v5, v0, 16
11485 ; GFX8-NEXT:    v_mov_b32_e32 v6, v1
11486 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
11487 ; GFX8-NEXT:    buffer_atomic_cmpswap v[5:6], v4, s[16:19], 0 offen glc
11488 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
11489 ; GFX8-NEXT:    buffer_wbinvl1
11490 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v1
11491 ; GFX8-NEXT:    s_or_b64 s[6:7], vcc, s[6:7]
11492 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
11493 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[6:7]
11494 ; GFX8-NEXT:    s_cbranch_execnz .LBB33_1
11495 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
11496 ; GFX8-NEXT:    s_or_b64 exec, exec, s[6:7]
11497 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
11499 ; GFX7-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11500 ; GFX7:       ; %bb.0:
11501 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11502 ; GFX7-NEXT:    v_mov_b32_e32 v2, s20
11503 ; GFX7-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
11504 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
11505 ; GFX7-NEXT:    v_mul_f32_e32 v0, 1.0, v0
11506 ; GFX7-NEXT:    v_mul_f32_e32 v1, 1.0, v1
11507 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
11508 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11509 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11510 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11511 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
11512 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
11513 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
11514 ; GFX7-NEXT:  .LBB33_1: ; %atomicrmw.start
11515 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
11516 ; GFX7-NEXT:    v_mul_f32_e32 v3, 1.0, v3
11517 ; GFX7-NEXT:    v_mul_f32_e32 v4, 1.0, v4
11518 ; GFX7-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
11519 ; GFX7-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
11520 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
11521 ; GFX7-NEXT:    v_add_f32_e32 v6, v6, v1
11522 ; GFX7-NEXT:    v_add_f32_e32 v5, v5, v0
11523 ; GFX7-NEXT:    v_alignbit_b32 v4, v3, v4, 16
11524 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
11525 ; GFX7-NEXT:    v_alignbit_b32 v3, v3, v5, 16
11526 ; GFX7-NEXT:    v_mov_b32_e32 v6, v4
11527 ; GFX7-NEXT:    v_mov_b32_e32 v5, v3
11528 ; GFX7-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
11529 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11530 ; GFX7-NEXT:    buffer_wbinvl1
11531 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
11532 ; GFX7-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
11533 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11534 ; GFX7-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
11535 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11536 ; GFX7-NEXT:    s_cbranch_execnz .LBB33_1
11537 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
11538 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
11539 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
11541 ; GFX6-LABEL: buffer_fat_ptr_agent_atomic_fadd_noret_v2bf16__offset__amdgpu_no_fine_grained_memory__amdgpu_no_remote_memory:
11542 ; GFX6:       ; %bb.0:
11543 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11544 ; GFX6-NEXT:    v_mov_b32_e32 v2, s20
11545 ; GFX6-NEXT:    buffer_load_dword v2, v2, s[16:19], 0 offen offset:1024
11546 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
11547 ; GFX6-NEXT:    v_mul_f32_e32 v0, 1.0, v0
11548 ; GFX6-NEXT:    v_mul_f32_e32 v1, 1.0, v1
11549 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
11550 ; GFX6-NEXT:    v_and_b32_e32 v0, 0xffff0000, v0
11551 ; GFX6-NEXT:    v_and_b32_e32 v1, 0xffff0000, v1
11552 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
11553 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v2
11554 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
11555 ; GFX6-NEXT:    v_mov_b32_e32 v2, s6
11556 ; GFX6-NEXT:  .LBB33_1: ; %atomicrmw.start
11557 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
11558 ; GFX6-NEXT:    v_mul_f32_e32 v3, 1.0, v3
11559 ; GFX6-NEXT:    v_mul_f32_e32 v4, 1.0, v4
11560 ; GFX6-NEXT:    s_waitcnt expcnt(0)
11561 ; GFX6-NEXT:    v_and_b32_e32 v6, 0xffff0000, v3
11562 ; GFX6-NEXT:    v_and_b32_e32 v5, 0xffff0000, v4
11563 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
11564 ; GFX6-NEXT:    v_add_f32_e32 v6, v6, v1
11565 ; GFX6-NEXT:    v_add_f32_e32 v5, v5, v0
11566 ; GFX6-NEXT:    v_alignbit_b32 v4, v3, v4, 16
11567 ; GFX6-NEXT:    v_lshrrev_b32_e32 v3, 16, v6
11568 ; GFX6-NEXT:    v_alignbit_b32 v3, v3, v5, 16
11569 ; GFX6-NEXT:    v_mov_b32_e32 v6, v4
11570 ; GFX6-NEXT:    v_mov_b32_e32 v5, v3
11571 ; GFX6-NEXT:    buffer_atomic_cmpswap v[5:6], v2, s[16:19], 0 offen glc
11572 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
11573 ; GFX6-NEXT:    buffer_wbinvl1
11574 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v5, v4
11575 ; GFX6-NEXT:    v_and_b32_e32 v3, 0xffff0000, v5
11576 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11577 ; GFX6-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
11578 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11579 ; GFX6-NEXT:    s_cbranch_execnz .LBB33_1
11580 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
11581 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
11582 ; GFX6-NEXT:    s_waitcnt expcnt(0)
11583 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
11584   %gep = getelementptr <2 x bfloat>, ptr addrspace(7) %ptr, i32 256
11585   %unused = atomicrmw fadd ptr addrspace(7) %gep, <2 x bfloat> %val syncscope("agent") seq_cst, !amdgpu.no.fine.grained.memory !0, !amdgpu.no.remote.memory !0
11586   ret void
11589 ; --------------------------------------------------------------------
11590 ; misc
11591 ; --------------------------------------------------------------------
11593 define float @buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory(ptr addrspace(7) inreg %ptr, float %val) #0 {
11594 ; GFX12-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11595 ; GFX12:       ; %bb.0:
11596 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
11597 ; GFX12-NEXT:    s_wait_expcnt 0x0
11598 ; GFX12-NEXT:    s_wait_samplecnt 0x0
11599 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
11600 ; GFX12-NEXT:    s_wait_kmcnt 0x0
11601 ; GFX12-NEXT:    v_mov_b32_e32 v1, s16
11602 ; GFX12-NEXT:    global_wb scope:SCOPE_SYS
11603 ; GFX12-NEXT:    s_wait_storecnt 0x0
11604 ; GFX12-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], null offen offset:1024 th:TH_ATOMIC_RETURN
11605 ; GFX12-NEXT:    s_wait_loadcnt 0x0
11606 ; GFX12-NEXT:    global_inv scope:SCOPE_SYS
11607 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
11609 ; GFX940-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11610 ; GFX940:       ; %bb.0:
11611 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11612 ; GFX940-NEXT:    v_mov_b32_e32 v1, s16
11613 ; GFX940-NEXT:    buffer_wbl2 sc0 sc1
11614 ; GFX940-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 sc0
11615 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
11616 ; GFX940-NEXT:    buffer_inv sc0 sc1
11617 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
11619 ; GFX11-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11620 ; GFX11:       ; %bb.0:
11621 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11622 ; GFX11-NEXT:    v_mov_b32_e32 v1, s16
11623 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
11624 ; GFX11-NEXT:    buffer_atomic_add_f32 v0, v1, s[0:3], 0 offen offset:1024 glc
11625 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
11626 ; GFX11-NEXT:    buffer_gl1_inv
11627 ; GFX11-NEXT:    buffer_gl0_inv
11628 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
11630 ; GFX10-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11631 ; GFX10:       ; %bb.0:
11632 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11633 ; GFX10-NEXT:    v_mov_b32_e32 v2, v0
11634 ; GFX10-NEXT:    v_mov_b32_e32 v0, s20
11635 ; GFX10-NEXT:    s_add_i32 s4, s20, 0x400
11636 ; GFX10-NEXT:    v_mov_b32_e32 v3, s4
11637 ; GFX10-NEXT:    s_mov_b32 s4, 0
11638 ; GFX10-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
11639 ; GFX10-NEXT:  .LBB34_1: ; %atomicrmw.start
11640 ; GFX10-NEXT:    ; =>This Inner Loop Header: Depth=1
11641 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11642 ; GFX10-NEXT:    v_mov_b32_e32 v5, v0
11643 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
11644 ; GFX10-NEXT:    v_add_f32_e32 v4, v5, v2
11645 ; GFX10-NEXT:    v_mov_b32_e32 v0, v4
11646 ; GFX10-NEXT:    v_mov_b32_e32 v1, v5
11647 ; GFX10-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
11648 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
11649 ; GFX10-NEXT:    buffer_gl1_inv
11650 ; GFX10-NEXT:    buffer_gl0_inv
11651 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v5
11652 ; GFX10-NEXT:    s_or_b32 s4, vcc_lo, s4
11653 ; GFX10-NEXT:    s_andn2_b32 exec_lo, exec_lo, s4
11654 ; GFX10-NEXT:    s_cbranch_execnz .LBB34_1
11655 ; GFX10-NEXT:  ; %bb.2: ; %atomicrmw.end
11656 ; GFX10-NEXT:    s_or_b32 exec_lo, exec_lo, s4
11657 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
11659 ; GFX90A-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11660 ; GFX90A:       ; %bb.0:
11661 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11662 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
11663 ; GFX90A-NEXT:    v_mov_b32_e32 v0, s20
11664 ; GFX90A-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
11665 ; GFX90A-NEXT:    s_add_i32 s6, s20, 0x400
11666 ; GFX90A-NEXT:    s_mov_b64 s[4:5], 0
11667 ; GFX90A-NEXT:    v_mov_b32_e32 v3, s6
11668 ; GFX90A-NEXT:  .LBB34_1: ; %atomicrmw.start
11669 ; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
11670 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11671 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
11672 ; GFX90A-NEXT:    v_add_f32_e32 v4, v5, v2
11673 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[4:5] op_sel:[0,1]
11674 ; GFX90A-NEXT:    buffer_wbl2
11675 ; GFX90A-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
11676 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
11677 ; GFX90A-NEXT:    buffer_invl2
11678 ; GFX90A-NEXT:    buffer_wbinvl1
11679 ; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
11680 ; GFX90A-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11681 ; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11682 ; GFX90A-NEXT:    s_cbranch_execnz .LBB34_1
11683 ; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
11684 ; GFX90A-NEXT:    s_or_b64 exec, exec, s[4:5]
11685 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
11687 ; GFX908-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11688 ; GFX908:       ; %bb.0:
11689 ; GFX908-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11690 ; GFX908-NEXT:    v_mov_b32_e32 v2, v0
11691 ; GFX908-NEXT:    v_mov_b32_e32 v0, s20
11692 ; GFX908-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
11693 ; GFX908-NEXT:    s_add_i32 s6, s20, 0x400
11694 ; GFX908-NEXT:    s_mov_b64 s[4:5], 0
11695 ; GFX908-NEXT:    v_mov_b32_e32 v3, s6
11696 ; GFX908-NEXT:  .LBB34_1: ; %atomicrmw.start
11697 ; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
11698 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
11699 ; GFX908-NEXT:    v_mov_b32_e32 v5, v0
11700 ; GFX908-NEXT:    v_add_f32_e32 v4, v5, v2
11701 ; GFX908-NEXT:    v_mov_b32_e32 v0, v4
11702 ; GFX908-NEXT:    v_mov_b32_e32 v1, v5
11703 ; GFX908-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
11704 ; GFX908-NEXT:    s_waitcnt vmcnt(0)
11705 ; GFX908-NEXT:    buffer_wbinvl1
11706 ; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
11707 ; GFX908-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11708 ; GFX908-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11709 ; GFX908-NEXT:    s_cbranch_execnz .LBB34_1
11710 ; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
11711 ; GFX908-NEXT:    s_or_b64 exec, exec, s[4:5]
11712 ; GFX908-NEXT:    s_setpc_b64 s[30:31]
11714 ; GFX8-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11715 ; GFX8:       ; %bb.0:
11716 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11717 ; GFX8-NEXT:    v_mov_b32_e32 v2, v0
11718 ; GFX8-NEXT:    v_mov_b32_e32 v0, s20
11719 ; GFX8-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
11720 ; GFX8-NEXT:    s_add_i32 s6, s20, 0x400
11721 ; GFX8-NEXT:    s_mov_b64 s[4:5], 0
11722 ; GFX8-NEXT:    v_mov_b32_e32 v3, s6
11723 ; GFX8-NEXT:  .LBB34_1: ; %atomicrmw.start
11724 ; GFX8-NEXT:    ; =>This Inner Loop Header: Depth=1
11725 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
11726 ; GFX8-NEXT:    v_mov_b32_e32 v5, v0
11727 ; GFX8-NEXT:    v_add_f32_e32 v4, v5, v2
11728 ; GFX8-NEXT:    v_mov_b32_e32 v0, v4
11729 ; GFX8-NEXT:    v_mov_b32_e32 v1, v5
11730 ; GFX8-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
11731 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
11732 ; GFX8-NEXT:    buffer_wbinvl1
11733 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
11734 ; GFX8-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11735 ; GFX8-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11736 ; GFX8-NEXT:    s_cbranch_execnz .LBB34_1
11737 ; GFX8-NEXT:  ; %bb.2: ; %atomicrmw.end
11738 ; GFX8-NEXT:    s_or_b64 exec, exec, s[4:5]
11739 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
11741 ; GFX7-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11742 ; GFX7:       ; %bb.0:
11743 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11744 ; GFX7-NEXT:    v_mov_b32_e32 v2, v0
11745 ; GFX7-NEXT:    v_mov_b32_e32 v0, s20
11746 ; GFX7-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
11747 ; GFX7-NEXT:    s_add_i32 s6, s20, 0x400
11748 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
11749 ; GFX7-NEXT:    v_mov_b32_e32 v3, s6
11750 ; GFX7-NEXT:  .LBB34_1: ; %atomicrmw.start
11751 ; GFX7-NEXT:    ; =>This Inner Loop Header: Depth=1
11752 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11753 ; GFX7-NEXT:    v_mov_b32_e32 v5, v0
11754 ; GFX7-NEXT:    v_add_f32_e32 v4, v5, v2
11755 ; GFX7-NEXT:    v_mov_b32_e32 v0, v4
11756 ; GFX7-NEXT:    v_mov_b32_e32 v1, v5
11757 ; GFX7-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
11758 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
11759 ; GFX7-NEXT:    buffer_wbinvl1
11760 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
11761 ; GFX7-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11762 ; GFX7-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11763 ; GFX7-NEXT:    s_cbranch_execnz .LBB34_1
11764 ; GFX7-NEXT:  ; %bb.2: ; %atomicrmw.end
11765 ; GFX7-NEXT:    s_or_b64 exec, exec, s[4:5]
11766 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
11768 ; GFX6-LABEL: buffer_fat_ptr_system_atomic_fadd_ret_f32__offset__amdgpu_no_fine_grained_memory:
11769 ; GFX6:       ; %bb.0:
11770 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11771 ; GFX6-NEXT:    v_mov_b32_e32 v2, v0
11772 ; GFX6-NEXT:    v_mov_b32_e32 v0, s20
11773 ; GFX6-NEXT:    buffer_load_dword v0, v0, s[16:19], 0 offen offset:1024
11774 ; GFX6-NEXT:    s_add_i32 s6, s20, 0x400
11775 ; GFX6-NEXT:    s_mov_b64 s[4:5], 0
11776 ; GFX6-NEXT:    v_mov_b32_e32 v3, s6
11777 ; GFX6-NEXT:  .LBB34_1: ; %atomicrmw.start
11778 ; GFX6-NEXT:    ; =>This Inner Loop Header: Depth=1
11779 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
11780 ; GFX6-NEXT:    v_mov_b32_e32 v5, v0
11781 ; GFX6-NEXT:    v_add_f32_e32 v4, v5, v2
11782 ; GFX6-NEXT:    s_waitcnt expcnt(0)
11783 ; GFX6-NEXT:    v_mov_b32_e32 v0, v4
11784 ; GFX6-NEXT:    v_mov_b32_e32 v1, v5
11785 ; GFX6-NEXT:    buffer_atomic_cmpswap v[0:1], v3, s[16:19], 0 offen glc
11786 ; GFX6-NEXT:    s_waitcnt vmcnt(0)
11787 ; GFX6-NEXT:    buffer_wbinvl1
11788 ; GFX6-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v5
11789 ; GFX6-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
11790 ; GFX6-NEXT:    s_andn2_b64 exec, exec, s[4:5]
11791 ; GFX6-NEXT:    s_cbranch_execnz .LBB34_1
11792 ; GFX6-NEXT:  ; %bb.2: ; %atomicrmw.end
11793 ; GFX6-NEXT:    s_or_b64 exec, exec, s[4:5]
11794 ; GFX6-NEXT:    s_waitcnt expcnt(0)
11795 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
11796   %gep = getelementptr float, ptr addrspace(7) %ptr, i32 256
11797   %result = atomicrmw fadd ptr addrspace(7) %gep, float %val seq_cst, !amdgpu.no.fine.grained.memory !0
11798   ret float %result
11801 attributes #0 = { nounwind }
11803 !0 = !{}