[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / global-saddr-store.ll
blobfbe55ae5c4e816fed40fc5d4793a00f218b1e3bc
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9 %s
3 ; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GCN,GFX10 %s
4 ; RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -mattr=+wavefrontsize64 < %s | FileCheck -check-prefixes=GFX11 %s
6 ; Test using saddr addressing mode of global_*store_* flat instructions.
8 define amdgpu_ps void @global_store_saddr_i8_zext_vgpr(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr, i8 %data) {
9 ; GCN-LABEL: global_store_saddr_i8_zext_vgpr:
10 ; GCN:       ; %bb.0:
11 ; GCN-NEXT:    global_load_dword v0, v[0:1], off
12 ; GCN-NEXT:    s_waitcnt vmcnt(0)
13 ; GCN-NEXT:    global_store_byte v0, v2, s[2:3]
14 ; GCN-NEXT:    s_endpgm
16 ; GFX11-LABEL: global_store_saddr_i8_zext_vgpr:
17 ; GFX11:       ; %bb.0:
18 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
19 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
20 ; GFX11-NEXT:    global_store_b8 v0, v2, s[2:3]
21 ; GFX11-NEXT:    s_nop 0
22 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
23 ; GFX11-NEXT:    s_endpgm
24   %voffset = load i32, ptr addrspace(1) %voffset.ptr
25   %zext.offset = zext i32 %voffset to i64
26   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
27   store i8 %data, ptr addrspace(1) %gep0
28   ret void
31 ; Maximum positive offset on gfx10
32 define amdgpu_ps void @global_store_saddr_i8_zext_vgpr_offset_2047(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr, i8 %data) {
33 ; GCN-LABEL: global_store_saddr_i8_zext_vgpr_offset_2047:
34 ; GCN:       ; %bb.0:
35 ; GCN-NEXT:    global_load_dword v0, v[0:1], off
36 ; GCN-NEXT:    s_waitcnt vmcnt(0)
37 ; GCN-NEXT:    global_store_byte v0, v2, s[2:3] offset:2047
38 ; GCN-NEXT:    s_endpgm
40 ; GFX11-LABEL: global_store_saddr_i8_zext_vgpr_offset_2047:
41 ; GFX11:       ; %bb.0:
42 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
43 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
44 ; GFX11-NEXT:    global_store_b8 v0, v2, s[2:3] offset:2047
45 ; GFX11-NEXT:    s_nop 0
46 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
47 ; GFX11-NEXT:    s_endpgm
48   %voffset = load i32, ptr addrspace(1) %voffset.ptr
49   %zext.offset = zext i32 %voffset to i64
50   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
51   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 2047
52   store i8 %data, ptr addrspace(1) %gep1
53   ret void
56 ; Maximum negative offset on gfx10
57 define amdgpu_ps void @global_store_saddr_i8_zext_vgpr_offset_neg2048(ptr addrspace(1) inreg %sbase, ptr addrspace(1) %voffset.ptr, i8 %data) {
58 ; GCN-LABEL: global_store_saddr_i8_zext_vgpr_offset_neg2048:
59 ; GCN:       ; %bb.0:
60 ; GCN-NEXT:    global_load_dword v0, v[0:1], off
61 ; GCN-NEXT:    s_waitcnt vmcnt(0)
62 ; GCN-NEXT:    global_store_byte v0, v2, s[2:3] offset:-2048
63 ; GCN-NEXT:    s_endpgm
65 ; GFX11-LABEL: global_store_saddr_i8_zext_vgpr_offset_neg2048:
66 ; GFX11:       ; %bb.0:
67 ; GFX11-NEXT:    global_load_b32 v0, v[0:1], off
68 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
69 ; GFX11-NEXT:    global_store_b8 v0, v2, s[2:3] offset:-2048
70 ; GFX11-NEXT:    s_nop 0
71 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
72 ; GFX11-NEXT:    s_endpgm
73   %voffset = load i32, ptr addrspace(1) %voffset.ptr
74   %zext.offset = zext i32 %voffset to i64
75   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
76   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -2048
77   store i8 %data, ptr addrspace(1) %gep1
78   ret void
81 ; --------------------------------------------------------------------------------
82 ; Uniformity edge cases
83 ; --------------------------------------------------------------------------------
85 @ptr.in.lds = internal addrspace(3) global ptr addrspace(1) undef
87 ; Base pointer is uniform, but also in VGPRs
88 define amdgpu_ps void @global_store_saddr_uniform_ptr_in_vgprs(i32 %voffset, i8 %data) {
89 ; GFX9-LABEL: global_store_saddr_uniform_ptr_in_vgprs:
90 ; GFX9:       ; %bb.0:
91 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
92 ; GFX9-NEXT:    ds_read_b64 v[2:3], v2
93 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
94 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v2
95 ; GFX9-NEXT:    v_readfirstlane_b32 s1, v3
96 ; GFX9-NEXT:    s_nop 4
97 ; GFX9-NEXT:    global_store_byte v0, v1, s[0:1]
98 ; GFX9-NEXT:    s_endpgm
100 ; GFX10-LABEL: global_store_saddr_uniform_ptr_in_vgprs:
101 ; GFX10:       ; %bb.0:
102 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
103 ; GFX10-NEXT:    ds_read_b64 v[2:3], v2
104 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
105 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v2
106 ; GFX10-NEXT:    v_readfirstlane_b32 s1, v3
107 ; GFX10-NEXT:    global_store_byte v0, v1, s[0:1]
108 ; GFX10-NEXT:    s_endpgm
110 ; GFX11-LABEL: global_store_saddr_uniform_ptr_in_vgprs:
111 ; GFX11:       ; %bb.0:
112 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
113 ; GFX11-NEXT:    ds_load_b64 v[2:3], v2
114 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
115 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v2
116 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v3
117 ; GFX11-NEXT:    global_store_b8 v0, v1, s[0:1]
118 ; GFX11-NEXT:    s_nop 0
119 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
120 ; GFX11-NEXT:    s_endpgm
121   %sbase = load ptr addrspace(1), ptr addrspace(3) @ptr.in.lds
122   %zext.offset = zext i32 %voffset to i64
123   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
124   store i8 %data, ptr addrspace(1) %gep0
125   ret void
128 ; Base pointer is uniform, but also in VGPRs, with imm offset
129 define amdgpu_ps void @global_store_saddr_uniform_ptr_in_vgprs_immoffset(i32 %voffset, i8 %data) {
130 ; GFX9-LABEL: global_store_saddr_uniform_ptr_in_vgprs_immoffset:
131 ; GFX9:       ; %bb.0:
132 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
133 ; GFX9-NEXT:    ds_read_b64 v[2:3], v2
134 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
135 ; GFX9-NEXT:    v_readfirstlane_b32 s0, v2
136 ; GFX9-NEXT:    v_readfirstlane_b32 s1, v3
137 ; GFX9-NEXT:    s_nop 4
138 ; GFX9-NEXT:    global_store_byte v0, v1, s[0:1] offset:-120
139 ; GFX9-NEXT:    s_endpgm
141 ; GFX10-LABEL: global_store_saddr_uniform_ptr_in_vgprs_immoffset:
142 ; GFX10:       ; %bb.0:
143 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
144 ; GFX10-NEXT:    ds_read_b64 v[2:3], v2
145 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
146 ; GFX10-NEXT:    v_readfirstlane_b32 s0, v2
147 ; GFX10-NEXT:    v_readfirstlane_b32 s1, v3
148 ; GFX10-NEXT:    global_store_byte v0, v1, s[0:1] offset:-120
149 ; GFX10-NEXT:    s_endpgm
151 ; GFX11-LABEL: global_store_saddr_uniform_ptr_in_vgprs_immoffset:
152 ; GFX11:       ; %bb.0:
153 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
154 ; GFX11-NEXT:    ds_load_b64 v[2:3], v2
155 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
156 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v2
157 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v3
158 ; GFX11-NEXT:    global_store_b8 v0, v1, s[0:1] offset:-120
159 ; GFX11-NEXT:    s_nop 0
160 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
161 ; GFX11-NEXT:    s_endpgm
162   %sbase = load ptr addrspace(1), ptr addrspace(3) @ptr.in.lds
163   %zext.offset = zext i32 %voffset to i64
164   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
165   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -120
166   store i8 %data, ptr addrspace(1) %gep1
167   ret void
170 ; --------------------------------------------------------------------------------
171 ; Stress various type stores
172 ; --------------------------------------------------------------------------------
174 define amdgpu_ps void @global_store_saddr_i16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, i16 %data) {
175 ; GCN-LABEL: global_store_saddr_i16_zext_vgpr:
176 ; GCN:       ; %bb.0:
177 ; GCN-NEXT:    global_store_short v0, v1, s[2:3]
178 ; GCN-NEXT:    s_endpgm
180 ; GFX11-LABEL: global_store_saddr_i16_zext_vgpr:
181 ; GFX11:       ; %bb.0:
182 ; GFX11-NEXT:    global_store_b16 v0, v1, s[2:3]
183 ; GFX11-NEXT:    s_nop 0
184 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
185 ; GFX11-NEXT:    s_endpgm
186   %zext.offset = zext i32 %voffset to i64
187   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
188   store i16 %data, ptr addrspace(1) %gep0
189   ret void
192 define amdgpu_ps void @global_store_saddr_i16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i16 %data) {
193 ; GCN-LABEL: global_store_saddr_i16_zext_vgpr_offset_neg128:
194 ; GCN:       ; %bb.0:
195 ; GCN-NEXT:    global_store_short v0, v1, s[2:3] offset:-128
196 ; GCN-NEXT:    s_endpgm
198 ; GFX11-LABEL: global_store_saddr_i16_zext_vgpr_offset_neg128:
199 ; GFX11:       ; %bb.0:
200 ; GFX11-NEXT:    global_store_b16 v0, v1, s[2:3] offset:-128
201 ; GFX11-NEXT:    s_nop 0
202 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
203 ; GFX11-NEXT:    s_endpgm
204   %zext.offset = zext i32 %voffset to i64
205   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
206   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
207   store i16 %data, ptr addrspace(1) %gep1
208   ret void
211 define amdgpu_ps void @global_store_saddr_f16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, half %data) {
212 ; GCN-LABEL: global_store_saddr_f16_zext_vgpr:
213 ; GCN:       ; %bb.0:
214 ; GCN-NEXT:    global_store_short v0, v1, s[2:3]
215 ; GCN-NEXT:    s_endpgm
217 ; GFX11-LABEL: global_store_saddr_f16_zext_vgpr:
218 ; GFX11:       ; %bb.0:
219 ; GFX11-NEXT:    global_store_b16 v0, v1, s[2:3]
220 ; GFX11-NEXT:    s_nop 0
221 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
222 ; GFX11-NEXT:    s_endpgm
223   %zext.offset = zext i32 %voffset to i64
224   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
225   store half %data, ptr addrspace(1) %gep0
226   ret void
229 define amdgpu_ps void @global_store_saddr_f16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, half %data) {
230 ; GCN-LABEL: global_store_saddr_f16_zext_vgpr_offset_neg128:
231 ; GCN:       ; %bb.0:
232 ; GCN-NEXT:    global_store_short v0, v1, s[2:3] offset:-128
233 ; GCN-NEXT:    s_endpgm
235 ; GFX11-LABEL: global_store_saddr_f16_zext_vgpr_offset_neg128:
236 ; GFX11:       ; %bb.0:
237 ; GFX11-NEXT:    global_store_b16 v0, v1, s[2:3] offset:-128
238 ; GFX11-NEXT:    s_nop 0
239 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
240 ; GFX11-NEXT:    s_endpgm
241   %zext.offset = zext i32 %voffset to i64
242   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
243   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
244   store half %data, ptr addrspace(1) %gep1
245   ret void
248 define amdgpu_ps void @global_store_saddr_i32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {
249 ; GCN-LABEL: global_store_saddr_i32_zext_vgpr:
250 ; GCN:       ; %bb.0:
251 ; GCN-NEXT:    global_store_dword v0, v1, s[2:3]
252 ; GCN-NEXT:    s_endpgm
254 ; GFX11-LABEL: global_store_saddr_i32_zext_vgpr:
255 ; GFX11:       ; %bb.0:
256 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3]
257 ; GFX11-NEXT:    s_nop 0
258 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
259 ; GFX11-NEXT:    s_endpgm
260   %zext.offset = zext i32 %voffset to i64
261   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
262   store i32 %data, ptr addrspace(1) %gep0
263   ret void
266 define amdgpu_ps void @global_store_saddr_i32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {
267 ; GCN-LABEL: global_store_saddr_i32_zext_vgpr_offset_neg128:
268 ; GCN:       ; %bb.0:
269 ; GCN-NEXT:    global_store_dword v0, v1, s[2:3] offset:-128
270 ; GCN-NEXT:    s_endpgm
272 ; GFX11-LABEL: global_store_saddr_i32_zext_vgpr_offset_neg128:
273 ; GFX11:       ; %bb.0:
274 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3] offset:-128
275 ; GFX11-NEXT:    s_nop 0
276 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
277 ; GFX11-NEXT:    s_endpgm
278   %zext.offset = zext i32 %voffset to i64
279   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
280   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
281   store i32 %data, ptr addrspace(1) %gep1
282   ret void
285 define amdgpu_ps void @global_store_saddr_f32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, float %data) {
286 ; GCN-LABEL: global_store_saddr_f32_zext_vgpr:
287 ; GCN:       ; %bb.0:
288 ; GCN-NEXT:    global_store_dword v0, v1, s[2:3]
289 ; GCN-NEXT:    s_endpgm
291 ; GFX11-LABEL: global_store_saddr_f32_zext_vgpr:
292 ; GFX11:       ; %bb.0:
293 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3]
294 ; GFX11-NEXT:    s_nop 0
295 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
296 ; GFX11-NEXT:    s_endpgm
297   %zext.offset = zext i32 %voffset to i64
298   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
299   store float %data, ptr addrspace(1) %gep0
300   ret void
303 define amdgpu_ps void @global_store_saddr_f32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, float %data) {
304 ; GCN-LABEL: global_store_saddr_f32_zext_vgpr_offset_neg128:
305 ; GCN:       ; %bb.0:
306 ; GCN-NEXT:    global_store_dword v0, v1, s[2:3] offset:-128
307 ; GCN-NEXT:    s_endpgm
309 ; GFX11-LABEL: global_store_saddr_f32_zext_vgpr_offset_neg128:
310 ; GFX11:       ; %bb.0:
311 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3] offset:-128
312 ; GFX11-NEXT:    s_nop 0
313 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
314 ; GFX11-NEXT:    s_endpgm
315   %zext.offset = zext i32 %voffset to i64
316   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
317   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
318   store float %data, ptr addrspace(1) %gep1
319   ret void
322 define amdgpu_ps void @global_store_saddr_p3_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, ptr addrspace(3) %data) {
323 ; GCN-LABEL: global_store_saddr_p3_zext_vgpr:
324 ; GCN:       ; %bb.0:
325 ; GCN-NEXT:    global_store_dword v0, v1, s[2:3]
326 ; GCN-NEXT:    s_endpgm
328 ; GFX11-LABEL: global_store_saddr_p3_zext_vgpr:
329 ; GFX11:       ; %bb.0:
330 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3]
331 ; GFX11-NEXT:    s_nop 0
332 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
333 ; GFX11-NEXT:    s_endpgm
334   %zext.offset = zext i32 %voffset to i64
335   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
336   store ptr addrspace(3) %data, ptr addrspace(1) %gep0
337   ret void
340 define amdgpu_ps void @global_store_saddr_p3_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, ptr addrspace(3) %data) {
341 ; GCN-LABEL: global_store_saddr_p3_zext_vgpr_offset_neg128:
342 ; GCN:       ; %bb.0:
343 ; GCN-NEXT:    global_store_dword v0, v1, s[2:3] offset:-128
344 ; GCN-NEXT:    s_endpgm
346 ; GFX11-LABEL: global_store_saddr_p3_zext_vgpr_offset_neg128:
347 ; GFX11:       ; %bb.0:
348 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3] offset:-128
349 ; GFX11-NEXT:    s_nop 0
350 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
351 ; GFX11-NEXT:    s_endpgm
352   %zext.offset = zext i32 %voffset to i64
353   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
354   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
355   store ptr addrspace(3) %data, ptr addrspace(1) %gep1
356   ret void
359 define amdgpu_ps void @global_store_saddr_i64_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {
360 ; GCN-LABEL: global_store_saddr_i64_zext_vgpr:
361 ; GCN:       ; %bb.0:
362 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
363 ; GCN-NEXT:    s_endpgm
365 ; GFX11-LABEL: global_store_saddr_i64_zext_vgpr:
366 ; GFX11:       ; %bb.0:
367 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
368 ; GFX11-NEXT:    s_nop 0
369 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
370 ; GFX11-NEXT:    s_endpgm
371   %zext.offset = zext i32 %voffset to i64
372   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
373   store i64 %data, ptr addrspace(1) %gep0
374   ret void
377 define amdgpu_ps void @global_store_saddr_i64_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {
378 ; GCN-LABEL: global_store_saddr_i64_zext_vgpr_offset_neg128:
379 ; GCN:       ; %bb.0:
380 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
381 ; GCN-NEXT:    s_endpgm
383 ; GFX11-LABEL: global_store_saddr_i64_zext_vgpr_offset_neg128:
384 ; GFX11:       ; %bb.0:
385 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
386 ; GFX11-NEXT:    s_nop 0
387 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
388 ; GFX11-NEXT:    s_endpgm
389   %zext.offset = zext i32 %voffset to i64
390   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
391   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
392   store i64 %data, ptr addrspace(1) %gep1
393   ret void
396 define amdgpu_ps void @global_store_saddr_f64_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, double %data) {
397 ; GCN-LABEL: global_store_saddr_f64_zext_vgpr:
398 ; GCN:       ; %bb.0:
399 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
400 ; GCN-NEXT:    s_endpgm
402 ; GFX11-LABEL: global_store_saddr_f64_zext_vgpr:
403 ; GFX11:       ; %bb.0:
404 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
405 ; GFX11-NEXT:    s_nop 0
406 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
407 ; GFX11-NEXT:    s_endpgm
408   %zext.offset = zext i32 %voffset to i64
409   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
410   store double %data, ptr addrspace(1) %gep0
411   ret void
414 define amdgpu_ps void @global_store_saddr_f64_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, double %data) {
415 ; GCN-LABEL: global_store_saddr_f64_zext_vgpr_offset_neg128:
416 ; GCN:       ; %bb.0:
417 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
418 ; GCN-NEXT:    s_endpgm
420 ; GFX11-LABEL: global_store_saddr_f64_zext_vgpr_offset_neg128:
421 ; GFX11:       ; %bb.0:
422 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
423 ; GFX11-NEXT:    s_nop 0
424 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
425 ; GFX11-NEXT:    s_endpgm
426   %zext.offset = zext i32 %voffset to i64
427   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
428   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
429   store double %data, ptr addrspace(1) %gep1
430   ret void
433 define amdgpu_ps void @global_store_saddr_v2i32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i32> %data) {
434 ; GCN-LABEL: global_store_saddr_v2i32_zext_vgpr:
435 ; GCN:       ; %bb.0:
436 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
437 ; GCN-NEXT:    s_endpgm
439 ; GFX11-LABEL: global_store_saddr_v2i32_zext_vgpr:
440 ; GFX11:       ; %bb.0:
441 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
442 ; GFX11-NEXT:    s_nop 0
443 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
444 ; GFX11-NEXT:    s_endpgm
445   %zext.offset = zext i32 %voffset to i64
446   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
447   store <2 x i32> %data, ptr addrspace(1) %gep0
448   ret void
451 define amdgpu_ps void @global_store_saddr_v2i32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i32> %data) {
452 ; GCN-LABEL: global_store_saddr_v2i32_zext_vgpr_offset_neg128:
453 ; GCN:       ; %bb.0:
454 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
455 ; GCN-NEXT:    s_endpgm
457 ; GFX11-LABEL: global_store_saddr_v2i32_zext_vgpr_offset_neg128:
458 ; GFX11:       ; %bb.0:
459 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
460 ; GFX11-NEXT:    s_nop 0
461 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
462 ; GFX11-NEXT:    s_endpgm
463   %zext.offset = zext i32 %voffset to i64
464   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
465   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
466   store <2 x i32> %data, ptr addrspace(1) %gep1
467   ret void
470 define amdgpu_ps void @global_store_saddr_v2f32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x float> %data) {
471 ; GCN-LABEL: global_store_saddr_v2f32_zext_vgpr:
472 ; GCN:       ; %bb.0:
473 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
474 ; GCN-NEXT:    s_endpgm
476 ; GFX11-LABEL: global_store_saddr_v2f32_zext_vgpr:
477 ; GFX11:       ; %bb.0:
478 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
479 ; GFX11-NEXT:    s_nop 0
480 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
481 ; GFX11-NEXT:    s_endpgm
482   %zext.offset = zext i32 %voffset to i64
483   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
484   store <2 x float> %data, ptr addrspace(1) %gep0
485   ret void
488 define amdgpu_ps void @global_store_saddr_v2f32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x float> %data) {
489 ; GCN-LABEL: global_store_saddr_v2f32_zext_vgpr_offset_neg128:
490 ; GCN:       ; %bb.0:
491 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
492 ; GCN-NEXT:    s_endpgm
494 ; GFX11-LABEL: global_store_saddr_v2f32_zext_vgpr_offset_neg128:
495 ; GFX11:       ; %bb.0:
496 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
497 ; GFX11-NEXT:    s_nop 0
498 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
499 ; GFX11-NEXT:    s_endpgm
500   %zext.offset = zext i32 %voffset to i64
501   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
502   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
503   store <2 x float> %data, ptr addrspace(1) %gep1
504   ret void
507 define amdgpu_ps void @global_store_saddr_v4i16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x i16> %data) {
508 ; GCN-LABEL: global_store_saddr_v4i16_zext_vgpr:
509 ; GCN:       ; %bb.0:
510 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
511 ; GCN-NEXT:    s_endpgm
513 ; GFX11-LABEL: global_store_saddr_v4i16_zext_vgpr:
514 ; GFX11:       ; %bb.0:
515 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
516 ; GFX11-NEXT:    s_nop 0
517 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
518 ; GFX11-NEXT:    s_endpgm
519   %zext.offset = zext i32 %voffset to i64
520   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
521   store <4 x i16> %data, ptr addrspace(1) %gep0
522   ret void
525 define amdgpu_ps void @global_store_saddr_v4i16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x i16> %data) {
526 ; GCN-LABEL: global_store_saddr_v4i16_zext_vgpr_offset_neg128:
527 ; GCN:       ; %bb.0:
528 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
529 ; GCN-NEXT:    s_endpgm
531 ; GFX11-LABEL: global_store_saddr_v4i16_zext_vgpr_offset_neg128:
532 ; GFX11:       ; %bb.0:
533 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
534 ; GFX11-NEXT:    s_nop 0
535 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
536 ; GFX11-NEXT:    s_endpgm
537   %zext.offset = zext i32 %voffset to i64
538   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
539   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
540   store <4 x i16> %data, ptr addrspace(1) %gep1
541   ret void
544 define amdgpu_ps void @global_store_saddr_v4f16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x half> %data) {
545 ; GCN-LABEL: global_store_saddr_v4f16_zext_vgpr:
546 ; GCN:       ; %bb.0:
547 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
548 ; GCN-NEXT:    s_endpgm
550 ; GFX11-LABEL: global_store_saddr_v4f16_zext_vgpr:
551 ; GFX11:       ; %bb.0:
552 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
553 ; GFX11-NEXT:    s_nop 0
554 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
555 ; GFX11-NEXT:    s_endpgm
556   %zext.offset = zext i32 %voffset to i64
557   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
558   store <4 x half> %data, ptr addrspace(1) %gep0
559   ret void
562 define amdgpu_ps void @global_store_saddr_v4f16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x half> %data) {
563 ; GCN-LABEL: global_store_saddr_v4f16_zext_vgpr_offset_neg128:
564 ; GCN:       ; %bb.0:
565 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
566 ; GCN-NEXT:    s_endpgm
568 ; GFX11-LABEL: global_store_saddr_v4f16_zext_vgpr_offset_neg128:
569 ; GFX11:       ; %bb.0:
570 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
571 ; GFX11-NEXT:    s_nop 0
572 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
573 ; GFX11-NEXT:    s_endpgm
574   %zext.offset = zext i32 %voffset to i64
575   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
576   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
577   store <4 x half> %data, ptr addrspace(1) %gep1
578   ret void
581 define amdgpu_ps void @global_store_saddr_p1_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, ptr addrspace(1) %data) {
582 ; GCN-LABEL: global_store_saddr_p1_zext_vgpr:
583 ; GCN:       ; %bb.0:
584 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
585 ; GCN-NEXT:    s_endpgm
587 ; GFX11-LABEL: global_store_saddr_p1_zext_vgpr:
588 ; GFX11:       ; %bb.0:
589 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
590 ; GFX11-NEXT:    s_nop 0
591 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
592 ; GFX11-NEXT:    s_endpgm
593   %zext.offset = zext i32 %voffset to i64
594   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
595   store ptr addrspace(1) %data, ptr addrspace(1) %gep0
596   ret void
599 define amdgpu_ps void @global_store_saddr_p1_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, ptr addrspace(1) %data) {
600 ; GCN-LABEL: global_store_saddr_p1_zext_vgpr_offset_neg128:
601 ; GCN:       ; %bb.0:
602 ; GCN-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
603 ; GCN-NEXT:    s_endpgm
605 ; GFX11-LABEL: global_store_saddr_p1_zext_vgpr_offset_neg128:
606 ; GFX11:       ; %bb.0:
607 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
608 ; GFX11-NEXT:    s_nop 0
609 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
610 ; GFX11-NEXT:    s_endpgm
611   %zext.offset = zext i32 %voffset to i64
612   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
613   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
614   store ptr addrspace(1) %data, ptr addrspace(1) %gep1
615   ret void
618 define amdgpu_ps void @global_store_saddr_v3i32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <3 x i32> %data) {
619 ; GCN-LABEL: global_store_saddr_v3i32_zext_vgpr:
620 ; GCN:       ; %bb.0:
621 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3]
622 ; GCN-NEXT:    s_endpgm
624 ; GFX11-LABEL: global_store_saddr_v3i32_zext_vgpr:
625 ; GFX11:       ; %bb.0:
626 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3]
627 ; GFX11-NEXT:    s_nop 0
628 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
629 ; GFX11-NEXT:    s_endpgm
630   %zext.offset = zext i32 %voffset to i64
631   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
632   store <3 x i32> %data, ptr addrspace(1) %gep0
633   ret void
636 define amdgpu_ps void @global_store_saddr_v3i32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <3 x i32> %data) {
637 ; GCN-LABEL: global_store_saddr_v3i32_zext_vgpr_offset_neg128:
638 ; GCN:       ; %bb.0:
639 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3] offset:-128
640 ; GCN-NEXT:    s_endpgm
642 ; GFX11-LABEL: global_store_saddr_v3i32_zext_vgpr_offset_neg128:
643 ; GFX11:       ; %bb.0:
644 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3] offset:-128
645 ; GFX11-NEXT:    s_nop 0
646 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
647 ; GFX11-NEXT:    s_endpgm
648   %zext.offset = zext i32 %voffset to i64
649   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
650   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
651   store <3 x i32> %data, ptr addrspace(1) %gep1
652   ret void
655 define amdgpu_ps void @global_store_saddr_v3f32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <3 x float> %data) {
656 ; GCN-LABEL: global_store_saddr_v3f32_zext_vgpr:
657 ; GCN:       ; %bb.0:
658 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3]
659 ; GCN-NEXT:    s_endpgm
661 ; GFX11-LABEL: global_store_saddr_v3f32_zext_vgpr:
662 ; GFX11:       ; %bb.0:
663 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3]
664 ; GFX11-NEXT:    s_nop 0
665 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
666 ; GFX11-NEXT:    s_endpgm
667   %zext.offset = zext i32 %voffset to i64
668   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
669   store <3 x float> %data, ptr addrspace(1) %gep0
670   ret void
673 define amdgpu_ps void @global_store_saddr_v3f32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <3 x float> %data) {
674 ; GCN-LABEL: global_store_saddr_v3f32_zext_vgpr_offset_neg128:
675 ; GCN:       ; %bb.0:
676 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3] offset:-128
677 ; GCN-NEXT:    s_endpgm
679 ; GFX11-LABEL: global_store_saddr_v3f32_zext_vgpr_offset_neg128:
680 ; GFX11:       ; %bb.0:
681 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3] offset:-128
682 ; GFX11-NEXT:    s_nop 0
683 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
684 ; GFX11-NEXT:    s_endpgm
685   %zext.offset = zext i32 %voffset to i64
686   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
687   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
688   store <3 x float> %data, ptr addrspace(1) %gep1
689   ret void
692 define amdgpu_ps void @global_store_saddr_v6i16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <6 x i16> %data) {
693 ; GCN-LABEL: global_store_saddr_v6i16_zext_vgpr:
694 ; GCN:       ; %bb.0:
695 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3]
696 ; GCN-NEXT:    s_endpgm
698 ; GFX11-LABEL: global_store_saddr_v6i16_zext_vgpr:
699 ; GFX11:       ; %bb.0:
700 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3]
701 ; GFX11-NEXT:    s_nop 0
702 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
703 ; GFX11-NEXT:    s_endpgm
704   %zext.offset = zext i32 %voffset to i64
705   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
706   store <6 x i16> %data, ptr addrspace(1) %gep0
707   ret void
710 define amdgpu_ps void @global_store_saddr_v6i16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <6 x i16> %data) {
711 ; GCN-LABEL: global_store_saddr_v6i16_zext_vgpr_offset_neg128:
712 ; GCN:       ; %bb.0:
713 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3] offset:-128
714 ; GCN-NEXT:    s_endpgm
716 ; GFX11-LABEL: global_store_saddr_v6i16_zext_vgpr_offset_neg128:
717 ; GFX11:       ; %bb.0:
718 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3] offset:-128
719 ; GFX11-NEXT:    s_nop 0
720 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
721 ; GFX11-NEXT:    s_endpgm
722   %zext.offset = zext i32 %voffset to i64
723   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
724   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
725   store <6 x i16> %data, ptr addrspace(1) %gep1
726   ret void
729 define amdgpu_ps void @global_store_saddr_v6f16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <6 x half> %data) {
730 ; GCN-LABEL: global_store_saddr_v6f16_zext_vgpr:
731 ; GCN:       ; %bb.0:
732 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3]
733 ; GCN-NEXT:    s_endpgm
735 ; GFX11-LABEL: global_store_saddr_v6f16_zext_vgpr:
736 ; GFX11:       ; %bb.0:
737 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3]
738 ; GFX11-NEXT:    s_nop 0
739 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
740 ; GFX11-NEXT:    s_endpgm
741   %zext.offset = zext i32 %voffset to i64
742   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
743   store <6 x half> %data, ptr addrspace(1) %gep0
744   ret void
747 define amdgpu_ps void @global_store_saddr_v6f16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <6 x half> %data) {
748 ; GCN-LABEL: global_store_saddr_v6f16_zext_vgpr_offset_neg128:
749 ; GCN:       ; %bb.0:
750 ; GCN-NEXT:    global_store_dwordx3 v0, v[1:3], s[2:3] offset:-128
751 ; GCN-NEXT:    s_endpgm
753 ; GFX11-LABEL: global_store_saddr_v6f16_zext_vgpr_offset_neg128:
754 ; GFX11:       ; %bb.0:
755 ; GFX11-NEXT:    global_store_b96 v0, v[1:3], s[2:3] offset:-128
756 ; GFX11-NEXT:    s_nop 0
757 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
758 ; GFX11-NEXT:    s_endpgm
759   %zext.offset = zext i32 %voffset to i64
760   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
761   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
762   store <6 x half> %data, ptr addrspace(1) %gep1
763   ret void
766 define amdgpu_ps void @global_store_saddr_v4i32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x i32> %data) {
767 ; GCN-LABEL: global_store_saddr_v4i32_zext_vgpr:
768 ; GCN:       ; %bb.0:
769 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
770 ; GCN-NEXT:    s_endpgm
772 ; GFX11-LABEL: global_store_saddr_v4i32_zext_vgpr:
773 ; GFX11:       ; %bb.0:
774 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
775 ; GFX11-NEXT:    s_nop 0
776 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
777 ; GFX11-NEXT:    s_endpgm
778   %zext.offset = zext i32 %voffset to i64
779   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
780   store <4 x i32> %data, ptr addrspace(1) %gep0
781   ret void
784 define amdgpu_ps void @global_store_saddr_v4i32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x i32> %data) {
785 ; GCN-LABEL: global_store_saddr_v4i32_zext_vgpr_offset_neg128:
786 ; GCN:       ; %bb.0:
787 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
788 ; GCN-NEXT:    s_endpgm
790 ; GFX11-LABEL: global_store_saddr_v4i32_zext_vgpr_offset_neg128:
791 ; GFX11:       ; %bb.0:
792 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
793 ; GFX11-NEXT:    s_nop 0
794 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
795 ; GFX11-NEXT:    s_endpgm
796   %zext.offset = zext i32 %voffset to i64
797   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
798   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
799   store <4 x i32> %data, ptr addrspace(1) %gep1
800   ret void
803 define amdgpu_ps void @global_store_saddr_v4f32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x float> %data) {
804 ; GCN-LABEL: global_store_saddr_v4f32_zext_vgpr:
805 ; GCN:       ; %bb.0:
806 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
807 ; GCN-NEXT:    s_endpgm
809 ; GFX11-LABEL: global_store_saddr_v4f32_zext_vgpr:
810 ; GFX11:       ; %bb.0:
811 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
812 ; GFX11-NEXT:    s_nop 0
813 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
814 ; GFX11-NEXT:    s_endpgm
815   %zext.offset = zext i32 %voffset to i64
816   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
817   store <4 x float> %data, ptr addrspace(1) %gep0
818   ret void
821 define amdgpu_ps void @global_store_saddr_v4f32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x float> %data) {
822 ; GCN-LABEL: global_store_saddr_v4f32_zext_vgpr_offset_neg128:
823 ; GCN:       ; %bb.0:
824 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
825 ; GCN-NEXT:    s_endpgm
827 ; GFX11-LABEL: global_store_saddr_v4f32_zext_vgpr_offset_neg128:
828 ; GFX11:       ; %bb.0:
829 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
830 ; GFX11-NEXT:    s_nop 0
831 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
832 ; GFX11-NEXT:    s_endpgm
833   %zext.offset = zext i32 %voffset to i64
834   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
835   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
836   store <4 x float> %data, ptr addrspace(1) %gep1
837   ret void
840 define amdgpu_ps void @global_store_saddr_v2i64_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i64> %data) {
841 ; GCN-LABEL: global_store_saddr_v2i64_zext_vgpr:
842 ; GCN:       ; %bb.0:
843 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
844 ; GCN-NEXT:    s_endpgm
846 ; GFX11-LABEL: global_store_saddr_v2i64_zext_vgpr:
847 ; GFX11:       ; %bb.0:
848 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
849 ; GFX11-NEXT:    s_nop 0
850 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
851 ; GFX11-NEXT:    s_endpgm
852   %zext.offset = zext i32 %voffset to i64
853   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
854   store <2 x i64> %data, ptr addrspace(1) %gep0
855   ret void
858 define amdgpu_ps void @global_store_saddr_v2i64_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i64> %data) {
859 ; GCN-LABEL: global_store_saddr_v2i64_zext_vgpr_offset_neg128:
860 ; GCN:       ; %bb.0:
861 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
862 ; GCN-NEXT:    s_endpgm
864 ; GFX11-LABEL: global_store_saddr_v2i64_zext_vgpr_offset_neg128:
865 ; GFX11:       ; %bb.0:
866 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
867 ; GFX11-NEXT:    s_nop 0
868 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
869 ; GFX11-NEXT:    s_endpgm
870   %zext.offset = zext i32 %voffset to i64
871   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
872   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
873   store <2 x i64> %data, ptr addrspace(1) %gep1
874   ret void
877 define amdgpu_ps void @global_store_saddr_v2f64_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x double> %data) {
878 ; GCN-LABEL: global_store_saddr_v2f64_zext_vgpr:
879 ; GCN:       ; %bb.0:
880 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
881 ; GCN-NEXT:    s_endpgm
883 ; GFX11-LABEL: global_store_saddr_v2f64_zext_vgpr:
884 ; GFX11:       ; %bb.0:
885 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
886 ; GFX11-NEXT:    s_nop 0
887 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
888 ; GFX11-NEXT:    s_endpgm
889   %zext.offset = zext i32 %voffset to i64
890   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
891   store <2 x double> %data, ptr addrspace(1) %gep0
892   ret void
895 define amdgpu_ps void @global_store_saddr_v2f64_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x double> %data) {
896 ; GCN-LABEL: global_store_saddr_v2f64_zext_vgpr_offset_neg128:
897 ; GCN:       ; %bb.0:
898 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
899 ; GCN-NEXT:    s_endpgm
901 ; GFX11-LABEL: global_store_saddr_v2f64_zext_vgpr_offset_neg128:
902 ; GFX11:       ; %bb.0:
903 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
904 ; GFX11-NEXT:    s_nop 0
905 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
906 ; GFX11-NEXT:    s_endpgm
907   %zext.offset = zext i32 %voffset to i64
908   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
909   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
910   store <2 x double> %data, ptr addrspace(1) %gep1
911   ret void
914 define amdgpu_ps void @global_store_saddr_v8i16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <8 x i16> %data) {
915 ; GCN-LABEL: global_store_saddr_v8i16_zext_vgpr:
916 ; GCN:       ; %bb.0:
917 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
918 ; GCN-NEXT:    s_endpgm
920 ; GFX11-LABEL: global_store_saddr_v8i16_zext_vgpr:
921 ; GFX11:       ; %bb.0:
922 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
923 ; GFX11-NEXT:    s_nop 0
924 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
925 ; GFX11-NEXT:    s_endpgm
926   %zext.offset = zext i32 %voffset to i64
927   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
928   store <8 x i16> %data, ptr addrspace(1) %gep0
929   ret void
932 define amdgpu_ps void @global_store_saddr_v8i16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <8 x i16> %data) {
933 ; GCN-LABEL: global_store_saddr_v8i16_zext_vgpr_offset_neg128:
934 ; GCN:       ; %bb.0:
935 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
936 ; GCN-NEXT:    s_endpgm
938 ; GFX11-LABEL: global_store_saddr_v8i16_zext_vgpr_offset_neg128:
939 ; GFX11:       ; %bb.0:
940 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
941 ; GFX11-NEXT:    s_nop 0
942 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
943 ; GFX11-NEXT:    s_endpgm
944   %zext.offset = zext i32 %voffset to i64
945   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
946   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
947   store <8 x i16> %data, ptr addrspace(1) %gep1
948   ret void
951 define amdgpu_ps void @global_store_saddr_v8f16_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <8 x half> %data) {
952 ; GCN-LABEL: global_store_saddr_v8f16_zext_vgpr:
953 ; GCN:       ; %bb.0:
954 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
955 ; GCN-NEXT:    s_endpgm
957 ; GFX11-LABEL: global_store_saddr_v8f16_zext_vgpr:
958 ; GFX11:       ; %bb.0:
959 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
960 ; GFX11-NEXT:    s_nop 0
961 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
962 ; GFX11-NEXT:    s_endpgm
963   %zext.offset = zext i32 %voffset to i64
964   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
965   store <8 x half> %data, ptr addrspace(1) %gep0
966   ret void
969 define amdgpu_ps void @global_store_saddr_v8f16_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <8 x half> %data) {
970 ; GCN-LABEL: global_store_saddr_v8f16_zext_vgpr_offset_neg128:
971 ; GCN:       ; %bb.0:
972 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
973 ; GCN-NEXT:    s_endpgm
975 ; GFX11-LABEL: global_store_saddr_v8f16_zext_vgpr_offset_neg128:
976 ; GFX11:       ; %bb.0:
977 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
978 ; GFX11-NEXT:    s_nop 0
979 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
980 ; GFX11-NEXT:    s_endpgm
981   %zext.offset = zext i32 %voffset to i64
982   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
983   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
984   store <8 x half> %data, ptr addrspace(1) %gep1
985   ret void
988 define amdgpu_ps void @global_store_saddr_v2p1_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x ptr addrspace(1)> %data) {
989 ; GCN-LABEL: global_store_saddr_v2p1_zext_vgpr:
990 ; GCN:       ; %bb.0:
991 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
992 ; GCN-NEXT:    s_endpgm
994 ; GFX11-LABEL: global_store_saddr_v2p1_zext_vgpr:
995 ; GFX11:       ; %bb.0:
996 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
997 ; GFX11-NEXT:    s_nop 0
998 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
999 ; GFX11-NEXT:    s_endpgm
1000   %zext.offset = zext i32 %voffset to i64
1001   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1002   store <2 x ptr addrspace(1)> %data, ptr addrspace(1) %gep0
1003   ret void
1006 define amdgpu_ps void @global_store_saddr_v2p1_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x ptr addrspace(1)> %data) {
1007 ; GCN-LABEL: global_store_saddr_v2p1_zext_vgpr_offset_neg128:
1008 ; GCN:       ; %bb.0:
1009 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
1010 ; GCN-NEXT:    s_endpgm
1012 ; GFX11-LABEL: global_store_saddr_v2p1_zext_vgpr_offset_neg128:
1013 ; GFX11:       ; %bb.0:
1014 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
1015 ; GFX11-NEXT:    s_nop 0
1016 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1017 ; GFX11-NEXT:    s_endpgm
1018   %zext.offset = zext i32 %voffset to i64
1019   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1020   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
1021   store <2 x ptr addrspace(1)> %data, ptr addrspace(1) %gep1
1022   ret void
1025 define amdgpu_ps void @global_store_saddr_v4p3_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x ptr addrspace(3)> %data) {
1026 ; GCN-LABEL: global_store_saddr_v4p3_zext_vgpr:
1027 ; GCN:       ; %bb.0:
1028 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3]
1029 ; GCN-NEXT:    s_endpgm
1031 ; GFX11-LABEL: global_store_saddr_v4p3_zext_vgpr:
1032 ; GFX11:       ; %bb.0:
1033 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3]
1034 ; GFX11-NEXT:    s_nop 0
1035 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1036 ; GFX11-NEXT:    s_endpgm
1037   %zext.offset = zext i32 %voffset to i64
1038   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1039   store <4 x ptr addrspace(3)> %data, ptr addrspace(1) %gep0
1040   ret void
1043 define amdgpu_ps void @global_store_saddr_v4p3_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <4 x ptr addrspace(3)> %data) {
1044 ; GCN-LABEL: global_store_saddr_v4p3_zext_vgpr_offset_neg128:
1045 ; GCN:       ; %bb.0:
1046 ; GCN-NEXT:    global_store_dwordx4 v0, v[1:4], s[2:3] offset:-128
1047 ; GCN-NEXT:    s_endpgm
1049 ; GFX11-LABEL: global_store_saddr_v4p3_zext_vgpr_offset_neg128:
1050 ; GFX11:       ; %bb.0:
1051 ; GFX11-NEXT:    global_store_b128 v0, v[1:4], s[2:3] offset:-128
1052 ; GFX11-NEXT:    s_nop 0
1053 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1054 ; GFX11-NEXT:    s_endpgm
1055   %zext.offset = zext i32 %voffset to i64
1056   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1057   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
1058   store <4 x ptr addrspace(3)> %data, ptr addrspace(1) %gep1
1059   ret void
1062 ; --------------------------------------------------------------------------------
1063 ; Atomic store
1064 ; --------------------------------------------------------------------------------
1066 define amdgpu_ps void @atomic_global_store_saddr_i32_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {
1067 ; GFX9-LABEL: atomic_global_store_saddr_i32_zext_vgpr:
1068 ; GFX9:       ; %bb.0:
1069 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1070 ; GFX9-NEXT:    global_store_dword v0, v1, s[2:3]
1071 ; GFX9-NEXT:    s_endpgm
1073 ; GFX10-LABEL: atomic_global_store_saddr_i32_zext_vgpr:
1074 ; GFX10:       ; %bb.0:
1075 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1076 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1077 ; GFX10-NEXT:    global_store_dword v0, v1, s[2:3]
1078 ; GFX10-NEXT:    s_endpgm
1080 ; GFX11-LABEL: atomic_global_store_saddr_i32_zext_vgpr:
1081 ; GFX11:       ; %bb.0:
1082 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1083 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1084 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3]
1085 ; GFX11-NEXT:    s_nop 0
1086 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1087 ; GFX11-NEXT:    s_endpgm
1088   %zext.offset = zext i32 %voffset to i64
1089   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1090   store atomic i32 %data, ptr addrspace(1) %gep0 seq_cst, align 4
1091   ret void
1094 define amdgpu_ps void @atomic_global_store_saddr_i32_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i32 %data) {
1095 ; GFX9-LABEL: atomic_global_store_saddr_i32_zext_vgpr_offset_neg128:
1096 ; GFX9:       ; %bb.0:
1097 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1098 ; GFX9-NEXT:    global_store_dword v0, v1, s[2:3] offset:-128
1099 ; GFX9-NEXT:    s_endpgm
1101 ; GFX10-LABEL: atomic_global_store_saddr_i32_zext_vgpr_offset_neg128:
1102 ; GFX10:       ; %bb.0:
1103 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1104 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1105 ; GFX10-NEXT:    global_store_dword v0, v1, s[2:3] offset:-128
1106 ; GFX10-NEXT:    s_endpgm
1108 ; GFX11-LABEL: atomic_global_store_saddr_i32_zext_vgpr_offset_neg128:
1109 ; GFX11:       ; %bb.0:
1110 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1111 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1112 ; GFX11-NEXT:    global_store_b32 v0, v1, s[2:3] offset:-128
1113 ; GFX11-NEXT:    s_nop 0
1114 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1115 ; GFX11-NEXT:    s_endpgm
1116   %zext.offset = zext i32 %voffset to i64
1117   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1118   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
1119   store atomic i32 %data, ptr addrspace(1) %gep1 seq_cst, align 4
1120   ret void
1123 define amdgpu_ps void @atomic_global_store_saddr_i64_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {
1124 ; GFX9-LABEL: atomic_global_store_saddr_i64_zext_vgpr:
1125 ; GFX9:       ; %bb.0:
1126 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1127 ; GFX9-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
1128 ; GFX9-NEXT:    s_endpgm
1130 ; GFX10-LABEL: atomic_global_store_saddr_i64_zext_vgpr:
1131 ; GFX10:       ; %bb.0:
1132 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1133 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1134 ; GFX10-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3]
1135 ; GFX10-NEXT:    s_endpgm
1137 ; GFX11-LABEL: atomic_global_store_saddr_i64_zext_vgpr:
1138 ; GFX11:       ; %bb.0:
1139 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1140 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1141 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3]
1142 ; GFX11-NEXT:    s_nop 0
1143 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1144 ; GFX11-NEXT:    s_endpgm
1145   %zext.offset = zext i32 %voffset to i64
1146   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1147   store atomic i64 %data, ptr addrspace(1) %gep0 seq_cst, align 8
1148   ret void
1151 define amdgpu_ps void @atomic_global_store_saddr_i64_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, i64 %data) {
1152 ; GFX9-LABEL: atomic_global_store_saddr_i64_zext_vgpr_offset_neg128:
1153 ; GFX9:       ; %bb.0:
1154 ; GFX9-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1155 ; GFX9-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
1156 ; GFX9-NEXT:    s_endpgm
1158 ; GFX10-LABEL: atomic_global_store_saddr_i64_zext_vgpr_offset_neg128:
1159 ; GFX10:       ; %bb.0:
1160 ; GFX10-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1161 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1162 ; GFX10-NEXT:    global_store_dwordx2 v0, v[1:2], s[2:3] offset:-128
1163 ; GFX10-NEXT:    s_endpgm
1165 ; GFX11-LABEL: atomic_global_store_saddr_i64_zext_vgpr_offset_neg128:
1166 ; GFX11:       ; %bb.0:
1167 ; GFX11-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
1168 ; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1169 ; GFX11-NEXT:    global_store_b64 v0, v[1:2], s[2:3] offset:-128
1170 ; GFX11-NEXT:    s_nop 0
1171 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1172 ; GFX11-NEXT:    s_endpgm
1173   %zext.offset = zext i32 %voffset to i64
1174   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1175   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
1176   store atomic i64 %data, ptr addrspace(1) %gep1 seq_cst, align 8
1177   ret void
1180 ; --------------------------------------------------------------------------------
1181 ; D16 HI store (hi 16)
1182 ; --------------------------------------------------------------------------------
1184 define amdgpu_ps void @global_store_saddr_i16_d16hi_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i16> %data) {
1185 ; GCN-LABEL: global_store_saddr_i16_d16hi_zext_vgpr:
1186 ; GCN:       ; %bb.0:
1187 ; GCN-NEXT:    global_store_short_d16_hi v0, v1, s[2:3]
1188 ; GCN-NEXT:    s_endpgm
1190 ; GFX11-LABEL: global_store_saddr_i16_d16hi_zext_vgpr:
1191 ; GFX11:       ; %bb.0:
1192 ; GFX11-NEXT:    global_store_d16_hi_b16 v0, v1, s[2:3]
1193 ; GFX11-NEXT:    s_nop 0
1194 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1195 ; GFX11-NEXT:    s_endpgm
1196   %zext.offset = zext i32 %voffset to i64
1197   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1198   %data.hi = extractelement <2 x i16> %data, i32 1
1199   store i16 %data.hi, ptr addrspace(1) %gep0
1200   ret void
1203 define amdgpu_ps void @global_store_saddr_i16_d16hi_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i16> %data) {
1204 ; GCN-LABEL: global_store_saddr_i16_d16hi_zext_vgpr_offset_neg128:
1205 ; GCN:       ; %bb.0:
1206 ; GCN-NEXT:    global_store_short_d16_hi v0, v1, s[2:3] offset:-128
1207 ; GCN-NEXT:    s_endpgm
1209 ; GFX11-LABEL: global_store_saddr_i16_d16hi_zext_vgpr_offset_neg128:
1210 ; GFX11:       ; %bb.0:
1211 ; GFX11-NEXT:    global_store_d16_hi_b16 v0, v1, s[2:3] offset:-128
1212 ; GFX11-NEXT:    s_nop 0
1213 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1214 ; GFX11-NEXT:    s_endpgm
1215   %zext.offset = zext i32 %voffset to i64
1216   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1217   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
1218   %data.hi = extractelement <2 x i16> %data, i32 1
1219   store i16 %data.hi, ptr addrspace(1) %gep1
1220   ret void
1223 define amdgpu_ps void @global_store_saddr_i16_d16hi_trunci8_zext_vgpr(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i16> %data) {
1224 ; GCN-LABEL: global_store_saddr_i16_d16hi_trunci8_zext_vgpr:
1225 ; GCN:       ; %bb.0:
1226 ; GCN-NEXT:    global_store_byte_d16_hi v0, v1, s[2:3]
1227 ; GCN-NEXT:    s_endpgm
1229 ; GFX11-LABEL: global_store_saddr_i16_d16hi_trunci8_zext_vgpr:
1230 ; GFX11:       ; %bb.0:
1231 ; GFX11-NEXT:    global_store_d16_hi_b8 v0, v1, s[2:3]
1232 ; GFX11-NEXT:    s_nop 0
1233 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1234 ; GFX11-NEXT:    s_endpgm
1235   %zext.offset = zext i32 %voffset to i64
1236   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1237   %data.hi = extractelement <2 x i16> %data, i32 1
1238   %data.hi.trunc = trunc i16 %data.hi to i8
1239   store i8 %data.hi.trunc, ptr addrspace(1) %gep0
1240   ret void
1243 define amdgpu_ps void @global_store_saddr_i16_d16hi_trunci8_zext_vgpr_offset_neg128(ptr addrspace(1) inreg %sbase, i32 %voffset, <2 x i16> %data) {
1244 ; GCN-LABEL: global_store_saddr_i16_d16hi_trunci8_zext_vgpr_offset_neg128:
1245 ; GCN:       ; %bb.0:
1246 ; GCN-NEXT:    global_store_byte_d16_hi v0, v1, s[2:3] offset:-128
1247 ; GCN-NEXT:    s_endpgm
1249 ; GFX11-LABEL: global_store_saddr_i16_d16hi_trunci8_zext_vgpr_offset_neg128:
1250 ; GFX11:       ; %bb.0:
1251 ; GFX11-NEXT:    global_store_d16_hi_b8 v0, v1, s[2:3] offset:-128
1252 ; GFX11-NEXT:    s_nop 0
1253 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1254 ; GFX11-NEXT:    s_endpgm
1255   %zext.offset = zext i32 %voffset to i64
1256   %gep0 = getelementptr inbounds i8, ptr addrspace(1) %sbase, i64 %zext.offset
1257   %gep1 = getelementptr inbounds i8, ptr addrspace(1) %gep0, i64 -128
1258   %data.hi = extractelement <2 x i16> %data, i32 1
1259   %data.hi.trunc = trunc i16 %data.hi to i8
1260   store i8 %data.hi.trunc, ptr addrspace(1) %gep1
1261   ret void