[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / flat-scratch-svs.ll
blob2e01c0064ef7c1ca3693a6bd0c510706d8b39a6c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=gfx940 < %s | FileCheck %s -check-prefixes=GFX940-SDAG
3 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=gfx940 < %s | FileCheck %s -check-prefixes=GFX940-GISEL
4 ; RUN: llc -global-isel=0 -march=amdgcn -mcpu=gfx1100 < %s | FileCheck %s -check-prefixes=GFX11-SDAG
5 ; RUN: llc -global-isel=1 -march=amdgcn -mcpu=gfx1100 < %s | FileCheck %s -check-prefixes=GFX11-GISEL
7 ; Test flat scratch SVS addressing mode with various combinations of alignment
8 ; of soffset, voffset and inst_offset.
10 declare i32 @llvm.amdgcn.workitem.id.x()
12 define amdgpu_kernel void @soff1_voff1(i32 %soff) {
13 ; GFX940-SDAG-LABEL: soff1_voff1:
14 ; GFX940-SDAG:       ; %bb.0: ; %bb
15 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
16 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
17 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
18 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
19 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
20 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, v1, v0
21 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, 1, v0
22 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
23 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
24 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
25 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
26 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
27 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
28 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
29 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
30 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
31 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
32 ; GFX940-SDAG-NEXT:    s_endpgm
34 ; GFX940-GISEL-LABEL: soff1_voff1:
35 ; GFX940-GISEL:       ; %bb.0: ; %bb
36 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
37 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
38 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
39 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
40 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
41 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
42 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v3, 2, v0
43 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
44 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
45 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 2
46 ; GFX940-GISEL-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
47 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
48 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
49 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
50 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
51 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
52 ; GFX940-GISEL-NEXT:    s_endpgm
54 ; GFX11-SDAG-LABEL: soff1_voff1:
55 ; GFX11-SDAG:       ; %bb.0: ; %bb
56 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
57 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2
58 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
59 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
60 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
61 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v3, 4 :: v_dual_add_nc_u32 v4, 1, v0
62 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
63 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
64 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
65 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
66 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
67 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
68 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
69 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
70 ; GFX11-SDAG-NEXT:    s_endpgm
72 ; GFX11-GISEL-LABEL: soff1_voff1:
73 ; GFX11-GISEL:       ; %bb.0: ; %bb
74 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
75 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2
76 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
77 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
78 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
79 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, 4 :: v_dual_add_nc_u32 v4, 1, v0
80 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
81 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
82 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
83 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
84 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
85 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
86 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
87 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
88 ; GFX11-GISEL-NEXT:    s_endpgm
89 bb:
90   %soff1 = mul i32 %soff, 1
91   %a = alloca i8, i32 64, align 4, addrspace(5)
92   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff1
93   %voff = call i32 @llvm.amdgcn.workitem.id.x()
94   %voff1 = mul i32 %voff, 1
95   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff1
96   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
97   store volatile i8 1, ptr addrspace(5) %p1
98   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
99   store volatile i8 2, ptr addrspace(5) %p2
100   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
101   store volatile i8 4, ptr addrspace(5) %p4
102   ret void
105 define amdgpu_kernel void @soff1_voff2(i32 %soff) {
106 ; GFX940-SDAG-LABEL: soff1_voff2:
107 ; GFX940-SDAG:       ; %bb.0: ; %bb
108 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
109 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
110 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
111 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
112 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
113 ; GFX940-SDAG-NEXT:    v_lshl_add_u32 v0, v0, 1, v1
114 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, 1, v0
115 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
116 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
117 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
118 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
119 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
120 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
121 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
122 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
123 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
124 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
125 ; GFX940-SDAG-NEXT:    s_endpgm
127 ; GFX940-GISEL-LABEL: soff1_voff2:
128 ; GFX940-GISEL:       ; %bb.0: ; %bb
129 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
130 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
131 ; GFX940-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v0
132 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
133 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
134 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
135 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
136 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
137 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
138 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 2, v0
139 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 2
140 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
141 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
142 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
143 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
144 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
145 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
146 ; GFX940-GISEL-NEXT:    s_endpgm
148 ; GFX11-SDAG-LABEL: soff1_voff2:
149 ; GFX11-SDAG:       ; %bb.0: ; %bb
150 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
151 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 1, v0
152 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
153 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
154 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
155 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
156 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v4, 1, v0
157 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
158 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
159 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
160 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
161 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
162 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
163 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
164 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
165 ; GFX11-SDAG-NEXT:    s_endpgm
167 ; GFX11-GISEL-LABEL: soff1_voff2:
168 ; GFX11-GISEL:       ; %bb.0: ; %bb
169 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
170 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 1, v0
171 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
172 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
173 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
174 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
175 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v4, 1, v0
176 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
177 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
178 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
179 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
180 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
181 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
182 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
183 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
184 ; GFX11-GISEL-NEXT:    s_endpgm
186   %soff1 = mul i32 %soff, 1
187   %a = alloca i8, i32 64, align 4, addrspace(5)
188   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff1
189   %voff = call i32 @llvm.amdgcn.workitem.id.x()
190   %voff2 = mul i32 %voff, 2
191   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff2
192   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
193   store volatile i8 1, ptr addrspace(5) %p1
194   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
195   store volatile i8 2, ptr addrspace(5) %p2
196   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
197   store volatile i8 4, ptr addrspace(5) %p4
198   ret void
201 define amdgpu_kernel void @soff1_voff4(i32 %soff) {
202 ; GFX940-SDAG-LABEL: soff1_voff4:
203 ; GFX940-SDAG:       ; %bb.0: ; %bb
204 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
205 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
206 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
207 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
208 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
209 ; GFX940-SDAG-NEXT:    v_lshl_add_u32 v0, v0, 2, v1
210 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, 1, v0
211 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
212 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
213 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
214 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
215 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
216 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
217 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
218 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
219 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
220 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
221 ; GFX940-SDAG-NEXT:    s_endpgm
223 ; GFX940-GISEL-LABEL: soff1_voff4:
224 ; GFX940-GISEL:       ; %bb.0: ; %bb
225 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
226 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
227 ; GFX940-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
228 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
229 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
230 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
231 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
232 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
233 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
234 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 2, v0
235 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 2
236 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
237 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
238 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
239 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
240 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
241 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
242 ; GFX940-GISEL-NEXT:    s_endpgm
244 ; GFX11-SDAG-LABEL: soff1_voff4:
245 ; GFX11-SDAG:       ; %bb.0: ; %bb
246 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
247 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 2, v0
248 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
249 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
250 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
251 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
252 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v4, 1, v0
253 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
254 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
255 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
256 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
257 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
258 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
259 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
260 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
261 ; GFX11-SDAG-NEXT:    s_endpgm
263 ; GFX11-GISEL-LABEL: soff1_voff4:
264 ; GFX11-GISEL:       ; %bb.0: ; %bb
265 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
266 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 2, v0
267 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
268 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
269 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
270 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
271 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v4, 1, v0
272 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
273 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
274 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
275 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
276 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
277 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
278 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
279 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
280 ; GFX11-GISEL-NEXT:    s_endpgm
282   %soff1 = mul i32 %soff, 1
283   %a = alloca i8, i32 64, align 4, addrspace(5)
284   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff1
285   %voff = call i32 @llvm.amdgcn.workitem.id.x()
286   %voff4 = mul i32 %voff, 4
287   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff4
288   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
289   store volatile i8 1, ptr addrspace(5) %p1
290   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
291   store volatile i8 2, ptr addrspace(5) %p2
292   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
293   store volatile i8 4, ptr addrspace(5) %p4
294   ret void
297 define amdgpu_kernel void @soff2_voff1(i32 %soff) {
298 ; GFX940-SDAG-LABEL: soff2_voff1:
299 ; GFX940-SDAG:       ; %bb.0: ; %bb
300 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
301 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
302 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
303 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
304 ; GFX940-SDAG-NEXT:    s_lshl_b32 s0, s0, 1
305 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
306 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, v1, v0
307 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, 1, v0
308 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
309 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
310 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
311 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
312 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
313 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
314 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
315 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
316 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
317 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
318 ; GFX940-SDAG-NEXT:    s_endpgm
320 ; GFX940-GISEL-LABEL: soff2_voff1:
321 ; GFX940-GISEL:       ; %bb.0: ; %bb
322 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
323 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
324 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
325 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
326 ; GFX940-GISEL-NEXT:    s_lshl_b32 s0, s0, 1
327 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
328 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
329 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v3, 2, v0
330 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
331 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
332 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 2
333 ; GFX940-GISEL-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
334 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
335 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
336 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
337 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
338 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
339 ; GFX940-GISEL-NEXT:    s_endpgm
341 ; GFX11-SDAG-LABEL: soff2_voff1:
342 ; GFX11-SDAG:       ; %bb.0: ; %bb
343 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
344 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2
345 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
346 ; GFX11-SDAG-NEXT:    s_lshl_b32 s0, s0, 1
347 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
348 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
349 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v3, 4 :: v_dual_add_nc_u32 v4, 1, v0
350 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
351 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
352 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
353 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
354 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
355 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
356 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
357 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
358 ; GFX11-SDAG-NEXT:    s_endpgm
360 ; GFX11-GISEL-LABEL: soff2_voff1:
361 ; GFX11-GISEL:       ; %bb.0: ; %bb
362 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
363 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2
364 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
365 ; GFX11-GISEL-NEXT:    s_lshl_b32 s0, s0, 1
366 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
367 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
368 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, 4 :: v_dual_add_nc_u32 v4, 1, v0
369 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
370 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
371 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
372 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
373 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
374 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
375 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
376 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
377 ; GFX11-GISEL-NEXT:    s_endpgm
379   %soff2 = mul i32 %soff, 2
380   %a = alloca i8, i32 64, align 4, addrspace(5)
381   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff2
382   %voff = call i32 @llvm.amdgcn.workitem.id.x()
383   %voff1 = mul i32 %voff, 1
384   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff1
385   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
386   store volatile i8 1, ptr addrspace(5) %p1
387   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
388   store volatile i8 2, ptr addrspace(5) %p2
389   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
390   store volatile i8 4, ptr addrspace(5) %p4
391   ret void
394 define amdgpu_kernel void @soff2_voff2(i32 %soff) {
395 ; GFX940-SDAG-LABEL: soff2_voff2:
396 ; GFX940-SDAG:       ; %bb.0: ; %bb
397 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
398 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
399 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
400 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
401 ; GFX940-SDAG-NEXT:    s_lshl_b32 s0, s0, 1
402 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
403 ; GFX940-SDAG-NEXT:    v_lshl_add_u32 v0, v0, 1, v1
404 ; GFX940-SDAG-NEXT:    v_or_b32_e32 v1, 1, v0
405 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
406 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
407 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
408 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
409 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
410 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
411 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
412 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
413 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
414 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
415 ; GFX940-SDAG-NEXT:    s_endpgm
417 ; GFX940-GISEL-LABEL: soff2_voff2:
418 ; GFX940-GISEL:       ; %bb.0: ; %bb
419 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
420 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
421 ; GFX940-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v0
422 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
423 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
424 ; GFX940-GISEL-NEXT:    s_lshl_b32 s0, s0, 1
425 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
426 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
427 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
428 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
429 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 2, v0
430 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 2
431 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
432 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
433 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
434 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
435 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
436 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
437 ; GFX940-GISEL-NEXT:    s_endpgm
439 ; GFX11-SDAG-LABEL: soff2_voff2:
440 ; GFX11-SDAG:       ; %bb.0: ; %bb
441 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
442 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 1, v0
443 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
444 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
445 ; GFX11-SDAG-NEXT:    s_lshl_b32 s0, s0, 1
446 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
447 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
448 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
449 ; GFX11-SDAG-NEXT:    v_or_b32_e32 v4, 1, v0
450 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
451 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
452 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
453 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
454 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
455 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
456 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
457 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
458 ; GFX11-SDAG-NEXT:    s_endpgm
460 ; GFX11-GISEL-LABEL: soff2_voff2:
461 ; GFX11-GISEL:       ; %bb.0: ; %bb
462 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
463 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 1, v0
464 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
465 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
466 ; GFX11-GISEL-NEXT:    s_lshl_b32 s0, s0, 1
467 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
468 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
469 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
470 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v4, 1, v0
471 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
472 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
473 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
474 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
475 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
476 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
477 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
478 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
479 ; GFX11-GISEL-NEXT:    s_endpgm
481   %soff2 = mul i32 %soff, 2
482   %a = alloca i8, i32 64, align 4, addrspace(5)
483   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff2
484   %voff = call i32 @llvm.amdgcn.workitem.id.x()
485   %voff2 = mul i32 %voff, 2
486   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff2
487   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
488   store volatile i8 1, ptr addrspace(5) %p1
489   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
490   store volatile i8 2, ptr addrspace(5) %p2
491   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
492   store volatile i8 4, ptr addrspace(5) %p4
493   ret void
496 define amdgpu_kernel void @soff2_voff4(i32 %soff) {
497 ; GFX940-SDAG-LABEL: soff2_voff4:
498 ; GFX940-SDAG:       ; %bb.0: ; %bb
499 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
500 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
501 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
502 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
503 ; GFX940-SDAG-NEXT:    s_lshl_b32 s0, s0, 1
504 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
505 ; GFX940-SDAG-NEXT:    v_lshl_add_u32 v0, v0, 2, v1
506 ; GFX940-SDAG-NEXT:    v_or_b32_e32 v1, 1, v0
507 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
508 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
509 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
510 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
511 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
512 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
513 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
514 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
515 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
516 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
517 ; GFX940-SDAG-NEXT:    s_endpgm
519 ; GFX940-GISEL-LABEL: soff2_voff4:
520 ; GFX940-GISEL:       ; %bb.0: ; %bb
521 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
522 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
523 ; GFX940-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
524 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
525 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
526 ; GFX940-GISEL-NEXT:    s_lshl_b32 s0, s0, 1
527 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
528 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
529 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
530 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
531 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 2, v0
532 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 2
533 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
534 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
535 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
536 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
537 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
538 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
539 ; GFX940-GISEL-NEXT:    s_endpgm
541 ; GFX11-SDAG-LABEL: soff2_voff4:
542 ; GFX11-SDAG:       ; %bb.0: ; %bb
543 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
544 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 2, v0
545 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
546 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
547 ; GFX11-SDAG-NEXT:    s_lshl_b32 s0, s0, 1
548 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
549 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
550 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
551 ; GFX11-SDAG-NEXT:    v_or_b32_e32 v4, 1, v0
552 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
553 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
554 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
555 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
556 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
557 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
558 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
559 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
560 ; GFX11-SDAG-NEXT:    s_endpgm
562 ; GFX11-GISEL-LABEL: soff2_voff4:
563 ; GFX11-GISEL:       ; %bb.0: ; %bb
564 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
565 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 2, v0
566 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
567 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
568 ; GFX11-GISEL-NEXT:    s_lshl_b32 s0, s0, 1
569 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
570 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
571 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
572 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v4, 1, v0
573 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
574 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
575 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
576 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
577 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
578 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
579 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
580 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
581 ; GFX11-GISEL-NEXT:    s_endpgm
583   %soff2 = mul i32 %soff, 2
584   %a = alloca i8, i32 64, align 4, addrspace(5)
585   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff2
586   %voff = call i32 @llvm.amdgcn.workitem.id.x()
587   %voff4 = mul i32 %voff, 4
588   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff4
589   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
590   store volatile i8 1, ptr addrspace(5) %p1
591   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
592   store volatile i8 2, ptr addrspace(5) %p2
593   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
594   store volatile i8 4, ptr addrspace(5) %p4
595   ret void
598 define amdgpu_kernel void @soff4_voff1(i32 %soff) {
599 ; GFX940-SDAG-LABEL: soff4_voff1:
600 ; GFX940-SDAG:       ; %bb.0: ; %bb
601 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
602 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
603 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
604 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
605 ; GFX940-SDAG-NEXT:    s_lshl_b32 s0, s0, 2
606 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
607 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, v1, v0
608 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, 1, v0
609 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
610 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
611 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
612 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
613 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
614 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
615 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
616 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
617 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
618 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
619 ; GFX940-SDAG-NEXT:    s_endpgm
621 ; GFX940-GISEL-LABEL: soff4_voff1:
622 ; GFX940-GISEL:       ; %bb.0: ; %bb
623 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
624 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
625 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
626 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
627 ; GFX940-GISEL-NEXT:    s_lshl_b32 s0, s0, 2
628 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
629 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
630 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v3, 2, v0
631 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
632 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
633 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 2
634 ; GFX940-GISEL-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
635 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
636 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
637 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
638 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
639 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
640 ; GFX940-GISEL-NEXT:    s_endpgm
642 ; GFX11-SDAG-LABEL: soff4_voff1:
643 ; GFX11-SDAG:       ; %bb.0: ; %bb
644 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
645 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2
646 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
647 ; GFX11-SDAG-NEXT:    s_lshl_b32 s0, s0, 2
648 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
649 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
650 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v3, 4 :: v_dual_add_nc_u32 v4, 1, v0
651 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
652 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
653 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
654 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
655 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
656 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
657 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
658 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
659 ; GFX11-SDAG-NEXT:    s_endpgm
661 ; GFX11-GISEL-LABEL: soff4_voff1:
662 ; GFX11-GISEL:       ; %bb.0: ; %bb
663 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
664 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_mov_b32 v2, 2
665 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
666 ; GFX11-GISEL-NEXT:    s_lshl_b32 s0, s0, 2
667 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
668 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
669 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, 4 :: v_dual_add_nc_u32 v4, 1, v0
670 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
671 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
672 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
673 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
674 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
675 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
676 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
677 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
678 ; GFX11-GISEL-NEXT:    s_endpgm
680   %soff4 = mul i32 %soff, 4
681   %a = alloca i8, i32 64, align 4, addrspace(5)
682   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff4
683   %voff = call i32 @llvm.amdgcn.workitem.id.x()
684   %voff1 = mul i32 %voff, 1
685   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff1
686   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
687   store volatile i8 1, ptr addrspace(5) %p1
688   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
689   store volatile i8 2, ptr addrspace(5) %p2
690   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
691   store volatile i8 4, ptr addrspace(5) %p4
692   ret void
695 define amdgpu_kernel void @soff4_voff2(i32 %soff) {
696 ; GFX940-SDAG-LABEL: soff4_voff2:
697 ; GFX940-SDAG:       ; %bb.0: ; %bb
698 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
699 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
700 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
701 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
702 ; GFX940-SDAG-NEXT:    s_lshl_b32 s0, s0, 2
703 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
704 ; GFX940-SDAG-NEXT:    v_lshl_add_u32 v0, v0, 1, v1
705 ; GFX940-SDAG-NEXT:    v_or_b32_e32 v1, 1, v0
706 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v3, 2, v0
707 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
708 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
709 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
710 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
711 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
712 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
713 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
714 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
715 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
716 ; GFX940-SDAG-NEXT:    s_endpgm
718 ; GFX940-GISEL-LABEL: soff4_voff2:
719 ; GFX940-GISEL:       ; %bb.0: ; %bb
720 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
721 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
722 ; GFX940-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 1, v0
723 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
724 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
725 ; GFX940-GISEL-NEXT:    s_lshl_b32 s0, s0, 2
726 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
727 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
728 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
729 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
730 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 2, v0
731 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 2
732 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
733 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
734 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
735 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
736 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
737 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
738 ; GFX940-GISEL-NEXT:    s_endpgm
740 ; GFX11-SDAG-LABEL: soff4_voff2:
741 ; GFX11-SDAG:       ; %bb.0: ; %bb
742 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
743 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 1, v0
744 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
745 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
746 ; GFX11-SDAG-NEXT:    s_lshl_b32 s0, s0, 2
747 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
748 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
749 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
750 ; GFX11-SDAG-NEXT:    v_or_b32_e32 v4, 1, v0
751 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v5, 2, v0
752 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
753 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
754 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
755 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
756 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
757 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
758 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
759 ; GFX11-SDAG-NEXT:    s_endpgm
761 ; GFX11-GISEL-LABEL: soff4_voff2:
762 ; GFX11-GISEL:       ; %bb.0: ; %bb
763 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
764 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 1, v0
765 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
766 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
767 ; GFX11-GISEL-NEXT:    s_lshl_b32 s0, s0, 2
768 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
769 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
770 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
771 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v4, 1, v0
772 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
773 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
774 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
775 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
776 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
777 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
778 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
779 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
780 ; GFX11-GISEL-NEXT:    s_endpgm
782   %soff4 = mul i32 %soff, 4
783   %a = alloca i8, i32 64, align 4, addrspace(5)
784   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff4
785   %voff = call i32 @llvm.amdgcn.workitem.id.x()
786   %voff2 = mul i32 %voff, 2
787   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff2
788   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
789   store volatile i8 1, ptr addrspace(5) %p1
790   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
791   store volatile i8 2, ptr addrspace(5) %p2
792   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
793   store volatile i8 4, ptr addrspace(5) %p4
794   ret void
797 define amdgpu_kernel void @soff4_voff4(i32 %soff) {
798 ; GFX940-SDAG-LABEL: soff4_voff4:
799 ; GFX940-SDAG:       ; %bb.0: ; %bb
800 ; GFX940-SDAG-NEXT:    s_load_dword s0, s[0:1], 0x24
801 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
802 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v2, 1
803 ; GFX940-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
804 ; GFX940-SDAG-NEXT:    s_lshl_b32 s0, s0, 2
805 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v1, s0, v1
806 ; GFX940-SDAG-NEXT:    v_lshl_add_u32 v0, v0, 2, v1
807 ; GFX940-SDAG-NEXT:    v_or_b32_e32 v1, 1, v0
808 ; GFX940-SDAG-NEXT:    v_or_b32_e32 v3, 2, v0
809 ; GFX940-SDAG-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
810 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
811 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 2
812 ; GFX940-SDAG-NEXT:    scratch_store_byte v3, v1, off sc0 sc1
813 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
814 ; GFX940-SDAG-NEXT:    v_add_u32_e32 v0, 4, v0
815 ; GFX940-SDAG-NEXT:    v_mov_b32_e32 v1, 4
816 ; GFX940-SDAG-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
817 ; GFX940-SDAG-NEXT:    s_waitcnt vmcnt(0)
818 ; GFX940-SDAG-NEXT:    s_endpgm
820 ; GFX940-GISEL-LABEL: soff4_voff4:
821 ; GFX940-GISEL:       ; %bb.0: ; %bb
822 ; GFX940-GISEL-NEXT:    s_load_dword s0, s[0:1], 0x24
823 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
824 ; GFX940-GISEL-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
825 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 1
826 ; GFX940-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
827 ; GFX940-GISEL-NEXT:    s_lshl_b32 s0, s0, 2
828 ; GFX940-GISEL-NEXT:    v_add3_u32 v0, v1, s0, v0
829 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 1, v0
830 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
831 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
832 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v1, 2, v0
833 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v2, 2
834 ; GFX940-GISEL-NEXT:    scratch_store_byte v1, v2, off sc0 sc1
835 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
836 ; GFX940-GISEL-NEXT:    v_add_u32_e32 v0, 4, v0
837 ; GFX940-GISEL-NEXT:    v_mov_b32_e32 v1, 4
838 ; GFX940-GISEL-NEXT:    scratch_store_byte v0, v1, off sc0 sc1
839 ; GFX940-GISEL-NEXT:    s_waitcnt vmcnt(0)
840 ; GFX940-GISEL-NEXT:    s_endpgm
842 ; GFX11-SDAG-LABEL: soff4_voff4:
843 ; GFX11-SDAG:       ; %bb.0: ; %bb
844 ; GFX11-SDAG-NEXT:    s_load_b32 s0, s[0:1], 0x24
845 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 2, v0
846 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
847 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
848 ; GFX11-SDAG-NEXT:    s_lshl_b32 s0, s0, 2
849 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
850 ; GFX11-SDAG-NEXT:    v_add3_u32 v0, 4, s0, v0
851 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
852 ; GFX11-SDAG-NEXT:    v_or_b32_e32 v4, 1, v0
853 ; GFX11-SDAG-NEXT:    v_or_b32_e32 v5, 2, v0
854 ; GFX11-SDAG-NEXT:    v_add_nc_u32_e32 v0, 4, v0
855 ; GFX11-SDAG-NEXT:    scratch_store_b8 v4, v1, off dlc
856 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
857 ; GFX11-SDAG-NEXT:    scratch_store_b8 v5, v2, off dlc
858 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
859 ; GFX11-SDAG-NEXT:    scratch_store_b8 v0, v3, off dlc
860 ; GFX11-SDAG-NEXT:    s_waitcnt_vscnt null, 0x0
861 ; GFX11-SDAG-NEXT:    s_endpgm
863 ; GFX11-GISEL-LABEL: soff4_voff4:
864 ; GFX11-GISEL:       ; %bb.0: ; %bb
865 ; GFX11-GISEL-NEXT:    s_load_b32 s0, s[0:1], 0x24
866 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 1 :: v_dual_lshlrev_b32 v0, 2, v0
867 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 2 :: v_dual_mov_b32 v3, 4
868 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
869 ; GFX11-GISEL-NEXT:    s_lshl_b32 s0, s0, 2
870 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
871 ; GFX11-GISEL-NEXT:    v_add3_u32 v0, 4, s0, v0
872 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
873 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v4, 1, v0
874 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v5, 2, v0
875 ; GFX11-GISEL-NEXT:    v_add_nc_u32_e32 v0, 4, v0
876 ; GFX11-GISEL-NEXT:    scratch_store_b8 v4, v1, off dlc
877 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
878 ; GFX11-GISEL-NEXT:    scratch_store_b8 v5, v2, off dlc
879 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
880 ; GFX11-GISEL-NEXT:    scratch_store_b8 v0, v3, off dlc
881 ; GFX11-GISEL-NEXT:    s_waitcnt_vscnt null, 0x0
882 ; GFX11-GISEL-NEXT:    s_endpgm
884   %soff4 = mul i32 %soff, 4
885   %a = alloca i8, i32 64, align 4, addrspace(5)
886   %as = getelementptr i8, ptr addrspace(5) %a, i32 %soff4
887   %voff = call i32 @llvm.amdgcn.workitem.id.x()
888   %voff4 = mul i32 %voff, 4
889   %asv = getelementptr i8, ptr addrspace(5) %as, i32 %voff4
890   %p1 = getelementptr i8, ptr addrspace(5) %asv, i32 1
891   store volatile i8 1, ptr addrspace(5) %p1
892   %p2 = getelementptr i8, ptr addrspace(5) %asv, i32 2
893   store volatile i8 2, ptr addrspace(5) %p2
894   %p4 = getelementptr i8, ptr addrspace(5) %asv, i32 4
895   store volatile i8 4, ptr addrspace(5) %p4
896   ret void