Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / fp-min-max-buffer-ptr-atomics.ll
bloba56e76eb3bf8d1cde7ab274221ff197701393a8f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -march=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck %s -check-prefix=SI
3 ; RUN: llc < %s -march=amdgcn -mcpu=hawaii -verify-machineinstrs | FileCheck %s  -check-prefix=GFX7
4 ; RUN: llc < %s -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs | FileCheck %s -check-prefix=GFX10
5 ; RUN: llc < %s -march=amdgcn -mcpu=gfx1030 -verify-machineinstrs | FileCheck %s -check-prefix=GFX1030
6 ; RUN: llc < %s -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs | FileCheck %s -check-prefix=GFX1100
8 ; RUN: llc < %s -global-isel -march=amdgcn -mcpu=verde -verify-machineinstrs | FileCheck %s -check-prefix=G_SI
9 ; RUN: llc < %s -global-isel -march=amdgcn -mcpu=hawaii -verify-machineinstrs | FileCheck %s  -check-prefix=G_GFX7
10 ; RUN: llc < %s -global-isel -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs | FileCheck %s -check-prefix=G_GFX10
11 ; RUN: llc < %s -global-isel -march=amdgcn -mcpu=gfx1030 -verify-machineinstrs | FileCheck %s -check-prefix=G_GFX1030
12 ; RUN: llc < %s -global-isel -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs | FileCheck %s -check-prefix=G_GFX1100
14 declare float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float, ptr addrspace(8), i32, i32, i32 immarg)
15 declare float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float, ptr addrspace(8), i32, i32, i32 immarg)
18 define amdgpu_kernel void @raw_ptr_buffer_atomic_min_noret_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {
19 ; SI-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
20 ; SI:       ; %bb.0: ; %main_body
21 ; SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
22 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
23 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
24 ; SI-NEXT:    v_mov_b32_e32 v0, s4
25 ; SI-NEXT:    v_mov_b32_e32 v1, s5
26 ; SI-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen
27 ; SI-NEXT:    s_endpgm
29 ; GFX7-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
30 ; GFX7:       ; %bb.0: ; %main_body
31 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
32 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
33 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
34 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
35 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
36 ; GFX7-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen
37 ; GFX7-NEXT:    s_endpgm
39 ; GFX10-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
40 ; GFX10:       ; %bb.0: ; %main_body
41 ; GFX10-NEXT:    s_clause 0x1
42 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
43 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
44 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
45 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
46 ; GFX10-NEXT:    v_mov_b32_e32 v1, s3
47 ; GFX10-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 0 offen
48 ; GFX10-NEXT:    s_endpgm
50 ; GFX1030-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
51 ; GFX1030:       ; %bb.0: ; %main_body
52 ; GFX1030-NEXT:    s_clause 0x1
53 ; GFX1030-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x34
54 ; GFX1030-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
55 ; GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
56 ; GFX1030-NEXT:    v_mov_b32_e32 v0, s4
57 ; GFX1030-NEXT:    v_mov_b32_e32 v1, s5
58 ; GFX1030-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen
59 ; GFX1030-NEXT:    s_endpgm
61 ; GFX1100-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
62 ; GFX1100:       ; %bb.0: ; %main_body
63 ; GFX1100-NEXT:    s_clause 0x1
64 ; GFX1100-NEXT:    s_load_b64 s[4:5], s[0:1], 0x34
65 ; GFX1100-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
66 ; GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
67 ; GFX1100-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
68 ; GFX1100-NEXT:    buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen
69 ; GFX1100-NEXT:    s_nop 0
70 ; GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
71 ; GFX1100-NEXT:    s_endpgm
73 ; G_SI-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
74 ; G_SI:       ; %bb.0: ; %main_body
75 ; G_SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
76 ; G_SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
77 ; G_SI-NEXT:    s_waitcnt lgkmcnt(0)
78 ; G_SI-NEXT:    v_mov_b32_e32 v0, s4
79 ; G_SI-NEXT:    v_mov_b32_e32 v1, s5
80 ; G_SI-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen
81 ; G_SI-NEXT:    s_endpgm
83 ; G_GFX7-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
84 ; G_GFX7:       ; %bb.0: ; %main_body
85 ; G_GFX7-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
86 ; G_GFX7-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
87 ; G_GFX7-NEXT:    s_waitcnt lgkmcnt(0)
88 ; G_GFX7-NEXT:    v_mov_b32_e32 v0, s4
89 ; G_GFX7-NEXT:    v_mov_b32_e32 v1, s5
90 ; G_GFX7-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen
91 ; G_GFX7-NEXT:    s_endpgm
93 ; G_GFX10-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
94 ; G_GFX10:       ; %bb.0: ; %main_body
95 ; G_GFX10-NEXT:    s_clause 0x1
96 ; G_GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
97 ; G_GFX10-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
98 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
99 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s2
100 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, s3
101 ; G_GFX10-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 0 offen
102 ; G_GFX10-NEXT:    s_endpgm
104 ; G_GFX1030-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
105 ; G_GFX1030:       ; %bb.0: ; %main_body
106 ; G_GFX1030-NEXT:    s_clause 0x1
107 ; G_GFX1030-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x34
108 ; G_GFX1030-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
109 ; G_GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
110 ; G_GFX1030-NEXT:    v_mov_b32_e32 v0, s4
111 ; G_GFX1030-NEXT:    v_mov_b32_e32 v1, s5
112 ; G_GFX1030-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen
113 ; G_GFX1030-NEXT:    s_endpgm
115 ; G_GFX1100-LABEL: raw_ptr_buffer_atomic_min_noret_f32:
116 ; G_GFX1100:       ; %bb.0: ; %main_body
117 ; G_GFX1100-NEXT:    s_clause 0x1
118 ; G_GFX1100-NEXT:    s_load_b64 s[4:5], s[0:1], 0x34
119 ; G_GFX1100-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
120 ; G_GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
121 ; G_GFX1100-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
122 ; G_GFX1100-NEXT:    buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen
123 ; G_GFX1100-NEXT:    s_nop 0
124 ; G_GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
125 ; G_GFX1100-NEXT:    s_endpgm
126 main_body:
127   %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)
128   ret void
131 define amdgpu_ps void @raw_ptr_buffer_atomic_min_rtn_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {
132 ; SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
133 ; SI:       ; %bb.0: ; %main_body
134 ; SI-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
135 ; SI-NEXT:    s_mov_b32 s3, 0xf000
136 ; SI-NEXT:    s_mov_b32 s2, -1
137 ; SI-NEXT:    s_waitcnt vmcnt(0)
138 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
139 ; SI-NEXT:    s_endpgm
141 ; GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
142 ; GFX7:       ; %bb.0: ; %main_body
143 ; GFX7-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
144 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
145 ; GFX7-NEXT:    s_mov_b32 s2, -1
146 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
147 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
148 ; GFX7-NEXT:    s_endpgm
150 ; GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
151 ; GFX10:       ; %bb.0: ; %main_body
152 ; GFX10-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
153 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
154 ; GFX10-NEXT:    global_store_dword v[0:1], v0, off
155 ; GFX10-NEXT:    s_endpgm
157 ; GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
158 ; GFX1030:       ; %bb.0: ; %main_body
159 ; GFX1030-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
160 ; GFX1030-NEXT:    s_waitcnt vmcnt(0)
161 ; GFX1030-NEXT:    global_store_dword v[0:1], v0, off
162 ; GFX1030-NEXT:    s_endpgm
164 ; GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
165 ; GFX1100:       ; %bb.0: ; %main_body
166 ; GFX1100-NEXT:    buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen glc
167 ; GFX1100-NEXT:    s_waitcnt vmcnt(0)
168 ; GFX1100-NEXT:    global_store_b32 v[0:1], v0, off
169 ; GFX1100-NEXT:    s_nop 0
170 ; GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
171 ; GFX1100-NEXT:    s_endpgm
173 ; G_SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
174 ; G_SI:       ; %bb.0: ; %main_body
175 ; G_SI-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
176 ; G_SI-NEXT:    s_mov_b32 s2, -1
177 ; G_SI-NEXT:    s_mov_b32 s3, 0xf000
178 ; G_SI-NEXT:    s_waitcnt vmcnt(0)
179 ; G_SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
180 ; G_SI-NEXT:    s_endpgm
182 ; G_GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
183 ; G_GFX7:       ; %bb.0: ; %main_body
184 ; G_GFX7-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
185 ; G_GFX7-NEXT:    s_mov_b32 s2, -1
186 ; G_GFX7-NEXT:    s_mov_b32 s3, 0xf000
187 ; G_GFX7-NEXT:    s_waitcnt vmcnt(0)
188 ; G_GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
189 ; G_GFX7-NEXT:    s_endpgm
191 ; G_GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
192 ; G_GFX10:       ; %bb.0: ; %main_body
193 ; G_GFX10-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
194 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
195 ; G_GFX10-NEXT:    global_store_dword v[0:1], v0, off
196 ; G_GFX10-NEXT:    s_endpgm
198 ; G_GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
199 ; G_GFX1030:       ; %bb.0: ; %main_body
200 ; G_GFX1030-NEXT:    buffer_atomic_fmin v0, v1, s[0:3], 0 offen glc
201 ; G_GFX1030-NEXT:    s_waitcnt vmcnt(0)
202 ; G_GFX1030-NEXT:    global_store_dword v[0:1], v0, off
203 ; G_GFX1030-NEXT:    s_endpgm
205 ; G_GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32:
206 ; G_GFX1100:       ; %bb.0: ; %main_body
207 ; G_GFX1100-NEXT:    buffer_atomic_min_f32 v0, v1, s[0:3], 0 offen glc
208 ; G_GFX1100-NEXT:    s_waitcnt vmcnt(0)
209 ; G_GFX1100-NEXT:    global_store_b32 v[0:1], v0, off
210 ; G_GFX1100-NEXT:    s_nop 0
211 ; G_GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
212 ; G_GFX1100-NEXT:    s_endpgm
213 main_body:
214   %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)
215   store float %ret, ptr addrspace(1) undef
216   ret void
219 define amdgpu_kernel void @raw_ptr_buffer_atomic_min_rtn_f32_off4_slc(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex, ptr addrspace(3) %out) {
220 ; SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
221 ; SI:       ; %bb.0: ; %main_body
222 ; SI-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0xd
223 ; SI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
224 ; SI-NEXT:    s_load_dword s0, s[0:1], 0xf
225 ; SI-NEXT:    s_mov_b32 m0, -1
226 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
227 ; SI-NEXT:    v_mov_b32_e32 v0, s2
228 ; SI-NEXT:    v_mov_b32_e32 v1, s3
229 ; SI-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
230 ; SI-NEXT:    v_mov_b32_e32 v1, s0
231 ; SI-NEXT:    s_waitcnt vmcnt(0)
232 ; SI-NEXT:    ds_write_b32 v1, v0
233 ; SI-NEXT:    s_endpgm
235 ; GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
236 ; GFX7:       ; %bb.0: ; %main_body
237 ; GFX7-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0xd
238 ; GFX7-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
239 ; GFX7-NEXT:    s_load_dword s0, s[0:1], 0xf
240 ; GFX7-NEXT:    s_mov_b32 m0, -1
241 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
242 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
243 ; GFX7-NEXT:    v_mov_b32_e32 v1, s3
244 ; GFX7-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
245 ; GFX7-NEXT:    v_mov_b32_e32 v1, s0
246 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
247 ; GFX7-NEXT:    ds_write_b32 v1, v0
248 ; GFX7-NEXT:    s_endpgm
250 ; GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
251 ; GFX10:       ; %bb.0: ; %main_body
252 ; GFX10-NEXT:    s_clause 0x1
253 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
254 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
255 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
256 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
257 ; GFX10-NEXT:    v_mov_b32_e32 v1, s3
258 ; GFX10-NEXT:    s_load_dword s0, s[0:1], 0x3c
259 ; GFX10-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
260 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
261 ; GFX10-NEXT:    v_mov_b32_e32 v1, s0
262 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
263 ; GFX10-NEXT:    ds_write_b32 v1, v0
264 ; GFX10-NEXT:    s_endpgm
266 ; GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
267 ; GFX1030:       ; %bb.0: ; %main_body
268 ; GFX1030-NEXT:    s_clause 0x2
269 ; GFX1030-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
270 ; GFX1030-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
271 ; GFX1030-NEXT:    s_load_dword s0, s[0:1], 0x3c
272 ; GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
273 ; GFX1030-NEXT:    v_mov_b32_e32 v0, s2
274 ; GFX1030-NEXT:    v_mov_b32_e32 v1, s3
275 ; GFX1030-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
276 ; GFX1030-NEXT:    v_mov_b32_e32 v1, s0
277 ; GFX1030-NEXT:    s_waitcnt vmcnt(0)
278 ; GFX1030-NEXT:    ds_write_b32 v1, v0
279 ; GFX1030-NEXT:    s_endpgm
281 ; GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
282 ; GFX1100:       ; %bb.0: ; %main_body
283 ; GFX1100-NEXT:    s_clause 0x2
284 ; GFX1100-NEXT:    s_load_b64 s[2:3], s[0:1], 0x34
285 ; GFX1100-NEXT:    s_load_b128 s[4:7], s[0:1], 0x24
286 ; GFX1100-NEXT:    s_load_b32 s0, s[0:1], 0x3c
287 ; GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
288 ; GFX1100-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
289 ; GFX1100-NEXT:    buffer_atomic_min_f32 v0, v1, s[4:7], 4 offen glc slc
290 ; GFX1100-NEXT:    v_mov_b32_e32 v1, s0
291 ; GFX1100-NEXT:    s_waitcnt vmcnt(0)
292 ; GFX1100-NEXT:    ds_store_b32 v1, v0
293 ; GFX1100-NEXT:    s_endpgm
295 ; G_SI-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
296 ; G_SI:       ; %bb.0: ; %main_body
297 ; G_SI-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0xd
298 ; G_SI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
299 ; G_SI-NEXT:    s_load_dword s0, s[0:1], 0xf
300 ; G_SI-NEXT:    s_mov_b32 m0, -1
301 ; G_SI-NEXT:    s_waitcnt lgkmcnt(0)
302 ; G_SI-NEXT:    v_mov_b32_e32 v0, s2
303 ; G_SI-NEXT:    v_mov_b32_e32 v1, s3
304 ; G_SI-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
305 ; G_SI-NEXT:    v_mov_b32_e32 v1, s0
306 ; G_SI-NEXT:    s_waitcnt vmcnt(0)
307 ; G_SI-NEXT:    ds_write_b32 v1, v0
308 ; G_SI-NEXT:    s_endpgm
310 ; G_GFX7-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
311 ; G_GFX7:       ; %bb.0: ; %main_body
312 ; G_GFX7-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0xd
313 ; G_GFX7-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
314 ; G_GFX7-NEXT:    s_load_dword s0, s[0:1], 0xf
315 ; G_GFX7-NEXT:    s_mov_b32 m0, -1
316 ; G_GFX7-NEXT:    s_waitcnt lgkmcnt(0)
317 ; G_GFX7-NEXT:    v_mov_b32_e32 v0, s2
318 ; G_GFX7-NEXT:    v_mov_b32_e32 v1, s3
319 ; G_GFX7-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
320 ; G_GFX7-NEXT:    v_mov_b32_e32 v1, s0
321 ; G_GFX7-NEXT:    s_waitcnt vmcnt(0)
322 ; G_GFX7-NEXT:    ds_write_b32 v1, v0
323 ; G_GFX7-NEXT:    s_endpgm
325 ; G_GFX10-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
326 ; G_GFX10:       ; %bb.0: ; %main_body
327 ; G_GFX10-NEXT:    s_clause 0x1
328 ; G_GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
329 ; G_GFX10-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
330 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
331 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s2
332 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, s3
333 ; G_GFX10-NEXT:    s_load_dword s0, s[0:1], 0x3c
334 ; G_GFX10-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
335 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
336 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, s0
337 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
338 ; G_GFX10-NEXT:    ds_write_b32 v1, v0
339 ; G_GFX10-NEXT:    s_endpgm
341 ; G_GFX1030-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
342 ; G_GFX1030:       ; %bb.0: ; %main_body
343 ; G_GFX1030-NEXT:    s_clause 0x2
344 ; G_GFX1030-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
345 ; G_GFX1030-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
346 ; G_GFX1030-NEXT:    s_load_dword s0, s[0:1], 0x3c
347 ; G_GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
348 ; G_GFX1030-NEXT:    v_mov_b32_e32 v0, s2
349 ; G_GFX1030-NEXT:    v_mov_b32_e32 v1, s3
350 ; G_GFX1030-NEXT:    buffer_atomic_fmin v0, v1, s[4:7], 4 offen glc slc
351 ; G_GFX1030-NEXT:    v_mov_b32_e32 v1, s0
352 ; G_GFX1030-NEXT:    s_waitcnt vmcnt(0)
353 ; G_GFX1030-NEXT:    ds_write_b32 v1, v0
354 ; G_GFX1030-NEXT:    s_endpgm
356 ; G_GFX1100-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
357 ; G_GFX1100:       ; %bb.0: ; %main_body
358 ; G_GFX1100-NEXT:    s_clause 0x2
359 ; G_GFX1100-NEXT:    s_load_b64 s[2:3], s[0:1], 0x34
360 ; G_GFX1100-NEXT:    s_load_b128 s[4:7], s[0:1], 0x24
361 ; G_GFX1100-NEXT:    s_load_b32 s0, s[0:1], 0x3c
362 ; G_GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
363 ; G_GFX1100-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
364 ; G_GFX1100-NEXT:    buffer_atomic_min_f32 v0, v1, s[4:7], 4 offen glc slc
365 ; G_GFX1100-NEXT:    v_mov_b32_e32 v1, s0
366 ; G_GFX1100-NEXT:    s_waitcnt vmcnt(0)
367 ; G_GFX1100-NEXT:    ds_store_b32 v1, v0
368 ; G_GFX1100-NEXT:    s_endpgm
369 ; GFX1010-LABEL: raw_ptr_buffer_atomic_min_rtn_f32_off4_slc:
370 main_body:
371   %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmin.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 4, i32 2)
372   store float %ret, ptr addrspace(3) %out, align 8
373   ret void
376 define amdgpu_kernel void @raw_ptr_buffer_atomic_max_noret_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {
377 ; SI-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
378 ; SI:       ; %bb.0: ; %main_body
379 ; SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
380 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
381 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
382 ; SI-NEXT:    v_mov_b32_e32 v0, s4
383 ; SI-NEXT:    v_mov_b32_e32 v1, s5
384 ; SI-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen
385 ; SI-NEXT:    s_endpgm
387 ; GFX7-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
388 ; GFX7:       ; %bb.0: ; %main_body
389 ; GFX7-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
390 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
391 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
392 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
393 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
394 ; GFX7-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen
395 ; GFX7-NEXT:    s_endpgm
397 ; GFX10-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
398 ; GFX10:       ; %bb.0: ; %main_body
399 ; GFX10-NEXT:    s_clause 0x1
400 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
401 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
402 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
403 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
404 ; GFX10-NEXT:    v_mov_b32_e32 v1, s3
405 ; GFX10-NEXT:    buffer_atomic_fmax v0, v1, s[4:7], 0 offen
406 ; GFX10-NEXT:    s_endpgm
408 ; GFX1030-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
409 ; GFX1030:       ; %bb.0: ; %main_body
410 ; GFX1030-NEXT:    s_clause 0x1
411 ; GFX1030-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x34
412 ; GFX1030-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
413 ; GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
414 ; GFX1030-NEXT:    v_mov_b32_e32 v0, s4
415 ; GFX1030-NEXT:    v_mov_b32_e32 v1, s5
416 ; GFX1030-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen
417 ; GFX1030-NEXT:    s_endpgm
419 ; GFX1100-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
420 ; GFX1100:       ; %bb.0: ; %main_body
421 ; GFX1100-NEXT:    s_clause 0x1
422 ; GFX1100-NEXT:    s_load_b64 s[4:5], s[0:1], 0x34
423 ; GFX1100-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
424 ; GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
425 ; GFX1100-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
426 ; GFX1100-NEXT:    buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen
427 ; GFX1100-NEXT:    s_nop 0
428 ; GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
429 ; GFX1100-NEXT:    s_endpgm
431 ; G_SI-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
432 ; G_SI:       ; %bb.0: ; %main_body
433 ; G_SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
434 ; G_SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
435 ; G_SI-NEXT:    s_waitcnt lgkmcnt(0)
436 ; G_SI-NEXT:    v_mov_b32_e32 v0, s4
437 ; G_SI-NEXT:    v_mov_b32_e32 v1, s5
438 ; G_SI-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen
439 ; G_SI-NEXT:    s_endpgm
441 ; G_GFX7-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
442 ; G_GFX7:       ; %bb.0: ; %main_body
443 ; G_GFX7-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0xd
444 ; G_GFX7-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
445 ; G_GFX7-NEXT:    s_waitcnt lgkmcnt(0)
446 ; G_GFX7-NEXT:    v_mov_b32_e32 v0, s4
447 ; G_GFX7-NEXT:    v_mov_b32_e32 v1, s5
448 ; G_GFX7-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen
449 ; G_GFX7-NEXT:    s_endpgm
451 ; G_GFX10-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
452 ; G_GFX10:       ; %bb.0: ; %main_body
453 ; G_GFX10-NEXT:    s_clause 0x1
454 ; G_GFX10-NEXT:    s_load_dwordx2 s[2:3], s[0:1], 0x34
455 ; G_GFX10-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
456 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
457 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s2
458 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, s3
459 ; G_GFX10-NEXT:    buffer_atomic_fmax v0, v1, s[4:7], 0 offen
460 ; G_GFX10-NEXT:    s_endpgm
462 ; G_GFX1030-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
463 ; G_GFX1030:       ; %bb.0: ; %main_body
464 ; G_GFX1030-NEXT:    s_clause 0x1
465 ; G_GFX1030-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x34
466 ; G_GFX1030-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
467 ; G_GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
468 ; G_GFX1030-NEXT:    v_mov_b32_e32 v0, s4
469 ; G_GFX1030-NEXT:    v_mov_b32_e32 v1, s5
470 ; G_GFX1030-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen
471 ; G_GFX1030-NEXT:    s_endpgm
473 ; G_GFX1100-LABEL: raw_ptr_buffer_atomic_max_noret_f32:
474 ; G_GFX1100:       ; %bb.0: ; %main_body
475 ; G_GFX1100-NEXT:    s_clause 0x1
476 ; G_GFX1100-NEXT:    s_load_b64 s[4:5], s[0:1], 0x34
477 ; G_GFX1100-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
478 ; G_GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
479 ; G_GFX1100-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
480 ; G_GFX1100-NEXT:    buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen
481 ; G_GFX1100-NEXT:    s_nop 0
482 ; G_GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
483 ; G_GFX1100-NEXT:    s_endpgm
484 main_body:
485   %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)
486   ret void
489 define amdgpu_ps void @raw_ptr_buffer_atomic_max_rtn_f32(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex) {
490 ; SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
491 ; SI:       ; %bb.0: ; %main_body
492 ; SI-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
493 ; SI-NEXT:    s_mov_b32 s3, 0xf000
494 ; SI-NEXT:    s_mov_b32 s2, -1
495 ; SI-NEXT:    s_waitcnt vmcnt(0)
496 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
497 ; SI-NEXT:    s_endpgm
499 ; GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
500 ; GFX7:       ; %bb.0: ; %main_body
501 ; GFX7-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
502 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
503 ; GFX7-NEXT:    s_mov_b32 s2, -1
504 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
505 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
506 ; GFX7-NEXT:    s_endpgm
508 ; GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
509 ; GFX10:       ; %bb.0: ; %main_body
510 ; GFX10-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
511 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
512 ; GFX10-NEXT:    global_store_dword v[0:1], v0, off
513 ; GFX10-NEXT:    s_endpgm
515 ; GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
516 ; GFX1030:       ; %bb.0: ; %main_body
517 ; GFX1030-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
518 ; GFX1030-NEXT:    s_waitcnt vmcnt(0)
519 ; GFX1030-NEXT:    global_store_dword v[0:1], v0, off
520 ; GFX1030-NEXT:    s_endpgm
522 ; GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
523 ; GFX1100:       ; %bb.0: ; %main_body
524 ; GFX1100-NEXT:    buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen glc
525 ; GFX1100-NEXT:    s_waitcnt vmcnt(0)
526 ; GFX1100-NEXT:    global_store_b32 v[0:1], v0, off
527 ; GFX1100-NEXT:    s_nop 0
528 ; GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
529 ; GFX1100-NEXT:    s_endpgm
531 ; G_SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
532 ; G_SI:       ; %bb.0: ; %main_body
533 ; G_SI-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
534 ; G_SI-NEXT:    s_mov_b32 s2, -1
535 ; G_SI-NEXT:    s_mov_b32 s3, 0xf000
536 ; G_SI-NEXT:    s_waitcnt vmcnt(0)
537 ; G_SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
538 ; G_SI-NEXT:    s_endpgm
540 ; G_GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
541 ; G_GFX7:       ; %bb.0: ; %main_body
542 ; G_GFX7-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
543 ; G_GFX7-NEXT:    s_mov_b32 s2, -1
544 ; G_GFX7-NEXT:    s_mov_b32 s3, 0xf000
545 ; G_GFX7-NEXT:    s_waitcnt vmcnt(0)
546 ; G_GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
547 ; G_GFX7-NEXT:    s_endpgm
549 ; G_GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
550 ; G_GFX10:       ; %bb.0: ; %main_body
551 ; G_GFX10-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
552 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
553 ; G_GFX10-NEXT:    global_store_dword v[0:1], v0, off
554 ; G_GFX10-NEXT:    s_endpgm
556 ; G_GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
557 ; G_GFX1030:       ; %bb.0: ; %main_body
558 ; G_GFX1030-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 0 offen glc
559 ; G_GFX1030-NEXT:    s_waitcnt vmcnt(0)
560 ; G_GFX1030-NEXT:    global_store_dword v[0:1], v0, off
561 ; G_GFX1030-NEXT:    s_endpgm
563 ; G_GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32:
564 ; G_GFX1100:       ; %bb.0: ; %main_body
565 ; G_GFX1100-NEXT:    buffer_atomic_max_f32 v0, v1, s[0:3], 0 offen glc
566 ; G_GFX1100-NEXT:    s_waitcnt vmcnt(0)
567 ; G_GFX1100-NEXT:    global_store_b32 v[0:1], v0, off
568 ; G_GFX1100-NEXT:    s_nop 0
569 ; G_GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
570 ; G_GFX1100-NEXT:    s_endpgm
571 main_body:
572   %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 0, i32 0)
573   store float %ret, ptr addrspace(1) undef
574   ret void
577 define amdgpu_kernel void @raw_ptr_buffer_atomic_max_rtn_f32_off4_slc(ptr addrspace(8) inreg %rsrc, float %data, i32 %vindex, ptr addrspace(1) %out) {
578 ; SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
579 ; SI:       ; %bb.0: ; %main_body
580 ; SI-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x9
581 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
582 ; SI-NEXT:    v_mov_b32_e32 v0, s4
583 ; SI-NEXT:    v_mov_b32_e32 v1, s5
584 ; SI-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
585 ; SI-NEXT:    s_mov_b32 s3, 0xf000
586 ; SI-NEXT:    s_mov_b32 s2, -1
587 ; SI-NEXT:    s_mov_b32 s0, s6
588 ; SI-NEXT:    s_mov_b32 s1, s7
589 ; SI-NEXT:    s_waitcnt vmcnt(0)
590 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
591 ; SI-NEXT:    s_endpgm
593 ; GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
594 ; GFX7:       ; %bb.0: ; %main_body
595 ; GFX7-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x9
596 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
597 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
598 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
599 ; GFX7-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
600 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
601 ; GFX7-NEXT:    s_mov_b32 s2, -1
602 ; GFX7-NEXT:    s_mov_b32 s0, s6
603 ; GFX7-NEXT:    s_mov_b32 s1, s7
604 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
605 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
606 ; GFX7-NEXT:    s_endpgm
608 ; GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
609 ; GFX10:       ; %bb.0: ; %main_body
610 ; GFX10-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x24
611 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
612 ; GFX10-NEXT:    v_mov_b32_e32 v0, s4
613 ; GFX10-NEXT:    v_mov_b32_e32 v1, s5
614 ; GFX10-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
615 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
616 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
617 ; GFX10-NEXT:    global_store_dword v1, v0, s[6:7]
618 ; GFX10-NEXT:    s_endpgm
620 ; GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
621 ; GFX1030:       ; %bb.0: ; %main_body
622 ; GFX1030-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x24
623 ; GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
624 ; GFX1030-NEXT:    v_mov_b32_e32 v0, s4
625 ; GFX1030-NEXT:    v_mov_b32_e32 v1, s5
626 ; GFX1030-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
627 ; GFX1030-NEXT:    v_mov_b32_e32 v1, 0
628 ; GFX1030-NEXT:    s_waitcnt vmcnt(0)
629 ; GFX1030-NEXT:    global_store_dword v1, v0, s[6:7]
630 ; GFX1030-NEXT:    s_endpgm
632 ; GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
633 ; GFX1100:       ; %bb.0: ; %main_body
634 ; GFX1100-NEXT:    s_load_b256 s[0:7], s[0:1], 0x24
635 ; GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
636 ; GFX1100-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
637 ; GFX1100-NEXT:    buffer_atomic_max_f32 v0, v1, s[0:3], 4 offen glc slc
638 ; GFX1100-NEXT:    v_mov_b32_e32 v1, 0
639 ; GFX1100-NEXT:    s_waitcnt vmcnt(0)
640 ; GFX1100-NEXT:    global_store_b32 v1, v0, s[6:7]
641 ; GFX1100-NEXT:    s_nop 0
642 ; GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
643 ; GFX1100-NEXT:    s_endpgm
645 ; G_SI-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
646 ; G_SI:       ; %bb.0: ; %main_body
647 ; G_SI-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x9
648 ; G_SI-NEXT:    s_waitcnt lgkmcnt(0)
649 ; G_SI-NEXT:    v_mov_b32_e32 v0, s4
650 ; G_SI-NEXT:    v_mov_b32_e32 v1, s5
651 ; G_SI-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
652 ; G_SI-NEXT:    s_mov_b32 s2, -1
653 ; G_SI-NEXT:    s_mov_b32 s3, 0xf000
654 ; G_SI-NEXT:    s_mov_b64 s[0:1], s[6:7]
655 ; G_SI-NEXT:    s_waitcnt vmcnt(0)
656 ; G_SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
657 ; G_SI-NEXT:    s_endpgm
659 ; G_GFX7-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
660 ; G_GFX7:       ; %bb.0: ; %main_body
661 ; G_GFX7-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x9
662 ; G_GFX7-NEXT:    s_waitcnt lgkmcnt(0)
663 ; G_GFX7-NEXT:    v_mov_b32_e32 v0, s4
664 ; G_GFX7-NEXT:    v_mov_b32_e32 v1, s5
665 ; G_GFX7-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
666 ; G_GFX7-NEXT:    s_mov_b32 s2, -1
667 ; G_GFX7-NEXT:    s_mov_b32 s3, 0xf000
668 ; G_GFX7-NEXT:    s_mov_b64 s[0:1], s[6:7]
669 ; G_GFX7-NEXT:    s_waitcnt vmcnt(0)
670 ; G_GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
671 ; G_GFX7-NEXT:    s_endpgm
673 ; G_GFX10-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
674 ; G_GFX10:       ; %bb.0: ; %main_body
675 ; G_GFX10-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x24
676 ; G_GFX10-NEXT:    s_waitcnt lgkmcnt(0)
677 ; G_GFX10-NEXT:    v_mov_b32_e32 v0, s4
678 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, s5
679 ; G_GFX10-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
680 ; G_GFX10-NEXT:    v_mov_b32_e32 v1, 0
681 ; G_GFX10-NEXT:    s_waitcnt vmcnt(0)
682 ; G_GFX10-NEXT:    global_store_dword v1, v0, s[6:7]
683 ; G_GFX10-NEXT:    s_endpgm
685 ; G_GFX1030-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
686 ; G_GFX1030:       ; %bb.0: ; %main_body
687 ; G_GFX1030-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x24
688 ; G_GFX1030-NEXT:    s_waitcnt lgkmcnt(0)
689 ; G_GFX1030-NEXT:    v_mov_b32_e32 v0, s4
690 ; G_GFX1030-NEXT:    v_mov_b32_e32 v1, s5
691 ; G_GFX1030-NEXT:    buffer_atomic_fmax v0, v1, s[0:3], 4 offen glc slc
692 ; G_GFX1030-NEXT:    v_mov_b32_e32 v1, 0
693 ; G_GFX1030-NEXT:    s_waitcnt vmcnt(0)
694 ; G_GFX1030-NEXT:    global_store_dword v1, v0, s[6:7]
695 ; G_GFX1030-NEXT:    s_endpgm
697 ; G_GFX1100-LABEL: raw_ptr_buffer_atomic_max_rtn_f32_off4_slc:
698 ; G_GFX1100:       ; %bb.0: ; %main_body
699 ; G_GFX1100-NEXT:    s_load_b256 s[0:7], s[0:1], 0x24
700 ; G_GFX1100-NEXT:    s_waitcnt lgkmcnt(0)
701 ; G_GFX1100-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
702 ; G_GFX1100-NEXT:    buffer_atomic_max_f32 v0, v1, s[0:3], 4 offen glc slc
703 ; G_GFX1100-NEXT:    v_mov_b32_e32 v1, 0
704 ; G_GFX1100-NEXT:    s_waitcnt vmcnt(0)
705 ; G_GFX1100-NEXT:    global_store_b32 v1, v0, s[6:7]
706 ; G_GFX1100-NEXT:    s_nop 0
707 ; G_GFX1100-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
708 ; G_GFX1100-NEXT:    s_endpgm
709 main_body:
710   %ret = call float @llvm.amdgcn.raw.ptr.buffer.atomic.fmax.f32(float %data, ptr addrspace(8) %rsrc, i32 %vindex, i32 4, i32 2)
711   store float %ret, ptr addrspace(1) %out, align 8
712   ret void