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