[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / global_atomics_scan_fadd.ll
blob4cbd5e84871cc75046b6fb7d7a043010188218c1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=amdgcn -amdgpu-atomic-optimizer-strategy=Iterative -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefix=GFX7LESS %s
3 ; RUN: llc -march=amdgcn -mcpu=gfx900 -amdgpu-atomic-optimizer-strategy=Iterative -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX9 %s
4 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=-wavefrontsize32,+wavefrontsize64 -amdgpu-atomic-optimizer-strategy=Iterative -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1064 %s
5 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize32,-wavefrontsize64 -amdgpu-atomic-optimizer-strategy=Iterative -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1032 %s
6 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=-wavefrontsize32,+wavefrontsize64 -amdgpu-atomic-optimizer-strategy=Iterative -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1164 %s
7 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize32,-wavefrontsize64 -amdgpu-atomic-optimizer-strategy=Iterative -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1132 %s
8 ; RUN: llc -march=amdgcn -amdgpu-atomic-optimizer-strategy=DPP -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefix=GFX7LESS %s
9 ; RUN: llc -march=amdgcn -mcpu=gfx900 -amdgpu-atomic-optimizer-strategy=DPP -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX9-DPP %s
10 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=-wavefrontsize32,+wavefrontsize64 -amdgpu-atomic-optimizer-strategy=DPP -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1064-DPP %s
11 ; RUN: llc -march=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize32,-wavefrontsize64 -amdgpu-atomic-optimizer-strategy=DPP -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1032-DPP %s
12 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=-wavefrontsize32,+wavefrontsize64 -amdgpu-atomic-optimizer-strategy=DPP -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1164-DPP %s
13 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize32,-wavefrontsize64 -amdgpu-atomic-optimizer-strategy=DPP -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GFX1132-DPP %s
15 declare float @div.float.value()
17 define amdgpu_kernel void @global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe(ptr addrspace(1) %ptr) #0 {
18 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
19 ; GFX7LESS:       ; %bb.0:
20 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], exec
21 ; GFX7LESS-NEXT:    v_mbcnt_lo_u32_b32_e64 v0, s2, 0
22 ; GFX7LESS-NEXT:    v_mbcnt_hi_u32_b32_e32 v0, s3, v0
23 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
24 ; GFX7LESS-NEXT:    s_and_saveexec_b64 s[4:5], vcc
25 ; GFX7LESS-NEXT:    s_cbranch_execz .LBB0_3
26 ; GFX7LESS-NEXT:  ; %bb.1:
27 ; GFX7LESS-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
28 ; GFX7LESS-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
29 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
30 ; GFX7LESS-NEXT:    s_load_dword s6, s[0:1], 0x0
31 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], 0
32 ; GFX7LESS-NEXT:    s_mov_b32 s3, 0xf000
33 ; GFX7LESS-NEXT:    v_cvt_f32_ubyte0_e32 v0, s2
34 ; GFX7LESS-NEXT:    v_mul_f32_e32 v2, 4.0, v0
35 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
36 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, s6
37 ; GFX7LESS-NEXT:    s_mov_b32 s2, -1
38 ; GFX7LESS-NEXT:  .LBB0_2: ; %atomicrmw.start
39 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
40 ; GFX7LESS-NEXT:    v_add_f32_e32 v0, v1, v2
41 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
42 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v1
43 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v0
44 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[0:3], 0 glc
45 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
46 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v1
47 ; GFX7LESS-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
48 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, v3
49 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[4:5]
50 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB0_2
51 ; GFX7LESS-NEXT:  .LBB0_3:
52 ; GFX7LESS-NEXT:    s_endpgm
54 ; GFX9-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
55 ; GFX9:       ; %bb.0:
56 ; GFX9-NEXT:    s_mov_b64 s[2:3], exec
57 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
58 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
59 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
60 ; GFX9-NEXT:    s_and_saveexec_b64 s[4:5], vcc
61 ; GFX9-NEXT:    s_cbranch_execz .LBB0_3
62 ; GFX9-NEXT:  ; %bb.1:
63 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
64 ; GFX9-NEXT:    s_bcnt1_i32_b64 s5, s[2:3]
65 ; GFX9-NEXT:    v_cvt_f32_ubyte0_e32 v0, s5
66 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
67 ; GFX9-NEXT:    v_mul_f32_e32 v2, 4.0, v0
68 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
69 ; GFX9-NEXT:    s_load_dword s4, s[0:1], 0x0
70 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
71 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
72 ; GFX9-NEXT:    v_mov_b32_e32 v1, s4
73 ; GFX9-NEXT:  .LBB0_2: ; %atomicrmw.start
74 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
75 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
76 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
77 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
78 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
79 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
80 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
81 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
82 ; GFX9-NEXT:    s_cbranch_execnz .LBB0_2
83 ; GFX9-NEXT:  .LBB0_3:
84 ; GFX9-NEXT:    s_endpgm
86 ; GFX1064-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
87 ; GFX1064:       ; %bb.0:
88 ; GFX1064-NEXT:    s_mov_b64 s[2:3], exec
89 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
90 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
91 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
92 ; GFX1064-NEXT:    s_and_saveexec_b64 s[4:5], vcc
93 ; GFX1064-NEXT:    s_cbranch_execz .LBB0_3
94 ; GFX1064-NEXT:  ; %bb.1:
95 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
96 ; GFX1064-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
97 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
98 ; GFX1064-NEXT:    v_cvt_f32_ubyte0_e32 v0, s2
99 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
100 ; GFX1064-NEXT:    v_mul_f32_e32 v2, 4.0, v0
101 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
102 ; GFX1064-NEXT:    s_load_dword s4, s[0:1], 0x0
103 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
104 ; GFX1064-NEXT:    v_mov_b32_e32 v1, s4
105 ; GFX1064-NEXT:  .LBB0_2: ; %atomicrmw.start
106 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
107 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
108 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
109 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
110 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
111 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
112 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
113 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
114 ; GFX1064-NEXT:    s_cbranch_execnz .LBB0_2
115 ; GFX1064-NEXT:  .LBB0_3:
116 ; GFX1064-NEXT:    s_endpgm
118 ; GFX1032-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
119 ; GFX1032:       ; %bb.0:
120 ; GFX1032-NEXT:    s_mov_b32 s3, exec_lo
121 ; GFX1032-NEXT:    s_mov_b32 s2, 0
122 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
123 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
124 ; GFX1032-NEXT:    s_and_saveexec_b32 s4, vcc_lo
125 ; GFX1032-NEXT:    s_cbranch_execz .LBB0_3
126 ; GFX1032-NEXT:  ; %bb.1:
127 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
128 ; GFX1032-NEXT:    s_bcnt1_i32_b32 s3, s3
129 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
130 ; GFX1032-NEXT:    v_cvt_f32_ubyte0_e32 v0, s3
131 ; GFX1032-NEXT:    v_mul_f32_e32 v2, 4.0, v0
132 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
133 ; GFX1032-NEXT:    s_load_dword s4, s[0:1], 0x0
134 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
135 ; GFX1032-NEXT:    v_mov_b32_e32 v1, s4
136 ; GFX1032-NEXT:  .LBB0_2: ; %atomicrmw.start
137 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
138 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
139 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
140 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
141 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
142 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
143 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
144 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
145 ; GFX1032-NEXT:    s_cbranch_execnz .LBB0_2
146 ; GFX1032-NEXT:  .LBB0_3:
147 ; GFX1032-NEXT:    s_endpgm
149 ; GFX1164-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
150 ; GFX1164:       ; %bb.0:
151 ; GFX1164-NEXT:    s_mov_b64 s[2:3], exec
152 ; GFX1164-NEXT:    s_mov_b64 s[4:5], exec
153 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
154 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
155 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
156 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v0
157 ; GFX1164-NEXT:    s_cbranch_execz .LBB0_2
158 ; GFX1164-NEXT:  ; %bb.1:
159 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
160 ; GFX1164-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
161 ; GFX1164-NEXT:    v_mov_b32_e32 v1, 0
162 ; GFX1164-NEXT:    v_cvt_f32_ubyte0_e32 v0, s2
163 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1)
164 ; GFX1164-NEXT:    v_mul_f32_e32 v0, 4.0, v0
165 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
166 ; GFX1164-NEXT:    global_atomic_add_f32 v1, v0, s[0:1]
167 ; GFX1164-NEXT:  .LBB0_2:
168 ; GFX1164-NEXT:    s_nop 0
169 ; GFX1164-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
170 ; GFX1164-NEXT:    s_endpgm
172 ; GFX1132-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
173 ; GFX1132:       ; %bb.0:
174 ; GFX1132-NEXT:    s_mov_b32 s2, exec_lo
175 ; GFX1132-NEXT:    s_mov_b32 s3, exec_lo
176 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
177 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
178 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v0
179 ; GFX1132-NEXT:    s_cbranch_execz .LBB0_2
180 ; GFX1132-NEXT:  ; %bb.1:
181 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
182 ; GFX1132-NEXT:    s_bcnt1_i32_b32 s2, s2
183 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
184 ; GFX1132-NEXT:    v_cvt_f32_ubyte0_e32 v0, s2
185 ; GFX1132-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mul_f32 v0, 4.0, v0
186 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
187 ; GFX1132-NEXT:    global_atomic_add_f32 v1, v0, s[0:1]
188 ; GFX1132-NEXT:  .LBB0_2:
189 ; GFX1132-NEXT:    s_nop 0
190 ; GFX1132-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
191 ; GFX1132-NEXT:    s_endpgm
193 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
194 ; GFX9-DPP:       ; %bb.0:
195 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], exec
196 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
197 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
198 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
199 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
200 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB0_3
201 ; GFX9-DPP-NEXT:  ; %bb.1:
202 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
203 ; GFX9-DPP-NEXT:    s_bcnt1_i32_b64 s5, s[2:3]
204 ; GFX9-DPP-NEXT:    v_cvt_f32_ubyte0_e32 v0, s5
205 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
206 ; GFX9-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
207 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
208 ; GFX9-DPP-NEXT:    s_load_dword s4, s[0:1], 0x0
209 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, 0
210 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
211 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, s4
212 ; GFX9-DPP-NEXT:  .LBB0_2: ; %atomicrmw.start
213 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
214 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
215 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
216 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
217 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
218 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
219 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
220 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
221 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB0_2
222 ; GFX9-DPP-NEXT:  .LBB0_3:
223 ; GFX9-DPP-NEXT:    s_endpgm
225 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
226 ; GFX1064-DPP:       ; %bb.0:
227 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], exec
228 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
229 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
230 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
231 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
232 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB0_3
233 ; GFX1064-DPP-NEXT:  ; %bb.1:
234 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
235 ; GFX1064-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
236 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v3, 0
237 ; GFX1064-DPP-NEXT:    v_cvt_f32_ubyte0_e32 v0, s2
238 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
239 ; GFX1064-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
240 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
241 ; GFX1064-DPP-NEXT:    s_load_dword s4, s[0:1], 0x0
242 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
243 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, s4
244 ; GFX1064-DPP-NEXT:  .LBB0_2: ; %atomicrmw.start
245 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
246 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
247 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
248 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
249 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
250 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
251 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
252 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
253 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB0_2
254 ; GFX1064-DPP-NEXT:  .LBB0_3:
255 ; GFX1064-DPP-NEXT:    s_endpgm
257 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
258 ; GFX1032-DPP:       ; %bb.0:
259 ; GFX1032-DPP-NEXT:    s_mov_b32 s3, exec_lo
260 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
261 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
262 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
263 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s4, vcc_lo
264 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB0_3
265 ; GFX1032-DPP-NEXT:  ; %bb.1:
266 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
267 ; GFX1032-DPP-NEXT:    s_bcnt1_i32_b32 s3, s3
268 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v3, 0
269 ; GFX1032-DPP-NEXT:    v_cvt_f32_ubyte0_e32 v0, s3
270 ; GFX1032-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
271 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
272 ; GFX1032-DPP-NEXT:    s_load_dword s4, s[0:1], 0x0
273 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
274 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, s4
275 ; GFX1032-DPP-NEXT:  .LBB0_2: ; %atomicrmw.start
276 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
277 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
278 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
279 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
280 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
281 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
282 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
283 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
284 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB0_2
285 ; GFX1032-DPP-NEXT:  .LBB0_3:
286 ; GFX1032-DPP-NEXT:    s_endpgm
288 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
289 ; GFX1164-DPP:       ; %bb.0:
290 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], exec
291 ; GFX1164-DPP-NEXT:    s_mov_b64 s[4:5], exec
292 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
293 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
294 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
295 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v0
296 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB0_2
297 ; GFX1164-DPP-NEXT:  ; %bb.1:
298 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
299 ; GFX1164-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
300 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, 0
301 ; GFX1164-DPP-NEXT:    v_cvt_f32_ubyte0_e32 v0, s2
302 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
303 ; GFX1164-DPP-NEXT:    v_mul_f32_e32 v0, 4.0, v0
304 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
305 ; GFX1164-DPP-NEXT:    global_atomic_add_f32 v1, v0, s[0:1]
306 ; GFX1164-DPP-NEXT:  .LBB0_2:
307 ; GFX1164-DPP-NEXT:    s_nop 0
308 ; GFX1164-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
309 ; GFX1164-DPP-NEXT:    s_endpgm
311 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_unsafe:
312 ; GFX1132-DPP:       ; %bb.0:
313 ; GFX1132-DPP-NEXT:    s_mov_b32 s2, exec_lo
314 ; GFX1132-DPP-NEXT:    s_mov_b32 s3, exec_lo
315 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
316 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
317 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v0
318 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB0_2
319 ; GFX1132-DPP-NEXT:  ; %bb.1:
320 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
321 ; GFX1132-DPP-NEXT:    s_bcnt1_i32_b32 s2, s2
322 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
323 ; GFX1132-DPP-NEXT:    v_cvt_f32_ubyte0_e32 v0, s2
324 ; GFX1132-DPP-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mul_f32 v0, 4.0, v0
325 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
326 ; GFX1132-DPP-NEXT:    global_atomic_add_f32 v1, v0, s[0:1]
327 ; GFX1132-DPP-NEXT:  .LBB0_2:
328 ; GFX1132-DPP-NEXT:    s_nop 0
329 ; GFX1132-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
330 ; GFX1132-DPP-NEXT:    s_endpgm
331   %result = atomicrmw fadd ptr addrspace(1) %ptr, float 4.0 syncscope("agent") monotonic, align 4
332   ret void
335 define amdgpu_kernel void @global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe(ptr addrspace(1) %ptr) #0 {
336 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
337 ; GFX7LESS:       ; %bb.0:
338 ; GFX7LESS-NEXT:    s_mov_b32 s32, 0
339 ; GFX7LESS-NEXT:    s_mov_b32 s40, SCRATCH_RSRC_DWORD0
340 ; GFX7LESS-NEXT:    s_mov_b32 s41, SCRATCH_RSRC_DWORD1
341 ; GFX7LESS-NEXT:    s_mov_b32 s42, -1
342 ; GFX7LESS-NEXT:    s_mov_b32 s43, 0xe8f000
343 ; GFX7LESS-NEXT:    s_add_u32 s40, s40, s11
344 ; GFX7LESS-NEXT:    s_addc_u32 s41, s41, 0
345 ; GFX7LESS-NEXT:    s_mov_b32 s14, s10
346 ; GFX7LESS-NEXT:    s_mov_b32 s13, s9
347 ; GFX7LESS-NEXT:    s_mov_b32 s12, s8
348 ; GFX7LESS-NEXT:    s_mov_b64 s[10:11], s[6:7]
349 ; GFX7LESS-NEXT:    s_load_dwordx2 s[36:37], s[4:5], 0x9
350 ; GFX7LESS-NEXT:    s_mov_b32 s39, 0xf000
351 ; GFX7LESS-NEXT:    s_mov_b32 s38, -1
352 ; GFX7LESS-NEXT:    s_add_u32 s8, s4, 44
353 ; GFX7LESS-NEXT:    s_addc_u32 s9, s5, 0
354 ; GFX7LESS-NEXT:    s_getpc_b64 s[4:5]
355 ; GFX7LESS-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
356 ; GFX7LESS-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
357 ; GFX7LESS-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
358 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
359 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
360 ; GFX7LESS-NEXT:    v_or_b32_e32 v0, v0, v1
361 ; GFX7LESS-NEXT:    v_or_b32_e32 v31, v0, v2
362 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], s[0:1]
363 ; GFX7LESS-NEXT:    s_mov_b64 s[6:7], s[2:3]
364 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], s[40:41]
365 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], s[42:43]
366 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
367 ; GFX7LESS-NEXT:    s_swappc_b64 s[30:31], s[16:17]
368 ; GFX7LESS-NEXT:    buffer_load_dword v2, off, s[36:39], 0
369 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], 0
370 ; GFX7LESS-NEXT:  .LBB1_1: ; %atomicrmw.start
371 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
372 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
373 ; GFX7LESS-NEXT:    v_add_f32_e32 v1, v2, v0
374 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
375 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v2
376 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v1
377 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[36:39], 0 glc
378 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
379 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v2
380 ; GFX7LESS-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]
381 ; GFX7LESS-NEXT:    v_mov_b32_e32 v2, v3
382 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[0:1]
383 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB1_1
384 ; GFX7LESS-NEXT:  ; %bb.2: ; %atomicrmw.end
385 ; GFX7LESS-NEXT:    s_endpgm
387 ; GFX9-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
388 ; GFX9:       ; %bb.0:
389 ; GFX9-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
390 ; GFX9-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
391 ; GFX9-NEXT:    s_mov_b32 s38, -1
392 ; GFX9-NEXT:    s_mov_b32 s39, 0xe00000
393 ; GFX9-NEXT:    s_add_u32 s36, s36, s11
394 ; GFX9-NEXT:    s_addc_u32 s37, s37, 0
395 ; GFX9-NEXT:    s_mov_b64 s[34:35], s[4:5]
396 ; GFX9-NEXT:    s_mov_b32 s12, s8
397 ; GFX9-NEXT:    s_add_u32 s8, s34, 44
398 ; GFX9-NEXT:    s_mov_b32 s13, s9
399 ; GFX9-NEXT:    s_addc_u32 s9, s35, 0
400 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
401 ; GFX9-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
402 ; GFX9-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
403 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
404 ; GFX9-NEXT:    s_mov_b32 s14, s10
405 ; GFX9-NEXT:    s_mov_b64 s[10:11], s[6:7]
406 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
407 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
408 ; GFX9-NEXT:    s_mov_b64 s[4:5], s[0:1]
409 ; GFX9-NEXT:    s_mov_b64 s[6:7], s[2:3]
410 ; GFX9-NEXT:    s_mov_b64 s[0:1], s[36:37]
411 ; GFX9-NEXT:    v_or3_b32 v31, v0, v1, v2
412 ; GFX9-NEXT:    s_mov_b64 s[2:3], s[38:39]
413 ; GFX9-NEXT:    s_mov_b32 s32, 0
414 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
415 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
416 ; GFX9-NEXT:    s_mov_b64 s[0:1], exec
417 ; GFX9-NEXT:    v_bfrev_b32_e32 v2, 1
418 ; GFX9-NEXT:  .LBB1_1: ; %ComputeLoop
419 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
420 ; GFX9-NEXT:    s_ff1_i32_b32 s2, s1
421 ; GFX9-NEXT:    s_ff1_i32_b32 s3, s0
422 ; GFX9-NEXT:    s_add_i32 s2, s2, 32
423 ; GFX9-NEXT:    s_min_u32 s2, s3, s2
424 ; GFX9-NEXT:    v_readlane_b32 s4, v0, s2
425 ; GFX9-NEXT:    s_lshl_b64 s[2:3], 1, s2
426 ; GFX9-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
427 ; GFX9-NEXT:    s_cmp_lg_u64 s[0:1], 0
428 ; GFX9-NEXT:    v_add_f32_e32 v2, s4, v2
429 ; GFX9-NEXT:    s_cbranch_scc1 .LBB1_1
430 ; GFX9-NEXT:  ; %bb.2: ; %ComputeEnd
431 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
432 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
433 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
434 ; GFX9-NEXT:    s_and_saveexec_b64 s[0:1], vcc
435 ; GFX9-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
436 ; GFX9-NEXT:    s_cbranch_execz .LBB1_5
437 ; GFX9-NEXT:  ; %bb.3:
438 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
439 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
440 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
441 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
442 ; GFX9-NEXT:    global_load_dword v1, v3, s[0:1]
443 ; GFX9-NEXT:  .LBB1_4: ; %atomicrmw.start
444 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
445 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
446 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
447 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
448 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
449 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
450 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
451 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
452 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
453 ; GFX9-NEXT:    s_cbranch_execnz .LBB1_4
454 ; GFX9-NEXT:  .LBB1_5:
455 ; GFX9-NEXT:    s_endpgm
457 ; GFX1064-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
458 ; GFX1064:       ; %bb.0:
459 ; GFX1064-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
460 ; GFX1064-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
461 ; GFX1064-NEXT:    s_mov_b32 s38, -1
462 ; GFX1064-NEXT:    s_mov_b32 s39, 0x31e16000
463 ; GFX1064-NEXT:    s_add_u32 s36, s36, s11
464 ; GFX1064-NEXT:    s_mov_b64 s[34:35], s[4:5]
465 ; GFX1064-NEXT:    s_addc_u32 s37, s37, 0
466 ; GFX1064-NEXT:    s_mov_b32 s12, s8
467 ; GFX1064-NEXT:    s_add_u32 s8, s34, 44
468 ; GFX1064-NEXT:    s_mov_b32 s13, s9
469 ; GFX1064-NEXT:    s_addc_u32 s9, s35, 0
470 ; GFX1064-NEXT:    s_getpc_b64 s[4:5]
471 ; GFX1064-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
472 ; GFX1064-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
473 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
474 ; GFX1064-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
475 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
476 ; GFX1064-NEXT:    s_mov_b32 s14, s10
477 ; GFX1064-NEXT:    s_mov_b64 s[10:11], s[6:7]
478 ; GFX1064-NEXT:    s_mov_b64 s[4:5], s[0:1]
479 ; GFX1064-NEXT:    s_mov_b64 s[6:7], s[2:3]
480 ; GFX1064-NEXT:    v_or3_b32 v31, v0, v1, v2
481 ; GFX1064-NEXT:    s_mov_b64 s[0:1], s[36:37]
482 ; GFX1064-NEXT:    s_mov_b64 s[2:3], s[38:39]
483 ; GFX1064-NEXT:    s_mov_b32 s32, 0
484 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
485 ; GFX1064-NEXT:    s_swappc_b64 s[30:31], s[16:17]
486 ; GFX1064-NEXT:    v_bfrev_b32_e32 v2, 1
487 ; GFX1064-NEXT:    s_mov_b64 s[0:1], exec
488 ; GFX1064-NEXT:  .LBB1_1: ; %ComputeLoop
489 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
490 ; GFX1064-NEXT:    s_ff1_i32_b32 s2, s1
491 ; GFX1064-NEXT:    s_ff1_i32_b32 s3, s0
492 ; GFX1064-NEXT:    s_add_i32 s2, s2, 32
493 ; GFX1064-NEXT:    s_min_u32 s2, s3, s2
494 ; GFX1064-NEXT:    v_readlane_b32 s4, v0, s2
495 ; GFX1064-NEXT:    s_lshl_b64 s[2:3], 1, s2
496 ; GFX1064-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
497 ; GFX1064-NEXT:    s_cmp_lg_u64 s[0:1], 0
498 ; GFX1064-NEXT:    v_add_f32_e32 v2, s4, v2
499 ; GFX1064-NEXT:    s_cbranch_scc1 .LBB1_1
500 ; GFX1064-NEXT:  ; %bb.2: ; %ComputeEnd
501 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
502 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
503 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
504 ; GFX1064-NEXT:    s_and_saveexec_b64 s[0:1], vcc
505 ; GFX1064-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
506 ; GFX1064-NEXT:    s_cbranch_execz .LBB1_5
507 ; GFX1064-NEXT:  ; %bb.3:
508 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
509 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
510 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
511 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
512 ; GFX1064-NEXT:    global_load_dword v1, v3, s[0:1]
513 ; GFX1064-NEXT:  .LBB1_4: ; %atomicrmw.start
514 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
515 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
516 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
517 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
518 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
519 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
520 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
521 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
522 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
523 ; GFX1064-NEXT:    s_cbranch_execnz .LBB1_4
524 ; GFX1064-NEXT:  .LBB1_5:
525 ; GFX1064-NEXT:    s_endpgm
527 ; GFX1032-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
528 ; GFX1032:       ; %bb.0:
529 ; GFX1032-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
530 ; GFX1032-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
531 ; GFX1032-NEXT:    s_mov_b32 s38, -1
532 ; GFX1032-NEXT:    s_mov_b32 s39, 0x31c16000
533 ; GFX1032-NEXT:    s_add_u32 s36, s36, s11
534 ; GFX1032-NEXT:    s_mov_b64 s[34:35], s[4:5]
535 ; GFX1032-NEXT:    s_addc_u32 s37, s37, 0
536 ; GFX1032-NEXT:    s_mov_b32 s12, s8
537 ; GFX1032-NEXT:    s_add_u32 s8, s34, 44
538 ; GFX1032-NEXT:    s_mov_b32 s13, s9
539 ; GFX1032-NEXT:    s_addc_u32 s9, s35, 0
540 ; GFX1032-NEXT:    s_getpc_b64 s[4:5]
541 ; GFX1032-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
542 ; GFX1032-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
543 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
544 ; GFX1032-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
545 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
546 ; GFX1032-NEXT:    s_mov_b32 s14, s10
547 ; GFX1032-NEXT:    s_mov_b64 s[10:11], s[6:7]
548 ; GFX1032-NEXT:    s_mov_b64 s[4:5], s[0:1]
549 ; GFX1032-NEXT:    s_mov_b64 s[6:7], s[2:3]
550 ; GFX1032-NEXT:    v_or3_b32 v31, v0, v1, v2
551 ; GFX1032-NEXT:    s_mov_b64 s[0:1], s[36:37]
552 ; GFX1032-NEXT:    s_mov_b64 s[2:3], s[38:39]
553 ; GFX1032-NEXT:    s_mov_b32 s32, 0
554 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
555 ; GFX1032-NEXT:    s_swappc_b64 s[30:31], s[16:17]
556 ; GFX1032-NEXT:    v_bfrev_b32_e32 v2, 1
557 ; GFX1032-NEXT:    s_mov_b32 s0, exec_lo
558 ; GFX1032-NEXT:  .LBB1_1: ; %ComputeLoop
559 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
560 ; GFX1032-NEXT:    s_ff1_i32_b32 s1, s0
561 ; GFX1032-NEXT:    v_readlane_b32 s2, v0, s1
562 ; GFX1032-NEXT:    s_lshl_b32 s1, 1, s1
563 ; GFX1032-NEXT:    s_andn2_b32 s0, s0, s1
564 ; GFX1032-NEXT:    s_cmp_lg_u32 s0, 0
565 ; GFX1032-NEXT:    v_add_f32_e32 v2, s2, v2
566 ; GFX1032-NEXT:    s_cbranch_scc1 .LBB1_1
567 ; GFX1032-NEXT:  ; %bb.2: ; %ComputeEnd
568 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
569 ; GFX1032-NEXT:    s_mov_b32 s2, 0
570 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
571 ; GFX1032-NEXT:    s_and_saveexec_b32 s0, vcc_lo
572 ; GFX1032-NEXT:    s_xor_b32 s0, exec_lo, s0
573 ; GFX1032-NEXT:    s_cbranch_execz .LBB1_5
574 ; GFX1032-NEXT:  ; %bb.3:
575 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
576 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
577 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
578 ; GFX1032-NEXT:    global_load_dword v1, v3, s[0:1]
579 ; GFX1032-NEXT:  .LBB1_4: ; %atomicrmw.start
580 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
581 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
582 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
583 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
584 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
585 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
586 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
587 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
588 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
589 ; GFX1032-NEXT:    s_cbranch_execnz .LBB1_4
590 ; GFX1032-NEXT:  .LBB1_5:
591 ; GFX1032-NEXT:    s_endpgm
593 ; GFX1164-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
594 ; GFX1164:       ; %bb.0:
595 ; GFX1164-NEXT:    s_mov_b64 s[34:35], s[4:5]
596 ; GFX1164-NEXT:    s_mov_b32 s12, s8
597 ; GFX1164-NEXT:    s_add_u32 s8, s34, 44
598 ; GFX1164-NEXT:    s_mov_b32 s13, s9
599 ; GFX1164-NEXT:    s_addc_u32 s9, s35, 0
600 ; GFX1164-NEXT:    s_getpc_b64 s[4:5]
601 ; GFX1164-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
602 ; GFX1164-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
603 ; GFX1164-NEXT:    v_mov_b32_e32 v31, v0
604 ; GFX1164-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
605 ; GFX1164-NEXT:    s_mov_b32 s14, s10
606 ; GFX1164-NEXT:    s_mov_b64 s[10:11], s[6:7]
607 ; GFX1164-NEXT:    s_mov_b64 s[4:5], s[0:1]
608 ; GFX1164-NEXT:    s_mov_b64 s[6:7], s[2:3]
609 ; GFX1164-NEXT:    s_mov_b32 s32, 0
610 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
611 ; GFX1164-NEXT:    s_swappc_b64 s[30:31], s[16:17]
612 ; GFX1164-NEXT:    v_bfrev_b32_e32 v1, 1
613 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
614 ; GFX1164-NEXT:  .LBB1_1: ; %ComputeLoop
615 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
616 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
617 ; GFX1164-NEXT:    s_ctz_i32_b32 s2, s1
618 ; GFX1164-NEXT:    s_ctz_i32_b32 s3, s0
619 ; GFX1164-NEXT:    s_add_i32 s2, s2, 32
620 ; GFX1164-NEXT:    s_min_u32 s2, s3, s2
621 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
622 ; GFX1164-NEXT:    v_readlane_b32 s4, v0, s2
623 ; GFX1164-NEXT:    s_lshl_b64 s[2:3], 1, s2
624 ; GFX1164-NEXT:    s_and_not1_b64 s[0:1], s[0:1], s[2:3]
625 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
626 ; GFX1164-NEXT:    s_cmp_lg_u64 s[0:1], 0
627 ; GFX1164-NEXT:    v_add_f32_e32 v1, s4, v1
628 ; GFX1164-NEXT:    s_cbranch_scc1 .LBB1_1
629 ; GFX1164-NEXT:  ; %bb.2: ; %ComputeEnd
630 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
631 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
632 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
633 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
634 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v0
635 ; GFX1164-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
636 ; GFX1164-NEXT:    s_cbranch_execz .LBB1_4
637 ; GFX1164-NEXT:  ; %bb.3:
638 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
639 ; GFX1164-NEXT:    v_mov_b32_e32 v0, 0
640 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
641 ; GFX1164-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
642 ; GFX1164-NEXT:  .LBB1_4:
643 ; GFX1164-NEXT:    s_nop 0
644 ; GFX1164-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
645 ; GFX1164-NEXT:    s_endpgm
647 ; GFX1132-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
648 ; GFX1132:       ; %bb.0:
649 ; GFX1132-NEXT:    s_mov_b64 s[34:35], s[4:5]
650 ; GFX1132-NEXT:    v_mov_b32_e32 v31, v0
651 ; GFX1132-NEXT:    s_add_u32 s8, s34, 44
652 ; GFX1132-NEXT:    s_addc_u32 s9, s35, 0
653 ; GFX1132-NEXT:    s_getpc_b64 s[4:5]
654 ; GFX1132-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
655 ; GFX1132-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
656 ; GFX1132-NEXT:    s_mov_b32 s12, s13
657 ; GFX1132-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
658 ; GFX1132-NEXT:    s_mov_b64 s[10:11], s[6:7]
659 ; GFX1132-NEXT:    s_mov_b64 s[4:5], s[0:1]
660 ; GFX1132-NEXT:    s_mov_b64 s[6:7], s[2:3]
661 ; GFX1132-NEXT:    s_mov_b32 s13, s14
662 ; GFX1132-NEXT:    s_mov_b32 s14, s15
663 ; GFX1132-NEXT:    s_mov_b32 s32, 0
664 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
665 ; GFX1132-NEXT:    s_swappc_b64 s[30:31], s[16:17]
666 ; GFX1132-NEXT:    v_bfrev_b32_e32 v1, 1
667 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
668 ; GFX1132-NEXT:  .LBB1_1: ; %ComputeLoop
669 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
670 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
671 ; GFX1132-NEXT:    s_ctz_i32_b32 s1, s0
672 ; GFX1132-NEXT:    v_readlane_b32 s2, v0, s1
673 ; GFX1132-NEXT:    s_lshl_b32 s1, 1, s1
674 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
675 ; GFX1132-NEXT:    s_and_not1_b32 s0, s0, s1
676 ; GFX1132-NEXT:    s_cmp_lg_u32 s0, 0
677 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
678 ; GFX1132-NEXT:    v_add_f32_e32 v1, s2, v1
679 ; GFX1132-NEXT:    s_cbranch_scc1 .LBB1_1
680 ; GFX1132-NEXT:  ; %bb.2: ; %ComputeEnd
681 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
682 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
683 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
684 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v0
685 ; GFX1132-NEXT:    s_xor_b32 s0, exec_lo, s0
686 ; GFX1132-NEXT:    s_cbranch_execz .LBB1_4
687 ; GFX1132-NEXT:  ; %bb.3:
688 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
689 ; GFX1132-NEXT:    v_mov_b32_e32 v0, 0
690 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
691 ; GFX1132-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
692 ; GFX1132-NEXT:  .LBB1_4:
693 ; GFX1132-NEXT:    s_nop 0
694 ; GFX1132-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
695 ; GFX1132-NEXT:    s_endpgm
697 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
698 ; GFX9-DPP:       ; %bb.0:
699 ; GFX9-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
700 ; GFX9-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
701 ; GFX9-DPP-NEXT:    s_mov_b32 s38, -1
702 ; GFX9-DPP-NEXT:    s_mov_b32 s39, 0xe00000
703 ; GFX9-DPP-NEXT:    s_add_u32 s36, s36, s11
704 ; GFX9-DPP-NEXT:    s_addc_u32 s37, s37, 0
705 ; GFX9-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
706 ; GFX9-DPP-NEXT:    s_mov_b32 s12, s8
707 ; GFX9-DPP-NEXT:    s_add_u32 s8, s34, 44
708 ; GFX9-DPP-NEXT:    s_mov_b32 s13, s9
709 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s35, 0
710 ; GFX9-DPP-NEXT:    s_getpc_b64 s[4:5]
711 ; GFX9-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
712 ; GFX9-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
713 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
714 ; GFX9-DPP-NEXT:    s_mov_b32 s14, s10
715 ; GFX9-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
716 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
717 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
718 ; GFX9-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
719 ; GFX9-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
720 ; GFX9-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
721 ; GFX9-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
722 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
723 ; GFX9-DPP-NEXT:    s_mov_b32 s32, 0
724 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
725 ; GFX9-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
726 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v1, exec_lo, 0
727 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v1, exec_hi, v1
728 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, v0
729 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
730 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
731 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
732 ; GFX9-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
733 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
734 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
735 ; GFX9-DPP-NEXT:    s_nop 0
736 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:1 row_mask:0xf bank_mask:0xf
737 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
738 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
739 ; GFX9-DPP-NEXT:    s_nop 1
740 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:2 row_mask:0xf bank_mask:0xf
741 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
742 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
743 ; GFX9-DPP-NEXT:    s_nop 1
744 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:4 row_mask:0xf bank_mask:0xf
745 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
746 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
747 ; GFX9-DPP-NEXT:    s_nop 1
748 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:8 row_mask:0xf bank_mask:0xf
749 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
750 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
751 ; GFX9-DPP-NEXT:    s_nop 1
752 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_bcast:15 row_mask:0xa bank_mask:0xf
753 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
754 ; GFX9-DPP-NEXT:    s_nop 1
755 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_bcast:31 row_mask:0xc bank_mask:0xf
756 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
757 ; GFX9-DPP-NEXT:    v_readlane_b32 s4, v3, 63
758 ; GFX9-DPP-NEXT:    s_mov_b64 exec, s[0:1]
759 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
760 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
761 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB1_3
762 ; GFX9-DPP-NEXT:  ; %bb.1:
763 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
764 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v2, 0
765 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
766 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
767 ; GFX9-DPP-NEXT:    global_load_dword v1, v2, s[0:1]
768 ; GFX9-DPP-NEXT:  .LBB1_2: ; %atomicrmw.start
769 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
770 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
771 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, s4, v1
772 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
773 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
774 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
775 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
776 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
777 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
778 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB1_2
779 ; GFX9-DPP-NEXT:  .LBB1_3:
780 ; GFX9-DPP-NEXT:    s_endpgm
782 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
783 ; GFX1064-DPP:       ; %bb.0:
784 ; GFX1064-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
785 ; GFX1064-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
786 ; GFX1064-DPP-NEXT:    s_mov_b32 s38, -1
787 ; GFX1064-DPP-NEXT:    s_mov_b32 s39, 0x31e16000
788 ; GFX1064-DPP-NEXT:    s_add_u32 s36, s36, s11
789 ; GFX1064-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
790 ; GFX1064-DPP-NEXT:    s_addc_u32 s37, s37, 0
791 ; GFX1064-DPP-NEXT:    s_mov_b32 s12, s8
792 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s34, 44
793 ; GFX1064-DPP-NEXT:    s_mov_b32 s13, s9
794 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s35, 0
795 ; GFX1064-DPP-NEXT:    s_getpc_b64 s[4:5]
796 ; GFX1064-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
797 ; GFX1064-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
798 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
799 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
800 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
801 ; GFX1064-DPP-NEXT:    s_mov_b32 s14, s10
802 ; GFX1064-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
803 ; GFX1064-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
804 ; GFX1064-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
805 ; GFX1064-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
806 ; GFX1064-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
807 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
808 ; GFX1064-DPP-NEXT:    s_mov_b32 s32, 0
809 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
810 ; GFX1064-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
811 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
812 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
813 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
814 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v0
815 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
816 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
817 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
818 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
819 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
820 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
821 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
822 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
823 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
824 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
825 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
826 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
827 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
828 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
829 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
830 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v3
831 ; GFX1064-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
832 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
833 ; GFX1064-DPP-NEXT:    v_readlane_b32 s2, v3, 0
834 ; GFX1064-DPP-NEXT:    v_readlane_b32 s3, v3, 32
835 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
836 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
837 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
838 ; GFX1064-DPP-NEXT:    v_add_f32_e64 v3, s2, s3
839 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
840 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
841 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v2, v3
842 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
843 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
844 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB1_3
845 ; GFX1064-DPP-NEXT:  ; %bb.1:
846 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
847 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v6, 0
848 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
849 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
850 ; GFX1064-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
851 ; GFX1064-DPP-NEXT:  .LBB1_2: ; %atomicrmw.start
852 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
853 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
854 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
855 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
856 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
857 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
858 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
859 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
860 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
861 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB1_2
862 ; GFX1064-DPP-NEXT:  .LBB1_3:
863 ; GFX1064-DPP-NEXT:    s_endpgm
865 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
866 ; GFX1032-DPP:       ; %bb.0:
867 ; GFX1032-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
868 ; GFX1032-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
869 ; GFX1032-DPP-NEXT:    s_mov_b32 s38, -1
870 ; GFX1032-DPP-NEXT:    s_mov_b32 s39, 0x31c16000
871 ; GFX1032-DPP-NEXT:    s_add_u32 s36, s36, s11
872 ; GFX1032-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
873 ; GFX1032-DPP-NEXT:    s_addc_u32 s37, s37, 0
874 ; GFX1032-DPP-NEXT:    s_mov_b32 s12, s8
875 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s34, 44
876 ; GFX1032-DPP-NEXT:    s_mov_b32 s13, s9
877 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s35, 0
878 ; GFX1032-DPP-NEXT:    s_getpc_b64 s[4:5]
879 ; GFX1032-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
880 ; GFX1032-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
881 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
882 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
883 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
884 ; GFX1032-DPP-NEXT:    s_mov_b32 s14, s10
885 ; GFX1032-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
886 ; GFX1032-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
887 ; GFX1032-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
888 ; GFX1032-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
889 ; GFX1032-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
890 ; GFX1032-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
891 ; GFX1032-DPP-NEXT:    s_mov_b32 s32, 0
892 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
893 ; GFX1032-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
894 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
895 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
896 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
897 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v0
898 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
899 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
900 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
901 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
902 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
903 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
904 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
905 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
906 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
907 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
908 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
909 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
910 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
911 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
912 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
913 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v3
914 ; GFX1032-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
915 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
916 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
917 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
918 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v2, v3
919 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
920 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
921 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s0, vcc_lo
922 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB1_3
923 ; GFX1032-DPP-NEXT:  ; %bb.1:
924 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
925 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v6, 0
926 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
927 ; GFX1032-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
928 ; GFX1032-DPP-NEXT:  .LBB1_2: ; %atomicrmw.start
929 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
930 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
931 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
932 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
933 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
934 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
935 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
936 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
937 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
938 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB1_2
939 ; GFX1032-DPP-NEXT:  .LBB1_3:
940 ; GFX1032-DPP-NEXT:    s_endpgm
942 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
943 ; GFX1164-DPP:       ; %bb.0:
944 ; GFX1164-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
945 ; GFX1164-DPP-NEXT:    s_mov_b32 s12, s8
946 ; GFX1164-DPP-NEXT:    s_add_u32 s8, s34, 44
947 ; GFX1164-DPP-NEXT:    s_mov_b32 s13, s9
948 ; GFX1164-DPP-NEXT:    s_addc_u32 s9, s35, 0
949 ; GFX1164-DPP-NEXT:    s_getpc_b64 s[4:5]
950 ; GFX1164-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
951 ; GFX1164-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
952 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v31, v0
953 ; GFX1164-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
954 ; GFX1164-DPP-NEXT:    s_mov_b32 s14, s10
955 ; GFX1164-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
956 ; GFX1164-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
957 ; GFX1164-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
958 ; GFX1164-DPP-NEXT:    s_mov_b32 s32, 0
959 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
960 ; GFX1164-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
961 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
962 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
963 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
964 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v0
965 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
966 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
967 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
968 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
969 ; GFX1164-DPP-NEXT:    s_waitcnt_depctr 0xfff
970 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
971 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
972 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
973 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
974 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
975 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
976 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
977 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
978 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
979 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
980 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
981 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
982 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
983 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
984 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
985 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v1
986 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
987 ; GFX1164-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
988 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
989 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
990 ; GFX1164-DPP-NEXT:    v_permlane64_b32 v2, v1
991 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
992 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
993 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
994 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2)
995 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
996 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
997 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
998 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v4, exec_hi, v0
999 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1000 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, v1
1001 ; GFX1164-DPP-NEXT:    s_mov_b64 s[0:1], exec
1002 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
1003 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB1_2
1004 ; GFX1164-DPP-NEXT:  ; %bb.1:
1005 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
1006 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v4, 0
1007 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1008 ; GFX1164-DPP-NEXT:    global_atomic_add_f32 v4, v0, s[0:1]
1009 ; GFX1164-DPP-NEXT:  .LBB1_2:
1010 ; GFX1164-DPP-NEXT:    s_nop 0
1011 ; GFX1164-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1012 ; GFX1164-DPP-NEXT:    s_endpgm
1014 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_align4_unsafe:
1015 ; GFX1132-DPP:       ; %bb.0:
1016 ; GFX1132-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
1017 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v31, v0
1018 ; GFX1132-DPP-NEXT:    s_add_u32 s8, s34, 44
1019 ; GFX1132-DPP-NEXT:    s_addc_u32 s9, s35, 0
1020 ; GFX1132-DPP-NEXT:    s_getpc_b64 s[4:5]
1021 ; GFX1132-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1022 ; GFX1132-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1023 ; GFX1132-DPP-NEXT:    s_mov_b32 s12, s13
1024 ; GFX1132-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
1025 ; GFX1132-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
1026 ; GFX1132-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
1027 ; GFX1132-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
1028 ; GFX1132-DPP-NEXT:    s_mov_b32 s13, s14
1029 ; GFX1132-DPP-NEXT:    s_mov_b32 s14, s15
1030 ; GFX1132-DPP-NEXT:    s_mov_b32 s32, 0
1031 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1032 ; GFX1132-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1033 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
1034 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
1035 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
1036 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v0
1037 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
1038 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
1039 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
1040 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
1041 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1042 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
1043 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
1044 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
1045 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
1046 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1047 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
1048 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
1049 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
1050 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
1051 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
1052 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
1053 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1054 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
1055 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
1056 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1057 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v1
1058 ; GFX1132-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
1059 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
1060 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
1061 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
1062 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v4, exec_lo, 0
1063 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1064 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v0, v1
1065 ; GFX1132-DPP-NEXT:    s_mov_b32 s0, exec_lo
1066 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
1067 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB1_2
1068 ; GFX1132-DPP-NEXT:  ; %bb.1:
1069 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
1070 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v4, 0
1071 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1072 ; GFX1132-DPP-NEXT:    global_atomic_add_f32 v4, v0, s[0:1]
1073 ; GFX1132-DPP-NEXT:  .LBB1_2:
1074 ; GFX1132-DPP-NEXT:    s_nop 0
1075 ; GFX1132-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1076 ; GFX1132-DPP-NEXT:    s_endpgm
1077   %divValue = call float @div.float.value()
1078   %result = atomicrmw fadd ptr addrspace(1) %ptr, float %divValue syncscope("agent") monotonic, align 4
1079   ret void
1082 define amdgpu_kernel void @global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp(ptr addrspace(1) %ptr) #1 {
1083 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1084 ; GFX7LESS:       ; %bb.0:
1085 ; GFX7LESS-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
1086 ; GFX7LESS-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
1087 ; GFX7LESS-NEXT:    s_mov_b32 s10, -1
1088 ; GFX7LESS-NEXT:    s_mov_b32 s11, 0xe8f000
1089 ; GFX7LESS-NEXT:    s_add_u32 s8, s8, s3
1090 ; GFX7LESS-NEXT:    s_addc_u32 s9, s9, 0
1091 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], exec
1092 ; GFX7LESS-NEXT:    v_mbcnt_lo_u32_b32_e64 v0, s2, 0
1093 ; GFX7LESS-NEXT:    v_mbcnt_hi_u32_b32_e32 v0, s3, v0
1094 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
1095 ; GFX7LESS-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1096 ; GFX7LESS-NEXT:    s_cbranch_execz .LBB2_3
1097 ; GFX7LESS-NEXT:  ; %bb.1:
1098 ; GFX7LESS-NEXT:    s_bcnt1_i32_b64 s6, s[2:3]
1099 ; GFX7LESS-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
1100 ; GFX7LESS-NEXT:    s_mov_b32 s7, 0x43300000
1101 ; GFX7LESS-NEXT:    v_mov_b32_e32 v0, 0
1102 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, 0xc3300000
1103 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], 0
1104 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
1105 ; GFX7LESS-NEXT:    s_load_dword s2, s[0:1], 0x0
1106 ; GFX7LESS-NEXT:    s_mov_b32 s3, 0xf000
1107 ; GFX7LESS-NEXT:    v_add_f64 v[0:1], s[6:7], v[0:1]
1108 ; GFX7LESS-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1109 ; GFX7LESS-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1110 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
1111 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, s2
1112 ; GFX7LESS-NEXT:    s_mov_b32 s2, -1
1113 ; GFX7LESS-NEXT:  .LBB2_2: ; %atomicrmw.start
1114 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
1115 ; GFX7LESS-NEXT:    v_add_f32_e32 v0, v1, v2
1116 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
1117 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v1
1118 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v0
1119 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[0:3], 0 glc
1120 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
1121 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v1
1122 ; GFX7LESS-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
1123 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, v3
1124 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[4:5]
1125 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB2_2
1126 ; GFX7LESS-NEXT:  .LBB2_3:
1127 ; GFX7LESS-NEXT:    s_endpgm
1129 ; GFX9-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1130 ; GFX9:       ; %bb.0:
1131 ; GFX9-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
1132 ; GFX9-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
1133 ; GFX9-NEXT:    s_mov_b32 s10, -1
1134 ; GFX9-NEXT:    s_mov_b32 s11, 0xe00000
1135 ; GFX9-NEXT:    s_add_u32 s8, s8, s3
1136 ; GFX9-NEXT:    s_mov_b64 s[2:3], exec
1137 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
1138 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
1139 ; GFX9-NEXT:    s_addc_u32 s9, s9, 0
1140 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
1141 ; GFX9-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1142 ; GFX9-NEXT:    s_cbranch_execz .LBB2_3
1143 ; GFX9-NEXT:  ; %bb.1:
1144 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
1145 ; GFX9-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
1146 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0xc3300000
1147 ; GFX9-NEXT:    s_mov_b32 s3, 0x43300000
1148 ; GFX9-NEXT:    v_add_f64 v[0:1], s[2:3], v[0:1]
1149 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1150 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
1151 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
1152 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1153 ; GFX9-NEXT:    s_load_dword s4, s[0:1], 0x0
1154 ; GFX9-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1155 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1156 ; GFX9-NEXT:    v_mov_b32_e32 v1, s4
1157 ; GFX9-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1158 ; GFX9-NEXT:  .LBB2_2: ; %atomicrmw.start
1159 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
1160 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
1161 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1162 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1163 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1164 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1165 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
1166 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
1167 ; GFX9-NEXT:    s_cbranch_execnz .LBB2_2
1168 ; GFX9-NEXT:  .LBB2_3:
1169 ; GFX9-NEXT:    s_endpgm
1171 ; GFX1064-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1172 ; GFX1064:       ; %bb.0:
1173 ; GFX1064-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
1174 ; GFX1064-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
1175 ; GFX1064-NEXT:    s_mov_b32 s10, -1
1176 ; GFX1064-NEXT:    s_mov_b32 s11, 0x31e16000
1177 ; GFX1064-NEXT:    s_add_u32 s8, s8, s3
1178 ; GFX1064-NEXT:    s_mov_b64 s[2:3], exec
1179 ; GFX1064-NEXT:    s_addc_u32 s9, s9, 0
1180 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
1181 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
1182 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
1183 ; GFX1064-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1184 ; GFX1064-NEXT:    s_cbranch_execz .LBB2_3
1185 ; GFX1064-NEXT:  ; %bb.1:
1186 ; GFX1064-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
1187 ; GFX1064-NEXT:    s_mov_b32 s3, 0x43300000
1188 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1189 ; GFX1064-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[2:3]
1190 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
1191 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
1192 ; GFX1064-NEXT:    s_load_dword s2, s[0:1], 0x0
1193 ; GFX1064-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1194 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
1195 ; GFX1064-NEXT:    v_mov_b32_e32 v1, s2
1196 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
1197 ; GFX1064-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1198 ; GFX1064-NEXT:  .LBB2_2: ; %atomicrmw.start
1199 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
1200 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
1201 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1202 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
1203 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1204 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
1205 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1206 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
1207 ; GFX1064-NEXT:    s_cbranch_execnz .LBB2_2
1208 ; GFX1064-NEXT:  .LBB2_3:
1209 ; GFX1064-NEXT:    s_endpgm
1211 ; GFX1032-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1212 ; GFX1032:       ; %bb.0:
1213 ; GFX1032-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
1214 ; GFX1032-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
1215 ; GFX1032-NEXT:    s_mov_b32 s10, -1
1216 ; GFX1032-NEXT:    s_mov_b32 s11, 0x31c16000
1217 ; GFX1032-NEXT:    s_add_u32 s8, s8, s3
1218 ; GFX1032-NEXT:    s_mov_b32 s3, exec_lo
1219 ; GFX1032-NEXT:    s_addc_u32 s9, s9, 0
1220 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
1221 ; GFX1032-NEXT:    s_mov_b32 s2, 0
1222 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
1223 ; GFX1032-NEXT:    s_and_saveexec_b32 s4, vcc_lo
1224 ; GFX1032-NEXT:    s_cbranch_execz .LBB2_3
1225 ; GFX1032-NEXT:  ; %bb.1:
1226 ; GFX1032-NEXT:    s_bcnt1_i32_b32 s4, s3
1227 ; GFX1032-NEXT:    s_mov_b32 s5, 0x43300000
1228 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1229 ; GFX1032-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[4:5]
1230 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
1231 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
1232 ; GFX1032-NEXT:    s_load_dword s3, s[0:1], 0x0
1233 ; GFX1032-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1234 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
1235 ; GFX1032-NEXT:    v_mov_b32_e32 v1, s3
1236 ; GFX1032-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1237 ; GFX1032-NEXT:  .LBB2_2: ; %atomicrmw.start
1238 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
1239 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
1240 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1241 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
1242 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
1243 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
1244 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
1245 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
1246 ; GFX1032-NEXT:    s_cbranch_execnz .LBB2_2
1247 ; GFX1032-NEXT:  .LBB2_3:
1248 ; GFX1032-NEXT:    s_endpgm
1250 ; GFX1164-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1251 ; GFX1164:       ; %bb.0:
1252 ; GFX1164-NEXT:    s_bcnt1_i32_b64 s2, exec
1253 ; GFX1164-NEXT:    v_mov_b32_e32 v0, 0x43300000
1254 ; GFX1164-NEXT:    v_mov_b32_e32 v1, s2
1255 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
1256 ; GFX1164-NEXT:    s_mov_b64 s[2:3], exec
1257 ; GFX1164-NEXT:    s_clause 0x1
1258 ; GFX1164-NEXT:    scratch_store_b32 off, v0, off offset:12
1259 ; GFX1164-NEXT:    scratch_store_b32 off, v1, off offset:8
1260 ; GFX1164-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
1261 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v2, exec_hi, v2
1262 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1263 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v2
1264 ; GFX1164-NEXT:    s_cbranch_execz .LBB2_3
1265 ; GFX1164-NEXT:  ; %bb.1:
1266 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
1267 ; GFX1164-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
1268 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1269 ; GFX1164-NEXT:    v_mov_b32_e32 v3, 0
1270 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
1271 ; GFX1164-NEXT:    s_load_b32 s2, s[0:1], 0x0
1272 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
1273 ; GFX1164-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1274 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
1275 ; GFX1164-NEXT:    v_mov_b32_e32 v1, s2
1276 ; GFX1164-NEXT:    s_mov_b64 s[2:3], 0
1277 ; GFX1164-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1278 ; GFX1164-NEXT:  .LBB2_2: ; %atomicrmw.start
1279 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
1280 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1281 ; GFX1164-NEXT:    v_add_f32_e32 v0, v1, v2
1282 ; GFX1164-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
1283 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
1284 ; GFX1164-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1285 ; GFX1164-NEXT:    v_mov_b32_e32 v1, v0
1286 ; GFX1164-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1287 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1288 ; GFX1164-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
1289 ; GFX1164-NEXT:    s_cbranch_execnz .LBB2_2
1290 ; GFX1164-NEXT:  .LBB2_3:
1291 ; GFX1164-NEXT:    s_endpgm
1293 ; GFX1132-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1294 ; GFX1132:       ; %bb.0:
1295 ; GFX1132-NEXT:    s_bcnt1_i32_b32 s2, exec_lo
1296 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1297 ; GFX1132-NEXT:    v_dual_mov_b32 v0, 0x43300000 :: v_dual_mov_b32 v1, s2
1298 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
1299 ; GFX1132-NEXT:    s_mov_b32 s2, 0
1300 ; GFX1132-NEXT:    s_mov_b32 s3, exec_lo
1301 ; GFX1132-NEXT:    s_clause 0x1
1302 ; GFX1132-NEXT:    scratch_store_b32 off, v0, off offset:12
1303 ; GFX1132-NEXT:    scratch_store_b32 off, v1, off offset:8
1304 ; GFX1132-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
1305 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v2
1306 ; GFX1132-NEXT:    s_cbranch_execz .LBB2_3
1307 ; GFX1132-NEXT:  ; %bb.1:
1308 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
1309 ; GFX1132-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
1310 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1311 ; GFX1132-NEXT:    v_mov_b32_e32 v3, 0
1312 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
1313 ; GFX1132-NEXT:    s_load_b32 s3, s[0:1], 0x0
1314 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1315 ; GFX1132-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1316 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
1317 ; GFX1132-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mul_f32 v2, 4.0, v0
1318 ; GFX1132-NEXT:  .LBB2_2: ; %atomicrmw.start
1319 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
1320 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1321 ; GFX1132-NEXT:    v_add_f32_e32 v0, v1, v2
1322 ; GFX1132-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
1323 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
1324 ; GFX1132-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
1325 ; GFX1132-NEXT:    v_mov_b32_e32 v1, v0
1326 ; GFX1132-NEXT:    s_or_b32 s2, vcc_lo, s2
1327 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1328 ; GFX1132-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
1329 ; GFX1132-NEXT:    s_cbranch_execnz .LBB2_2
1330 ; GFX1132-NEXT:  .LBB2_3:
1331 ; GFX1132-NEXT:    s_endpgm
1333 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1334 ; GFX9-DPP:       ; %bb.0:
1335 ; GFX9-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
1336 ; GFX9-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
1337 ; GFX9-DPP-NEXT:    s_mov_b32 s10, -1
1338 ; GFX9-DPP-NEXT:    s_mov_b32 s11, 0xe00000
1339 ; GFX9-DPP-NEXT:    s_add_u32 s8, s8, s3
1340 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], exec
1341 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
1342 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
1343 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s9, 0
1344 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
1345 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1346 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB2_3
1347 ; GFX9-DPP-NEXT:  ; %bb.1:
1348 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v0, 0
1349 ; GFX9-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
1350 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, 0xc3300000
1351 ; GFX9-DPP-NEXT:    s_mov_b32 s3, 0x43300000
1352 ; GFX9-DPP-NEXT:    v_add_f64 v[0:1], s[2:3], v[0:1]
1353 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1354 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
1355 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, 0
1356 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1357 ; GFX9-DPP-NEXT:    s_load_dword s4, s[0:1], 0x0
1358 ; GFX9-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1359 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1360 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, s4
1361 ; GFX9-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1362 ; GFX9-DPP-NEXT:  .LBB2_2: ; %atomicrmw.start
1363 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
1364 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
1365 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1366 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
1367 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1368 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1369 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
1370 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
1371 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB2_2
1372 ; GFX9-DPP-NEXT:  .LBB2_3:
1373 ; GFX9-DPP-NEXT:    s_endpgm
1375 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1376 ; GFX1064-DPP:       ; %bb.0:
1377 ; GFX1064-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
1378 ; GFX1064-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
1379 ; GFX1064-DPP-NEXT:    s_mov_b32 s10, -1
1380 ; GFX1064-DPP-NEXT:    s_mov_b32 s11, 0x31e16000
1381 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s8, s3
1382 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], exec
1383 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s9, 0
1384 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
1385 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
1386 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
1387 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
1388 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB2_3
1389 ; GFX1064-DPP-NEXT:  ; %bb.1:
1390 ; GFX1064-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
1391 ; GFX1064-DPP-NEXT:    s_mov_b32 s3, 0x43300000
1392 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1393 ; GFX1064-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[2:3]
1394 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v3, 0
1395 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1396 ; GFX1064-DPP-NEXT:    s_load_dword s2, s[0:1], 0x0
1397 ; GFX1064-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1398 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1399 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, s2
1400 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
1401 ; GFX1064-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1402 ; GFX1064-DPP-NEXT:  .LBB2_2: ; %atomicrmw.start
1403 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
1404 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
1405 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1406 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
1407 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1408 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
1409 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1410 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
1411 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB2_2
1412 ; GFX1064-DPP-NEXT:  .LBB2_3:
1413 ; GFX1064-DPP-NEXT:    s_endpgm
1415 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1416 ; GFX1032-DPP:       ; %bb.0:
1417 ; GFX1032-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
1418 ; GFX1032-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
1419 ; GFX1032-DPP-NEXT:    s_mov_b32 s10, -1
1420 ; GFX1032-DPP-NEXT:    s_mov_b32 s11, 0x31c16000
1421 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s8, s3
1422 ; GFX1032-DPP-NEXT:    s_mov_b32 s3, exec_lo
1423 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s9, 0
1424 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
1425 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
1426 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
1427 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s4, vcc_lo
1428 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB2_3
1429 ; GFX1032-DPP-NEXT:  ; %bb.1:
1430 ; GFX1032-DPP-NEXT:    s_bcnt1_i32_b32 s4, s3
1431 ; GFX1032-DPP-NEXT:    s_mov_b32 s5, 0x43300000
1432 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1433 ; GFX1032-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[4:5]
1434 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v3, 0
1435 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1436 ; GFX1032-DPP-NEXT:    s_load_dword s3, s[0:1], 0x0
1437 ; GFX1032-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1438 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1439 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, s3
1440 ; GFX1032-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1441 ; GFX1032-DPP-NEXT:  .LBB2_2: ; %atomicrmw.start
1442 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
1443 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
1444 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1445 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
1446 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
1447 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
1448 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
1449 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
1450 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB2_2
1451 ; GFX1032-DPP-NEXT:  .LBB2_3:
1452 ; GFX1032-DPP-NEXT:    s_endpgm
1454 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1455 ; GFX1164-DPP:       ; %bb.0:
1456 ; GFX1164-DPP-NEXT:    s_bcnt1_i32_b64 s2, exec
1457 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, 0x43300000
1458 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, s2
1459 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
1460 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], exec
1461 ; GFX1164-DPP-NEXT:    s_clause 0x1
1462 ; GFX1164-DPP-NEXT:    scratch_store_b32 off, v0, off offset:12
1463 ; GFX1164-DPP-NEXT:    scratch_store_b32 off, v1, off offset:8
1464 ; GFX1164-DPP-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
1465 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v2, exec_hi, v2
1466 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1467 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v2
1468 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB2_3
1469 ; GFX1164-DPP-NEXT:  ; %bb.1:
1470 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
1471 ; GFX1164-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
1472 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1473 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v3, 0
1474 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1475 ; GFX1164-DPP-NEXT:    s_load_b32 s2, s[0:1], 0x0
1476 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
1477 ; GFX1164-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1478 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1479 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, s2
1480 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], 0
1481 ; GFX1164-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
1482 ; GFX1164-DPP-NEXT:  .LBB2_2: ; %atomicrmw.start
1483 ; GFX1164-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
1484 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1485 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
1486 ; GFX1164-DPP-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
1487 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
1488 ; GFX1164-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1489 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, v0
1490 ; GFX1164-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1491 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1492 ; GFX1164-DPP-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
1493 ; GFX1164-DPP-NEXT:    s_cbranch_execnz .LBB2_2
1494 ; GFX1164-DPP-NEXT:  .LBB2_3:
1495 ; GFX1164-DPP-NEXT:    s_endpgm
1497 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_one_as_scope_unsafe_structfp:
1498 ; GFX1132-DPP:       ; %bb.0:
1499 ; GFX1132-DPP-NEXT:    s_bcnt1_i32_b32 s2, exec_lo
1500 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1501 ; GFX1132-DPP-NEXT:    v_dual_mov_b32 v0, 0x43300000 :: v_dual_mov_b32 v1, s2
1502 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
1503 ; GFX1132-DPP-NEXT:    s_mov_b32 s2, 0
1504 ; GFX1132-DPP-NEXT:    s_mov_b32 s3, exec_lo
1505 ; GFX1132-DPP-NEXT:    s_clause 0x1
1506 ; GFX1132-DPP-NEXT:    scratch_store_b32 off, v0, off offset:12
1507 ; GFX1132-DPP-NEXT:    scratch_store_b32 off, v1, off offset:8
1508 ; GFX1132-DPP-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
1509 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v2
1510 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB2_3
1511 ; GFX1132-DPP-NEXT:  ; %bb.1:
1512 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
1513 ; GFX1132-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
1514 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1515 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v3, 0
1516 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1517 ; GFX1132-DPP-NEXT:    s_load_b32 s3, s[0:1], 0x0
1518 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1519 ; GFX1132-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
1520 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1521 ; GFX1132-DPP-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mul_f32 v2, 4.0, v0
1522 ; GFX1132-DPP-NEXT:  .LBB2_2: ; %atomicrmw.start
1523 ; GFX1132-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
1524 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1525 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
1526 ; GFX1132-DPP-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
1527 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
1528 ; GFX1132-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
1529 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v1, v0
1530 ; GFX1132-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
1531 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1532 ; GFX1132-DPP-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
1533 ; GFX1132-DPP-NEXT:    s_cbranch_execnz .LBB2_2
1534 ; GFX1132-DPP-NEXT:  .LBB2_3:
1535 ; GFX1132-DPP-NEXT:    s_endpgm
1536   %result = atomicrmw fadd ptr addrspace(1) %ptr, float 4.0 syncscope("one-as") monotonic
1537   ret void
1541 define amdgpu_kernel void @global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp(ptr addrspace(1) %ptr) #1 {
1542 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
1543 ; GFX7LESS:       ; %bb.0:
1544 ; GFX7LESS-NEXT:    s_mov_b32 s32, 0
1545 ; GFX7LESS-NEXT:    s_mov_b32 s40, SCRATCH_RSRC_DWORD0
1546 ; GFX7LESS-NEXT:    s_mov_b32 s41, SCRATCH_RSRC_DWORD1
1547 ; GFX7LESS-NEXT:    s_mov_b32 s42, -1
1548 ; GFX7LESS-NEXT:    s_mov_b32 s43, 0xe8f000
1549 ; GFX7LESS-NEXT:    s_add_u32 s40, s40, s11
1550 ; GFX7LESS-NEXT:    s_addc_u32 s41, s41, 0
1551 ; GFX7LESS-NEXT:    s_mov_b32 s14, s10
1552 ; GFX7LESS-NEXT:    s_mov_b32 s13, s9
1553 ; GFX7LESS-NEXT:    s_mov_b32 s12, s8
1554 ; GFX7LESS-NEXT:    s_mov_b64 s[10:11], s[6:7]
1555 ; GFX7LESS-NEXT:    s_load_dwordx2 s[36:37], s[4:5], 0x9
1556 ; GFX7LESS-NEXT:    s_mov_b32 s39, 0xf000
1557 ; GFX7LESS-NEXT:    s_mov_b32 s38, -1
1558 ; GFX7LESS-NEXT:    s_add_u32 s8, s4, 44
1559 ; GFX7LESS-NEXT:    s_addc_u32 s9, s5, 0
1560 ; GFX7LESS-NEXT:    s_getpc_b64 s[4:5]
1561 ; GFX7LESS-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1562 ; GFX7LESS-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1563 ; GFX7LESS-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
1564 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
1565 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
1566 ; GFX7LESS-NEXT:    v_or_b32_e32 v0, v0, v1
1567 ; GFX7LESS-NEXT:    v_or_b32_e32 v31, v0, v2
1568 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], s[0:1]
1569 ; GFX7LESS-NEXT:    s_mov_b64 s[6:7], s[2:3]
1570 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], s[40:41]
1571 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], s[42:43]
1572 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
1573 ; GFX7LESS-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1574 ; GFX7LESS-NEXT:    buffer_load_dword v2, off, s[36:39], 0
1575 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], 0
1576 ; GFX7LESS-NEXT:  .LBB3_1: ; %atomicrmw.start
1577 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
1578 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
1579 ; GFX7LESS-NEXT:    v_add_f32_e32 v1, v2, v0
1580 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
1581 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v2
1582 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v1
1583 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[36:39], 0 glc
1584 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
1585 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v2
1586 ; GFX7LESS-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]
1587 ; GFX7LESS-NEXT:    v_mov_b32_e32 v2, v3
1588 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[0:1]
1589 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB3_1
1590 ; GFX7LESS-NEXT:  ; %bb.2: ; %atomicrmw.end
1591 ; GFX7LESS-NEXT:    s_endpgm
1593 ; GFX9-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
1594 ; GFX9:       ; %bb.0:
1595 ; GFX9-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
1596 ; GFX9-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
1597 ; GFX9-NEXT:    s_mov_b32 s38, -1
1598 ; GFX9-NEXT:    s_mov_b32 s39, 0xe00000
1599 ; GFX9-NEXT:    s_add_u32 s36, s36, s11
1600 ; GFX9-NEXT:    s_addc_u32 s37, s37, 0
1601 ; GFX9-NEXT:    s_mov_b64 s[34:35], s[4:5]
1602 ; GFX9-NEXT:    s_mov_b32 s12, s8
1603 ; GFX9-NEXT:    s_add_u32 s8, s34, 44
1604 ; GFX9-NEXT:    s_mov_b32 s13, s9
1605 ; GFX9-NEXT:    s_addc_u32 s9, s35, 0
1606 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
1607 ; GFX9-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1608 ; GFX9-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1609 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
1610 ; GFX9-NEXT:    s_mov_b32 s14, s10
1611 ; GFX9-NEXT:    s_mov_b64 s[10:11], s[6:7]
1612 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
1613 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
1614 ; GFX9-NEXT:    s_mov_b64 s[4:5], s[0:1]
1615 ; GFX9-NEXT:    s_mov_b64 s[6:7], s[2:3]
1616 ; GFX9-NEXT:    s_mov_b64 s[0:1], s[36:37]
1617 ; GFX9-NEXT:    v_or3_b32 v31, v0, v1, v2
1618 ; GFX9-NEXT:    s_mov_b64 s[2:3], s[38:39]
1619 ; GFX9-NEXT:    s_mov_b32 s32, 0
1620 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1621 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1622 ; GFX9-NEXT:    s_mov_b64 s[0:1], exec
1623 ; GFX9-NEXT:    v_bfrev_b32_e32 v2, 1
1624 ; GFX9-NEXT:  .LBB3_1: ; %ComputeLoop
1625 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
1626 ; GFX9-NEXT:    s_ff1_i32_b32 s2, s1
1627 ; GFX9-NEXT:    s_ff1_i32_b32 s3, s0
1628 ; GFX9-NEXT:    s_add_i32 s2, s2, 32
1629 ; GFX9-NEXT:    s_min_u32 s2, s3, s2
1630 ; GFX9-NEXT:    v_readlane_b32 s4, v0, s2
1631 ; GFX9-NEXT:    s_lshl_b64 s[2:3], 1, s2
1632 ; GFX9-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
1633 ; GFX9-NEXT:    s_cmp_lg_u64 s[0:1], 0
1634 ; GFX9-NEXT:    v_add_f32_e32 v2, s4, v2
1635 ; GFX9-NEXT:    s_cbranch_scc1 .LBB3_1
1636 ; GFX9-NEXT:  ; %bb.2: ; %ComputeEnd
1637 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
1638 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
1639 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
1640 ; GFX9-NEXT:    s_and_saveexec_b64 s[0:1], vcc
1641 ; GFX9-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
1642 ; GFX9-NEXT:    s_cbranch_execz .LBB3_5
1643 ; GFX9-NEXT:  ; %bb.3:
1644 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
1645 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
1646 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
1647 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1648 ; GFX9-NEXT:    global_load_dword v1, v3, s[0:1]
1649 ; GFX9-NEXT:  .LBB3_4: ; %atomicrmw.start
1650 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
1651 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1652 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
1653 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1654 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1655 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1656 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1657 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
1658 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
1659 ; GFX9-NEXT:    s_cbranch_execnz .LBB3_4
1660 ; GFX9-NEXT:  .LBB3_5:
1661 ; GFX9-NEXT:    s_endpgm
1663 ; GFX1064-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
1664 ; GFX1064:       ; %bb.0:
1665 ; GFX1064-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
1666 ; GFX1064-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
1667 ; GFX1064-NEXT:    s_mov_b32 s38, -1
1668 ; GFX1064-NEXT:    s_mov_b32 s39, 0x31e16000
1669 ; GFX1064-NEXT:    s_add_u32 s36, s36, s11
1670 ; GFX1064-NEXT:    s_mov_b64 s[34:35], s[4:5]
1671 ; GFX1064-NEXT:    s_addc_u32 s37, s37, 0
1672 ; GFX1064-NEXT:    s_mov_b32 s12, s8
1673 ; GFX1064-NEXT:    s_add_u32 s8, s34, 44
1674 ; GFX1064-NEXT:    s_mov_b32 s13, s9
1675 ; GFX1064-NEXT:    s_addc_u32 s9, s35, 0
1676 ; GFX1064-NEXT:    s_getpc_b64 s[4:5]
1677 ; GFX1064-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1678 ; GFX1064-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1679 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
1680 ; GFX1064-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
1681 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
1682 ; GFX1064-NEXT:    s_mov_b32 s14, s10
1683 ; GFX1064-NEXT:    s_mov_b64 s[10:11], s[6:7]
1684 ; GFX1064-NEXT:    s_mov_b64 s[4:5], s[0:1]
1685 ; GFX1064-NEXT:    s_mov_b64 s[6:7], s[2:3]
1686 ; GFX1064-NEXT:    v_or3_b32 v31, v0, v1, v2
1687 ; GFX1064-NEXT:    s_mov_b64 s[0:1], s[36:37]
1688 ; GFX1064-NEXT:    s_mov_b64 s[2:3], s[38:39]
1689 ; GFX1064-NEXT:    s_mov_b32 s32, 0
1690 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
1691 ; GFX1064-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1692 ; GFX1064-NEXT:    v_bfrev_b32_e32 v2, 1
1693 ; GFX1064-NEXT:    s_mov_b64 s[0:1], exec
1694 ; GFX1064-NEXT:  .LBB3_1: ; %ComputeLoop
1695 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
1696 ; GFX1064-NEXT:    s_ff1_i32_b32 s2, s1
1697 ; GFX1064-NEXT:    s_ff1_i32_b32 s3, s0
1698 ; GFX1064-NEXT:    s_add_i32 s2, s2, 32
1699 ; GFX1064-NEXT:    s_min_u32 s2, s3, s2
1700 ; GFX1064-NEXT:    v_readlane_b32 s4, v0, s2
1701 ; GFX1064-NEXT:    s_lshl_b64 s[2:3], 1, s2
1702 ; GFX1064-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
1703 ; GFX1064-NEXT:    s_cmp_lg_u64 s[0:1], 0
1704 ; GFX1064-NEXT:    v_add_f32_e32 v2, s4, v2
1705 ; GFX1064-NEXT:    s_cbranch_scc1 .LBB3_1
1706 ; GFX1064-NEXT:  ; %bb.2: ; %ComputeEnd
1707 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
1708 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
1709 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
1710 ; GFX1064-NEXT:    s_and_saveexec_b64 s[0:1], vcc
1711 ; GFX1064-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
1712 ; GFX1064-NEXT:    s_cbranch_execz .LBB3_5
1713 ; GFX1064-NEXT:  ; %bb.3:
1714 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
1715 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
1716 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
1717 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
1718 ; GFX1064-NEXT:    global_load_dword v1, v3, s[0:1]
1719 ; GFX1064-NEXT:  .LBB3_4: ; %atomicrmw.start
1720 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
1721 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
1722 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
1723 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1724 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
1725 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1726 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
1727 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1728 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
1729 ; GFX1064-NEXT:    s_cbranch_execnz .LBB3_4
1730 ; GFX1064-NEXT:  .LBB3_5:
1731 ; GFX1064-NEXT:    s_endpgm
1733 ; GFX1032-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
1734 ; GFX1032:       ; %bb.0:
1735 ; GFX1032-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
1736 ; GFX1032-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
1737 ; GFX1032-NEXT:    s_mov_b32 s38, -1
1738 ; GFX1032-NEXT:    s_mov_b32 s39, 0x31c16000
1739 ; GFX1032-NEXT:    s_add_u32 s36, s36, s11
1740 ; GFX1032-NEXT:    s_mov_b64 s[34:35], s[4:5]
1741 ; GFX1032-NEXT:    s_addc_u32 s37, s37, 0
1742 ; GFX1032-NEXT:    s_mov_b32 s12, s8
1743 ; GFX1032-NEXT:    s_add_u32 s8, s34, 44
1744 ; GFX1032-NEXT:    s_mov_b32 s13, s9
1745 ; GFX1032-NEXT:    s_addc_u32 s9, s35, 0
1746 ; GFX1032-NEXT:    s_getpc_b64 s[4:5]
1747 ; GFX1032-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1748 ; GFX1032-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1749 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
1750 ; GFX1032-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
1751 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
1752 ; GFX1032-NEXT:    s_mov_b32 s14, s10
1753 ; GFX1032-NEXT:    s_mov_b64 s[10:11], s[6:7]
1754 ; GFX1032-NEXT:    s_mov_b64 s[4:5], s[0:1]
1755 ; GFX1032-NEXT:    s_mov_b64 s[6:7], s[2:3]
1756 ; GFX1032-NEXT:    v_or3_b32 v31, v0, v1, v2
1757 ; GFX1032-NEXT:    s_mov_b64 s[0:1], s[36:37]
1758 ; GFX1032-NEXT:    s_mov_b64 s[2:3], s[38:39]
1759 ; GFX1032-NEXT:    s_mov_b32 s32, 0
1760 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
1761 ; GFX1032-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1762 ; GFX1032-NEXT:    v_bfrev_b32_e32 v2, 1
1763 ; GFX1032-NEXT:    s_mov_b32 s0, exec_lo
1764 ; GFX1032-NEXT:  .LBB3_1: ; %ComputeLoop
1765 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
1766 ; GFX1032-NEXT:    s_ff1_i32_b32 s1, s0
1767 ; GFX1032-NEXT:    v_readlane_b32 s2, v0, s1
1768 ; GFX1032-NEXT:    s_lshl_b32 s1, 1, s1
1769 ; GFX1032-NEXT:    s_andn2_b32 s0, s0, s1
1770 ; GFX1032-NEXT:    s_cmp_lg_u32 s0, 0
1771 ; GFX1032-NEXT:    v_add_f32_e32 v2, s2, v2
1772 ; GFX1032-NEXT:    s_cbranch_scc1 .LBB3_1
1773 ; GFX1032-NEXT:  ; %bb.2: ; %ComputeEnd
1774 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
1775 ; GFX1032-NEXT:    s_mov_b32 s2, 0
1776 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
1777 ; GFX1032-NEXT:    s_and_saveexec_b32 s0, vcc_lo
1778 ; GFX1032-NEXT:    s_xor_b32 s0, exec_lo, s0
1779 ; GFX1032-NEXT:    s_cbranch_execz .LBB3_5
1780 ; GFX1032-NEXT:  ; %bb.3:
1781 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
1782 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
1783 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
1784 ; GFX1032-NEXT:    global_load_dword v1, v3, s[0:1]
1785 ; GFX1032-NEXT:  .LBB3_4: ; %atomicrmw.start
1786 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
1787 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
1788 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
1789 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
1790 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
1791 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
1792 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
1793 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
1794 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
1795 ; GFX1032-NEXT:    s_cbranch_execnz .LBB3_4
1796 ; GFX1032-NEXT:  .LBB3_5:
1797 ; GFX1032-NEXT:    s_endpgm
1799 ; GFX1164-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
1800 ; GFX1164:       ; %bb.0:
1801 ; GFX1164-NEXT:    s_mov_b64 s[34:35], s[4:5]
1802 ; GFX1164-NEXT:    s_mov_b32 s12, s8
1803 ; GFX1164-NEXT:    s_add_u32 s8, s34, 44
1804 ; GFX1164-NEXT:    s_mov_b32 s13, s9
1805 ; GFX1164-NEXT:    s_addc_u32 s9, s35, 0
1806 ; GFX1164-NEXT:    s_getpc_b64 s[4:5]
1807 ; GFX1164-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1808 ; GFX1164-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1809 ; GFX1164-NEXT:    v_mov_b32_e32 v31, v0
1810 ; GFX1164-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
1811 ; GFX1164-NEXT:    s_mov_b32 s14, s10
1812 ; GFX1164-NEXT:    s_mov_b64 s[10:11], s[6:7]
1813 ; GFX1164-NEXT:    s_mov_b64 s[4:5], s[0:1]
1814 ; GFX1164-NEXT:    s_mov_b64 s[6:7], s[2:3]
1815 ; GFX1164-NEXT:    s_mov_b32 s32, 0
1816 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
1817 ; GFX1164-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1818 ; GFX1164-NEXT:    v_bfrev_b32_e32 v2, 1
1819 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
1820 ; GFX1164-NEXT:  .LBB3_1: ; %ComputeLoop
1821 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
1822 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
1823 ; GFX1164-NEXT:    s_ctz_i32_b32 s2, s1
1824 ; GFX1164-NEXT:    s_ctz_i32_b32 s3, s0
1825 ; GFX1164-NEXT:    s_add_i32 s2, s2, 32
1826 ; GFX1164-NEXT:    s_min_u32 s2, s3, s2
1827 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
1828 ; GFX1164-NEXT:    v_readlane_b32 s4, v0, s2
1829 ; GFX1164-NEXT:    s_lshl_b64 s[2:3], 1, s2
1830 ; GFX1164-NEXT:    s_and_not1_b64 s[0:1], s[0:1], s[2:3]
1831 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1832 ; GFX1164-NEXT:    s_cmp_lg_u64 s[0:1], 0
1833 ; GFX1164-NEXT:    v_add_f32_e32 v2, s4, v2
1834 ; GFX1164-NEXT:    s_cbranch_scc1 .LBB3_1
1835 ; GFX1164-NEXT:  ; %bb.2: ; %ComputeEnd
1836 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
1837 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
1838 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
1839 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
1840 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v0
1841 ; GFX1164-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
1842 ; GFX1164-NEXT:    s_cbranch_execz .LBB3_5
1843 ; GFX1164-NEXT:  ; %bb.3:
1844 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
1845 ; GFX1164-NEXT:    v_mov_b32_e32 v3, 0
1846 ; GFX1164-NEXT:    s_mov_b64 s[2:3], 0
1847 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
1848 ; GFX1164-NEXT:    global_load_b32 v1, v3, s[0:1]
1849 ; GFX1164-NEXT:  .LBB3_4: ; %atomicrmw.start
1850 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
1851 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
1852 ; GFX1164-NEXT:    v_add_f32_e32 v0, v1, v2
1853 ; GFX1164-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
1854 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
1855 ; GFX1164-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
1856 ; GFX1164-NEXT:    v_mov_b32_e32 v1, v0
1857 ; GFX1164-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
1858 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1859 ; GFX1164-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
1860 ; GFX1164-NEXT:    s_cbranch_execnz .LBB3_4
1861 ; GFX1164-NEXT:  .LBB3_5:
1862 ; GFX1164-NEXT:    s_endpgm
1864 ; GFX1132-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
1865 ; GFX1132:       ; %bb.0:
1866 ; GFX1132-NEXT:    s_mov_b64 s[34:35], s[4:5]
1867 ; GFX1132-NEXT:    v_mov_b32_e32 v31, v0
1868 ; GFX1132-NEXT:    s_add_u32 s8, s34, 44
1869 ; GFX1132-NEXT:    s_addc_u32 s9, s35, 0
1870 ; GFX1132-NEXT:    s_getpc_b64 s[4:5]
1871 ; GFX1132-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1872 ; GFX1132-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1873 ; GFX1132-NEXT:    s_mov_b32 s12, s13
1874 ; GFX1132-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
1875 ; GFX1132-NEXT:    s_mov_b64 s[10:11], s[6:7]
1876 ; GFX1132-NEXT:    s_mov_b64 s[4:5], s[0:1]
1877 ; GFX1132-NEXT:    s_mov_b64 s[6:7], s[2:3]
1878 ; GFX1132-NEXT:    s_mov_b32 s13, s14
1879 ; GFX1132-NEXT:    s_mov_b32 s14, s15
1880 ; GFX1132-NEXT:    s_mov_b32 s32, 0
1881 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
1882 ; GFX1132-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1883 ; GFX1132-NEXT:    v_bfrev_b32_e32 v2, 1
1884 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
1885 ; GFX1132-NEXT:  .LBB3_1: ; %ComputeLoop
1886 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
1887 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
1888 ; GFX1132-NEXT:    s_ctz_i32_b32 s1, s0
1889 ; GFX1132-NEXT:    v_readlane_b32 s2, v0, s1
1890 ; GFX1132-NEXT:    s_lshl_b32 s1, 1, s1
1891 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
1892 ; GFX1132-NEXT:    s_and_not1_b32 s0, s0, s1
1893 ; GFX1132-NEXT:    s_cmp_lg_u32 s0, 0
1894 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1895 ; GFX1132-NEXT:    v_add_f32_e32 v2, s2, v2
1896 ; GFX1132-NEXT:    s_cbranch_scc1 .LBB3_1
1897 ; GFX1132-NEXT:  ; %bb.2: ; %ComputeEnd
1898 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
1899 ; GFX1132-NEXT:    s_mov_b32 s2, 0
1900 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
1901 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1902 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v0
1903 ; GFX1132-NEXT:    s_xor_b32 s0, exec_lo, s0
1904 ; GFX1132-NEXT:    s_cbranch_execz .LBB3_5
1905 ; GFX1132-NEXT:  ; %bb.3:
1906 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
1907 ; GFX1132-NEXT:    v_mov_b32_e32 v3, 0
1908 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
1909 ; GFX1132-NEXT:    global_load_b32 v1, v3, s[0:1]
1910 ; GFX1132-NEXT:  .LBB3_4: ; %atomicrmw.start
1911 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
1912 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
1913 ; GFX1132-NEXT:    v_add_f32_e32 v0, v1, v2
1914 ; GFX1132-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
1915 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
1916 ; GFX1132-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
1917 ; GFX1132-NEXT:    v_mov_b32_e32 v1, v0
1918 ; GFX1132-NEXT:    s_or_b32 s2, vcc_lo, s2
1919 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1920 ; GFX1132-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
1921 ; GFX1132-NEXT:    s_cbranch_execnz .LBB3_4
1922 ; GFX1132-NEXT:  .LBB3_5:
1923 ; GFX1132-NEXT:    s_endpgm
1925 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
1926 ; GFX9-DPP:       ; %bb.0:
1927 ; GFX9-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
1928 ; GFX9-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
1929 ; GFX9-DPP-NEXT:    s_mov_b32 s38, -1
1930 ; GFX9-DPP-NEXT:    s_mov_b32 s39, 0xe00000
1931 ; GFX9-DPP-NEXT:    s_add_u32 s36, s36, s11
1932 ; GFX9-DPP-NEXT:    s_addc_u32 s37, s37, 0
1933 ; GFX9-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
1934 ; GFX9-DPP-NEXT:    s_mov_b32 s12, s8
1935 ; GFX9-DPP-NEXT:    s_add_u32 s8, s34, 44
1936 ; GFX9-DPP-NEXT:    s_mov_b32 s13, s9
1937 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s35, 0
1938 ; GFX9-DPP-NEXT:    s_getpc_b64 s[4:5]
1939 ; GFX9-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
1940 ; GFX9-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
1941 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
1942 ; GFX9-DPP-NEXT:    s_mov_b32 s14, s10
1943 ; GFX9-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
1944 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
1945 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
1946 ; GFX9-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
1947 ; GFX9-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
1948 ; GFX9-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
1949 ; GFX9-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
1950 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
1951 ; GFX9-DPP-NEXT:    s_mov_b32 s32, 0
1952 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1953 ; GFX9-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
1954 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v1, exec_lo, 0
1955 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v1, exec_hi, v1
1956 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, v0
1957 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
1958 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
1959 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
1960 ; GFX9-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
1961 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
1962 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
1963 ; GFX9-DPP-NEXT:    s_nop 0
1964 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:1 row_mask:0xf bank_mask:0xf
1965 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
1966 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
1967 ; GFX9-DPP-NEXT:    s_nop 1
1968 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:2 row_mask:0xf bank_mask:0xf
1969 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
1970 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
1971 ; GFX9-DPP-NEXT:    s_nop 1
1972 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:4 row_mask:0xf bank_mask:0xf
1973 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
1974 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
1975 ; GFX9-DPP-NEXT:    s_nop 1
1976 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:8 row_mask:0xf bank_mask:0xf
1977 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
1978 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
1979 ; GFX9-DPP-NEXT:    s_nop 1
1980 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_bcast:15 row_mask:0xa bank_mask:0xf
1981 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
1982 ; GFX9-DPP-NEXT:    s_nop 1
1983 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_bcast:31 row_mask:0xc bank_mask:0xf
1984 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
1985 ; GFX9-DPP-NEXT:    v_readlane_b32 s4, v3, 63
1986 ; GFX9-DPP-NEXT:    s_mov_b64 exec, s[0:1]
1987 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
1988 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
1989 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB3_3
1990 ; GFX9-DPP-NEXT:  ; %bb.1:
1991 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
1992 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v2, 0
1993 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
1994 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
1995 ; GFX9-DPP-NEXT:    global_load_dword v1, v2, s[0:1]
1996 ; GFX9-DPP-NEXT:  .LBB3_2: ; %atomicrmw.start
1997 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
1998 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
1999 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, s4, v1
2000 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
2001 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
2002 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2003 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2004 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
2005 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2006 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB3_2
2007 ; GFX9-DPP-NEXT:  .LBB3_3:
2008 ; GFX9-DPP-NEXT:    s_endpgm
2010 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
2011 ; GFX1064-DPP:       ; %bb.0:
2012 ; GFX1064-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
2013 ; GFX1064-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
2014 ; GFX1064-DPP-NEXT:    s_mov_b32 s38, -1
2015 ; GFX1064-DPP-NEXT:    s_mov_b32 s39, 0x31e16000
2016 ; GFX1064-DPP-NEXT:    s_add_u32 s36, s36, s11
2017 ; GFX1064-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
2018 ; GFX1064-DPP-NEXT:    s_addc_u32 s37, s37, 0
2019 ; GFX1064-DPP-NEXT:    s_mov_b32 s12, s8
2020 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s34, 44
2021 ; GFX1064-DPP-NEXT:    s_mov_b32 s13, s9
2022 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s35, 0
2023 ; GFX1064-DPP-NEXT:    s_getpc_b64 s[4:5]
2024 ; GFX1064-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2025 ; GFX1064-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2026 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
2027 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
2028 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
2029 ; GFX1064-DPP-NEXT:    s_mov_b32 s14, s10
2030 ; GFX1064-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
2031 ; GFX1064-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
2032 ; GFX1064-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
2033 ; GFX1064-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
2034 ; GFX1064-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
2035 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
2036 ; GFX1064-DPP-NEXT:    s_mov_b32 s32, 0
2037 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2038 ; GFX1064-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
2039 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
2040 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
2041 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
2042 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v0
2043 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
2044 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
2045 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
2046 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
2047 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
2048 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
2049 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
2050 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
2051 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
2052 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
2053 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
2054 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
2055 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
2056 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
2057 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
2058 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v3
2059 ; GFX1064-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
2060 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
2061 ; GFX1064-DPP-NEXT:    v_readlane_b32 s2, v3, 0
2062 ; GFX1064-DPP-NEXT:    v_readlane_b32 s3, v3, 32
2063 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
2064 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
2065 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
2066 ; GFX1064-DPP-NEXT:    v_add_f32_e64 v3, s2, s3
2067 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
2068 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
2069 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v2, v3
2070 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2071 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
2072 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB3_3
2073 ; GFX1064-DPP-NEXT:  ; %bb.1:
2074 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
2075 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v6, 0
2076 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
2077 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2078 ; GFX1064-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
2079 ; GFX1064-DPP-NEXT:  .LBB3_2: ; %atomicrmw.start
2080 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2081 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
2082 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
2083 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
2084 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
2085 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2086 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
2087 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2088 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2089 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB3_2
2090 ; GFX1064-DPP-NEXT:  .LBB3_3:
2091 ; GFX1064-DPP-NEXT:    s_endpgm
2093 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
2094 ; GFX1032-DPP:       ; %bb.0:
2095 ; GFX1032-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
2096 ; GFX1032-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
2097 ; GFX1032-DPP-NEXT:    s_mov_b32 s38, -1
2098 ; GFX1032-DPP-NEXT:    s_mov_b32 s39, 0x31c16000
2099 ; GFX1032-DPP-NEXT:    s_add_u32 s36, s36, s11
2100 ; GFX1032-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
2101 ; GFX1032-DPP-NEXT:    s_addc_u32 s37, s37, 0
2102 ; GFX1032-DPP-NEXT:    s_mov_b32 s12, s8
2103 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s34, 44
2104 ; GFX1032-DPP-NEXT:    s_mov_b32 s13, s9
2105 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s35, 0
2106 ; GFX1032-DPP-NEXT:    s_getpc_b64 s[4:5]
2107 ; GFX1032-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2108 ; GFX1032-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2109 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
2110 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
2111 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
2112 ; GFX1032-DPP-NEXT:    s_mov_b32 s14, s10
2113 ; GFX1032-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
2114 ; GFX1032-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
2115 ; GFX1032-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
2116 ; GFX1032-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
2117 ; GFX1032-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
2118 ; GFX1032-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
2119 ; GFX1032-DPP-NEXT:    s_mov_b32 s32, 0
2120 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2121 ; GFX1032-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
2122 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
2123 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
2124 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
2125 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v0
2126 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
2127 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
2128 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
2129 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
2130 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
2131 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
2132 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
2133 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
2134 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
2135 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
2136 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
2137 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
2138 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
2139 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
2140 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
2141 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v3
2142 ; GFX1032-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
2143 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
2144 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
2145 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
2146 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v2, v3
2147 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
2148 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
2149 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s0, vcc_lo
2150 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB3_3
2151 ; GFX1032-DPP-NEXT:  ; %bb.1:
2152 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
2153 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v6, 0
2154 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2155 ; GFX1032-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
2156 ; GFX1032-DPP-NEXT:  .LBB3_2: ; %atomicrmw.start
2157 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2158 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
2159 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
2160 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
2161 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
2162 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
2163 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
2164 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
2165 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
2166 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB3_2
2167 ; GFX1032-DPP-NEXT:  .LBB3_3:
2168 ; GFX1032-DPP-NEXT:    s_endpgm
2170 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
2171 ; GFX1164-DPP:       ; %bb.0:
2172 ; GFX1164-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
2173 ; GFX1164-DPP-NEXT:    s_mov_b32 s12, s8
2174 ; GFX1164-DPP-NEXT:    s_add_u32 s8, s34, 44
2175 ; GFX1164-DPP-NEXT:    s_mov_b32 s13, s9
2176 ; GFX1164-DPP-NEXT:    s_addc_u32 s9, s35, 0
2177 ; GFX1164-DPP-NEXT:    s_getpc_b64 s[4:5]
2178 ; GFX1164-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2179 ; GFX1164-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2180 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v31, v0
2181 ; GFX1164-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
2182 ; GFX1164-DPP-NEXT:    s_mov_b32 s14, s10
2183 ; GFX1164-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
2184 ; GFX1164-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
2185 ; GFX1164-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
2186 ; GFX1164-DPP-NEXT:    s_mov_b32 s32, 0
2187 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2188 ; GFX1164-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
2189 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
2190 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
2191 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
2192 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v0
2193 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
2194 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
2195 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
2196 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
2197 ; GFX1164-DPP-NEXT:    s_waitcnt_depctr 0xfff
2198 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
2199 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
2200 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2201 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
2202 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
2203 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
2204 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2205 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
2206 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
2207 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
2208 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2209 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
2210 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
2211 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2212 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
2213 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v1
2214 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2215 ; GFX1164-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
2216 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
2217 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
2218 ; GFX1164-DPP-NEXT:    v_permlane64_b32 v2, v1
2219 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
2220 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
2221 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
2222 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2)
2223 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
2224 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
2225 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
2226 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v4, exec_hi, v0
2227 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2228 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, v1
2229 ; GFX1164-DPP-NEXT:    s_mov_b64 s[0:1], exec
2230 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
2231 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB3_3
2232 ; GFX1164-DPP-NEXT:  ; %bb.1:
2233 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
2234 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v6, 0
2235 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], 0
2236 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2237 ; GFX1164-DPP-NEXT:    global_load_b32 v5, v6, s[0:1]
2238 ; GFX1164-DPP-NEXT:  .LBB3_2: ; %atomicrmw.start
2239 ; GFX1164-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2240 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
2241 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v4, v5, v0
2242 ; GFX1164-DPP-NEXT:    global_atomic_cmpswap_b32 v4, v6, v[4:5], s[0:1] glc
2243 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
2244 ; GFX1164-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v5
2245 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v5, v4
2246 ; GFX1164-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2247 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2248 ; GFX1164-DPP-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
2249 ; GFX1164-DPP-NEXT:    s_cbranch_execnz .LBB3_2
2250 ; GFX1164-DPP-NEXT:  .LBB3_3:
2251 ; GFX1164-DPP-NEXT:    s_endpgm
2253 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_div_value_one_as_scope_unsafe_structfp:
2254 ; GFX1132-DPP:       ; %bb.0:
2255 ; GFX1132-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
2256 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v31, v0
2257 ; GFX1132-DPP-NEXT:    s_add_u32 s8, s34, 44
2258 ; GFX1132-DPP-NEXT:    s_addc_u32 s9, s35, 0
2259 ; GFX1132-DPP-NEXT:    s_getpc_b64 s[4:5]
2260 ; GFX1132-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2261 ; GFX1132-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2262 ; GFX1132-DPP-NEXT:    s_mov_b32 s12, s13
2263 ; GFX1132-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
2264 ; GFX1132-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
2265 ; GFX1132-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
2266 ; GFX1132-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
2267 ; GFX1132-DPP-NEXT:    s_mov_b32 s13, s14
2268 ; GFX1132-DPP-NEXT:    s_mov_b32 s14, s15
2269 ; GFX1132-DPP-NEXT:    s_mov_b32 s32, 0
2270 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2271 ; GFX1132-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
2272 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
2273 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
2274 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
2275 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v0
2276 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
2277 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
2278 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
2279 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
2280 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2281 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
2282 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
2283 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
2284 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
2285 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2286 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
2287 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
2288 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
2289 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
2290 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
2291 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
2292 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2293 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
2294 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
2295 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2296 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v1
2297 ; GFX1132-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
2298 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
2299 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
2300 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
2301 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v4, exec_lo, 0
2302 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
2303 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v0, v1
2304 ; GFX1132-DPP-NEXT:    s_mov_b32 s2, 0
2305 ; GFX1132-DPP-NEXT:    s_mov_b32 s0, exec_lo
2306 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
2307 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB3_3
2308 ; GFX1132-DPP-NEXT:  ; %bb.1:
2309 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
2310 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v6, 0
2311 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2312 ; GFX1132-DPP-NEXT:    global_load_b32 v5, v6, s[0:1]
2313 ; GFX1132-DPP-NEXT:  .LBB3_2: ; %atomicrmw.start
2314 ; GFX1132-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2315 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
2316 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v4, v5, v0
2317 ; GFX1132-DPP-NEXT:    global_atomic_cmpswap_b32 v4, v6, v[4:5], s[0:1] glc
2318 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
2319 ; GFX1132-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v5
2320 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v5, v4
2321 ; GFX1132-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
2322 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2323 ; GFX1132-DPP-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
2324 ; GFX1132-DPP-NEXT:    s_cbranch_execnz .LBB3_2
2325 ; GFX1132-DPP-NEXT:  .LBB3_3:
2326 ; GFX1132-DPP-NEXT:    s_endpgm
2327   %divValue = call float @div.float.value()
2328   %result = atomicrmw fadd ptr addrspace(1) %ptr, float %divValue syncscope("one-as") monotonic
2329   ret void
2332 define amdgpu_kernel void @global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp(ptr addrspace(1) %ptr) #2{
2333 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2334 ; GFX7LESS:       ; %bb.0:
2335 ; GFX7LESS-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
2336 ; GFX7LESS-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
2337 ; GFX7LESS-NEXT:    s_mov_b32 s10, -1
2338 ; GFX7LESS-NEXT:    s_mov_b32 s11, 0xe8f000
2339 ; GFX7LESS-NEXT:    s_add_u32 s8, s8, s3
2340 ; GFX7LESS-NEXT:    s_addc_u32 s9, s9, 0
2341 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], exec
2342 ; GFX7LESS-NEXT:    v_mbcnt_lo_u32_b32_e64 v0, s2, 0
2343 ; GFX7LESS-NEXT:    v_mbcnt_hi_u32_b32_e32 v0, s3, v0
2344 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2345 ; GFX7LESS-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2346 ; GFX7LESS-NEXT:    s_cbranch_execz .LBB4_3
2347 ; GFX7LESS-NEXT:  ; %bb.1:
2348 ; GFX7LESS-NEXT:    s_bcnt1_i32_b64 s6, s[2:3]
2349 ; GFX7LESS-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
2350 ; GFX7LESS-NEXT:    s_mov_b32 s7, 0x43300000
2351 ; GFX7LESS-NEXT:    v_mov_b32_e32 v0, 0
2352 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, 0xc3300000
2353 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], 0
2354 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
2355 ; GFX7LESS-NEXT:    s_load_dword s2, s[0:1], 0x0
2356 ; GFX7LESS-NEXT:    s_mov_b32 s3, 0xf000
2357 ; GFX7LESS-NEXT:    v_add_f64 v[0:1], s[6:7], v[0:1]
2358 ; GFX7LESS-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2359 ; GFX7LESS-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2360 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
2361 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, s2
2362 ; GFX7LESS-NEXT:    s_mov_b32 s2, -1
2363 ; GFX7LESS-NEXT:  .LBB4_2: ; %atomicrmw.start
2364 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
2365 ; GFX7LESS-NEXT:    v_add_f32_e32 v0, v1, v2
2366 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
2367 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v1
2368 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v0
2369 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[0:3], 0 glc
2370 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
2371 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v1
2372 ; GFX7LESS-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
2373 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, v3
2374 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[4:5]
2375 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB4_2
2376 ; GFX7LESS-NEXT:  .LBB4_3:
2377 ; GFX7LESS-NEXT:    s_endpgm
2379 ; GFX9-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2380 ; GFX9:       ; %bb.0:
2381 ; GFX9-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
2382 ; GFX9-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
2383 ; GFX9-NEXT:    s_mov_b32 s10, -1
2384 ; GFX9-NEXT:    s_mov_b32 s11, 0xe00000
2385 ; GFX9-NEXT:    s_add_u32 s8, s8, s3
2386 ; GFX9-NEXT:    s_mov_b64 s[2:3], exec
2387 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
2388 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
2389 ; GFX9-NEXT:    s_addc_u32 s9, s9, 0
2390 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2391 ; GFX9-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2392 ; GFX9-NEXT:    s_cbranch_execz .LBB4_3
2393 ; GFX9-NEXT:  ; %bb.1:
2394 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
2395 ; GFX9-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
2396 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0xc3300000
2397 ; GFX9-NEXT:    s_mov_b32 s3, 0x43300000
2398 ; GFX9-NEXT:    v_add_f64 v[0:1], s[2:3], v[0:1]
2399 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2400 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
2401 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
2402 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2403 ; GFX9-NEXT:    s_load_dword s4, s[0:1], 0x0
2404 ; GFX9-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2405 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2406 ; GFX9-NEXT:    v_mov_b32_e32 v1, s4
2407 ; GFX9-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2408 ; GFX9-NEXT:  .LBB4_2: ; %atomicrmw.start
2409 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
2410 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
2411 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2412 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2413 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2414 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2415 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
2416 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2417 ; GFX9-NEXT:    s_cbranch_execnz .LBB4_2
2418 ; GFX9-NEXT:  .LBB4_3:
2419 ; GFX9-NEXT:    s_endpgm
2421 ; GFX1064-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2422 ; GFX1064:       ; %bb.0:
2423 ; GFX1064-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
2424 ; GFX1064-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
2425 ; GFX1064-NEXT:    s_mov_b32 s10, -1
2426 ; GFX1064-NEXT:    s_mov_b32 s11, 0x31e16000
2427 ; GFX1064-NEXT:    s_add_u32 s8, s8, s3
2428 ; GFX1064-NEXT:    s_mov_b64 s[2:3], exec
2429 ; GFX1064-NEXT:    s_addc_u32 s9, s9, 0
2430 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
2431 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
2432 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2433 ; GFX1064-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2434 ; GFX1064-NEXT:    s_cbranch_execz .LBB4_3
2435 ; GFX1064-NEXT:  ; %bb.1:
2436 ; GFX1064-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
2437 ; GFX1064-NEXT:    s_mov_b32 s3, 0x43300000
2438 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2439 ; GFX1064-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[2:3]
2440 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
2441 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
2442 ; GFX1064-NEXT:    s_load_dword s2, s[0:1], 0x0
2443 ; GFX1064-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2444 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
2445 ; GFX1064-NEXT:    v_mov_b32_e32 v1, s2
2446 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
2447 ; GFX1064-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2448 ; GFX1064-NEXT:  .LBB4_2: ; %atomicrmw.start
2449 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
2450 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
2451 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2452 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
2453 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2454 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
2455 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2456 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2457 ; GFX1064-NEXT:    s_cbranch_execnz .LBB4_2
2458 ; GFX1064-NEXT:  .LBB4_3:
2459 ; GFX1064-NEXT:    s_endpgm
2461 ; GFX1032-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2462 ; GFX1032:       ; %bb.0:
2463 ; GFX1032-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
2464 ; GFX1032-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
2465 ; GFX1032-NEXT:    s_mov_b32 s10, -1
2466 ; GFX1032-NEXT:    s_mov_b32 s11, 0x31c16000
2467 ; GFX1032-NEXT:    s_add_u32 s8, s8, s3
2468 ; GFX1032-NEXT:    s_mov_b32 s3, exec_lo
2469 ; GFX1032-NEXT:    s_addc_u32 s9, s9, 0
2470 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
2471 ; GFX1032-NEXT:    s_mov_b32 s2, 0
2472 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
2473 ; GFX1032-NEXT:    s_and_saveexec_b32 s4, vcc_lo
2474 ; GFX1032-NEXT:    s_cbranch_execz .LBB4_3
2475 ; GFX1032-NEXT:  ; %bb.1:
2476 ; GFX1032-NEXT:    s_bcnt1_i32_b32 s4, s3
2477 ; GFX1032-NEXT:    s_mov_b32 s5, 0x43300000
2478 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2479 ; GFX1032-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[4:5]
2480 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
2481 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
2482 ; GFX1032-NEXT:    s_load_dword s3, s[0:1], 0x0
2483 ; GFX1032-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2484 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
2485 ; GFX1032-NEXT:    v_mov_b32_e32 v1, s3
2486 ; GFX1032-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2487 ; GFX1032-NEXT:  .LBB4_2: ; %atomicrmw.start
2488 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
2489 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
2490 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2491 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
2492 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
2493 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
2494 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
2495 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
2496 ; GFX1032-NEXT:    s_cbranch_execnz .LBB4_2
2497 ; GFX1032-NEXT:  .LBB4_3:
2498 ; GFX1032-NEXT:    s_endpgm
2500 ; GFX1164-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2501 ; GFX1164:       ; %bb.0:
2502 ; GFX1164-NEXT:    s_bcnt1_i32_b64 s2, exec
2503 ; GFX1164-NEXT:    v_mov_b32_e32 v0, 0x43300000
2504 ; GFX1164-NEXT:    v_mov_b32_e32 v1, s2
2505 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
2506 ; GFX1164-NEXT:    s_mov_b64 s[2:3], exec
2507 ; GFX1164-NEXT:    s_clause 0x1
2508 ; GFX1164-NEXT:    scratch_store_b32 off, v0, off offset:12
2509 ; GFX1164-NEXT:    scratch_store_b32 off, v1, off offset:8
2510 ; GFX1164-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
2511 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v2, exec_hi, v2
2512 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2513 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v2
2514 ; GFX1164-NEXT:    s_cbranch_execz .LBB4_3
2515 ; GFX1164-NEXT:  ; %bb.1:
2516 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
2517 ; GFX1164-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
2518 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2519 ; GFX1164-NEXT:    v_mov_b32_e32 v3, 0
2520 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
2521 ; GFX1164-NEXT:    s_load_b32 s2, s[0:1], 0x0
2522 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
2523 ; GFX1164-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2524 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
2525 ; GFX1164-NEXT:    v_mov_b32_e32 v1, s2
2526 ; GFX1164-NEXT:    s_mov_b64 s[2:3], 0
2527 ; GFX1164-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2528 ; GFX1164-NEXT:  .LBB4_2: ; %atomicrmw.start
2529 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
2530 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2531 ; GFX1164-NEXT:    v_add_f32_e32 v0, v1, v2
2532 ; GFX1164-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
2533 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
2534 ; GFX1164-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2535 ; GFX1164-NEXT:    v_mov_b32_e32 v1, v0
2536 ; GFX1164-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2537 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2538 ; GFX1164-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
2539 ; GFX1164-NEXT:    s_cbranch_execnz .LBB4_2
2540 ; GFX1164-NEXT:  .LBB4_3:
2541 ; GFX1164-NEXT:    s_endpgm
2543 ; GFX1132-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2544 ; GFX1132:       ; %bb.0:
2545 ; GFX1132-NEXT:    s_bcnt1_i32_b32 s2, exec_lo
2546 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2547 ; GFX1132-NEXT:    v_dual_mov_b32 v0, 0x43300000 :: v_dual_mov_b32 v1, s2
2548 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
2549 ; GFX1132-NEXT:    s_mov_b32 s2, 0
2550 ; GFX1132-NEXT:    s_mov_b32 s3, exec_lo
2551 ; GFX1132-NEXT:    s_clause 0x1
2552 ; GFX1132-NEXT:    scratch_store_b32 off, v0, off offset:12
2553 ; GFX1132-NEXT:    scratch_store_b32 off, v1, off offset:8
2554 ; GFX1132-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
2555 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v2
2556 ; GFX1132-NEXT:    s_cbranch_execz .LBB4_3
2557 ; GFX1132-NEXT:  ; %bb.1:
2558 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
2559 ; GFX1132-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
2560 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2561 ; GFX1132-NEXT:    v_mov_b32_e32 v3, 0
2562 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
2563 ; GFX1132-NEXT:    s_load_b32 s3, s[0:1], 0x0
2564 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2565 ; GFX1132-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2566 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
2567 ; GFX1132-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mul_f32 v2, 4.0, v0
2568 ; GFX1132-NEXT:  .LBB4_2: ; %atomicrmw.start
2569 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
2570 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2571 ; GFX1132-NEXT:    v_add_f32_e32 v0, v1, v2
2572 ; GFX1132-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
2573 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
2574 ; GFX1132-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
2575 ; GFX1132-NEXT:    v_mov_b32_e32 v1, v0
2576 ; GFX1132-NEXT:    s_or_b32 s2, vcc_lo, s2
2577 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2578 ; GFX1132-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
2579 ; GFX1132-NEXT:    s_cbranch_execnz .LBB4_2
2580 ; GFX1132-NEXT:  .LBB4_3:
2581 ; GFX1132-NEXT:    s_endpgm
2583 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2584 ; GFX9-DPP:       ; %bb.0:
2585 ; GFX9-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
2586 ; GFX9-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
2587 ; GFX9-DPP-NEXT:    s_mov_b32 s10, -1
2588 ; GFX9-DPP-NEXT:    s_mov_b32 s11, 0xe00000
2589 ; GFX9-DPP-NEXT:    s_add_u32 s8, s8, s3
2590 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], exec
2591 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
2592 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
2593 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s9, 0
2594 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2595 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2596 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB4_3
2597 ; GFX9-DPP-NEXT:  ; %bb.1:
2598 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v0, 0
2599 ; GFX9-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
2600 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, 0xc3300000
2601 ; GFX9-DPP-NEXT:    s_mov_b32 s3, 0x43300000
2602 ; GFX9-DPP-NEXT:    v_add_f64 v[0:1], s[2:3], v[0:1]
2603 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2604 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
2605 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, 0
2606 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2607 ; GFX9-DPP-NEXT:    s_load_dword s4, s[0:1], 0x0
2608 ; GFX9-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2609 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2610 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, s4
2611 ; GFX9-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2612 ; GFX9-DPP-NEXT:  .LBB4_2: ; %atomicrmw.start
2613 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2614 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
2615 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2616 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
2617 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2618 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2619 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
2620 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2621 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB4_2
2622 ; GFX9-DPP-NEXT:  .LBB4_3:
2623 ; GFX9-DPP-NEXT:    s_endpgm
2625 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2626 ; GFX1064-DPP:       ; %bb.0:
2627 ; GFX1064-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
2628 ; GFX1064-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
2629 ; GFX1064-DPP-NEXT:    s_mov_b32 s10, -1
2630 ; GFX1064-DPP-NEXT:    s_mov_b32 s11, 0x31e16000
2631 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s8, s3
2632 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], exec
2633 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s9, 0
2634 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
2635 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
2636 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2637 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
2638 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB4_3
2639 ; GFX1064-DPP-NEXT:  ; %bb.1:
2640 ; GFX1064-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
2641 ; GFX1064-DPP-NEXT:    s_mov_b32 s3, 0x43300000
2642 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2643 ; GFX1064-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[2:3]
2644 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v3, 0
2645 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2646 ; GFX1064-DPP-NEXT:    s_load_dword s2, s[0:1], 0x0
2647 ; GFX1064-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2648 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2649 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, s2
2650 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
2651 ; GFX1064-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2652 ; GFX1064-DPP-NEXT:  .LBB4_2: ; %atomicrmw.start
2653 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2654 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
2655 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2656 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
2657 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2658 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
2659 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2660 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2661 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB4_2
2662 ; GFX1064-DPP-NEXT:  .LBB4_3:
2663 ; GFX1064-DPP-NEXT:    s_endpgm
2665 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2666 ; GFX1032-DPP:       ; %bb.0:
2667 ; GFX1032-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
2668 ; GFX1032-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
2669 ; GFX1032-DPP-NEXT:    s_mov_b32 s10, -1
2670 ; GFX1032-DPP-NEXT:    s_mov_b32 s11, 0x31c16000
2671 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s8, s3
2672 ; GFX1032-DPP-NEXT:    s_mov_b32 s3, exec_lo
2673 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s9, 0
2674 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
2675 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
2676 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
2677 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s4, vcc_lo
2678 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB4_3
2679 ; GFX1032-DPP-NEXT:  ; %bb.1:
2680 ; GFX1032-DPP-NEXT:    s_bcnt1_i32_b32 s4, s3
2681 ; GFX1032-DPP-NEXT:    s_mov_b32 s5, 0x43300000
2682 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
2683 ; GFX1032-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[4:5]
2684 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v3, 0
2685 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2686 ; GFX1032-DPP-NEXT:    s_load_dword s3, s[0:1], 0x0
2687 ; GFX1032-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2688 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2689 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, s3
2690 ; GFX1032-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2691 ; GFX1032-DPP-NEXT:  .LBB4_2: ; %atomicrmw.start
2692 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2693 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
2694 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2695 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
2696 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
2697 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
2698 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
2699 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
2700 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB4_2
2701 ; GFX1032-DPP-NEXT:  .LBB4_3:
2702 ; GFX1032-DPP-NEXT:    s_endpgm
2704 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2705 ; GFX1164-DPP:       ; %bb.0:
2706 ; GFX1164-DPP-NEXT:    s_bcnt1_i32_b64 s2, exec
2707 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, 0x43300000
2708 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, s2
2709 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
2710 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], exec
2711 ; GFX1164-DPP-NEXT:    s_clause 0x1
2712 ; GFX1164-DPP-NEXT:    scratch_store_b32 off, v0, off offset:12
2713 ; GFX1164-DPP-NEXT:    scratch_store_b32 off, v1, off offset:8
2714 ; GFX1164-DPP-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
2715 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v2, exec_hi, v2
2716 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2717 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v2
2718 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB4_3
2719 ; GFX1164-DPP-NEXT:  ; %bb.1:
2720 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
2721 ; GFX1164-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
2722 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2723 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v3, 0
2724 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2725 ; GFX1164-DPP-NEXT:    s_load_b32 s2, s[0:1], 0x0
2726 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
2727 ; GFX1164-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2728 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2729 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, s2
2730 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], 0
2731 ; GFX1164-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
2732 ; GFX1164-DPP-NEXT:  .LBB4_2: ; %atomicrmw.start
2733 ; GFX1164-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2734 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2735 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
2736 ; GFX1164-DPP-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
2737 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
2738 ; GFX1164-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2739 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, v0
2740 ; GFX1164-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2741 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2742 ; GFX1164-DPP-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
2743 ; GFX1164-DPP-NEXT:    s_cbranch_execnz .LBB4_2
2744 ; GFX1164-DPP-NEXT:  .LBB4_3:
2745 ; GFX1164-DPP-NEXT:    s_endpgm
2747 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_agent_scope_strictfp:
2748 ; GFX1132-DPP:       ; %bb.0:
2749 ; GFX1132-DPP-NEXT:    s_bcnt1_i32_b32 s2, exec_lo
2750 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2751 ; GFX1132-DPP-NEXT:    v_dual_mov_b32 v0, 0x43300000 :: v_dual_mov_b32 v1, s2
2752 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
2753 ; GFX1132-DPP-NEXT:    s_mov_b32 s2, 0
2754 ; GFX1132-DPP-NEXT:    s_mov_b32 s3, exec_lo
2755 ; GFX1132-DPP-NEXT:    s_clause 0x1
2756 ; GFX1132-DPP-NEXT:    scratch_store_b32 off, v0, off offset:12
2757 ; GFX1132-DPP-NEXT:    scratch_store_b32 off, v1, off offset:8
2758 ; GFX1132-DPP-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
2759 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v2
2760 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB4_3
2761 ; GFX1132-DPP-NEXT:  ; %bb.1:
2762 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
2763 ; GFX1132-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
2764 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
2765 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v3, 0
2766 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2767 ; GFX1132-DPP-NEXT:    s_load_b32 s3, s[0:1], 0x0
2768 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
2769 ; GFX1132-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
2770 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
2771 ; GFX1132-DPP-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mul_f32 v2, 4.0, v0
2772 ; GFX1132-DPP-NEXT:  .LBB4_2: ; %atomicrmw.start
2773 ; GFX1132-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
2774 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2775 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
2776 ; GFX1132-DPP-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
2777 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
2778 ; GFX1132-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
2779 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v1, v0
2780 ; GFX1132-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
2781 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
2782 ; GFX1132-DPP-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
2783 ; GFX1132-DPP-NEXT:    s_cbranch_execnz .LBB4_2
2784 ; GFX1132-DPP-NEXT:  .LBB4_3:
2785 ; GFX1132-DPP-NEXT:    s_endpgm
2786   %result = atomicrmw fadd ptr addrspace(1) %ptr, float 4.0 syncscope("agent") monotonic
2787   ret void
2791 define amdgpu_kernel void @global_atomic_fadd_uni_address_div_value_agent_scope_unsafe(ptr addrspace(1) %ptr) #0 {
2792 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
2793 ; GFX7LESS:       ; %bb.0:
2794 ; GFX7LESS-NEXT:    s_mov_b32 s32, 0
2795 ; GFX7LESS-NEXT:    s_mov_b32 s40, SCRATCH_RSRC_DWORD0
2796 ; GFX7LESS-NEXT:    s_mov_b32 s41, SCRATCH_RSRC_DWORD1
2797 ; GFX7LESS-NEXT:    s_mov_b32 s42, -1
2798 ; GFX7LESS-NEXT:    s_mov_b32 s43, 0xe8f000
2799 ; GFX7LESS-NEXT:    s_add_u32 s40, s40, s11
2800 ; GFX7LESS-NEXT:    s_addc_u32 s41, s41, 0
2801 ; GFX7LESS-NEXT:    s_mov_b32 s14, s10
2802 ; GFX7LESS-NEXT:    s_mov_b32 s13, s9
2803 ; GFX7LESS-NEXT:    s_mov_b32 s12, s8
2804 ; GFX7LESS-NEXT:    s_mov_b64 s[10:11], s[6:7]
2805 ; GFX7LESS-NEXT:    s_load_dwordx2 s[36:37], s[4:5], 0x9
2806 ; GFX7LESS-NEXT:    s_mov_b32 s39, 0xf000
2807 ; GFX7LESS-NEXT:    s_mov_b32 s38, -1
2808 ; GFX7LESS-NEXT:    s_add_u32 s8, s4, 44
2809 ; GFX7LESS-NEXT:    s_addc_u32 s9, s5, 0
2810 ; GFX7LESS-NEXT:    s_getpc_b64 s[4:5]
2811 ; GFX7LESS-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2812 ; GFX7LESS-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2813 ; GFX7LESS-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
2814 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
2815 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
2816 ; GFX7LESS-NEXT:    v_or_b32_e32 v0, v0, v1
2817 ; GFX7LESS-NEXT:    v_or_b32_e32 v31, v0, v2
2818 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], s[0:1]
2819 ; GFX7LESS-NEXT:    s_mov_b64 s[6:7], s[2:3]
2820 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], s[40:41]
2821 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], s[42:43]
2822 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
2823 ; GFX7LESS-NEXT:    s_swappc_b64 s[30:31], s[16:17]
2824 ; GFX7LESS-NEXT:    buffer_load_dword v2, off, s[36:39], 0
2825 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], 0
2826 ; GFX7LESS-NEXT:  .LBB5_1: ; %atomicrmw.start
2827 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
2828 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
2829 ; GFX7LESS-NEXT:    v_add_f32_e32 v1, v2, v0
2830 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
2831 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v2
2832 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v1
2833 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[36:39], 0 glc
2834 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
2835 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v2
2836 ; GFX7LESS-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]
2837 ; GFX7LESS-NEXT:    v_mov_b32_e32 v2, v3
2838 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[0:1]
2839 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB5_1
2840 ; GFX7LESS-NEXT:  ; %bb.2: ; %atomicrmw.end
2841 ; GFX7LESS-NEXT:    s_endpgm
2843 ; GFX9-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
2844 ; GFX9:       ; %bb.0:
2845 ; GFX9-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
2846 ; GFX9-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
2847 ; GFX9-NEXT:    s_mov_b32 s38, -1
2848 ; GFX9-NEXT:    s_mov_b32 s39, 0xe00000
2849 ; GFX9-NEXT:    s_add_u32 s36, s36, s11
2850 ; GFX9-NEXT:    s_addc_u32 s37, s37, 0
2851 ; GFX9-NEXT:    s_mov_b64 s[34:35], s[4:5]
2852 ; GFX9-NEXT:    s_mov_b32 s12, s8
2853 ; GFX9-NEXT:    s_add_u32 s8, s34, 44
2854 ; GFX9-NEXT:    s_mov_b32 s13, s9
2855 ; GFX9-NEXT:    s_addc_u32 s9, s35, 0
2856 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
2857 ; GFX9-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2858 ; GFX9-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2859 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
2860 ; GFX9-NEXT:    s_mov_b32 s14, s10
2861 ; GFX9-NEXT:    s_mov_b64 s[10:11], s[6:7]
2862 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
2863 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
2864 ; GFX9-NEXT:    s_mov_b64 s[4:5], s[0:1]
2865 ; GFX9-NEXT:    s_mov_b64 s[6:7], s[2:3]
2866 ; GFX9-NEXT:    s_mov_b64 s[0:1], s[36:37]
2867 ; GFX9-NEXT:    v_or3_b32 v31, v0, v1, v2
2868 ; GFX9-NEXT:    s_mov_b64 s[2:3], s[38:39]
2869 ; GFX9-NEXT:    s_mov_b32 s32, 0
2870 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2871 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
2872 ; GFX9-NEXT:    s_mov_b64 s[0:1], exec
2873 ; GFX9-NEXT:    v_bfrev_b32_e32 v2, 1
2874 ; GFX9-NEXT:  .LBB5_1: ; %ComputeLoop
2875 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
2876 ; GFX9-NEXT:    s_ff1_i32_b32 s2, s1
2877 ; GFX9-NEXT:    s_ff1_i32_b32 s3, s0
2878 ; GFX9-NEXT:    s_add_i32 s2, s2, 32
2879 ; GFX9-NEXT:    s_min_u32 s2, s3, s2
2880 ; GFX9-NEXT:    v_readlane_b32 s4, v0, s2
2881 ; GFX9-NEXT:    s_lshl_b64 s[2:3], 1, s2
2882 ; GFX9-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
2883 ; GFX9-NEXT:    s_cmp_lg_u64 s[0:1], 0
2884 ; GFX9-NEXT:    v_add_f32_e32 v2, s4, v2
2885 ; GFX9-NEXT:    s_cbranch_scc1 .LBB5_1
2886 ; GFX9-NEXT:  ; %bb.2: ; %ComputeEnd
2887 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
2888 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
2889 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2890 ; GFX9-NEXT:    s_and_saveexec_b64 s[0:1], vcc
2891 ; GFX9-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
2892 ; GFX9-NEXT:    s_cbranch_execz .LBB5_5
2893 ; GFX9-NEXT:  ; %bb.3:
2894 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
2895 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
2896 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
2897 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2898 ; GFX9-NEXT:    global_load_dword v1, v3, s[0:1]
2899 ; GFX9-NEXT:  .LBB5_4: ; %atomicrmw.start
2900 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
2901 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2902 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
2903 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2904 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2905 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2906 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2907 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
2908 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2909 ; GFX9-NEXT:    s_cbranch_execnz .LBB5_4
2910 ; GFX9-NEXT:  .LBB5_5:
2911 ; GFX9-NEXT:    s_endpgm
2913 ; GFX1064-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
2914 ; GFX1064:       ; %bb.0:
2915 ; GFX1064-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
2916 ; GFX1064-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
2917 ; GFX1064-NEXT:    s_mov_b32 s38, -1
2918 ; GFX1064-NEXT:    s_mov_b32 s39, 0x31e16000
2919 ; GFX1064-NEXT:    s_add_u32 s36, s36, s11
2920 ; GFX1064-NEXT:    s_mov_b64 s[34:35], s[4:5]
2921 ; GFX1064-NEXT:    s_addc_u32 s37, s37, 0
2922 ; GFX1064-NEXT:    s_mov_b32 s12, s8
2923 ; GFX1064-NEXT:    s_add_u32 s8, s34, 44
2924 ; GFX1064-NEXT:    s_mov_b32 s13, s9
2925 ; GFX1064-NEXT:    s_addc_u32 s9, s35, 0
2926 ; GFX1064-NEXT:    s_getpc_b64 s[4:5]
2927 ; GFX1064-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2928 ; GFX1064-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2929 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
2930 ; GFX1064-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
2931 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
2932 ; GFX1064-NEXT:    s_mov_b32 s14, s10
2933 ; GFX1064-NEXT:    s_mov_b64 s[10:11], s[6:7]
2934 ; GFX1064-NEXT:    s_mov_b64 s[4:5], s[0:1]
2935 ; GFX1064-NEXT:    s_mov_b64 s[6:7], s[2:3]
2936 ; GFX1064-NEXT:    v_or3_b32 v31, v0, v1, v2
2937 ; GFX1064-NEXT:    s_mov_b64 s[0:1], s[36:37]
2938 ; GFX1064-NEXT:    s_mov_b64 s[2:3], s[38:39]
2939 ; GFX1064-NEXT:    s_mov_b32 s32, 0
2940 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
2941 ; GFX1064-NEXT:    s_swappc_b64 s[30:31], s[16:17]
2942 ; GFX1064-NEXT:    v_bfrev_b32_e32 v2, 1
2943 ; GFX1064-NEXT:    s_mov_b64 s[0:1], exec
2944 ; GFX1064-NEXT:  .LBB5_1: ; %ComputeLoop
2945 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
2946 ; GFX1064-NEXT:    s_ff1_i32_b32 s2, s1
2947 ; GFX1064-NEXT:    s_ff1_i32_b32 s3, s0
2948 ; GFX1064-NEXT:    s_add_i32 s2, s2, 32
2949 ; GFX1064-NEXT:    s_min_u32 s2, s3, s2
2950 ; GFX1064-NEXT:    v_readlane_b32 s4, v0, s2
2951 ; GFX1064-NEXT:    s_lshl_b64 s[2:3], 1, s2
2952 ; GFX1064-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
2953 ; GFX1064-NEXT:    s_cmp_lg_u64 s[0:1], 0
2954 ; GFX1064-NEXT:    v_add_f32_e32 v2, s4, v2
2955 ; GFX1064-NEXT:    s_cbranch_scc1 .LBB5_1
2956 ; GFX1064-NEXT:  ; %bb.2: ; %ComputeEnd
2957 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
2958 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
2959 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
2960 ; GFX1064-NEXT:    s_and_saveexec_b64 s[0:1], vcc
2961 ; GFX1064-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
2962 ; GFX1064-NEXT:    s_cbranch_execz .LBB5_5
2963 ; GFX1064-NEXT:  ; %bb.3:
2964 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
2965 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
2966 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
2967 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
2968 ; GFX1064-NEXT:    global_load_dword v1, v3, s[0:1]
2969 ; GFX1064-NEXT:  .LBB5_4: ; %atomicrmw.start
2970 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
2971 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
2972 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
2973 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
2974 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
2975 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
2976 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
2977 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
2978 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
2979 ; GFX1064-NEXT:    s_cbranch_execnz .LBB5_4
2980 ; GFX1064-NEXT:  .LBB5_5:
2981 ; GFX1064-NEXT:    s_endpgm
2983 ; GFX1032-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
2984 ; GFX1032:       ; %bb.0:
2985 ; GFX1032-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
2986 ; GFX1032-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
2987 ; GFX1032-NEXT:    s_mov_b32 s38, -1
2988 ; GFX1032-NEXT:    s_mov_b32 s39, 0x31c16000
2989 ; GFX1032-NEXT:    s_add_u32 s36, s36, s11
2990 ; GFX1032-NEXT:    s_mov_b64 s[34:35], s[4:5]
2991 ; GFX1032-NEXT:    s_addc_u32 s37, s37, 0
2992 ; GFX1032-NEXT:    s_mov_b32 s12, s8
2993 ; GFX1032-NEXT:    s_add_u32 s8, s34, 44
2994 ; GFX1032-NEXT:    s_mov_b32 s13, s9
2995 ; GFX1032-NEXT:    s_addc_u32 s9, s35, 0
2996 ; GFX1032-NEXT:    s_getpc_b64 s[4:5]
2997 ; GFX1032-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
2998 ; GFX1032-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
2999 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3000 ; GFX1032-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3001 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3002 ; GFX1032-NEXT:    s_mov_b32 s14, s10
3003 ; GFX1032-NEXT:    s_mov_b64 s[10:11], s[6:7]
3004 ; GFX1032-NEXT:    s_mov_b64 s[4:5], s[0:1]
3005 ; GFX1032-NEXT:    s_mov_b64 s[6:7], s[2:3]
3006 ; GFX1032-NEXT:    v_or3_b32 v31, v0, v1, v2
3007 ; GFX1032-NEXT:    s_mov_b64 s[0:1], s[36:37]
3008 ; GFX1032-NEXT:    s_mov_b64 s[2:3], s[38:39]
3009 ; GFX1032-NEXT:    s_mov_b32 s32, 0
3010 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
3011 ; GFX1032-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3012 ; GFX1032-NEXT:    v_bfrev_b32_e32 v2, 1
3013 ; GFX1032-NEXT:    s_mov_b32 s0, exec_lo
3014 ; GFX1032-NEXT:  .LBB5_1: ; %ComputeLoop
3015 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
3016 ; GFX1032-NEXT:    s_ff1_i32_b32 s1, s0
3017 ; GFX1032-NEXT:    v_readlane_b32 s2, v0, s1
3018 ; GFX1032-NEXT:    s_lshl_b32 s1, 1, s1
3019 ; GFX1032-NEXT:    s_andn2_b32 s0, s0, s1
3020 ; GFX1032-NEXT:    s_cmp_lg_u32 s0, 0
3021 ; GFX1032-NEXT:    v_add_f32_e32 v2, s2, v2
3022 ; GFX1032-NEXT:    s_cbranch_scc1 .LBB5_1
3023 ; GFX1032-NEXT:  ; %bb.2: ; %ComputeEnd
3024 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3025 ; GFX1032-NEXT:    s_mov_b32 s2, 0
3026 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
3027 ; GFX1032-NEXT:    s_and_saveexec_b32 s0, vcc_lo
3028 ; GFX1032-NEXT:    s_xor_b32 s0, exec_lo, s0
3029 ; GFX1032-NEXT:    s_cbranch_execz .LBB5_5
3030 ; GFX1032-NEXT:  ; %bb.3:
3031 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3032 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
3033 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
3034 ; GFX1032-NEXT:    global_load_dword v1, v3, s[0:1]
3035 ; GFX1032-NEXT:  .LBB5_4: ; %atomicrmw.start
3036 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
3037 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
3038 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
3039 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
3040 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
3041 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
3042 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
3043 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
3044 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
3045 ; GFX1032-NEXT:    s_cbranch_execnz .LBB5_4
3046 ; GFX1032-NEXT:  .LBB5_5:
3047 ; GFX1032-NEXT:    s_endpgm
3049 ; GFX1164-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
3050 ; GFX1164:       ; %bb.0:
3051 ; GFX1164-NEXT:    s_mov_b64 s[34:35], s[4:5]
3052 ; GFX1164-NEXT:    s_mov_b32 s12, s8
3053 ; GFX1164-NEXT:    s_add_u32 s8, s34, 44
3054 ; GFX1164-NEXT:    s_mov_b32 s13, s9
3055 ; GFX1164-NEXT:    s_addc_u32 s9, s35, 0
3056 ; GFX1164-NEXT:    s_getpc_b64 s[4:5]
3057 ; GFX1164-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3058 ; GFX1164-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3059 ; GFX1164-NEXT:    v_mov_b32_e32 v31, v0
3060 ; GFX1164-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
3061 ; GFX1164-NEXT:    s_mov_b32 s14, s10
3062 ; GFX1164-NEXT:    s_mov_b64 s[10:11], s[6:7]
3063 ; GFX1164-NEXT:    s_mov_b64 s[4:5], s[0:1]
3064 ; GFX1164-NEXT:    s_mov_b64 s[6:7], s[2:3]
3065 ; GFX1164-NEXT:    s_mov_b32 s32, 0
3066 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
3067 ; GFX1164-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3068 ; GFX1164-NEXT:    v_bfrev_b32_e32 v1, 1
3069 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
3070 ; GFX1164-NEXT:  .LBB5_1: ; %ComputeLoop
3071 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
3072 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
3073 ; GFX1164-NEXT:    s_ctz_i32_b32 s2, s1
3074 ; GFX1164-NEXT:    s_ctz_i32_b32 s3, s0
3075 ; GFX1164-NEXT:    s_add_i32 s2, s2, 32
3076 ; GFX1164-NEXT:    s_min_u32 s2, s3, s2
3077 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
3078 ; GFX1164-NEXT:    v_readlane_b32 s4, v0, s2
3079 ; GFX1164-NEXT:    s_lshl_b64 s[2:3], 1, s2
3080 ; GFX1164-NEXT:    s_and_not1_b64 s[0:1], s[0:1], s[2:3]
3081 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3082 ; GFX1164-NEXT:    s_cmp_lg_u64 s[0:1], 0
3083 ; GFX1164-NEXT:    v_add_f32_e32 v1, s4, v1
3084 ; GFX1164-NEXT:    s_cbranch_scc1 .LBB5_1
3085 ; GFX1164-NEXT:  ; %bb.2: ; %ComputeEnd
3086 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3087 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
3088 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3089 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
3090 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v0
3091 ; GFX1164-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
3092 ; GFX1164-NEXT:    s_cbranch_execz .LBB5_4
3093 ; GFX1164-NEXT:  ; %bb.3:
3094 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
3095 ; GFX1164-NEXT:    v_mov_b32_e32 v0, 0
3096 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
3097 ; GFX1164-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
3098 ; GFX1164-NEXT:  .LBB5_4:
3099 ; GFX1164-NEXT:    s_nop 0
3100 ; GFX1164-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3101 ; GFX1164-NEXT:    s_endpgm
3103 ; GFX1132-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
3104 ; GFX1132:       ; %bb.0:
3105 ; GFX1132-NEXT:    s_mov_b64 s[34:35], s[4:5]
3106 ; GFX1132-NEXT:    v_mov_b32_e32 v31, v0
3107 ; GFX1132-NEXT:    s_add_u32 s8, s34, 44
3108 ; GFX1132-NEXT:    s_addc_u32 s9, s35, 0
3109 ; GFX1132-NEXT:    s_getpc_b64 s[4:5]
3110 ; GFX1132-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3111 ; GFX1132-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3112 ; GFX1132-NEXT:    s_mov_b32 s12, s13
3113 ; GFX1132-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
3114 ; GFX1132-NEXT:    s_mov_b64 s[10:11], s[6:7]
3115 ; GFX1132-NEXT:    s_mov_b64 s[4:5], s[0:1]
3116 ; GFX1132-NEXT:    s_mov_b64 s[6:7], s[2:3]
3117 ; GFX1132-NEXT:    s_mov_b32 s13, s14
3118 ; GFX1132-NEXT:    s_mov_b32 s14, s15
3119 ; GFX1132-NEXT:    s_mov_b32 s32, 0
3120 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
3121 ; GFX1132-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3122 ; GFX1132-NEXT:    v_bfrev_b32_e32 v1, 1
3123 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
3124 ; GFX1132-NEXT:  .LBB5_1: ; %ComputeLoop
3125 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
3126 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3127 ; GFX1132-NEXT:    s_ctz_i32_b32 s1, s0
3128 ; GFX1132-NEXT:    v_readlane_b32 s2, v0, s1
3129 ; GFX1132-NEXT:    s_lshl_b32 s1, 1, s1
3130 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3131 ; GFX1132-NEXT:    s_and_not1_b32 s0, s0, s1
3132 ; GFX1132-NEXT:    s_cmp_lg_u32 s0, 0
3133 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3134 ; GFX1132-NEXT:    v_add_f32_e32 v1, s2, v1
3135 ; GFX1132-NEXT:    s_cbranch_scc1 .LBB5_1
3136 ; GFX1132-NEXT:  ; %bb.2: ; %ComputeEnd
3137 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3138 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
3139 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3140 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v0
3141 ; GFX1132-NEXT:    s_xor_b32 s0, exec_lo, s0
3142 ; GFX1132-NEXT:    s_cbranch_execz .LBB5_4
3143 ; GFX1132-NEXT:  ; %bb.3:
3144 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
3145 ; GFX1132-NEXT:    v_mov_b32_e32 v0, 0
3146 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
3147 ; GFX1132-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
3148 ; GFX1132-NEXT:  .LBB5_4:
3149 ; GFX1132-NEXT:    s_nop 0
3150 ; GFX1132-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3151 ; GFX1132-NEXT:    s_endpgm
3153 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
3154 ; GFX9-DPP:       ; %bb.0:
3155 ; GFX9-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3156 ; GFX9-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3157 ; GFX9-DPP-NEXT:    s_mov_b32 s38, -1
3158 ; GFX9-DPP-NEXT:    s_mov_b32 s39, 0xe00000
3159 ; GFX9-DPP-NEXT:    s_add_u32 s36, s36, s11
3160 ; GFX9-DPP-NEXT:    s_addc_u32 s37, s37, 0
3161 ; GFX9-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
3162 ; GFX9-DPP-NEXT:    s_mov_b32 s12, s8
3163 ; GFX9-DPP-NEXT:    s_add_u32 s8, s34, 44
3164 ; GFX9-DPP-NEXT:    s_mov_b32 s13, s9
3165 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s35, 0
3166 ; GFX9-DPP-NEXT:    s_getpc_b64 s[4:5]
3167 ; GFX9-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3168 ; GFX9-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3169 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3170 ; GFX9-DPP-NEXT:    s_mov_b32 s14, s10
3171 ; GFX9-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
3172 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3173 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3174 ; GFX9-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
3175 ; GFX9-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
3176 ; GFX9-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
3177 ; GFX9-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
3178 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
3179 ; GFX9-DPP-NEXT:    s_mov_b32 s32, 0
3180 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3181 ; GFX9-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3182 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v1, exec_lo, 0
3183 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v1, exec_hi, v1
3184 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, v0
3185 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
3186 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3187 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
3188 ; GFX9-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3189 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3190 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
3191 ; GFX9-DPP-NEXT:    s_nop 0
3192 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:1 row_mask:0xf bank_mask:0xf
3193 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3194 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3195 ; GFX9-DPP-NEXT:    s_nop 1
3196 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:2 row_mask:0xf bank_mask:0xf
3197 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3198 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3199 ; GFX9-DPP-NEXT:    s_nop 1
3200 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:4 row_mask:0xf bank_mask:0xf
3201 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3202 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3203 ; GFX9-DPP-NEXT:    s_nop 1
3204 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:8 row_mask:0xf bank_mask:0xf
3205 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3206 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3207 ; GFX9-DPP-NEXT:    s_nop 1
3208 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_bcast:15 row_mask:0xa bank_mask:0xf
3209 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3210 ; GFX9-DPP-NEXT:    s_nop 1
3211 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_bcast:31 row_mask:0xc bank_mask:0xf
3212 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
3213 ; GFX9-DPP-NEXT:    v_readlane_b32 s4, v3, 63
3214 ; GFX9-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3215 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
3216 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
3217 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB5_3
3218 ; GFX9-DPP-NEXT:  ; %bb.1:
3219 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3220 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v2, 0
3221 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
3222 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3223 ; GFX9-DPP-NEXT:    global_load_dword v1, v2, s[0:1]
3224 ; GFX9-DPP-NEXT:  .LBB5_2: ; %atomicrmw.start
3225 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
3226 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
3227 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, s4, v1
3228 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
3229 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
3230 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
3231 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
3232 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
3233 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
3234 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB5_2
3235 ; GFX9-DPP-NEXT:  .LBB5_3:
3236 ; GFX9-DPP-NEXT:    s_endpgm
3238 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
3239 ; GFX1064-DPP:       ; %bb.0:
3240 ; GFX1064-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3241 ; GFX1064-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3242 ; GFX1064-DPP-NEXT:    s_mov_b32 s38, -1
3243 ; GFX1064-DPP-NEXT:    s_mov_b32 s39, 0x31e16000
3244 ; GFX1064-DPP-NEXT:    s_add_u32 s36, s36, s11
3245 ; GFX1064-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
3246 ; GFX1064-DPP-NEXT:    s_addc_u32 s37, s37, 0
3247 ; GFX1064-DPP-NEXT:    s_mov_b32 s12, s8
3248 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s34, 44
3249 ; GFX1064-DPP-NEXT:    s_mov_b32 s13, s9
3250 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s35, 0
3251 ; GFX1064-DPP-NEXT:    s_getpc_b64 s[4:5]
3252 ; GFX1064-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3253 ; GFX1064-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3254 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3255 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3256 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3257 ; GFX1064-DPP-NEXT:    s_mov_b32 s14, s10
3258 ; GFX1064-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
3259 ; GFX1064-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
3260 ; GFX1064-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
3261 ; GFX1064-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
3262 ; GFX1064-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
3263 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
3264 ; GFX1064-DPP-NEXT:    s_mov_b32 s32, 0
3265 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3266 ; GFX1064-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3267 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3268 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3269 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3270 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v0
3271 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
3272 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
3273 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
3274 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3275 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
3276 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3277 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
3278 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
3279 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
3280 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3281 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3282 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
3283 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
3284 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
3285 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3286 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v3
3287 ; GFX1064-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
3288 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
3289 ; GFX1064-DPP-NEXT:    v_readlane_b32 s2, v3, 0
3290 ; GFX1064-DPP-NEXT:    v_readlane_b32 s3, v3, 32
3291 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3292 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3293 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3294 ; GFX1064-DPP-NEXT:    v_add_f32_e64 v3, s2, s3
3295 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3296 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
3297 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v2, v3
3298 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
3299 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
3300 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB5_3
3301 ; GFX1064-DPP-NEXT:  ; %bb.1:
3302 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3303 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v6, 0
3304 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
3305 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3306 ; GFX1064-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
3307 ; GFX1064-DPP-NEXT:  .LBB5_2: ; %atomicrmw.start
3308 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
3309 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
3310 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
3311 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
3312 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
3313 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
3314 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
3315 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
3316 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
3317 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB5_2
3318 ; GFX1064-DPP-NEXT:  .LBB5_3:
3319 ; GFX1064-DPP-NEXT:    s_endpgm
3321 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
3322 ; GFX1032-DPP:       ; %bb.0:
3323 ; GFX1032-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3324 ; GFX1032-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3325 ; GFX1032-DPP-NEXT:    s_mov_b32 s38, -1
3326 ; GFX1032-DPP-NEXT:    s_mov_b32 s39, 0x31c16000
3327 ; GFX1032-DPP-NEXT:    s_add_u32 s36, s36, s11
3328 ; GFX1032-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
3329 ; GFX1032-DPP-NEXT:    s_addc_u32 s37, s37, 0
3330 ; GFX1032-DPP-NEXT:    s_mov_b32 s12, s8
3331 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s34, 44
3332 ; GFX1032-DPP-NEXT:    s_mov_b32 s13, s9
3333 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s35, 0
3334 ; GFX1032-DPP-NEXT:    s_getpc_b64 s[4:5]
3335 ; GFX1032-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3336 ; GFX1032-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3337 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3338 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3339 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3340 ; GFX1032-DPP-NEXT:    s_mov_b32 s14, s10
3341 ; GFX1032-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
3342 ; GFX1032-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
3343 ; GFX1032-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
3344 ; GFX1032-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
3345 ; GFX1032-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
3346 ; GFX1032-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
3347 ; GFX1032-DPP-NEXT:    s_mov_b32 s32, 0
3348 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3349 ; GFX1032-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3350 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
3351 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3352 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
3353 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v0
3354 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
3355 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
3356 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
3357 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
3358 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
3359 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3360 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
3361 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
3362 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
3363 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3364 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3365 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
3366 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
3367 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
3368 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3369 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v3
3370 ; GFX1032-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
3371 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
3372 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
3373 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3374 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v2, v3
3375 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
3376 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
3377 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s0, vcc_lo
3378 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB5_3
3379 ; GFX1032-DPP-NEXT:  ; %bb.1:
3380 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3381 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v6, 0
3382 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3383 ; GFX1032-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
3384 ; GFX1032-DPP-NEXT:  .LBB5_2: ; %atomicrmw.start
3385 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
3386 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
3387 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
3388 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
3389 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
3390 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
3391 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
3392 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
3393 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
3394 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB5_2
3395 ; GFX1032-DPP-NEXT:  .LBB5_3:
3396 ; GFX1032-DPP-NEXT:    s_endpgm
3398 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
3399 ; GFX1164-DPP:       ; %bb.0:
3400 ; GFX1164-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
3401 ; GFX1164-DPP-NEXT:    s_mov_b32 s12, s8
3402 ; GFX1164-DPP-NEXT:    s_add_u32 s8, s34, 44
3403 ; GFX1164-DPP-NEXT:    s_mov_b32 s13, s9
3404 ; GFX1164-DPP-NEXT:    s_addc_u32 s9, s35, 0
3405 ; GFX1164-DPP-NEXT:    s_getpc_b64 s[4:5]
3406 ; GFX1164-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3407 ; GFX1164-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3408 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v31, v0
3409 ; GFX1164-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
3410 ; GFX1164-DPP-NEXT:    s_mov_b32 s14, s10
3411 ; GFX1164-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
3412 ; GFX1164-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
3413 ; GFX1164-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
3414 ; GFX1164-DPP-NEXT:    s_mov_b32 s32, 0
3415 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3416 ; GFX1164-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3417 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3418 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
3419 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3420 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v0
3421 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
3422 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
3423 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
3424 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3425 ; GFX1164-DPP-NEXT:    s_waitcnt_depctr 0xfff
3426 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
3427 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3428 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3429 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
3430 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
3431 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
3432 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3433 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
3434 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3435 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
3436 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3437 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
3438 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
3439 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3440 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
3441 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v1
3442 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3443 ; GFX1164-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
3444 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
3445 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
3446 ; GFX1164-DPP-NEXT:    v_permlane64_b32 v2, v1
3447 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3448 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3449 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3450 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3451 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
3452 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3453 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
3454 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v4, exec_hi, v0
3455 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3456 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, v1
3457 ; GFX1164-DPP-NEXT:    s_mov_b64 s[0:1], exec
3458 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
3459 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB5_2
3460 ; GFX1164-DPP-NEXT:  ; %bb.1:
3461 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
3462 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v4, 0
3463 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3464 ; GFX1164-DPP-NEXT:    global_atomic_add_f32 v4, v0, s[0:1]
3465 ; GFX1164-DPP-NEXT:  .LBB5_2:
3466 ; GFX1164-DPP-NEXT:    s_nop 0
3467 ; GFX1164-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3468 ; GFX1164-DPP-NEXT:    s_endpgm
3470 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe:
3471 ; GFX1132-DPP:       ; %bb.0:
3472 ; GFX1132-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
3473 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v31, v0
3474 ; GFX1132-DPP-NEXT:    s_add_u32 s8, s34, 44
3475 ; GFX1132-DPP-NEXT:    s_addc_u32 s9, s35, 0
3476 ; GFX1132-DPP-NEXT:    s_getpc_b64 s[4:5]
3477 ; GFX1132-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3478 ; GFX1132-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3479 ; GFX1132-DPP-NEXT:    s_mov_b32 s12, s13
3480 ; GFX1132-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
3481 ; GFX1132-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
3482 ; GFX1132-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
3483 ; GFX1132-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
3484 ; GFX1132-DPP-NEXT:    s_mov_b32 s13, s14
3485 ; GFX1132-DPP-NEXT:    s_mov_b32 s14, s15
3486 ; GFX1132-DPP-NEXT:    s_mov_b32 s32, 0
3487 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3488 ; GFX1132-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3489 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
3490 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
3491 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
3492 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v0
3493 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
3494 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
3495 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
3496 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
3497 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3498 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
3499 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3500 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
3501 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
3502 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3503 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
3504 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
3505 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3506 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
3507 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
3508 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
3509 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3510 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
3511 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
3512 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3513 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v1
3514 ; GFX1132-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
3515 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
3516 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
3517 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
3518 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v4, exec_lo, 0
3519 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3520 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v0, v1
3521 ; GFX1132-DPP-NEXT:    s_mov_b32 s0, exec_lo
3522 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
3523 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB5_2
3524 ; GFX1132-DPP-NEXT:  ; %bb.1:
3525 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
3526 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v4, 0
3527 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3528 ; GFX1132-DPP-NEXT:    global_atomic_add_f32 v4, v0, s[0:1]
3529 ; GFX1132-DPP-NEXT:  .LBB5_2:
3530 ; GFX1132-DPP-NEXT:    s_nop 0
3531 ; GFX1132-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3532 ; GFX1132-DPP-NEXT:    s_endpgm
3533   %divValue = call float @div.float.value()
3534   %result = atomicrmw fadd ptr addrspace(1) %ptr, float %divValue syncscope("agent") monotonic
3535   ret void
3539 define amdgpu_kernel void @global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp(ptr addrspace(1) %ptr) #1 {
3540 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3541 ; GFX7LESS:       ; %bb.0:
3542 ; GFX7LESS-NEXT:    s_mov_b32 s32, 0
3543 ; GFX7LESS-NEXT:    s_mov_b32 s40, SCRATCH_RSRC_DWORD0
3544 ; GFX7LESS-NEXT:    s_mov_b32 s41, SCRATCH_RSRC_DWORD1
3545 ; GFX7LESS-NEXT:    s_mov_b32 s42, -1
3546 ; GFX7LESS-NEXT:    s_mov_b32 s43, 0xe8f000
3547 ; GFX7LESS-NEXT:    s_add_u32 s40, s40, s11
3548 ; GFX7LESS-NEXT:    s_addc_u32 s41, s41, 0
3549 ; GFX7LESS-NEXT:    s_mov_b32 s14, s10
3550 ; GFX7LESS-NEXT:    s_mov_b32 s13, s9
3551 ; GFX7LESS-NEXT:    s_mov_b32 s12, s8
3552 ; GFX7LESS-NEXT:    s_mov_b64 s[10:11], s[6:7]
3553 ; GFX7LESS-NEXT:    s_load_dwordx2 s[36:37], s[4:5], 0x9
3554 ; GFX7LESS-NEXT:    s_mov_b32 s39, 0xf000
3555 ; GFX7LESS-NEXT:    s_mov_b32 s38, -1
3556 ; GFX7LESS-NEXT:    s_add_u32 s8, s4, 44
3557 ; GFX7LESS-NEXT:    s_addc_u32 s9, s5, 0
3558 ; GFX7LESS-NEXT:    s_getpc_b64 s[4:5]
3559 ; GFX7LESS-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3560 ; GFX7LESS-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3561 ; GFX7LESS-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3562 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3563 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3564 ; GFX7LESS-NEXT:    v_or_b32_e32 v0, v0, v1
3565 ; GFX7LESS-NEXT:    v_or_b32_e32 v31, v0, v2
3566 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], s[0:1]
3567 ; GFX7LESS-NEXT:    s_mov_b64 s[6:7], s[2:3]
3568 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], s[40:41]
3569 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], s[42:43]
3570 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
3571 ; GFX7LESS-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3572 ; GFX7LESS-NEXT:    buffer_load_dword v2, off, s[36:39], 0
3573 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], 0
3574 ; GFX7LESS-NEXT:  .LBB6_1: ; %atomicrmw.start
3575 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
3576 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
3577 ; GFX7LESS-NEXT:    v_add_f32_e32 v1, v2, v0
3578 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
3579 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v2
3580 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v1
3581 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[36:39], 0 glc
3582 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
3583 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v2
3584 ; GFX7LESS-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]
3585 ; GFX7LESS-NEXT:    v_mov_b32_e32 v2, v3
3586 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[0:1]
3587 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB6_1
3588 ; GFX7LESS-NEXT:  ; %bb.2: ; %atomicrmw.end
3589 ; GFX7LESS-NEXT:    s_endpgm
3591 ; GFX9-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3592 ; GFX9:       ; %bb.0:
3593 ; GFX9-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3594 ; GFX9-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3595 ; GFX9-NEXT:    s_mov_b32 s38, -1
3596 ; GFX9-NEXT:    s_mov_b32 s39, 0xe00000
3597 ; GFX9-NEXT:    s_add_u32 s36, s36, s11
3598 ; GFX9-NEXT:    s_addc_u32 s37, s37, 0
3599 ; GFX9-NEXT:    s_mov_b64 s[34:35], s[4:5]
3600 ; GFX9-NEXT:    s_mov_b32 s12, s8
3601 ; GFX9-NEXT:    s_add_u32 s8, s34, 44
3602 ; GFX9-NEXT:    s_mov_b32 s13, s9
3603 ; GFX9-NEXT:    s_addc_u32 s9, s35, 0
3604 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
3605 ; GFX9-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3606 ; GFX9-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3607 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3608 ; GFX9-NEXT:    s_mov_b32 s14, s10
3609 ; GFX9-NEXT:    s_mov_b64 s[10:11], s[6:7]
3610 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3611 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3612 ; GFX9-NEXT:    s_mov_b64 s[4:5], s[0:1]
3613 ; GFX9-NEXT:    s_mov_b64 s[6:7], s[2:3]
3614 ; GFX9-NEXT:    s_mov_b64 s[0:1], s[36:37]
3615 ; GFX9-NEXT:    v_or3_b32 v31, v0, v1, v2
3616 ; GFX9-NEXT:    s_mov_b64 s[2:3], s[38:39]
3617 ; GFX9-NEXT:    s_mov_b32 s32, 0
3618 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
3619 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3620 ; GFX9-NEXT:    s_mov_b64 s[0:1], exec
3621 ; GFX9-NEXT:    v_bfrev_b32_e32 v2, 1
3622 ; GFX9-NEXT:  .LBB6_1: ; %ComputeLoop
3623 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
3624 ; GFX9-NEXT:    s_ff1_i32_b32 s2, s1
3625 ; GFX9-NEXT:    s_ff1_i32_b32 s3, s0
3626 ; GFX9-NEXT:    s_add_i32 s2, s2, 32
3627 ; GFX9-NEXT:    s_min_u32 s2, s3, s2
3628 ; GFX9-NEXT:    v_readlane_b32 s4, v0, s2
3629 ; GFX9-NEXT:    s_lshl_b64 s[2:3], 1, s2
3630 ; GFX9-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
3631 ; GFX9-NEXT:    s_cmp_lg_u64 s[0:1], 0
3632 ; GFX9-NEXT:    v_add_f32_e32 v2, s4, v2
3633 ; GFX9-NEXT:    s_cbranch_scc1 .LBB6_1
3634 ; GFX9-NEXT:  ; %bb.2: ; %ComputeEnd
3635 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3636 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
3637 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
3638 ; GFX9-NEXT:    s_and_saveexec_b64 s[0:1], vcc
3639 ; GFX9-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
3640 ; GFX9-NEXT:    s_cbranch_execz .LBB6_5
3641 ; GFX9-NEXT:  ; %bb.3:
3642 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3643 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
3644 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
3645 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
3646 ; GFX9-NEXT:    global_load_dword v1, v3, s[0:1]
3647 ; GFX9-NEXT:  .LBB6_4: ; %atomicrmw.start
3648 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
3649 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3650 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
3651 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
3652 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3653 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
3654 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
3655 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
3656 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
3657 ; GFX9-NEXT:    s_cbranch_execnz .LBB6_4
3658 ; GFX9-NEXT:  .LBB6_5:
3659 ; GFX9-NEXT:    s_endpgm
3661 ; GFX1064-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3662 ; GFX1064:       ; %bb.0:
3663 ; GFX1064-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3664 ; GFX1064-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3665 ; GFX1064-NEXT:    s_mov_b32 s38, -1
3666 ; GFX1064-NEXT:    s_mov_b32 s39, 0x31e16000
3667 ; GFX1064-NEXT:    s_add_u32 s36, s36, s11
3668 ; GFX1064-NEXT:    s_mov_b64 s[34:35], s[4:5]
3669 ; GFX1064-NEXT:    s_addc_u32 s37, s37, 0
3670 ; GFX1064-NEXT:    s_mov_b32 s12, s8
3671 ; GFX1064-NEXT:    s_add_u32 s8, s34, 44
3672 ; GFX1064-NEXT:    s_mov_b32 s13, s9
3673 ; GFX1064-NEXT:    s_addc_u32 s9, s35, 0
3674 ; GFX1064-NEXT:    s_getpc_b64 s[4:5]
3675 ; GFX1064-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3676 ; GFX1064-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3677 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3678 ; GFX1064-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3679 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3680 ; GFX1064-NEXT:    s_mov_b32 s14, s10
3681 ; GFX1064-NEXT:    s_mov_b64 s[10:11], s[6:7]
3682 ; GFX1064-NEXT:    s_mov_b64 s[4:5], s[0:1]
3683 ; GFX1064-NEXT:    s_mov_b64 s[6:7], s[2:3]
3684 ; GFX1064-NEXT:    v_or3_b32 v31, v0, v1, v2
3685 ; GFX1064-NEXT:    s_mov_b64 s[0:1], s[36:37]
3686 ; GFX1064-NEXT:    s_mov_b64 s[2:3], s[38:39]
3687 ; GFX1064-NEXT:    s_mov_b32 s32, 0
3688 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
3689 ; GFX1064-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3690 ; GFX1064-NEXT:    v_bfrev_b32_e32 v2, 1
3691 ; GFX1064-NEXT:    s_mov_b64 s[0:1], exec
3692 ; GFX1064-NEXT:  .LBB6_1: ; %ComputeLoop
3693 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
3694 ; GFX1064-NEXT:    s_ff1_i32_b32 s2, s1
3695 ; GFX1064-NEXT:    s_ff1_i32_b32 s3, s0
3696 ; GFX1064-NEXT:    s_add_i32 s2, s2, 32
3697 ; GFX1064-NEXT:    s_min_u32 s2, s3, s2
3698 ; GFX1064-NEXT:    v_readlane_b32 s4, v0, s2
3699 ; GFX1064-NEXT:    s_lshl_b64 s[2:3], 1, s2
3700 ; GFX1064-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
3701 ; GFX1064-NEXT:    s_cmp_lg_u64 s[0:1], 0
3702 ; GFX1064-NEXT:    v_add_f32_e32 v2, s4, v2
3703 ; GFX1064-NEXT:    s_cbranch_scc1 .LBB6_1
3704 ; GFX1064-NEXT:  ; %bb.2: ; %ComputeEnd
3705 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3706 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
3707 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
3708 ; GFX1064-NEXT:    s_and_saveexec_b64 s[0:1], vcc
3709 ; GFX1064-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
3710 ; GFX1064-NEXT:    s_cbranch_execz .LBB6_5
3711 ; GFX1064-NEXT:  ; %bb.3:
3712 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3713 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
3714 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
3715 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
3716 ; GFX1064-NEXT:    global_load_dword v1, v3, s[0:1]
3717 ; GFX1064-NEXT:  .LBB6_4: ; %atomicrmw.start
3718 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
3719 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
3720 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
3721 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
3722 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
3723 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
3724 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
3725 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
3726 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
3727 ; GFX1064-NEXT:    s_cbranch_execnz .LBB6_4
3728 ; GFX1064-NEXT:  .LBB6_5:
3729 ; GFX1064-NEXT:    s_endpgm
3731 ; GFX1032-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3732 ; GFX1032:       ; %bb.0:
3733 ; GFX1032-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3734 ; GFX1032-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3735 ; GFX1032-NEXT:    s_mov_b32 s38, -1
3736 ; GFX1032-NEXT:    s_mov_b32 s39, 0x31c16000
3737 ; GFX1032-NEXT:    s_add_u32 s36, s36, s11
3738 ; GFX1032-NEXT:    s_mov_b64 s[34:35], s[4:5]
3739 ; GFX1032-NEXT:    s_addc_u32 s37, s37, 0
3740 ; GFX1032-NEXT:    s_mov_b32 s12, s8
3741 ; GFX1032-NEXT:    s_add_u32 s8, s34, 44
3742 ; GFX1032-NEXT:    s_mov_b32 s13, s9
3743 ; GFX1032-NEXT:    s_addc_u32 s9, s35, 0
3744 ; GFX1032-NEXT:    s_getpc_b64 s[4:5]
3745 ; GFX1032-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3746 ; GFX1032-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3747 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3748 ; GFX1032-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3749 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3750 ; GFX1032-NEXT:    s_mov_b32 s14, s10
3751 ; GFX1032-NEXT:    s_mov_b64 s[10:11], s[6:7]
3752 ; GFX1032-NEXT:    s_mov_b64 s[4:5], s[0:1]
3753 ; GFX1032-NEXT:    s_mov_b64 s[6:7], s[2:3]
3754 ; GFX1032-NEXT:    v_or3_b32 v31, v0, v1, v2
3755 ; GFX1032-NEXT:    s_mov_b64 s[0:1], s[36:37]
3756 ; GFX1032-NEXT:    s_mov_b64 s[2:3], s[38:39]
3757 ; GFX1032-NEXT:    s_mov_b32 s32, 0
3758 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
3759 ; GFX1032-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3760 ; GFX1032-NEXT:    v_bfrev_b32_e32 v2, 1
3761 ; GFX1032-NEXT:    s_mov_b32 s0, exec_lo
3762 ; GFX1032-NEXT:  .LBB6_1: ; %ComputeLoop
3763 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
3764 ; GFX1032-NEXT:    s_ff1_i32_b32 s1, s0
3765 ; GFX1032-NEXT:    v_readlane_b32 s2, v0, s1
3766 ; GFX1032-NEXT:    s_lshl_b32 s1, 1, s1
3767 ; GFX1032-NEXT:    s_andn2_b32 s0, s0, s1
3768 ; GFX1032-NEXT:    s_cmp_lg_u32 s0, 0
3769 ; GFX1032-NEXT:    v_add_f32_e32 v2, s2, v2
3770 ; GFX1032-NEXT:    s_cbranch_scc1 .LBB6_1
3771 ; GFX1032-NEXT:  ; %bb.2: ; %ComputeEnd
3772 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3773 ; GFX1032-NEXT:    s_mov_b32 s2, 0
3774 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
3775 ; GFX1032-NEXT:    s_and_saveexec_b32 s0, vcc_lo
3776 ; GFX1032-NEXT:    s_xor_b32 s0, exec_lo, s0
3777 ; GFX1032-NEXT:    s_cbranch_execz .LBB6_5
3778 ; GFX1032-NEXT:  ; %bb.3:
3779 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3780 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
3781 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
3782 ; GFX1032-NEXT:    global_load_dword v1, v3, s[0:1]
3783 ; GFX1032-NEXT:  .LBB6_4: ; %atomicrmw.start
3784 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
3785 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
3786 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
3787 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
3788 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
3789 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
3790 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
3791 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
3792 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
3793 ; GFX1032-NEXT:    s_cbranch_execnz .LBB6_4
3794 ; GFX1032-NEXT:  .LBB6_5:
3795 ; GFX1032-NEXT:    s_endpgm
3797 ; GFX1164-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3798 ; GFX1164:       ; %bb.0:
3799 ; GFX1164-NEXT:    s_mov_b64 s[34:35], s[4:5]
3800 ; GFX1164-NEXT:    s_mov_b32 s12, s8
3801 ; GFX1164-NEXT:    s_add_u32 s8, s34, 44
3802 ; GFX1164-NEXT:    s_mov_b32 s13, s9
3803 ; GFX1164-NEXT:    s_addc_u32 s9, s35, 0
3804 ; GFX1164-NEXT:    s_getpc_b64 s[4:5]
3805 ; GFX1164-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3806 ; GFX1164-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3807 ; GFX1164-NEXT:    v_mov_b32_e32 v31, v0
3808 ; GFX1164-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
3809 ; GFX1164-NEXT:    s_mov_b32 s14, s10
3810 ; GFX1164-NEXT:    s_mov_b64 s[10:11], s[6:7]
3811 ; GFX1164-NEXT:    s_mov_b64 s[4:5], s[0:1]
3812 ; GFX1164-NEXT:    s_mov_b64 s[6:7], s[2:3]
3813 ; GFX1164-NEXT:    s_mov_b32 s32, 0
3814 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
3815 ; GFX1164-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3816 ; GFX1164-NEXT:    v_bfrev_b32_e32 v1, 1
3817 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
3818 ; GFX1164-NEXT:  .LBB6_1: ; %ComputeLoop
3819 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
3820 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
3821 ; GFX1164-NEXT:    s_ctz_i32_b32 s2, s1
3822 ; GFX1164-NEXT:    s_ctz_i32_b32 s3, s0
3823 ; GFX1164-NEXT:    s_add_i32 s2, s2, 32
3824 ; GFX1164-NEXT:    s_min_u32 s2, s3, s2
3825 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
3826 ; GFX1164-NEXT:    v_readlane_b32 s4, v0, s2
3827 ; GFX1164-NEXT:    s_lshl_b64 s[2:3], 1, s2
3828 ; GFX1164-NEXT:    s_and_not1_b64 s[0:1], s[0:1], s[2:3]
3829 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3830 ; GFX1164-NEXT:    s_cmp_lg_u64 s[0:1], 0
3831 ; GFX1164-NEXT:    v_add_f32_e32 v1, s4, v1
3832 ; GFX1164-NEXT:    s_cbranch_scc1 .LBB6_1
3833 ; GFX1164-NEXT:  ; %bb.2: ; %ComputeEnd
3834 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3835 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
3836 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3837 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
3838 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v0
3839 ; GFX1164-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
3840 ; GFX1164-NEXT:    s_cbranch_execz .LBB6_4
3841 ; GFX1164-NEXT:  ; %bb.3:
3842 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
3843 ; GFX1164-NEXT:    v_mov_b32_e32 v0, 0
3844 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
3845 ; GFX1164-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
3846 ; GFX1164-NEXT:  .LBB6_4:
3847 ; GFX1164-NEXT:    s_nop 0
3848 ; GFX1164-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3849 ; GFX1164-NEXT:    s_endpgm
3851 ; GFX1132-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3852 ; GFX1132:       ; %bb.0:
3853 ; GFX1132-NEXT:    s_mov_b64 s[34:35], s[4:5]
3854 ; GFX1132-NEXT:    v_mov_b32_e32 v31, v0
3855 ; GFX1132-NEXT:    s_add_u32 s8, s34, 44
3856 ; GFX1132-NEXT:    s_addc_u32 s9, s35, 0
3857 ; GFX1132-NEXT:    s_getpc_b64 s[4:5]
3858 ; GFX1132-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3859 ; GFX1132-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3860 ; GFX1132-NEXT:    s_mov_b32 s12, s13
3861 ; GFX1132-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
3862 ; GFX1132-NEXT:    s_mov_b64 s[10:11], s[6:7]
3863 ; GFX1132-NEXT:    s_mov_b64 s[4:5], s[0:1]
3864 ; GFX1132-NEXT:    s_mov_b64 s[6:7], s[2:3]
3865 ; GFX1132-NEXT:    s_mov_b32 s13, s14
3866 ; GFX1132-NEXT:    s_mov_b32 s14, s15
3867 ; GFX1132-NEXT:    s_mov_b32 s32, 0
3868 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
3869 ; GFX1132-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3870 ; GFX1132-NEXT:    v_bfrev_b32_e32 v1, 1
3871 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
3872 ; GFX1132-NEXT:  .LBB6_1: ; %ComputeLoop
3873 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
3874 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3875 ; GFX1132-NEXT:    s_ctz_i32_b32 s1, s0
3876 ; GFX1132-NEXT:    v_readlane_b32 s2, v0, s1
3877 ; GFX1132-NEXT:    s_lshl_b32 s1, 1, s1
3878 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3879 ; GFX1132-NEXT:    s_and_not1_b32 s0, s0, s1
3880 ; GFX1132-NEXT:    s_cmp_lg_u32 s0, 0
3881 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3882 ; GFX1132-NEXT:    v_add_f32_e32 v1, s2, v1
3883 ; GFX1132-NEXT:    s_cbranch_scc1 .LBB6_1
3884 ; GFX1132-NEXT:  ; %bb.2: ; %ComputeEnd
3885 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
3886 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
3887 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3888 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v0
3889 ; GFX1132-NEXT:    s_xor_b32 s0, exec_lo, s0
3890 ; GFX1132-NEXT:    s_cbranch_execz .LBB6_4
3891 ; GFX1132-NEXT:  ; %bb.3:
3892 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
3893 ; GFX1132-NEXT:    v_mov_b32_e32 v0, 0
3894 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
3895 ; GFX1132-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
3896 ; GFX1132-NEXT:  .LBB6_4:
3897 ; GFX1132-NEXT:    s_nop 0
3898 ; GFX1132-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3899 ; GFX1132-NEXT:    s_endpgm
3901 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3902 ; GFX9-DPP:       ; %bb.0:
3903 ; GFX9-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3904 ; GFX9-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3905 ; GFX9-DPP-NEXT:    s_mov_b32 s38, -1
3906 ; GFX9-DPP-NEXT:    s_mov_b32 s39, 0xe00000
3907 ; GFX9-DPP-NEXT:    s_add_u32 s36, s36, s11
3908 ; GFX9-DPP-NEXT:    s_addc_u32 s37, s37, 0
3909 ; GFX9-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
3910 ; GFX9-DPP-NEXT:    s_mov_b32 s12, s8
3911 ; GFX9-DPP-NEXT:    s_add_u32 s8, s34, 44
3912 ; GFX9-DPP-NEXT:    s_mov_b32 s13, s9
3913 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s35, 0
3914 ; GFX9-DPP-NEXT:    s_getpc_b64 s[4:5]
3915 ; GFX9-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
3916 ; GFX9-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
3917 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
3918 ; GFX9-DPP-NEXT:    s_mov_b32 s14, s10
3919 ; GFX9-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
3920 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
3921 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
3922 ; GFX9-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
3923 ; GFX9-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
3924 ; GFX9-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
3925 ; GFX9-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
3926 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
3927 ; GFX9-DPP-NEXT:    s_mov_b32 s32, 0
3928 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3929 ; GFX9-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
3930 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v1, exec_lo, 0
3931 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v1, exec_hi, v1
3932 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, v0
3933 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
3934 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
3935 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
3936 ; GFX9-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
3937 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3938 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
3939 ; GFX9-DPP-NEXT:    s_nop 0
3940 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:1 row_mask:0xf bank_mask:0xf
3941 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3942 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3943 ; GFX9-DPP-NEXT:    s_nop 1
3944 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:2 row_mask:0xf bank_mask:0xf
3945 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3946 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3947 ; GFX9-DPP-NEXT:    s_nop 1
3948 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:4 row_mask:0xf bank_mask:0xf
3949 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3950 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3951 ; GFX9-DPP-NEXT:    s_nop 1
3952 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:8 row_mask:0xf bank_mask:0xf
3953 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3954 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
3955 ; GFX9-DPP-NEXT:    s_nop 1
3956 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_bcast:15 row_mask:0xa bank_mask:0xf
3957 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
3958 ; GFX9-DPP-NEXT:    s_nop 1
3959 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_bcast:31 row_mask:0xc bank_mask:0xf
3960 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
3961 ; GFX9-DPP-NEXT:    v_readlane_b32 s4, v3, 63
3962 ; GFX9-DPP-NEXT:    s_mov_b64 exec, s[0:1]
3963 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
3964 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
3965 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB6_3
3966 ; GFX9-DPP-NEXT:  ; %bb.1:
3967 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
3968 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v2, 0
3969 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
3970 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
3971 ; GFX9-DPP-NEXT:    global_load_dword v1, v2, s[0:1]
3972 ; GFX9-DPP-NEXT:  .LBB6_2: ; %atomicrmw.start
3973 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
3974 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
3975 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, s4, v1
3976 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
3977 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
3978 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
3979 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
3980 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
3981 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
3982 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB6_2
3983 ; GFX9-DPP-NEXT:  .LBB6_3:
3984 ; GFX9-DPP-NEXT:    s_endpgm
3986 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
3987 ; GFX1064-DPP:       ; %bb.0:
3988 ; GFX1064-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
3989 ; GFX1064-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
3990 ; GFX1064-DPP-NEXT:    s_mov_b32 s38, -1
3991 ; GFX1064-DPP-NEXT:    s_mov_b32 s39, 0x31e16000
3992 ; GFX1064-DPP-NEXT:    s_add_u32 s36, s36, s11
3993 ; GFX1064-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
3994 ; GFX1064-DPP-NEXT:    s_addc_u32 s37, s37, 0
3995 ; GFX1064-DPP-NEXT:    s_mov_b32 s12, s8
3996 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s34, 44
3997 ; GFX1064-DPP-NEXT:    s_mov_b32 s13, s9
3998 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s35, 0
3999 ; GFX1064-DPP-NEXT:    s_getpc_b64 s[4:5]
4000 ; GFX1064-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4001 ; GFX1064-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4002 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
4003 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
4004 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
4005 ; GFX1064-DPP-NEXT:    s_mov_b32 s14, s10
4006 ; GFX1064-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
4007 ; GFX1064-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
4008 ; GFX1064-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
4009 ; GFX1064-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
4010 ; GFX1064-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
4011 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
4012 ; GFX1064-DPP-NEXT:    s_mov_b32 s32, 0
4013 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4014 ; GFX1064-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4015 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
4016 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
4017 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
4018 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v0
4019 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
4020 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
4021 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
4022 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
4023 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
4024 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
4025 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
4026 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
4027 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
4028 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
4029 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
4030 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
4031 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
4032 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
4033 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
4034 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v3
4035 ; GFX1064-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
4036 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
4037 ; GFX1064-DPP-NEXT:    v_readlane_b32 s2, v3, 0
4038 ; GFX1064-DPP-NEXT:    v_readlane_b32 s3, v3, 32
4039 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
4040 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
4041 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
4042 ; GFX1064-DPP-NEXT:    v_add_f32_e64 v3, s2, s3
4043 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
4044 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
4045 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v2, v3
4046 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4047 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
4048 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB6_3
4049 ; GFX1064-DPP-NEXT:  ; %bb.1:
4050 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
4051 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v6, 0
4052 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
4053 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4054 ; GFX1064-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
4055 ; GFX1064-DPP-NEXT:  .LBB6_2: ; %atomicrmw.start
4056 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
4057 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
4058 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
4059 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
4060 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
4061 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4062 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
4063 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4064 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4065 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB6_2
4066 ; GFX1064-DPP-NEXT:  .LBB6_3:
4067 ; GFX1064-DPP-NEXT:    s_endpgm
4069 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
4070 ; GFX1032-DPP:       ; %bb.0:
4071 ; GFX1032-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
4072 ; GFX1032-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
4073 ; GFX1032-DPP-NEXT:    s_mov_b32 s38, -1
4074 ; GFX1032-DPP-NEXT:    s_mov_b32 s39, 0x31c16000
4075 ; GFX1032-DPP-NEXT:    s_add_u32 s36, s36, s11
4076 ; GFX1032-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
4077 ; GFX1032-DPP-NEXT:    s_addc_u32 s37, s37, 0
4078 ; GFX1032-DPP-NEXT:    s_mov_b32 s12, s8
4079 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s34, 44
4080 ; GFX1032-DPP-NEXT:    s_mov_b32 s13, s9
4081 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s35, 0
4082 ; GFX1032-DPP-NEXT:    s_getpc_b64 s[4:5]
4083 ; GFX1032-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4084 ; GFX1032-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4085 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
4086 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
4087 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
4088 ; GFX1032-DPP-NEXT:    s_mov_b32 s14, s10
4089 ; GFX1032-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
4090 ; GFX1032-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
4091 ; GFX1032-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
4092 ; GFX1032-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
4093 ; GFX1032-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
4094 ; GFX1032-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
4095 ; GFX1032-DPP-NEXT:    s_mov_b32 s32, 0
4096 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4097 ; GFX1032-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4098 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
4099 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
4100 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
4101 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v0
4102 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
4103 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
4104 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
4105 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
4106 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
4107 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
4108 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
4109 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
4110 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
4111 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
4112 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
4113 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
4114 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
4115 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
4116 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
4117 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v3
4118 ; GFX1032-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
4119 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
4120 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
4121 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
4122 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v2, v3
4123 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
4124 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
4125 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s0, vcc_lo
4126 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB6_3
4127 ; GFX1032-DPP-NEXT:  ; %bb.1:
4128 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
4129 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v6, 0
4130 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4131 ; GFX1032-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
4132 ; GFX1032-DPP-NEXT:  .LBB6_2: ; %atomicrmw.start
4133 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
4134 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
4135 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
4136 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
4137 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
4138 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
4139 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
4140 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
4141 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
4142 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB6_2
4143 ; GFX1032-DPP-NEXT:  .LBB6_3:
4144 ; GFX1032-DPP-NEXT:    s_endpgm
4146 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
4147 ; GFX1164-DPP:       ; %bb.0:
4148 ; GFX1164-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
4149 ; GFX1164-DPP-NEXT:    s_mov_b32 s12, s8
4150 ; GFX1164-DPP-NEXT:    s_add_u32 s8, s34, 44
4151 ; GFX1164-DPP-NEXT:    s_mov_b32 s13, s9
4152 ; GFX1164-DPP-NEXT:    s_addc_u32 s9, s35, 0
4153 ; GFX1164-DPP-NEXT:    s_getpc_b64 s[4:5]
4154 ; GFX1164-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4155 ; GFX1164-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4156 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v31, v0
4157 ; GFX1164-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
4158 ; GFX1164-DPP-NEXT:    s_mov_b32 s14, s10
4159 ; GFX1164-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
4160 ; GFX1164-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
4161 ; GFX1164-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
4162 ; GFX1164-DPP-NEXT:    s_mov_b32 s32, 0
4163 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4164 ; GFX1164-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4165 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
4166 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
4167 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
4168 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v0
4169 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
4170 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
4171 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
4172 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
4173 ; GFX1164-DPP-NEXT:    s_waitcnt_depctr 0xfff
4174 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
4175 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
4176 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4177 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
4178 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
4179 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
4180 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4181 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
4182 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
4183 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
4184 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4185 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
4186 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
4187 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4188 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
4189 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v1
4190 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4191 ; GFX1164-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
4192 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
4193 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
4194 ; GFX1164-DPP-NEXT:    v_permlane64_b32 v2, v1
4195 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
4196 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
4197 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
4198 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4199 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
4200 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
4201 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
4202 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v4, exec_hi, v0
4203 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4204 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, v1
4205 ; GFX1164-DPP-NEXT:    s_mov_b64 s[0:1], exec
4206 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
4207 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB6_2
4208 ; GFX1164-DPP-NEXT:  ; %bb.1:
4209 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
4210 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v4, 0
4211 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4212 ; GFX1164-DPP-NEXT:    global_atomic_add_f32 v4, v0, s[0:1]
4213 ; GFX1164-DPP-NEXT:  .LBB6_2:
4214 ; GFX1164-DPP-NEXT:    s_nop 0
4215 ; GFX1164-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
4216 ; GFX1164-DPP-NEXT:    s_endpgm
4218 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_div_value_agent_scope_unsafe_structfp:
4219 ; GFX1132-DPP:       ; %bb.0:
4220 ; GFX1132-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
4221 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v31, v0
4222 ; GFX1132-DPP-NEXT:    s_add_u32 s8, s34, 44
4223 ; GFX1132-DPP-NEXT:    s_addc_u32 s9, s35, 0
4224 ; GFX1132-DPP-NEXT:    s_getpc_b64 s[4:5]
4225 ; GFX1132-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4226 ; GFX1132-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4227 ; GFX1132-DPP-NEXT:    s_mov_b32 s12, s13
4228 ; GFX1132-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
4229 ; GFX1132-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
4230 ; GFX1132-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
4231 ; GFX1132-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
4232 ; GFX1132-DPP-NEXT:    s_mov_b32 s13, s14
4233 ; GFX1132-DPP-NEXT:    s_mov_b32 s14, s15
4234 ; GFX1132-DPP-NEXT:    s_mov_b32 s32, 0
4235 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4236 ; GFX1132-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4237 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
4238 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
4239 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
4240 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v0
4241 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
4242 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
4243 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
4244 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
4245 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4246 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
4247 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
4248 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
4249 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
4250 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4251 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
4252 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
4253 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
4254 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
4255 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
4256 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
4257 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4258 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
4259 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
4260 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4261 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v1
4262 ; GFX1132-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
4263 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
4264 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
4265 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
4266 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v4, exec_lo, 0
4267 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4268 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v0, v1
4269 ; GFX1132-DPP-NEXT:    s_mov_b32 s0, exec_lo
4270 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
4271 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB6_2
4272 ; GFX1132-DPP-NEXT:  ; %bb.1:
4273 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
4274 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v4, 0
4275 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4276 ; GFX1132-DPP-NEXT:    global_atomic_add_f32 v4, v0, s[0:1]
4277 ; GFX1132-DPP-NEXT:  .LBB6_2:
4278 ; GFX1132-DPP-NEXT:    s_nop 0
4279 ; GFX1132-DPP-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
4280 ; GFX1132-DPP-NEXT:    s_endpgm
4281   %divValue = call float @div.float.value()
4282   %result = atomicrmw fadd ptr addrspace(1) %ptr, float %divValue syncscope("agent") monotonic
4283   ret void
4286 define amdgpu_kernel void @global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp(ptr addrspace(1) %ptr) #2 {
4287 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4288 ; GFX7LESS:       ; %bb.0:
4289 ; GFX7LESS-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
4290 ; GFX7LESS-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
4291 ; GFX7LESS-NEXT:    s_mov_b32 s10, -1
4292 ; GFX7LESS-NEXT:    s_mov_b32 s11, 0xe8f000
4293 ; GFX7LESS-NEXT:    s_add_u32 s8, s8, s3
4294 ; GFX7LESS-NEXT:    s_addc_u32 s9, s9, 0
4295 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], exec
4296 ; GFX7LESS-NEXT:    v_mbcnt_lo_u32_b32_e64 v0, s2, 0
4297 ; GFX7LESS-NEXT:    v_mbcnt_hi_u32_b32_e32 v0, s3, v0
4298 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4299 ; GFX7LESS-NEXT:    s_and_saveexec_b64 s[4:5], vcc
4300 ; GFX7LESS-NEXT:    s_cbranch_execz .LBB7_3
4301 ; GFX7LESS-NEXT:  ; %bb.1:
4302 ; GFX7LESS-NEXT:    s_bcnt1_i32_b64 s6, s[2:3]
4303 ; GFX7LESS-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
4304 ; GFX7LESS-NEXT:    s_mov_b32 s7, 0x43300000
4305 ; GFX7LESS-NEXT:    v_mov_b32_e32 v0, 0
4306 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, 0xc3300000
4307 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], 0
4308 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
4309 ; GFX7LESS-NEXT:    s_load_dword s2, s[0:1], 0x0
4310 ; GFX7LESS-NEXT:    s_mov_b32 s3, 0xf000
4311 ; GFX7LESS-NEXT:    v_add_f64 v[0:1], s[6:7], v[0:1]
4312 ; GFX7LESS-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4313 ; GFX7LESS-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4314 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
4315 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, s2
4316 ; GFX7LESS-NEXT:    s_mov_b32 s2, -1
4317 ; GFX7LESS-NEXT:  .LBB7_2: ; %atomicrmw.start
4318 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
4319 ; GFX7LESS-NEXT:    v_add_f32_e32 v0, v1, v2
4320 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
4321 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v1
4322 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v0
4323 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[0:3], 0 glc
4324 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
4325 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v1
4326 ; GFX7LESS-NEXT:    s_or_b64 s[4:5], vcc, s[4:5]
4327 ; GFX7LESS-NEXT:    v_mov_b32_e32 v1, v3
4328 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[4:5]
4329 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB7_2
4330 ; GFX7LESS-NEXT:  .LBB7_3:
4331 ; GFX7LESS-NEXT:    s_endpgm
4333 ; GFX9-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4334 ; GFX9:       ; %bb.0:
4335 ; GFX9-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
4336 ; GFX9-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
4337 ; GFX9-NEXT:    s_mov_b32 s10, -1
4338 ; GFX9-NEXT:    s_mov_b32 s11, 0xe00000
4339 ; GFX9-NEXT:    s_add_u32 s8, s8, s3
4340 ; GFX9-NEXT:    s_mov_b64 s[2:3], exec
4341 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
4342 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
4343 ; GFX9-NEXT:    s_addc_u32 s9, s9, 0
4344 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4345 ; GFX9-NEXT:    s_and_saveexec_b64 s[4:5], vcc
4346 ; GFX9-NEXT:    s_cbranch_execz .LBB7_3
4347 ; GFX9-NEXT:  ; %bb.1:
4348 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
4349 ; GFX9-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
4350 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0xc3300000
4351 ; GFX9-NEXT:    s_mov_b32 s3, 0x43300000
4352 ; GFX9-NEXT:    v_add_f64 v[0:1], s[2:3], v[0:1]
4353 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
4354 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
4355 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
4356 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4357 ; GFX9-NEXT:    s_load_dword s4, s[0:1], 0x0
4358 ; GFX9-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4359 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4360 ; GFX9-NEXT:    v_mov_b32_e32 v1, s4
4361 ; GFX9-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4362 ; GFX9-NEXT:  .LBB7_2: ; %atomicrmw.start
4363 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
4364 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
4365 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4366 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4367 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4368 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4369 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
4370 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4371 ; GFX9-NEXT:    s_cbranch_execnz .LBB7_2
4372 ; GFX9-NEXT:  .LBB7_3:
4373 ; GFX9-NEXT:    s_endpgm
4375 ; GFX1064-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4376 ; GFX1064:       ; %bb.0:
4377 ; GFX1064-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
4378 ; GFX1064-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
4379 ; GFX1064-NEXT:    s_mov_b32 s10, -1
4380 ; GFX1064-NEXT:    s_mov_b32 s11, 0x31e16000
4381 ; GFX1064-NEXT:    s_add_u32 s8, s8, s3
4382 ; GFX1064-NEXT:    s_mov_b64 s[2:3], exec
4383 ; GFX1064-NEXT:    s_addc_u32 s9, s9, 0
4384 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
4385 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
4386 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4387 ; GFX1064-NEXT:    s_and_saveexec_b64 s[4:5], vcc
4388 ; GFX1064-NEXT:    s_cbranch_execz .LBB7_3
4389 ; GFX1064-NEXT:  ; %bb.1:
4390 ; GFX1064-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
4391 ; GFX1064-NEXT:    s_mov_b32 s3, 0x43300000
4392 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
4393 ; GFX1064-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[2:3]
4394 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
4395 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
4396 ; GFX1064-NEXT:    s_load_dword s2, s[0:1], 0x0
4397 ; GFX1064-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4398 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
4399 ; GFX1064-NEXT:    v_mov_b32_e32 v1, s2
4400 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
4401 ; GFX1064-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4402 ; GFX1064-NEXT:  .LBB7_2: ; %atomicrmw.start
4403 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
4404 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
4405 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4406 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
4407 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4408 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
4409 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4410 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4411 ; GFX1064-NEXT:    s_cbranch_execnz .LBB7_2
4412 ; GFX1064-NEXT:  .LBB7_3:
4413 ; GFX1064-NEXT:    s_endpgm
4415 ; GFX1032-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4416 ; GFX1032:       ; %bb.0:
4417 ; GFX1032-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
4418 ; GFX1032-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
4419 ; GFX1032-NEXT:    s_mov_b32 s10, -1
4420 ; GFX1032-NEXT:    s_mov_b32 s11, 0x31c16000
4421 ; GFX1032-NEXT:    s_add_u32 s8, s8, s3
4422 ; GFX1032-NEXT:    s_mov_b32 s3, exec_lo
4423 ; GFX1032-NEXT:    s_addc_u32 s9, s9, 0
4424 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
4425 ; GFX1032-NEXT:    s_mov_b32 s2, 0
4426 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
4427 ; GFX1032-NEXT:    s_and_saveexec_b32 s4, vcc_lo
4428 ; GFX1032-NEXT:    s_cbranch_execz .LBB7_3
4429 ; GFX1032-NEXT:  ; %bb.1:
4430 ; GFX1032-NEXT:    s_bcnt1_i32_b32 s4, s3
4431 ; GFX1032-NEXT:    s_mov_b32 s5, 0x43300000
4432 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
4433 ; GFX1032-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[4:5]
4434 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
4435 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
4436 ; GFX1032-NEXT:    s_load_dword s3, s[0:1], 0x0
4437 ; GFX1032-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4438 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
4439 ; GFX1032-NEXT:    v_mov_b32_e32 v1, s3
4440 ; GFX1032-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4441 ; GFX1032-NEXT:  .LBB7_2: ; %atomicrmw.start
4442 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
4443 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
4444 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4445 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
4446 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
4447 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
4448 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
4449 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
4450 ; GFX1032-NEXT:    s_cbranch_execnz .LBB7_2
4451 ; GFX1032-NEXT:  .LBB7_3:
4452 ; GFX1032-NEXT:    s_endpgm
4454 ; GFX1164-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4455 ; GFX1164:       ; %bb.0:
4456 ; GFX1164-NEXT:    s_bcnt1_i32_b64 s2, exec
4457 ; GFX1164-NEXT:    v_mov_b32_e32 v0, 0x43300000
4458 ; GFX1164-NEXT:    v_mov_b32_e32 v1, s2
4459 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
4460 ; GFX1164-NEXT:    s_mov_b64 s[2:3], exec
4461 ; GFX1164-NEXT:    s_clause 0x1
4462 ; GFX1164-NEXT:    scratch_store_b32 off, v0, off offset:12
4463 ; GFX1164-NEXT:    scratch_store_b32 off, v1, off offset:8
4464 ; GFX1164-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
4465 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v2, exec_hi, v2
4466 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4467 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v2
4468 ; GFX1164-NEXT:    s_cbranch_execz .LBB7_3
4469 ; GFX1164-NEXT:  ; %bb.1:
4470 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
4471 ; GFX1164-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
4472 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
4473 ; GFX1164-NEXT:    v_mov_b32_e32 v3, 0
4474 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
4475 ; GFX1164-NEXT:    s_load_b32 s2, s[0:1], 0x0
4476 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
4477 ; GFX1164-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4478 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
4479 ; GFX1164-NEXT:    v_mov_b32_e32 v1, s2
4480 ; GFX1164-NEXT:    s_mov_b64 s[2:3], 0
4481 ; GFX1164-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4482 ; GFX1164-NEXT:  .LBB7_2: ; %atomicrmw.start
4483 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
4484 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4485 ; GFX1164-NEXT:    v_add_f32_e32 v0, v1, v2
4486 ; GFX1164-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
4487 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
4488 ; GFX1164-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4489 ; GFX1164-NEXT:    v_mov_b32_e32 v1, v0
4490 ; GFX1164-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4491 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4492 ; GFX1164-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
4493 ; GFX1164-NEXT:    s_cbranch_execnz .LBB7_2
4494 ; GFX1164-NEXT:  .LBB7_3:
4495 ; GFX1164-NEXT:    s_endpgm
4497 ; GFX1132-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4498 ; GFX1132:       ; %bb.0:
4499 ; GFX1132-NEXT:    s_bcnt1_i32_b32 s2, exec_lo
4500 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4501 ; GFX1132-NEXT:    v_dual_mov_b32 v0, 0x43300000 :: v_dual_mov_b32 v1, s2
4502 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
4503 ; GFX1132-NEXT:    s_mov_b32 s2, 0
4504 ; GFX1132-NEXT:    s_mov_b32 s3, exec_lo
4505 ; GFX1132-NEXT:    s_clause 0x1
4506 ; GFX1132-NEXT:    scratch_store_b32 off, v0, off offset:12
4507 ; GFX1132-NEXT:    scratch_store_b32 off, v1, off offset:8
4508 ; GFX1132-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
4509 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v2
4510 ; GFX1132-NEXT:    s_cbranch_execz .LBB7_3
4511 ; GFX1132-NEXT:  ; %bb.1:
4512 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
4513 ; GFX1132-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
4514 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
4515 ; GFX1132-NEXT:    v_mov_b32_e32 v3, 0
4516 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
4517 ; GFX1132-NEXT:    s_load_b32 s3, s[0:1], 0x0
4518 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
4519 ; GFX1132-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4520 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
4521 ; GFX1132-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mul_f32 v2, 4.0, v0
4522 ; GFX1132-NEXT:  .LBB7_2: ; %atomicrmw.start
4523 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
4524 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4525 ; GFX1132-NEXT:    v_add_f32_e32 v0, v1, v2
4526 ; GFX1132-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
4527 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
4528 ; GFX1132-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
4529 ; GFX1132-NEXT:    v_mov_b32_e32 v1, v0
4530 ; GFX1132-NEXT:    s_or_b32 s2, vcc_lo, s2
4531 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4532 ; GFX1132-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
4533 ; GFX1132-NEXT:    s_cbranch_execnz .LBB7_2
4534 ; GFX1132-NEXT:  .LBB7_3:
4535 ; GFX1132-NEXT:    s_endpgm
4537 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4538 ; GFX9-DPP:       ; %bb.0:
4539 ; GFX9-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
4540 ; GFX9-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
4541 ; GFX9-DPP-NEXT:    s_mov_b32 s10, -1
4542 ; GFX9-DPP-NEXT:    s_mov_b32 s11, 0xe00000
4543 ; GFX9-DPP-NEXT:    s_add_u32 s8, s8, s3
4544 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], exec
4545 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
4546 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
4547 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s9, 0
4548 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4549 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
4550 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB7_3
4551 ; GFX9-DPP-NEXT:  ; %bb.1:
4552 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v0, 0
4553 ; GFX9-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
4554 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, 0xc3300000
4555 ; GFX9-DPP-NEXT:    s_mov_b32 s3, 0x43300000
4556 ; GFX9-DPP-NEXT:    v_add_f64 v[0:1], s[2:3], v[0:1]
4557 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
4558 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
4559 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, 0
4560 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4561 ; GFX9-DPP-NEXT:    s_load_dword s4, s[0:1], 0x0
4562 ; GFX9-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4563 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4564 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, s4
4565 ; GFX9-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4566 ; GFX9-DPP-NEXT:  .LBB7_2: ; %atomicrmw.start
4567 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
4568 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
4569 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4570 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
4571 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4572 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4573 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
4574 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4575 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB7_2
4576 ; GFX9-DPP-NEXT:  .LBB7_3:
4577 ; GFX9-DPP-NEXT:    s_endpgm
4579 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4580 ; GFX1064-DPP:       ; %bb.0:
4581 ; GFX1064-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
4582 ; GFX1064-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
4583 ; GFX1064-DPP-NEXT:    s_mov_b32 s10, -1
4584 ; GFX1064-DPP-NEXT:    s_mov_b32 s11, 0x31e16000
4585 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s8, s3
4586 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], exec
4587 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s9, 0
4588 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s2, 0
4589 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, s3, v0
4590 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4591 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[4:5], vcc
4592 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB7_3
4593 ; GFX1064-DPP-NEXT:  ; %bb.1:
4594 ; GFX1064-DPP-NEXT:    s_bcnt1_i32_b64 s2, s[2:3]
4595 ; GFX1064-DPP-NEXT:    s_mov_b32 s3, 0x43300000
4596 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
4597 ; GFX1064-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[2:3]
4598 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v3, 0
4599 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4600 ; GFX1064-DPP-NEXT:    s_load_dword s2, s[0:1], 0x0
4601 ; GFX1064-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4602 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4603 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, s2
4604 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
4605 ; GFX1064-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4606 ; GFX1064-DPP-NEXT:  .LBB7_2: ; %atomicrmw.start
4607 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
4608 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
4609 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4610 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
4611 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4612 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
4613 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4614 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4615 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB7_2
4616 ; GFX1064-DPP-NEXT:  .LBB7_3:
4617 ; GFX1064-DPP-NEXT:    s_endpgm
4619 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4620 ; GFX1032-DPP:       ; %bb.0:
4621 ; GFX1032-DPP-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
4622 ; GFX1032-DPP-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
4623 ; GFX1032-DPP-NEXT:    s_mov_b32 s10, -1
4624 ; GFX1032-DPP-NEXT:    s_mov_b32 s11, 0x31c16000
4625 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s8, s3
4626 ; GFX1032-DPP-NEXT:    s_mov_b32 s3, exec_lo
4627 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s9, 0
4628 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, s3, 0
4629 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
4630 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
4631 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s4, vcc_lo
4632 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB7_3
4633 ; GFX1032-DPP-NEXT:  ; %bb.1:
4634 ; GFX1032-DPP-NEXT:    s_bcnt1_i32_b32 s4, s3
4635 ; GFX1032-DPP-NEXT:    s_mov_b32 s5, 0x43300000
4636 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
4637 ; GFX1032-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, s[4:5]
4638 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v3, 0
4639 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4640 ; GFX1032-DPP-NEXT:    s_load_dword s3, s[0:1], 0x0
4641 ; GFX1032-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4642 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4643 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, s3
4644 ; GFX1032-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4645 ; GFX1032-DPP-NEXT:  .LBB7_2: ; %atomicrmw.start
4646 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
4647 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
4648 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4649 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
4650 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
4651 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
4652 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
4653 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
4654 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB7_2
4655 ; GFX1032-DPP-NEXT:  .LBB7_3:
4656 ; GFX1032-DPP-NEXT:    s_endpgm
4658 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4659 ; GFX1164-DPP:       ; %bb.0:
4660 ; GFX1164-DPP-NEXT:    s_bcnt1_i32_b64 s2, exec
4661 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, 0x43300000
4662 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, s2
4663 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
4664 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], exec
4665 ; GFX1164-DPP-NEXT:    s_clause 0x1
4666 ; GFX1164-DPP-NEXT:    scratch_store_b32 off, v0, off offset:12
4667 ; GFX1164-DPP-NEXT:    scratch_store_b32 off, v1, off offset:8
4668 ; GFX1164-DPP-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
4669 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v2, exec_hi, v2
4670 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4671 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v2
4672 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB7_3
4673 ; GFX1164-DPP-NEXT:  ; %bb.1:
4674 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
4675 ; GFX1164-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
4676 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
4677 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v3, 0
4678 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4679 ; GFX1164-DPP-NEXT:    s_load_b32 s2, s[0:1], 0x0
4680 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
4681 ; GFX1164-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4682 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4683 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, s2
4684 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], 0
4685 ; GFX1164-DPP-NEXT:    v_mul_f32_e32 v2, 4.0, v0
4686 ; GFX1164-DPP-NEXT:  .LBB7_2: ; %atomicrmw.start
4687 ; GFX1164-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
4688 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4689 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
4690 ; GFX1164-DPP-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
4691 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
4692 ; GFX1164-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4693 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v1, v0
4694 ; GFX1164-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4695 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4696 ; GFX1164-DPP-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
4697 ; GFX1164-DPP-NEXT:    s_cbranch_execnz .LBB7_2
4698 ; GFX1164-DPP-NEXT:  .LBB7_3:
4699 ; GFX1164-DPP-NEXT:    s_endpgm
4701 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_uni_value_defalut_scope_strictfp:
4702 ; GFX1132-DPP:       ; %bb.0:
4703 ; GFX1132-DPP-NEXT:    s_bcnt1_i32_b32 s2, exec_lo
4704 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4705 ; GFX1132-DPP-NEXT:    v_dual_mov_b32 v0, 0x43300000 :: v_dual_mov_b32 v1, s2
4706 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v2, exec_lo, 0
4707 ; GFX1132-DPP-NEXT:    s_mov_b32 s2, 0
4708 ; GFX1132-DPP-NEXT:    s_mov_b32 s3, exec_lo
4709 ; GFX1132-DPP-NEXT:    s_clause 0x1
4710 ; GFX1132-DPP-NEXT:    scratch_store_b32 off, v0, off offset:12
4711 ; GFX1132-DPP-NEXT:    scratch_store_b32 off, v1, off offset:8
4712 ; GFX1132-DPP-NEXT:    scratch_load_b64 v[0:1], off, off offset:8
4713 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v2
4714 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB7_3
4715 ; GFX1132-DPP-NEXT:  ; %bb.1:
4716 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
4717 ; GFX1132-DPP-NEXT:    v_add_f64 v[0:1], 0xc3300000, v[0:1]
4718 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
4719 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v3, 0
4720 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4721 ; GFX1132-DPP-NEXT:    s_load_b32 s3, s[0:1], 0x0
4722 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_1)
4723 ; GFX1132-DPP-NEXT:    v_cvt_f32_f64_e32 v0, v[0:1]
4724 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
4725 ; GFX1132-DPP-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mul_f32 v2, 4.0, v0
4726 ; GFX1132-DPP-NEXT:  .LBB7_2: ; %atomicrmw.start
4727 ; GFX1132-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
4728 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4729 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
4730 ; GFX1132-DPP-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
4731 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
4732 ; GFX1132-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
4733 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v1, v0
4734 ; GFX1132-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
4735 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
4736 ; GFX1132-DPP-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
4737 ; GFX1132-DPP-NEXT:    s_cbranch_execnz .LBB7_2
4738 ; GFX1132-DPP-NEXT:  .LBB7_3:
4739 ; GFX1132-DPP-NEXT:    s_endpgm
4740   %result = atomicrmw fadd ptr addrspace(1) %ptr, float 4.0 monotonic, align 4
4741   ret void
4744 define amdgpu_kernel void @global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp(ptr addrspace(1) %ptr) #2 {
4745 ; GFX7LESS-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
4746 ; GFX7LESS:       ; %bb.0:
4747 ; GFX7LESS-NEXT:    s_mov_b32 s32, 0
4748 ; GFX7LESS-NEXT:    s_mov_b32 s40, SCRATCH_RSRC_DWORD0
4749 ; GFX7LESS-NEXT:    s_mov_b32 s41, SCRATCH_RSRC_DWORD1
4750 ; GFX7LESS-NEXT:    s_mov_b32 s42, -1
4751 ; GFX7LESS-NEXT:    s_mov_b32 s43, 0xe8f000
4752 ; GFX7LESS-NEXT:    s_add_u32 s40, s40, s11
4753 ; GFX7LESS-NEXT:    s_addc_u32 s41, s41, 0
4754 ; GFX7LESS-NEXT:    s_mov_b32 s14, s10
4755 ; GFX7LESS-NEXT:    s_mov_b32 s13, s9
4756 ; GFX7LESS-NEXT:    s_mov_b32 s12, s8
4757 ; GFX7LESS-NEXT:    s_mov_b64 s[10:11], s[6:7]
4758 ; GFX7LESS-NEXT:    s_load_dwordx2 s[36:37], s[4:5], 0x9
4759 ; GFX7LESS-NEXT:    s_mov_b32 s39, 0xf000
4760 ; GFX7LESS-NEXT:    s_mov_b32 s38, -1
4761 ; GFX7LESS-NEXT:    s_add_u32 s8, s4, 44
4762 ; GFX7LESS-NEXT:    s_addc_u32 s9, s5, 0
4763 ; GFX7LESS-NEXT:    s_getpc_b64 s[4:5]
4764 ; GFX7LESS-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4765 ; GFX7LESS-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4766 ; GFX7LESS-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
4767 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
4768 ; GFX7LESS-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
4769 ; GFX7LESS-NEXT:    v_or_b32_e32 v0, v0, v1
4770 ; GFX7LESS-NEXT:    v_or_b32_e32 v31, v0, v2
4771 ; GFX7LESS-NEXT:    s_mov_b64 s[4:5], s[0:1]
4772 ; GFX7LESS-NEXT:    s_mov_b64 s[6:7], s[2:3]
4773 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], s[40:41]
4774 ; GFX7LESS-NEXT:    s_mov_b64 s[2:3], s[42:43]
4775 ; GFX7LESS-NEXT:    s_waitcnt lgkmcnt(0)
4776 ; GFX7LESS-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4777 ; GFX7LESS-NEXT:    buffer_load_dword v2, off, s[36:39], 0
4778 ; GFX7LESS-NEXT:    s_mov_b64 s[0:1], 0
4779 ; GFX7LESS-NEXT:  .LBB8_1: ; %atomicrmw.start
4780 ; GFX7LESS-NEXT:    ; =>This Inner Loop Header: Depth=1
4781 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
4782 ; GFX7LESS-NEXT:    v_add_f32_e32 v1, v2, v0
4783 ; GFX7LESS-NEXT:    s_waitcnt expcnt(0)
4784 ; GFX7LESS-NEXT:    v_mov_b32_e32 v4, v2
4785 ; GFX7LESS-NEXT:    v_mov_b32_e32 v3, v1
4786 ; GFX7LESS-NEXT:    buffer_atomic_cmpswap v[3:4], off, s[36:39], 0 glc
4787 ; GFX7LESS-NEXT:    s_waitcnt vmcnt(0)
4788 ; GFX7LESS-NEXT:    v_cmp_eq_u32_e32 vcc, v3, v2
4789 ; GFX7LESS-NEXT:    s_or_b64 s[0:1], vcc, s[0:1]
4790 ; GFX7LESS-NEXT:    v_mov_b32_e32 v2, v3
4791 ; GFX7LESS-NEXT:    s_andn2_b64 exec, exec, s[0:1]
4792 ; GFX7LESS-NEXT:    s_cbranch_execnz .LBB8_1
4793 ; GFX7LESS-NEXT:  ; %bb.2: ; %atomicrmw.end
4794 ; GFX7LESS-NEXT:    s_endpgm
4796 ; GFX9-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
4797 ; GFX9:       ; %bb.0:
4798 ; GFX9-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
4799 ; GFX9-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
4800 ; GFX9-NEXT:    s_mov_b32 s38, -1
4801 ; GFX9-NEXT:    s_mov_b32 s39, 0xe00000
4802 ; GFX9-NEXT:    s_add_u32 s36, s36, s11
4803 ; GFX9-NEXT:    s_addc_u32 s37, s37, 0
4804 ; GFX9-NEXT:    s_mov_b64 s[34:35], s[4:5]
4805 ; GFX9-NEXT:    s_mov_b32 s12, s8
4806 ; GFX9-NEXT:    s_add_u32 s8, s34, 44
4807 ; GFX9-NEXT:    s_mov_b32 s13, s9
4808 ; GFX9-NEXT:    s_addc_u32 s9, s35, 0
4809 ; GFX9-NEXT:    s_getpc_b64 s[4:5]
4810 ; GFX9-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4811 ; GFX9-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4812 ; GFX9-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
4813 ; GFX9-NEXT:    s_mov_b32 s14, s10
4814 ; GFX9-NEXT:    s_mov_b64 s[10:11], s[6:7]
4815 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
4816 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
4817 ; GFX9-NEXT:    s_mov_b64 s[4:5], s[0:1]
4818 ; GFX9-NEXT:    s_mov_b64 s[6:7], s[2:3]
4819 ; GFX9-NEXT:    s_mov_b64 s[0:1], s[36:37]
4820 ; GFX9-NEXT:    v_or3_b32 v31, v0, v1, v2
4821 ; GFX9-NEXT:    s_mov_b64 s[2:3], s[38:39]
4822 ; GFX9-NEXT:    s_mov_b32 s32, 0
4823 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4824 ; GFX9-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4825 ; GFX9-NEXT:    s_mov_b64 s[0:1], exec
4826 ; GFX9-NEXT:    v_bfrev_b32_e32 v2, 1
4827 ; GFX9-NEXT:  .LBB8_1: ; %ComputeLoop
4828 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
4829 ; GFX9-NEXT:    s_ff1_i32_b32 s2, s1
4830 ; GFX9-NEXT:    s_ff1_i32_b32 s3, s0
4831 ; GFX9-NEXT:    s_add_i32 s2, s2, 32
4832 ; GFX9-NEXT:    s_min_u32 s2, s3, s2
4833 ; GFX9-NEXT:    v_readlane_b32 s4, v0, s2
4834 ; GFX9-NEXT:    s_lshl_b64 s[2:3], 1, s2
4835 ; GFX9-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
4836 ; GFX9-NEXT:    s_cmp_lg_u64 s[0:1], 0
4837 ; GFX9-NEXT:    v_add_f32_e32 v2, s4, v2
4838 ; GFX9-NEXT:    s_cbranch_scc1 .LBB8_1
4839 ; GFX9-NEXT:  ; %bb.2: ; %ComputeEnd
4840 ; GFX9-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
4841 ; GFX9-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
4842 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4843 ; GFX9-NEXT:    s_and_saveexec_b64 s[0:1], vcc
4844 ; GFX9-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
4845 ; GFX9-NEXT:    s_cbranch_execz .LBB8_5
4846 ; GFX9-NEXT:  ; %bb.3:
4847 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
4848 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
4849 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0
4850 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
4851 ; GFX9-NEXT:    global_load_dword v1, v3, s[0:1]
4852 ; GFX9-NEXT:  .LBB8_4: ; %atomicrmw.start
4853 ; GFX9-NEXT:    ; =>This Inner Loop Header: Depth=1
4854 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4855 ; GFX9-NEXT:    v_add_f32_e32 v0, v1, v2
4856 ; GFX9-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4857 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4858 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4859 ; GFX9-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4860 ; GFX9-NEXT:    v_mov_b32_e32 v1, v0
4861 ; GFX9-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4862 ; GFX9-NEXT:    s_cbranch_execnz .LBB8_4
4863 ; GFX9-NEXT:  .LBB8_5:
4864 ; GFX9-NEXT:    s_endpgm
4866 ; GFX1064-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
4867 ; GFX1064:       ; %bb.0:
4868 ; GFX1064-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
4869 ; GFX1064-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
4870 ; GFX1064-NEXT:    s_mov_b32 s38, -1
4871 ; GFX1064-NEXT:    s_mov_b32 s39, 0x31e16000
4872 ; GFX1064-NEXT:    s_add_u32 s36, s36, s11
4873 ; GFX1064-NEXT:    s_mov_b64 s[34:35], s[4:5]
4874 ; GFX1064-NEXT:    s_addc_u32 s37, s37, 0
4875 ; GFX1064-NEXT:    s_mov_b32 s12, s8
4876 ; GFX1064-NEXT:    s_add_u32 s8, s34, 44
4877 ; GFX1064-NEXT:    s_mov_b32 s13, s9
4878 ; GFX1064-NEXT:    s_addc_u32 s9, s35, 0
4879 ; GFX1064-NEXT:    s_getpc_b64 s[4:5]
4880 ; GFX1064-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4881 ; GFX1064-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4882 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
4883 ; GFX1064-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
4884 ; GFX1064-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
4885 ; GFX1064-NEXT:    s_mov_b32 s14, s10
4886 ; GFX1064-NEXT:    s_mov_b64 s[10:11], s[6:7]
4887 ; GFX1064-NEXT:    s_mov_b64 s[4:5], s[0:1]
4888 ; GFX1064-NEXT:    s_mov_b64 s[6:7], s[2:3]
4889 ; GFX1064-NEXT:    v_or3_b32 v31, v0, v1, v2
4890 ; GFX1064-NEXT:    s_mov_b64 s[0:1], s[36:37]
4891 ; GFX1064-NEXT:    s_mov_b64 s[2:3], s[38:39]
4892 ; GFX1064-NEXT:    s_mov_b32 s32, 0
4893 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
4894 ; GFX1064-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4895 ; GFX1064-NEXT:    v_bfrev_b32_e32 v2, 1
4896 ; GFX1064-NEXT:    s_mov_b64 s[0:1], exec
4897 ; GFX1064-NEXT:  .LBB8_1: ; %ComputeLoop
4898 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
4899 ; GFX1064-NEXT:    s_ff1_i32_b32 s2, s1
4900 ; GFX1064-NEXT:    s_ff1_i32_b32 s3, s0
4901 ; GFX1064-NEXT:    s_add_i32 s2, s2, 32
4902 ; GFX1064-NEXT:    s_min_u32 s2, s3, s2
4903 ; GFX1064-NEXT:    v_readlane_b32 s4, v0, s2
4904 ; GFX1064-NEXT:    s_lshl_b64 s[2:3], 1, s2
4905 ; GFX1064-NEXT:    s_andn2_b64 s[0:1], s[0:1], s[2:3]
4906 ; GFX1064-NEXT:    s_cmp_lg_u64 s[0:1], 0
4907 ; GFX1064-NEXT:    v_add_f32_e32 v2, s4, v2
4908 ; GFX1064-NEXT:    s_cbranch_scc1 .LBB8_1
4909 ; GFX1064-NEXT:  ; %bb.2: ; %ComputeEnd
4910 ; GFX1064-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
4911 ; GFX1064-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
4912 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
4913 ; GFX1064-NEXT:    s_and_saveexec_b64 s[0:1], vcc
4914 ; GFX1064-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
4915 ; GFX1064-NEXT:    s_cbranch_execz .LBB8_5
4916 ; GFX1064-NEXT:  ; %bb.3:
4917 ; GFX1064-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
4918 ; GFX1064-NEXT:    v_mov_b32_e32 v3, 0
4919 ; GFX1064-NEXT:    s_mov_b64 s[2:3], 0
4920 ; GFX1064-NEXT:    s_waitcnt lgkmcnt(0)
4921 ; GFX1064-NEXT:    global_load_dword v1, v3, s[0:1]
4922 ; GFX1064-NEXT:  .LBB8_4: ; %atomicrmw.start
4923 ; GFX1064-NEXT:    ; =>This Inner Loop Header: Depth=1
4924 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
4925 ; GFX1064-NEXT:    v_add_f32_e32 v0, v1, v2
4926 ; GFX1064-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4927 ; GFX1064-NEXT:    s_waitcnt vmcnt(0)
4928 ; GFX1064-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
4929 ; GFX1064-NEXT:    v_mov_b32_e32 v1, v0
4930 ; GFX1064-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
4931 ; GFX1064-NEXT:    s_andn2_b64 exec, exec, s[2:3]
4932 ; GFX1064-NEXT:    s_cbranch_execnz .LBB8_4
4933 ; GFX1064-NEXT:  .LBB8_5:
4934 ; GFX1064-NEXT:    s_endpgm
4936 ; GFX1032-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
4937 ; GFX1032:       ; %bb.0:
4938 ; GFX1032-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
4939 ; GFX1032-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
4940 ; GFX1032-NEXT:    s_mov_b32 s38, -1
4941 ; GFX1032-NEXT:    s_mov_b32 s39, 0x31c16000
4942 ; GFX1032-NEXT:    s_add_u32 s36, s36, s11
4943 ; GFX1032-NEXT:    s_mov_b64 s[34:35], s[4:5]
4944 ; GFX1032-NEXT:    s_addc_u32 s37, s37, 0
4945 ; GFX1032-NEXT:    s_mov_b32 s12, s8
4946 ; GFX1032-NEXT:    s_add_u32 s8, s34, 44
4947 ; GFX1032-NEXT:    s_mov_b32 s13, s9
4948 ; GFX1032-NEXT:    s_addc_u32 s9, s35, 0
4949 ; GFX1032-NEXT:    s_getpc_b64 s[4:5]
4950 ; GFX1032-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
4951 ; GFX1032-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
4952 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
4953 ; GFX1032-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
4954 ; GFX1032-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
4955 ; GFX1032-NEXT:    s_mov_b32 s14, s10
4956 ; GFX1032-NEXT:    s_mov_b64 s[10:11], s[6:7]
4957 ; GFX1032-NEXT:    s_mov_b64 s[4:5], s[0:1]
4958 ; GFX1032-NEXT:    s_mov_b64 s[6:7], s[2:3]
4959 ; GFX1032-NEXT:    v_or3_b32 v31, v0, v1, v2
4960 ; GFX1032-NEXT:    s_mov_b64 s[0:1], s[36:37]
4961 ; GFX1032-NEXT:    s_mov_b64 s[2:3], s[38:39]
4962 ; GFX1032-NEXT:    s_mov_b32 s32, 0
4963 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
4964 ; GFX1032-NEXT:    s_swappc_b64 s[30:31], s[16:17]
4965 ; GFX1032-NEXT:    v_bfrev_b32_e32 v2, 1
4966 ; GFX1032-NEXT:    s_mov_b32 s0, exec_lo
4967 ; GFX1032-NEXT:  .LBB8_1: ; %ComputeLoop
4968 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
4969 ; GFX1032-NEXT:    s_ff1_i32_b32 s1, s0
4970 ; GFX1032-NEXT:    v_readlane_b32 s2, v0, s1
4971 ; GFX1032-NEXT:    s_lshl_b32 s1, 1, s1
4972 ; GFX1032-NEXT:    s_andn2_b32 s0, s0, s1
4973 ; GFX1032-NEXT:    s_cmp_lg_u32 s0, 0
4974 ; GFX1032-NEXT:    v_add_f32_e32 v2, s2, v2
4975 ; GFX1032-NEXT:    s_cbranch_scc1 .LBB8_1
4976 ; GFX1032-NEXT:  ; %bb.2: ; %ComputeEnd
4977 ; GFX1032-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
4978 ; GFX1032-NEXT:    s_mov_b32 s2, 0
4979 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
4980 ; GFX1032-NEXT:    s_and_saveexec_b32 s0, vcc_lo
4981 ; GFX1032-NEXT:    s_xor_b32 s0, exec_lo, s0
4982 ; GFX1032-NEXT:    s_cbranch_execz .LBB8_5
4983 ; GFX1032-NEXT:  ; %bb.3:
4984 ; GFX1032-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
4985 ; GFX1032-NEXT:    v_mov_b32_e32 v3, 0
4986 ; GFX1032-NEXT:    s_waitcnt lgkmcnt(0)
4987 ; GFX1032-NEXT:    global_load_dword v1, v3, s[0:1]
4988 ; GFX1032-NEXT:  .LBB8_4: ; %atomicrmw.start
4989 ; GFX1032-NEXT:    ; =>This Inner Loop Header: Depth=1
4990 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
4991 ; GFX1032-NEXT:    v_add_f32_e32 v0, v1, v2
4992 ; GFX1032-NEXT:    global_atomic_cmpswap v0, v3, v[0:1], s[0:1] glc
4993 ; GFX1032-NEXT:    s_waitcnt vmcnt(0)
4994 ; GFX1032-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
4995 ; GFX1032-NEXT:    v_mov_b32_e32 v1, v0
4996 ; GFX1032-NEXT:    s_or_b32 s2, vcc_lo, s2
4997 ; GFX1032-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
4998 ; GFX1032-NEXT:    s_cbranch_execnz .LBB8_4
4999 ; GFX1032-NEXT:  .LBB8_5:
5000 ; GFX1032-NEXT:    s_endpgm
5002 ; GFX1164-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
5003 ; GFX1164:       ; %bb.0:
5004 ; GFX1164-NEXT:    s_mov_b64 s[34:35], s[4:5]
5005 ; GFX1164-NEXT:    s_mov_b32 s12, s8
5006 ; GFX1164-NEXT:    s_add_u32 s8, s34, 44
5007 ; GFX1164-NEXT:    s_mov_b32 s13, s9
5008 ; GFX1164-NEXT:    s_addc_u32 s9, s35, 0
5009 ; GFX1164-NEXT:    s_getpc_b64 s[4:5]
5010 ; GFX1164-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
5011 ; GFX1164-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
5012 ; GFX1164-NEXT:    v_mov_b32_e32 v31, v0
5013 ; GFX1164-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
5014 ; GFX1164-NEXT:    s_mov_b32 s14, s10
5015 ; GFX1164-NEXT:    s_mov_b64 s[10:11], s[6:7]
5016 ; GFX1164-NEXT:    s_mov_b64 s[4:5], s[0:1]
5017 ; GFX1164-NEXT:    s_mov_b64 s[6:7], s[2:3]
5018 ; GFX1164-NEXT:    s_mov_b32 s32, 0
5019 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
5020 ; GFX1164-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5021 ; GFX1164-NEXT:    v_bfrev_b32_e32 v2, 1
5022 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
5023 ; GFX1164-NEXT:  .LBB8_1: ; %ComputeLoop
5024 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
5025 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
5026 ; GFX1164-NEXT:    s_ctz_i32_b32 s2, s1
5027 ; GFX1164-NEXT:    s_ctz_i32_b32 s3, s0
5028 ; GFX1164-NEXT:    s_add_i32 s2, s2, 32
5029 ; GFX1164-NEXT:    s_min_u32 s2, s3, s2
5030 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
5031 ; GFX1164-NEXT:    v_readlane_b32 s4, v0, s2
5032 ; GFX1164-NEXT:    s_lshl_b64 s[2:3], 1, s2
5033 ; GFX1164-NEXT:    s_and_not1_b64 s[0:1], s[0:1], s[2:3]
5034 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5035 ; GFX1164-NEXT:    s_cmp_lg_u64 s[0:1], 0
5036 ; GFX1164-NEXT:    v_add_f32_e32 v2, s4, v2
5037 ; GFX1164-NEXT:    s_cbranch_scc1 .LBB8_1
5038 ; GFX1164-NEXT:  ; %bb.2: ; %ComputeEnd
5039 ; GFX1164-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
5040 ; GFX1164-NEXT:    s_mov_b64 s[0:1], exec
5041 ; GFX1164-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5042 ; GFX1164-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
5043 ; GFX1164-NEXT:    v_cmpx_eq_u32_e32 0, v0
5044 ; GFX1164-NEXT:    s_xor_b64 s[0:1], exec, s[0:1]
5045 ; GFX1164-NEXT:    s_cbranch_execz .LBB8_5
5046 ; GFX1164-NEXT:  ; %bb.3:
5047 ; GFX1164-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
5048 ; GFX1164-NEXT:    v_mov_b32_e32 v3, 0
5049 ; GFX1164-NEXT:    s_mov_b64 s[2:3], 0
5050 ; GFX1164-NEXT:    s_waitcnt lgkmcnt(0)
5051 ; GFX1164-NEXT:    global_load_b32 v1, v3, s[0:1]
5052 ; GFX1164-NEXT:  .LBB8_4: ; %atomicrmw.start
5053 ; GFX1164-NEXT:    ; =>This Inner Loop Header: Depth=1
5054 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
5055 ; GFX1164-NEXT:    v_add_f32_e32 v0, v1, v2
5056 ; GFX1164-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
5057 ; GFX1164-NEXT:    s_waitcnt vmcnt(0)
5058 ; GFX1164-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
5059 ; GFX1164-NEXT:    v_mov_b32_e32 v1, v0
5060 ; GFX1164-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
5061 ; GFX1164-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
5062 ; GFX1164-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
5063 ; GFX1164-NEXT:    s_cbranch_execnz .LBB8_4
5064 ; GFX1164-NEXT:  .LBB8_5:
5065 ; GFX1164-NEXT:    s_endpgm
5067 ; GFX1132-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
5068 ; GFX1132:       ; %bb.0:
5069 ; GFX1132-NEXT:    s_mov_b64 s[34:35], s[4:5]
5070 ; GFX1132-NEXT:    v_mov_b32_e32 v31, v0
5071 ; GFX1132-NEXT:    s_add_u32 s8, s34, 44
5072 ; GFX1132-NEXT:    s_addc_u32 s9, s35, 0
5073 ; GFX1132-NEXT:    s_getpc_b64 s[4:5]
5074 ; GFX1132-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
5075 ; GFX1132-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
5076 ; GFX1132-NEXT:    s_mov_b32 s12, s13
5077 ; GFX1132-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
5078 ; GFX1132-NEXT:    s_mov_b64 s[10:11], s[6:7]
5079 ; GFX1132-NEXT:    s_mov_b64 s[4:5], s[0:1]
5080 ; GFX1132-NEXT:    s_mov_b64 s[6:7], s[2:3]
5081 ; GFX1132-NEXT:    s_mov_b32 s13, s14
5082 ; GFX1132-NEXT:    s_mov_b32 s14, s15
5083 ; GFX1132-NEXT:    s_mov_b32 s32, 0
5084 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
5085 ; GFX1132-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5086 ; GFX1132-NEXT:    v_bfrev_b32_e32 v2, 1
5087 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
5088 ; GFX1132-NEXT:  .LBB8_1: ; %ComputeLoop
5089 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
5090 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
5091 ; GFX1132-NEXT:    s_ctz_i32_b32 s1, s0
5092 ; GFX1132-NEXT:    v_readlane_b32 s2, v0, s1
5093 ; GFX1132-NEXT:    s_lshl_b32 s1, 1, s1
5094 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
5095 ; GFX1132-NEXT:    s_and_not1_b32 s0, s0, s1
5096 ; GFX1132-NEXT:    s_cmp_lg_u32 s0, 0
5097 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5098 ; GFX1132-NEXT:    v_add_f32_e32 v2, s2, v2
5099 ; GFX1132-NEXT:    s_cbranch_scc1 .LBB8_1
5100 ; GFX1132-NEXT:  ; %bb.2: ; %ComputeEnd
5101 ; GFX1132-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
5102 ; GFX1132-NEXT:    s_mov_b32 s2, 0
5103 ; GFX1132-NEXT:    s_mov_b32 s0, exec_lo
5104 ; GFX1132-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5105 ; GFX1132-NEXT:    v_cmpx_eq_u32_e32 0, v0
5106 ; GFX1132-NEXT:    s_xor_b32 s0, exec_lo, s0
5107 ; GFX1132-NEXT:    s_cbranch_execz .LBB8_5
5108 ; GFX1132-NEXT:  ; %bb.3:
5109 ; GFX1132-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
5110 ; GFX1132-NEXT:    v_mov_b32_e32 v3, 0
5111 ; GFX1132-NEXT:    s_waitcnt lgkmcnt(0)
5112 ; GFX1132-NEXT:    global_load_b32 v1, v3, s[0:1]
5113 ; GFX1132-NEXT:  .LBB8_4: ; %atomicrmw.start
5114 ; GFX1132-NEXT:    ; =>This Inner Loop Header: Depth=1
5115 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
5116 ; GFX1132-NEXT:    v_add_f32_e32 v0, v1, v2
5117 ; GFX1132-NEXT:    global_atomic_cmpswap_b32 v0, v3, v[0:1], s[0:1] glc
5118 ; GFX1132-NEXT:    s_waitcnt vmcnt(0)
5119 ; GFX1132-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
5120 ; GFX1132-NEXT:    v_mov_b32_e32 v1, v0
5121 ; GFX1132-NEXT:    s_or_b32 s2, vcc_lo, s2
5122 ; GFX1132-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
5123 ; GFX1132-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
5124 ; GFX1132-NEXT:    s_cbranch_execnz .LBB8_4
5125 ; GFX1132-NEXT:  .LBB8_5:
5126 ; GFX1132-NEXT:    s_endpgm
5128 ; GFX9-DPP-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
5129 ; GFX9-DPP:       ; %bb.0:
5130 ; GFX9-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
5131 ; GFX9-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
5132 ; GFX9-DPP-NEXT:    s_mov_b32 s38, -1
5133 ; GFX9-DPP-NEXT:    s_mov_b32 s39, 0xe00000
5134 ; GFX9-DPP-NEXT:    s_add_u32 s36, s36, s11
5135 ; GFX9-DPP-NEXT:    s_addc_u32 s37, s37, 0
5136 ; GFX9-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
5137 ; GFX9-DPP-NEXT:    s_mov_b32 s12, s8
5138 ; GFX9-DPP-NEXT:    s_add_u32 s8, s34, 44
5139 ; GFX9-DPP-NEXT:    s_mov_b32 s13, s9
5140 ; GFX9-DPP-NEXT:    s_addc_u32 s9, s35, 0
5141 ; GFX9-DPP-NEXT:    s_getpc_b64 s[4:5]
5142 ; GFX9-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
5143 ; GFX9-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
5144 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
5145 ; GFX9-DPP-NEXT:    s_mov_b32 s14, s10
5146 ; GFX9-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
5147 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
5148 ; GFX9-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
5149 ; GFX9-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
5150 ; GFX9-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
5151 ; GFX9-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
5152 ; GFX9-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
5153 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
5154 ; GFX9-DPP-NEXT:    s_mov_b32 s32, 0
5155 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5156 ; GFX9-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5157 ; GFX9-DPP-NEXT:    v_mbcnt_lo_u32_b32 v1, exec_lo, 0
5158 ; GFX9-DPP-NEXT:    v_mbcnt_hi_u32_b32 v1, exec_hi, v1
5159 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v3, v0
5160 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
5161 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
5162 ; GFX9-DPP-NEXT:    s_not_b64 exec, exec
5163 ; GFX9-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
5164 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5165 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
5166 ; GFX9-DPP-NEXT:    s_nop 0
5167 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:1 row_mask:0xf bank_mask:0xf
5168 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5169 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5170 ; GFX9-DPP-NEXT:    s_nop 1
5171 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:2 row_mask:0xf bank_mask:0xf
5172 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5173 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5174 ; GFX9-DPP-NEXT:    s_nop 1
5175 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:4 row_mask:0xf bank_mask:0xf
5176 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5177 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5178 ; GFX9-DPP-NEXT:    s_nop 1
5179 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_shr:8 row_mask:0xf bank_mask:0xf
5180 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5181 ; GFX9-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5182 ; GFX9-DPP-NEXT:    s_nop 1
5183 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_bcast:15 row_mask:0xa bank_mask:0xf
5184 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5185 ; GFX9-DPP-NEXT:    s_nop 1
5186 ; GFX9-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_bcast:31 row_mask:0xc bank_mask:0xf
5187 ; GFX9-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
5188 ; GFX9-DPP-NEXT:    v_readlane_b32 s4, v3, 63
5189 ; GFX9-DPP-NEXT:    s_mov_b64 exec, s[0:1]
5190 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v1
5191 ; GFX9-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
5192 ; GFX9-DPP-NEXT:    s_cbranch_execz .LBB8_3
5193 ; GFX9-DPP-NEXT:  ; %bb.1:
5194 ; GFX9-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
5195 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v2, 0
5196 ; GFX9-DPP-NEXT:    s_mov_b64 s[2:3], 0
5197 ; GFX9-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5198 ; GFX9-DPP-NEXT:    global_load_dword v1, v2, s[0:1]
5199 ; GFX9-DPP-NEXT:  .LBB8_2: ; %atomicrmw.start
5200 ; GFX9-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
5201 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
5202 ; GFX9-DPP-NEXT:    v_add_f32_e32 v0, s4, v1
5203 ; GFX9-DPP-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
5204 ; GFX9-DPP-NEXT:    s_waitcnt vmcnt(0)
5205 ; GFX9-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
5206 ; GFX9-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
5207 ; GFX9-DPP-NEXT:    v_mov_b32_e32 v1, v0
5208 ; GFX9-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
5209 ; GFX9-DPP-NEXT:    s_cbranch_execnz .LBB8_2
5210 ; GFX9-DPP-NEXT:  .LBB8_3:
5211 ; GFX9-DPP-NEXT:    s_endpgm
5213 ; GFX1064-DPP-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
5214 ; GFX1064-DPP:       ; %bb.0:
5215 ; GFX1064-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
5216 ; GFX1064-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
5217 ; GFX1064-DPP-NEXT:    s_mov_b32 s38, -1
5218 ; GFX1064-DPP-NEXT:    s_mov_b32 s39, 0x31e16000
5219 ; GFX1064-DPP-NEXT:    s_add_u32 s36, s36, s11
5220 ; GFX1064-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
5221 ; GFX1064-DPP-NEXT:    s_addc_u32 s37, s37, 0
5222 ; GFX1064-DPP-NEXT:    s_mov_b32 s12, s8
5223 ; GFX1064-DPP-NEXT:    s_add_u32 s8, s34, 44
5224 ; GFX1064-DPP-NEXT:    s_mov_b32 s13, s9
5225 ; GFX1064-DPP-NEXT:    s_addc_u32 s9, s35, 0
5226 ; GFX1064-DPP-NEXT:    s_getpc_b64 s[4:5]
5227 ; GFX1064-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
5228 ; GFX1064-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
5229 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
5230 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
5231 ; GFX1064-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
5232 ; GFX1064-DPP-NEXT:    s_mov_b32 s14, s10
5233 ; GFX1064-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
5234 ; GFX1064-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
5235 ; GFX1064-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
5236 ; GFX1064-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
5237 ; GFX1064-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
5238 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
5239 ; GFX1064-DPP-NEXT:    s_mov_b32 s32, 0
5240 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5241 ; GFX1064-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5242 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
5243 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
5244 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
5245 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v0
5246 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
5247 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
5248 ; GFX1064-DPP-NEXT:    s_not_b64 exec, exec
5249 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
5250 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
5251 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5252 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
5253 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
5254 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
5255 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5256 ; GFX1064-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5257 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
5258 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
5259 ; GFX1064-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
5260 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5261 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v4, v3
5262 ; GFX1064-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
5263 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
5264 ; GFX1064-DPP-NEXT:    v_readlane_b32 s2, v3, 0
5265 ; GFX1064-DPP-NEXT:    v_readlane_b32 s3, v3, 32
5266 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
5267 ; GFX1064-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
5268 ; GFX1064-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
5269 ; GFX1064-DPP-NEXT:    v_add_f32_e64 v3, s2, s3
5270 ; GFX1064-DPP-NEXT:    s_mov_b64 exec, s[0:1]
5271 ; GFX1064-DPP-NEXT:    v_mbcnt_hi_u32_b32 v0, exec_hi, v0
5272 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v2, v3
5273 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v0
5274 ; GFX1064-DPP-NEXT:    s_and_saveexec_b64 s[0:1], vcc
5275 ; GFX1064-DPP-NEXT:    s_cbranch_execz .LBB8_3
5276 ; GFX1064-DPP-NEXT:  ; %bb.1:
5277 ; GFX1064-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
5278 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v6, 0
5279 ; GFX1064-DPP-NEXT:    s_mov_b64 s[2:3], 0
5280 ; GFX1064-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5281 ; GFX1064-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
5282 ; GFX1064-DPP-NEXT:  .LBB8_2: ; %atomicrmw.start
5283 ; GFX1064-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
5284 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
5285 ; GFX1064-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
5286 ; GFX1064-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
5287 ; GFX1064-DPP-NEXT:    s_waitcnt vmcnt(0)
5288 ; GFX1064-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
5289 ; GFX1064-DPP-NEXT:    v_mov_b32_e32 v1, v0
5290 ; GFX1064-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
5291 ; GFX1064-DPP-NEXT:    s_andn2_b64 exec, exec, s[2:3]
5292 ; GFX1064-DPP-NEXT:    s_cbranch_execnz .LBB8_2
5293 ; GFX1064-DPP-NEXT:  .LBB8_3:
5294 ; GFX1064-DPP-NEXT:    s_endpgm
5296 ; GFX1032-DPP-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
5297 ; GFX1032-DPP:       ; %bb.0:
5298 ; GFX1032-DPP-NEXT:    s_mov_b32 s36, SCRATCH_RSRC_DWORD0
5299 ; GFX1032-DPP-NEXT:    s_mov_b32 s37, SCRATCH_RSRC_DWORD1
5300 ; GFX1032-DPP-NEXT:    s_mov_b32 s38, -1
5301 ; GFX1032-DPP-NEXT:    s_mov_b32 s39, 0x31c16000
5302 ; GFX1032-DPP-NEXT:    s_add_u32 s36, s36, s11
5303 ; GFX1032-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
5304 ; GFX1032-DPP-NEXT:    s_addc_u32 s37, s37, 0
5305 ; GFX1032-DPP-NEXT:    s_mov_b32 s12, s8
5306 ; GFX1032-DPP-NEXT:    s_add_u32 s8, s34, 44
5307 ; GFX1032-DPP-NEXT:    s_mov_b32 s13, s9
5308 ; GFX1032-DPP-NEXT:    s_addc_u32 s9, s35, 0
5309 ; GFX1032-DPP-NEXT:    s_getpc_b64 s[4:5]
5310 ; GFX1032-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
5311 ; GFX1032-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
5312 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v2, 20, v2
5313 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[16:17], s[4:5], 0x0
5314 ; GFX1032-DPP-NEXT:    v_lshlrev_b32_e32 v1, 10, v1
5315 ; GFX1032-DPP-NEXT:    s_mov_b32 s14, s10
5316 ; GFX1032-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
5317 ; GFX1032-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
5318 ; GFX1032-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
5319 ; GFX1032-DPP-NEXT:    v_or3_b32 v31, v0, v1, v2
5320 ; GFX1032-DPP-NEXT:    s_mov_b64 s[0:1], s[36:37]
5321 ; GFX1032-DPP-NEXT:    s_mov_b64 s[2:3], s[38:39]
5322 ; GFX1032-DPP-NEXT:    s_mov_b32 s32, 0
5323 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5324 ; GFX1032-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5325 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
5326 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
5327 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
5328 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v0
5329 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
5330 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
5331 ; GFX1032-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
5332 ; GFX1032-DPP-NEXT:    s_or_saveexec_b32 s0, -1
5333 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v3, v4 row_xmask:1 row_mask:0xf bank_mask:0xf
5334 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5335 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v4, v3
5336 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v4, 1
5337 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:2 row_mask:0xf bank_mask:0xf
5338 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5339 ; GFX1032-DPP-NEXT:    v_bfrev_b32_e32 v5, 1
5340 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v4, v3 row_xmask:4 row_mask:0xf bank_mask:0xf
5341 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
5342 ; GFX1032-DPP-NEXT:    v_mov_b32_dpp v5, v3 row_xmask:8 row_mask:0xf bank_mask:0xf
5343 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v5
5344 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v4, v3
5345 ; GFX1032-DPP-NEXT:    v_permlanex16_b32 v4, v4, -1, -1
5346 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v3, v3, v4
5347 ; GFX1032-DPP-NEXT:    s_mov_b32 exec_lo, s0
5348 ; GFX1032-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
5349 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v2, v3
5350 ; GFX1032-DPP-NEXT:    s_mov_b32 s2, 0
5351 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v0
5352 ; GFX1032-DPP-NEXT:    s_and_saveexec_b32 s0, vcc_lo
5353 ; GFX1032-DPP-NEXT:    s_cbranch_execz .LBB8_3
5354 ; GFX1032-DPP-NEXT:  ; %bb.1:
5355 ; GFX1032-DPP-NEXT:    s_load_dwordx2 s[0:1], s[34:35], 0x24
5356 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v6, 0
5357 ; GFX1032-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5358 ; GFX1032-DPP-NEXT:    global_load_dword v1, v6, s[0:1]
5359 ; GFX1032-DPP-NEXT:  .LBB8_2: ; %atomicrmw.start
5360 ; GFX1032-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
5361 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
5362 ; GFX1032-DPP-NEXT:    v_add_f32_e32 v0, v1, v2
5363 ; GFX1032-DPP-NEXT:    global_atomic_cmpswap v0, v6, v[0:1], s[0:1] glc
5364 ; GFX1032-DPP-NEXT:    s_waitcnt vmcnt(0)
5365 ; GFX1032-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v0, v1
5366 ; GFX1032-DPP-NEXT:    v_mov_b32_e32 v1, v0
5367 ; GFX1032-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
5368 ; GFX1032-DPP-NEXT:    s_andn2_b32 exec_lo, exec_lo, s2
5369 ; GFX1032-DPP-NEXT:    s_cbranch_execnz .LBB8_2
5370 ; GFX1032-DPP-NEXT:  .LBB8_3:
5371 ; GFX1032-DPP-NEXT:    s_endpgm
5373 ; GFX1164-DPP-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
5374 ; GFX1164-DPP:       ; %bb.0:
5375 ; GFX1164-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
5376 ; GFX1164-DPP-NEXT:    s_mov_b32 s12, s8
5377 ; GFX1164-DPP-NEXT:    s_add_u32 s8, s34, 44
5378 ; GFX1164-DPP-NEXT:    s_mov_b32 s13, s9
5379 ; GFX1164-DPP-NEXT:    s_addc_u32 s9, s35, 0
5380 ; GFX1164-DPP-NEXT:    s_getpc_b64 s[4:5]
5381 ; GFX1164-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
5382 ; GFX1164-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
5383 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v31, v0
5384 ; GFX1164-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
5385 ; GFX1164-DPP-NEXT:    s_mov_b32 s14, s10
5386 ; GFX1164-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
5387 ; GFX1164-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
5388 ; GFX1164-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
5389 ; GFX1164-DPP-NEXT:    s_mov_b32 s32, 0
5390 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5391 ; GFX1164-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5392 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
5393 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
5394 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
5395 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v0
5396 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
5397 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
5398 ; GFX1164-DPP-NEXT:    s_not_b64 exec, exec
5399 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
5400 ; GFX1164-DPP-NEXT:    s_waitcnt_depctr 0xfff
5401 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
5402 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
5403 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
5404 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
5405 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
5406 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
5407 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
5408 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
5409 ; GFX1164-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
5410 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
5411 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5412 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
5413 ; GFX1164-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
5414 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5415 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
5416 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v2, v1
5417 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5418 ; GFX1164-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
5419 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
5420 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
5421 ; GFX1164-DPP-NEXT:    v_permlane64_b32 v2, v1
5422 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
5423 ; GFX1164-DPP-NEXT:    v_mbcnt_lo_u32_b32 v0, exec_lo, 0
5424 ; GFX1164-DPP-NEXT:    s_or_saveexec_b64 s[0:1], -1
5425 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2)
5426 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
5427 ; GFX1164-DPP-NEXT:    s_mov_b64 exec, s[0:1]
5428 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
5429 ; GFX1164-DPP-NEXT:    v_mbcnt_hi_u32_b32 v4, exec_hi, v0
5430 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
5431 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v0, v1
5432 ; GFX1164-DPP-NEXT:    s_mov_b64 s[0:1], exec
5433 ; GFX1164-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
5434 ; GFX1164-DPP-NEXT:    s_cbranch_execz .LBB8_3
5435 ; GFX1164-DPP-NEXT:  ; %bb.1:
5436 ; GFX1164-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
5437 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v6, 0
5438 ; GFX1164-DPP-NEXT:    s_mov_b64 s[2:3], 0
5439 ; GFX1164-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5440 ; GFX1164-DPP-NEXT:    global_load_b32 v5, v6, s[0:1]
5441 ; GFX1164-DPP-NEXT:  .LBB8_2: ; %atomicrmw.start
5442 ; GFX1164-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
5443 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
5444 ; GFX1164-DPP-NEXT:    v_add_f32_e32 v4, v5, v0
5445 ; GFX1164-DPP-NEXT:    global_atomic_cmpswap_b32 v4, v6, v[4:5], s[0:1] glc
5446 ; GFX1164-DPP-NEXT:    s_waitcnt vmcnt(0)
5447 ; GFX1164-DPP-NEXT:    v_cmp_eq_u32_e32 vcc, v4, v5
5448 ; GFX1164-DPP-NEXT:    v_mov_b32_e32 v5, v4
5449 ; GFX1164-DPP-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
5450 ; GFX1164-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
5451 ; GFX1164-DPP-NEXT:    s_and_not1_b64 exec, exec, s[2:3]
5452 ; GFX1164-DPP-NEXT:    s_cbranch_execnz .LBB8_2
5453 ; GFX1164-DPP-NEXT:  .LBB8_3:
5454 ; GFX1164-DPP-NEXT:    s_endpgm
5456 ; GFX1132-DPP-LABEL: global_atomic_fadd_uni_address_div_value_defalut_scope_strictfp:
5457 ; GFX1132-DPP:       ; %bb.0:
5458 ; GFX1132-DPP-NEXT:    s_mov_b64 s[34:35], s[4:5]
5459 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v31, v0
5460 ; GFX1132-DPP-NEXT:    s_add_u32 s8, s34, 44
5461 ; GFX1132-DPP-NEXT:    s_addc_u32 s9, s35, 0
5462 ; GFX1132-DPP-NEXT:    s_getpc_b64 s[4:5]
5463 ; GFX1132-DPP-NEXT:    s_add_u32 s4, s4, div.float.value@gotpcrel32@lo+4
5464 ; GFX1132-DPP-NEXT:    s_addc_u32 s5, s5, div.float.value@gotpcrel32@hi+12
5465 ; GFX1132-DPP-NEXT:    s_mov_b32 s12, s13
5466 ; GFX1132-DPP-NEXT:    s_load_b64 s[16:17], s[4:5], 0x0
5467 ; GFX1132-DPP-NEXT:    s_mov_b64 s[10:11], s[6:7]
5468 ; GFX1132-DPP-NEXT:    s_mov_b64 s[4:5], s[0:1]
5469 ; GFX1132-DPP-NEXT:    s_mov_b64 s[6:7], s[2:3]
5470 ; GFX1132-DPP-NEXT:    s_mov_b32 s13, s14
5471 ; GFX1132-DPP-NEXT:    s_mov_b32 s14, s15
5472 ; GFX1132-DPP-NEXT:    s_mov_b32 s32, 0
5473 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5474 ; GFX1132-DPP-NEXT:    s_swappc_b64 s[30:31], s[16:17]
5475 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
5476 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v1, 1
5477 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
5478 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v0
5479 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
5480 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
5481 ; GFX1132-DPP-NEXT:    s_not_b32 exec_lo, exec_lo
5482 ; GFX1132-DPP-NEXT:    s_or_saveexec_b32 s0, -1
5483 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
5484 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v1, v2 row_xmask:1 row_mask:0xf bank_mask:0xf
5485 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
5486 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v2, v1
5487 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v2, 1
5488 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5489 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:2 row_mask:0xf bank_mask:0xf
5490 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
5491 ; GFX1132-DPP-NEXT:    v_bfrev_b32_e32 v3, 1
5492 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
5493 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v2, v1 row_xmask:4 row_mask:0xf bank_mask:0xf
5494 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
5495 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5496 ; GFX1132-DPP-NEXT:    v_mov_b32_dpp v3, v1 row_xmask:8 row_mask:0xf bank_mask:0xf
5497 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v3
5498 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
5499 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v2, v1
5500 ; GFX1132-DPP-NEXT:    v_permlanex16_b32 v2, v2, -1, -1
5501 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
5502 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v1, v1, v2
5503 ; GFX1132-DPP-NEXT:    s_mov_b32 exec_lo, s0
5504 ; GFX1132-DPP-NEXT:    v_mbcnt_lo_u32_b32 v4, exec_lo, 0
5505 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_2)
5506 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v0, v1
5507 ; GFX1132-DPP-NEXT:    s_mov_b32 s2, 0
5508 ; GFX1132-DPP-NEXT:    s_mov_b32 s0, exec_lo
5509 ; GFX1132-DPP-NEXT:    v_cmpx_eq_u32_e32 0, v4
5510 ; GFX1132-DPP-NEXT:    s_cbranch_execz .LBB8_3
5511 ; GFX1132-DPP-NEXT:  ; %bb.1:
5512 ; GFX1132-DPP-NEXT:    s_load_b64 s[0:1], s[34:35], 0x24
5513 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v6, 0
5514 ; GFX1132-DPP-NEXT:    s_waitcnt lgkmcnt(0)
5515 ; GFX1132-DPP-NEXT:    global_load_b32 v5, v6, s[0:1]
5516 ; GFX1132-DPP-NEXT:  .LBB8_2: ; %atomicrmw.start
5517 ; GFX1132-DPP-NEXT:    ; =>This Inner Loop Header: Depth=1
5518 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
5519 ; GFX1132-DPP-NEXT:    v_add_f32_e32 v4, v5, v0
5520 ; GFX1132-DPP-NEXT:    global_atomic_cmpswap_b32 v4, v6, v[4:5], s[0:1] glc
5521 ; GFX1132-DPP-NEXT:    s_waitcnt vmcnt(0)
5522 ; GFX1132-DPP-NEXT:    v_cmp_eq_u32_e32 vcc_lo, v4, v5
5523 ; GFX1132-DPP-NEXT:    v_mov_b32_e32 v5, v4
5524 ; GFX1132-DPP-NEXT:    s_or_b32 s2, vcc_lo, s2
5525 ; GFX1132-DPP-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
5526 ; GFX1132-DPP-NEXT:    s_and_not1_b32 exec_lo, exec_lo, s2
5527 ; GFX1132-DPP-NEXT:    s_cbranch_execnz .LBB8_2
5528 ; GFX1132-DPP-NEXT:  .LBB8_3:
5529 ; GFX1132-DPP-NEXT:    s_endpgm
5530   %divValue = call float @div.float.value()
5531   %result = atomicrmw fadd ptr addrspace(1) %ptr, float %divValue monotonic, align 4
5532   ret void
5535 attributes #0 = { "denormal-fp-math-f32"="preserve-sign,preserve-sign" "amdgpu-unsafe-fp-atomics"="true" }
5536 attributes #1 = { strictfp "denormal-fp-math-f32"="preserve-sign,preserve-sign" "amdgpu-unsafe-fp-atomics"="true" }
5537 attributes #2 = { strictfp}