1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX900 %s
3; RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX908 %s
4; RUN: llc -march=amdgcn -mcpu=gfx90a -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX90A %s
5
6define amdgpu_kernel void @global_atomic_fadd_ret_f32(float addrspace(1)* %ptr) #0 {
7; GFX900-LABEL: global_atomic_fadd_ret_f32:
8; GFX900:       ; %bb.0:
9; GFX900-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
10; GFX900-NEXT:    s_mov_b64 s[2:3], 0
11; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
12; GFX900-NEXT:    s_load_dword s4, s[0:1], 0x0
13; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
14; GFX900-NEXT:    v_mov_b32_e32 v0, s4
15; GFX900-NEXT:  BB0_1: ; %atomicrmw.start
16; GFX900-NEXT:    ; =>This Inner Loop Header: Depth=1
17; GFX900-NEXT:    v_mov_b32_e32 v1, v0
18; GFX900-NEXT:    v_mov_b32_e32 v2, 0
19; GFX900-NEXT:    v_add_f32_e32 v0, 4.0, v1
20; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
21; GFX900-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
22; GFX900-NEXT:    s_waitcnt vmcnt(0)
23; GFX900-NEXT:    buffer_wbinvl1_vol
24; GFX900-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
25; GFX900-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
26; GFX900-NEXT:    s_andn2_b64 exec, exec, s[2:3]
27; GFX900-NEXT:    s_cbranch_execnz BB0_1
28; GFX900-NEXT:  ; %bb.2: ; %atomicrmw.end
29; GFX900-NEXT:    s_or_b64 exec, exec, s[2:3]
30; GFX900-NEXT:    global_store_dword v[0:1], v0, off
31; GFX900-NEXT:    s_endpgm
32;
33; GFX908-LABEL: global_atomic_fadd_ret_f32:
34; GFX908:       ; %bb.0:
35; GFX908-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
36; GFX908-NEXT:    s_mov_b64 s[2:3], 0
37; GFX908-NEXT:    s_waitcnt lgkmcnt(0)
38; GFX908-NEXT:    s_load_dword s4, s[0:1], 0x0
39; GFX908-NEXT:    s_waitcnt lgkmcnt(0)
40; GFX908-NEXT:    v_mov_b32_e32 v0, s4
41; GFX908-NEXT:  BB0_1: ; %atomicrmw.start
42; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
43; GFX908-NEXT:    v_mov_b32_e32 v1, v0
44; GFX908-NEXT:    v_mov_b32_e32 v2, 0
45; GFX908-NEXT:    v_add_f32_e32 v0, 4.0, v1
46; GFX908-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
47; GFX908-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
48; GFX908-NEXT:    s_waitcnt vmcnt(0)
49; GFX908-NEXT:    buffer_wbinvl1_vol
50; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
51; GFX908-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
52; GFX908-NEXT:    s_andn2_b64 exec, exec, s[2:3]
53; GFX908-NEXT:    s_cbranch_execnz BB0_1
54; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
55; GFX908-NEXT:    s_or_b64 exec, exec, s[2:3]
56; GFX908-NEXT:    global_store_dword v[0:1], v0, off
57; GFX908-NEXT:    s_endpgm
58;
59; GFX90A-LABEL: global_atomic_fadd_ret_f32:
60; GFX90A:       ; %bb.0:
61; GFX90A-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
62; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
63; GFX90A-NEXT:    v_mov_b32_e32 v1, 4.0
64; GFX90A-NEXT:    buffer_wbl2
65; GFX90A-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
66; GFX90A-NEXT:    global_atomic_add_f32 v0, v0, v1, s[0:1] glc scc
67; GFX90A-NEXT:    s_waitcnt vmcnt(0)
68; GFX90A-NEXT:    buffer_invl2
69; GFX90A-NEXT:    s_waitcnt vmcnt(0)
70; GFX90A-NEXT:    buffer_wbinvl1_vol
71; GFX90A-NEXT:    global_store_dword v[0:1], v0, off
72; GFX90A-NEXT:    s_endpgm
73  %result = atomicrmw fadd float addrspace(1)* %ptr, float 4.0 seq_cst
74  store float %result, float addrspace(1)* undef
75  ret void
76}
77
78define amdgpu_kernel void @global_atomic_fadd_ret_f32_ieee(float addrspace(1)* %ptr) #2 {
79; GFX900-LABEL: global_atomic_fadd_ret_f32_ieee:
80; GFX900:       ; %bb.0:
81; GFX900-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
82; GFX900-NEXT:    s_mov_b64 s[2:3], 0
83; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
84; GFX900-NEXT:    s_load_dword s4, s[0:1], 0x0
85; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
86; GFX900-NEXT:    v_mov_b32_e32 v0, s4
87; GFX900-NEXT:  BB1_1: ; %atomicrmw.start
88; GFX900-NEXT:    ; =>This Inner Loop Header: Depth=1
89; GFX900-NEXT:    v_mov_b32_e32 v1, v0
90; GFX900-NEXT:    v_mov_b32_e32 v2, 0
91; GFX900-NEXT:    v_add_f32_e32 v0, 4.0, v1
92; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
93; GFX900-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
94; GFX900-NEXT:    s_waitcnt vmcnt(0)
95; GFX900-NEXT:    buffer_wbinvl1_vol
96; GFX900-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
97; GFX900-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
98; GFX900-NEXT:    s_andn2_b64 exec, exec, s[2:3]
99; GFX900-NEXT:    s_cbranch_execnz BB1_1
100; GFX900-NEXT:  ; %bb.2: ; %atomicrmw.end
101; GFX900-NEXT:    s_or_b64 exec, exec, s[2:3]
102; GFX900-NEXT:    global_store_dword v[0:1], v0, off
103; GFX900-NEXT:    s_endpgm
104;
105; GFX908-LABEL: global_atomic_fadd_ret_f32_ieee:
106; GFX908:       ; %bb.0:
107; GFX908-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
108; GFX908-NEXT:    s_mov_b64 s[2:3], 0
109; GFX908-NEXT:    s_waitcnt lgkmcnt(0)
110; GFX908-NEXT:    s_load_dword s4, s[0:1], 0x0
111; GFX908-NEXT:    s_waitcnt lgkmcnt(0)
112; GFX908-NEXT:    v_mov_b32_e32 v0, s4
113; GFX908-NEXT:  BB1_1: ; %atomicrmw.start
114; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
115; GFX908-NEXT:    v_mov_b32_e32 v1, v0
116; GFX908-NEXT:    v_mov_b32_e32 v2, 0
117; GFX908-NEXT:    v_add_f32_e32 v0, 4.0, v1
118; GFX908-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
119; GFX908-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
120; GFX908-NEXT:    s_waitcnt vmcnt(0)
121; GFX908-NEXT:    buffer_wbinvl1_vol
122; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
123; GFX908-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
124; GFX908-NEXT:    s_andn2_b64 exec, exec, s[2:3]
125; GFX908-NEXT:    s_cbranch_execnz BB1_1
126; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
127; GFX908-NEXT:    s_or_b64 exec, exec, s[2:3]
128; GFX908-NEXT:    global_store_dword v[0:1], v0, off
129; GFX908-NEXT:    s_endpgm
130;
131; GFX90A-LABEL: global_atomic_fadd_ret_f32_ieee:
132; GFX90A:       ; %bb.0:
133; GFX90A-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
134; GFX90A-NEXT:    s_mov_b64 s[2:3], 0
135; GFX90A-NEXT:    s_waitcnt lgkmcnt(0)
136; GFX90A-NEXT:    s_load_dword s4, s[0:1], 0x0
137; GFX90A-NEXT:    s_waitcnt lgkmcnt(0)
138; GFX90A-NEXT:    v_mov_b32_e32 v0, s4
139; GFX90A-NEXT:  BB1_1: ; %atomicrmw.start
140; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
141; GFX90A-NEXT:    v_mov_b32_e32 v3, v0
142; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
143; GFX90A-NEXT:    v_add_f32_e32 v0, 4.0, v3
144; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
145; GFX90A-NEXT:    buffer_wbl2
146; GFX90A-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
147; GFX90A-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc scc
148; GFX90A-NEXT:    s_waitcnt vmcnt(0)
149; GFX90A-NEXT:    buffer_invl2
150; GFX90A-NEXT:    s_waitcnt vmcnt(0)
151; GFX90A-NEXT:    buffer_wbinvl1_vol
152; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v3
153; GFX90A-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
154; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[2:3]
155; GFX90A-NEXT:    s_cbranch_execnz BB1_1
156; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
157; GFX90A-NEXT:    s_or_b64 exec, exec, s[2:3]
158; GFX90A-NEXT:    global_store_dword v[0:1], v0, off
159; GFX90A-NEXT:    s_endpgm
160  %result = atomicrmw fadd float addrspace(1)* %ptr, float 4.0 seq_cst
161  store float %result, float addrspace(1)* undef
162  ret void
163}
164
165define amdgpu_kernel void @global_atomic_fadd_noret_f32(float addrspace(1)* %ptr) #0 {
166; GFX900-LABEL: global_atomic_fadd_noret_f32:
167; GFX900:       ; %bb.0:
168; GFX900-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
169; GFX900-NEXT:    s_mov_b64 s[2:3], 0
170; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
171; GFX900-NEXT:    s_load_dword s4, s[0:1], 0x0
172; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
173; GFX900-NEXT:    v_mov_b32_e32 v1, s4
174; GFX900-NEXT:  BB2_1: ; %atomicrmw.start
175; GFX900-NEXT:    ; =>This Inner Loop Header: Depth=1
176; GFX900-NEXT:    v_mov_b32_e32 v2, 0
177; GFX900-NEXT:    v_add_f32_e32 v0, 4.0, v1
178; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
179; GFX900-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
180; GFX900-NEXT:    s_waitcnt vmcnt(0)
181; GFX900-NEXT:    buffer_wbinvl1_vol
182; GFX900-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
183; GFX900-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
184; GFX900-NEXT:    v_mov_b32_e32 v1, v0
185; GFX900-NEXT:    s_andn2_b64 exec, exec, s[2:3]
186; GFX900-NEXT:    s_cbranch_execnz BB2_1
187; GFX900-NEXT:  ; %bb.2: ; %atomicrmw.end
188; GFX900-NEXT:    s_endpgm
189;
190; GFX908-LABEL: global_atomic_fadd_noret_f32:
191; GFX908:       ; %bb.0:
192; GFX908-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
193; GFX908-NEXT:    v_mov_b32_e32 v0, 0
194; GFX908-NEXT:    v_mov_b32_e32 v1, 4.0
195; GFX908-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
196; GFX908-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
197; GFX908-NEXT:    s_waitcnt vmcnt(0)
198; GFX908-NEXT:    buffer_wbinvl1_vol
199; GFX908-NEXT:    s_endpgm
200;
201; GFX90A-LABEL: global_atomic_fadd_noret_f32:
202; GFX90A:       ; %bb.0:
203; GFX90A-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
204; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
205; GFX90A-NEXT:    v_mov_b32_e32 v1, 4.0
206; GFX90A-NEXT:    buffer_wbl2
207; GFX90A-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
208; GFX90A-NEXT:    global_atomic_add_f32 v0, v1, s[0:1] scc
209; GFX90A-NEXT:    s_waitcnt vmcnt(0)
210; GFX90A-NEXT:    buffer_invl2
211; GFX90A-NEXT:    s_waitcnt vmcnt(0)
212; GFX90A-NEXT:    buffer_wbinvl1_vol
213; GFX90A-NEXT:    s_endpgm
214  %result = atomicrmw fadd float addrspace(1)* %ptr, float 4.0 seq_cst
215  ret void
216}
217
218define amdgpu_kernel void @global_atomic_fadd_noret_f32_ieee(float addrspace(1)* %ptr) #2 {
219; GFX900-LABEL: global_atomic_fadd_noret_f32_ieee:
220; GFX900:       ; %bb.0:
221; GFX900-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
222; GFX900-NEXT:    s_mov_b64 s[2:3], 0
223; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
224; GFX900-NEXT:    s_load_dword s4, s[0:1], 0x0
225; GFX900-NEXT:    s_waitcnt lgkmcnt(0)
226; GFX900-NEXT:    v_mov_b32_e32 v1, s4
227; GFX900-NEXT:  BB3_1: ; %atomicrmw.start
228; GFX900-NEXT:    ; =>This Inner Loop Header: Depth=1
229; GFX900-NEXT:    v_mov_b32_e32 v2, 0
230; GFX900-NEXT:    v_add_f32_e32 v0, 4.0, v1
231; GFX900-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
232; GFX900-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
233; GFX900-NEXT:    s_waitcnt vmcnt(0)
234; GFX900-NEXT:    buffer_wbinvl1_vol
235; GFX900-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
236; GFX900-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
237; GFX900-NEXT:    v_mov_b32_e32 v1, v0
238; GFX900-NEXT:    s_andn2_b64 exec, exec, s[2:3]
239; GFX900-NEXT:    s_cbranch_execnz BB3_1
240; GFX900-NEXT:  ; %bb.2: ; %atomicrmw.end
241; GFX900-NEXT:    s_endpgm
242;
243; GFX908-LABEL: global_atomic_fadd_noret_f32_ieee:
244; GFX908:       ; %bb.0:
245; GFX908-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
246; GFX908-NEXT:    s_mov_b64 s[2:3], 0
247; GFX908-NEXT:    s_waitcnt lgkmcnt(0)
248; GFX908-NEXT:    s_load_dword s4, s[0:1], 0x0
249; GFX908-NEXT:    s_waitcnt lgkmcnt(0)
250; GFX908-NEXT:    v_mov_b32_e32 v1, s4
251; GFX908-NEXT:  BB3_1: ; %atomicrmw.start
252; GFX908-NEXT:    ; =>This Inner Loop Header: Depth=1
253; GFX908-NEXT:    v_mov_b32_e32 v2, 0
254; GFX908-NEXT:    v_add_f32_e32 v0, 4.0, v1
255; GFX908-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
256; GFX908-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
257; GFX908-NEXT:    s_waitcnt vmcnt(0)
258; GFX908-NEXT:    buffer_wbinvl1_vol
259; GFX908-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
260; GFX908-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
261; GFX908-NEXT:    v_mov_b32_e32 v1, v0
262; GFX908-NEXT:    s_andn2_b64 exec, exec, s[2:3]
263; GFX908-NEXT:    s_cbranch_execnz BB3_1
264; GFX908-NEXT:  ; %bb.2: ; %atomicrmw.end
265; GFX908-NEXT:    s_endpgm
266;
267; GFX90A-LABEL: global_atomic_fadd_noret_f32_ieee:
268; GFX90A:       ; %bb.0:
269; GFX90A-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
270; GFX90A-NEXT:    s_mov_b64 s[2:3], 0
271; GFX90A-NEXT:    s_waitcnt lgkmcnt(0)
272; GFX90A-NEXT:    s_load_dword s4, s[0:1], 0x0
273; GFX90A-NEXT:    s_waitcnt lgkmcnt(0)
274; GFX90A-NEXT:    v_mov_b32_e32 v0, s4
275; GFX90A-NEXT:  BB3_1: ; %atomicrmw.start
276; GFX90A-NEXT:    ; =>This Inner Loop Header: Depth=1
277; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
278; GFX90A-NEXT:    v_add_f32_e32 v2, 4.0, v0
279; GFX90A-NEXT:    v_mov_b32_e32 v3, v0
280; GFX90A-NEXT:    buffer_wbl2
281; GFX90A-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
282; GFX90A-NEXT:    global_atomic_cmpswap v1, v1, v[2:3], s[0:1] glc scc
283; GFX90A-NEXT:    s_waitcnt vmcnt(0)
284; GFX90A-NEXT:    buffer_invl2
285; GFX90A-NEXT:    s_waitcnt vmcnt(0)
286; GFX90A-NEXT:    buffer_wbinvl1_vol
287; GFX90A-NEXT:    v_cmp_eq_u32_e32 vcc, v1, v0
288; GFX90A-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
289; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
290; GFX90A-NEXT:    s_andn2_b64 exec, exec, s[2:3]
291; GFX90A-NEXT:    s_cbranch_execnz BB3_1
292; GFX90A-NEXT:  ; %bb.2: ; %atomicrmw.end
293; GFX90A-NEXT:    s_endpgm
294  %result = atomicrmw fadd float addrspace(1)* %ptr, float 4.0 seq_cst
295  ret void
296}
297
298define amdgpu_kernel void @global_atomic_fadd_ret_f32_wrong_subtarget(float addrspace(1)* %ptr) #1 {
299; GCN-LABEL: global_atomic_fadd_ret_f32_wrong_subtarget:
300; GCN:       ; %bb.0:
301; GCN-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
302; GCN-NEXT:    s_mov_b64 s[2:3], 0
303; GCN-NEXT:    s_waitcnt lgkmcnt(0)
304; GCN-NEXT:    s_load_dword s4, s[0:1], 0x0
305; GCN-NEXT:    s_waitcnt lgkmcnt(0)
306; GCN-NEXT:    v_mov_b32_e32 v0, s4
307; GCN-NEXT:  BB4_1: ; %atomicrmw.start
308; GCN-NEXT:    ; =>This Inner Loop Header: Depth=1
309; GCN-NEXT:    v_mov_b32_e32 v1, v0
310; GCN-NEXT:    v_mov_b32_e32 v2, 0
311; GCN-NEXT:    v_add_f32_e32 v0, 4.0, v1
312; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
313; GCN-NEXT:    global_atomic_cmpswap v0, v2, v[0:1], s[0:1] glc
314; GCN-NEXT:    s_waitcnt vmcnt(0)
315; GCN-NEXT:    buffer_wbinvl1_vol
316; GCN-NEXT:    v_cmp_eq_u32_e32 vcc, v0, v1
317; GCN-NEXT:    s_or_b64 s[2:3], vcc, s[2:3]
318; GCN-NEXT:    s_andn2_b64 exec, exec, s[2:3]
319; GCN-NEXT:    s_cbranch_execnz BB4_1
320; GCN-NEXT:  ; %bb.2: ; %atomicrmw.end
321; GCN-NEXT:    s_or_b64 exec, exec, s[2:3]
322; GCN-NEXT:    global_store_dword v[0:1], v0, off
323; GCN-NEXT:    s_endpgm
324  %result = atomicrmw fadd float addrspace(1)* %ptr, float 4.0 seq_cst
325  store float %result, float addrspace(1)* undef
326  ret void
327}
328
329define amdgpu_kernel void @global_atomic_fadd_noret_f32_wrong_subtarget(float addrspace(1)* %ptr) #1 {
330; GCN-LABEL: global_atomic_fadd_noret_f32_wrong_subtarget:
331; GCN:       ; %bb.0:
332; GCN-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
333; GCN-NEXT:    v_mov_b32_e32 v0, 0
334; GCN-NEXT:    v_mov_b32_e32 v1, 4.0
335; GCN-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
336; GCN-NEXT:    global_atomic_add_f32 v0, v1, s[0:1]
337; GCN-NEXT:    s_waitcnt vmcnt(0)
338; GCN-NEXT:    buffer_wbinvl1_vol
339; GCN-NEXT:    s_endpgm
340  %result = atomicrmw fadd float addrspace(1)* %ptr, float 4.0 seq_cst
341  ret void
342}
343
344attributes #0 = { "denormal-fp-math-f32"="preserve-sign,preserve-sign" "amdgpu-unsafe-fp-atomics"="true" }
345attributes #1 = { "denormal-fp-math-f32"="preserve-sign,preserve-sign" "target-cpu"="gfx803" "target-features"="+atomic-fadd-insts" "amdgpu-unsafe-fp-atomics"="true" }
346attributes #2 = { "amdgpu-unsafe-fp-atomics"="true" }
347