Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / calling-conventions.ll
blobcb89841b58f9787f7a98875ce1b944ad904809e8
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=amdgcn -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,SI %s
3 ; RUN: llc -mtriple=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,VI %s
4 ; RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX11 %s
6 ; Make sure we don't crash or assert on spir_kernel calling convention.
8 define spir_kernel void @kernel(ptr addrspace(1) %out) {
9 ; SI-LABEL: kernel:
10 ; SI:       ; %bb.0: ; %entry
11 ; SI-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
12 ; SI-NEXT:    s_mov_b32 s3, 0xf000
13 ; SI-NEXT:    s_mov_b32 s2, -1
14 ; SI-NEXT:    v_mov_b32_e32 v0, 0
15 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
16 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
17 ; SI-NEXT:    s_endpgm
19 ; VI-LABEL: kernel:
20 ; VI:       ; %bb.0: ; %entry
21 ; VI-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
22 ; VI-NEXT:    v_mov_b32_e32 v2, 0
23 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
24 ; VI-NEXT:    v_mov_b32_e32 v0, s0
25 ; VI-NEXT:    v_mov_b32_e32 v1, s1
26 ; VI-NEXT:    flat_store_dword v[0:1], v2
27 ; VI-NEXT:    s_endpgm
29 ; GFX11-LABEL: kernel:
30 ; GFX11:       ; %bb.0: ; %entry
31 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
32 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
33 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
34 ; GFX11-NEXT:    global_store_b32 v0, v0, s[0:1]
35 ; GFX11-NEXT:    s_nop 0
36 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
37 ; GFX11-NEXT:    s_endpgm
38 entry:
39   store i32 0, ptr addrspace(1) %out
40   ret void
43 ; FIXME: This is treated like a kernel
44 ; XGCN-LABEL: {{^}}func:
45 ; XGCN: s_endpgm
46 ; define spir_func void @func(ptr addrspace(1) %out) {
47 ; entry:
48 ;   store i32 0, ptr addrspace(1) %out
49 ;   ret void
50 ; }
52 define amdgpu_ps half @ps_ret_cc_f16(half %arg0) {
53 ; SI-LABEL: ps_ret_cc_f16:
54 ; SI:       ; %bb.0:
55 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
56 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
57 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
58 ; SI-NEXT:    ; return to shader part epilog
60 ; VI-LABEL: ps_ret_cc_f16:
61 ; VI:       ; %bb.0:
62 ; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0
63 ; VI-NEXT:    ; return to shader part epilog
65 ; GFX11-LABEL: ps_ret_cc_f16:
66 ; GFX11:       ; %bb.0:
67 ; GFX11-NEXT:    v_add_f16_e32 v0, 1.0, v0
68 ; GFX11-NEXT:    ; return to shader part epilog
69   %add = fadd half %arg0, 1.0
70   ret half %add
73 define amdgpu_ps half @ps_ret_cc_inreg_f16(half inreg %arg0) {
74 ; SI-LABEL: ps_ret_cc_inreg_f16:
75 ; SI:       ; %bb.0:
76 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, s0
77 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
78 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
79 ; SI-NEXT:    ; return to shader part epilog
81 ; VI-LABEL: ps_ret_cc_inreg_f16:
82 ; VI:       ; %bb.0:
83 ; VI-NEXT:    v_add_f16_e64 v0, s0, 1.0
84 ; VI-NEXT:    ; return to shader part epilog
86 ; GFX11-LABEL: ps_ret_cc_inreg_f16:
87 ; GFX11:       ; %bb.0:
88 ; GFX11-NEXT:    v_add_f16_e64 v0, s0, 1.0
89 ; GFX11-NEXT:    ; return to shader part epilog
90   %add = fadd half %arg0, 1.0
91   ret half %add
94 define fastcc float @fastcc(float %arg0) #0 {
95 ; GCN-LABEL: fastcc:
96 ; GCN:       ; %bb.0:
97 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
98 ; GCN-NEXT:    v_add_f32_e32 v0, 4.0, v0
99 ; GCN-NEXT:    s_setpc_b64 s[30:31]
100   %add = fadd float %arg0, 4.0
101   ret float %add
104 define coldcc float @coldcc(float %arg0) #0 {
105 ; GCN-LABEL: coldcc:
106 ; GCN:       ; %bb.0:
107 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
108 ; GCN-NEXT:    v_add_f32_e32 v0, 4.0, v0
109 ; GCN-NEXT:    s_setpc_b64 s[30:31]
110  %add = fadd float %arg0, 4.0
111  ret float %add
114 define amdgpu_kernel void @call_coldcc() #0 {
115 ; SI-LABEL: call_coldcc:
116 ; SI:       ; %bb.0:
117 ; SI-NEXT:    s_mov_b32 s32, 0
118 ; SI-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
119 ; SI-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
120 ; SI-NEXT:    s_mov_b32 s10, -1
121 ; SI-NEXT:    s_mov_b32 s11, 0xe8f000
122 ; SI-NEXT:    s_add_u32 s8, s8, s1
123 ; SI-NEXT:    s_addc_u32 s9, s9, 0
124 ; SI-NEXT:    s_getpc_b64 s[0:1]
125 ; SI-NEXT:    s_add_u32 s0, s0, coldcc@gotpcrel32@lo+4
126 ; SI-NEXT:    s_addc_u32 s1, s1, coldcc@gotpcrel32@hi+12
127 ; SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
128 ; SI-NEXT:    v_mov_b32_e32 v0, 1.0
129 ; SI-NEXT:    s_mov_b64 s[0:1], s[8:9]
130 ; SI-NEXT:    s_mov_b64 s[2:3], s[10:11]
131 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
132 ; SI-NEXT:    s_swappc_b64 s[30:31], s[4:5]
133 ; SI-NEXT:    s_mov_b32 s3, 0xf000
134 ; SI-NEXT:    s_mov_b32 s2, -1
135 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
136 ; SI-NEXT:    s_endpgm
138 ; VI-LABEL: call_coldcc:
139 ; VI:       ; %bb.0:
140 ; VI-NEXT:    s_mov_b32 s88, SCRATCH_RSRC_DWORD0
141 ; VI-NEXT:    s_mov_b32 s89, SCRATCH_RSRC_DWORD1
142 ; VI-NEXT:    s_mov_b32 s90, -1
143 ; VI-NEXT:    s_mov_b32 s91, 0xe80000
144 ; VI-NEXT:    s_add_u32 s88, s88, s1
145 ; VI-NEXT:    s_addc_u32 s89, s89, 0
146 ; VI-NEXT:    s_getpc_b64 s[0:1]
147 ; VI-NEXT:    s_add_u32 s0, s0, coldcc@gotpcrel32@lo+4
148 ; VI-NEXT:    s_addc_u32 s1, s1, coldcc@gotpcrel32@hi+12
149 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
150 ; VI-NEXT:    s_mov_b64 s[0:1], s[88:89]
151 ; VI-NEXT:    s_mov_b64 s[2:3], s[90:91]
152 ; VI-NEXT:    v_mov_b32_e32 v0, 1.0
153 ; VI-NEXT:    s_mov_b32 s32, 0
154 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
155 ; VI-NEXT:    s_swappc_b64 s[30:31], s[4:5]
156 ; VI-NEXT:    flat_store_dword v[0:1], v0
157 ; VI-NEXT:    s_endpgm
159 ; GFX11-LABEL: call_coldcc:
160 ; GFX11:       ; %bb.0:
161 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
162 ; GFX11-NEXT:    s_add_u32 s0, s0, coldcc@gotpcrel32@lo+4
163 ; GFX11-NEXT:    s_addc_u32 s1, s1, coldcc@gotpcrel32@hi+12
164 ; GFX11-NEXT:    v_mov_b32_e32 v0, 1.0
165 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
166 ; GFX11-NEXT:    s_mov_b32 s32, 0
167 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
168 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
169 ; GFX11-NEXT:    global_store_b32 v[0:1], v0, off
170 ; GFX11-NEXT:    s_nop 0
171 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
172 ; GFX11-NEXT:    s_endpgm
173   %val = call float @coldcc(float 1.0)
174   store float %val, ptr addrspace(1) undef
175   ret void
178 define amdgpu_kernel void @call_fastcc() #0 {
179 ; SI-LABEL: call_fastcc:
180 ; SI:       ; %bb.0:
181 ; SI-NEXT:    s_mov_b32 s32, 0
182 ; SI-NEXT:    s_mov_b32 s8, SCRATCH_RSRC_DWORD0
183 ; SI-NEXT:    s_mov_b32 s9, SCRATCH_RSRC_DWORD1
184 ; SI-NEXT:    s_mov_b32 s10, -1
185 ; SI-NEXT:    s_mov_b32 s11, 0xe8f000
186 ; SI-NEXT:    s_add_u32 s8, s8, s1
187 ; SI-NEXT:    s_addc_u32 s9, s9, 0
188 ; SI-NEXT:    s_getpc_b64 s[0:1]
189 ; SI-NEXT:    s_add_u32 s0, s0, fastcc@gotpcrel32@lo+4
190 ; SI-NEXT:    s_addc_u32 s1, s1, fastcc@gotpcrel32@hi+12
191 ; SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
192 ; SI-NEXT:    v_mov_b32_e32 v0, 1.0
193 ; SI-NEXT:    s_mov_b64 s[0:1], s[8:9]
194 ; SI-NEXT:    s_mov_b64 s[2:3], s[10:11]
195 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
196 ; SI-NEXT:    s_swappc_b64 s[30:31], s[4:5]
197 ; SI-NEXT:    s_mov_b32 s3, 0xf000
198 ; SI-NEXT:    s_mov_b32 s2, -1
199 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
200 ; SI-NEXT:    s_endpgm
202 ; VI-LABEL: call_fastcc:
203 ; VI:       ; %bb.0:
204 ; VI-NEXT:    s_mov_b32 s88, SCRATCH_RSRC_DWORD0
205 ; VI-NEXT:    s_mov_b32 s89, SCRATCH_RSRC_DWORD1
206 ; VI-NEXT:    s_mov_b32 s90, -1
207 ; VI-NEXT:    s_mov_b32 s91, 0xe80000
208 ; VI-NEXT:    s_add_u32 s88, s88, s1
209 ; VI-NEXT:    s_addc_u32 s89, s89, 0
210 ; VI-NEXT:    s_getpc_b64 s[0:1]
211 ; VI-NEXT:    s_add_u32 s0, s0, fastcc@gotpcrel32@lo+4
212 ; VI-NEXT:    s_addc_u32 s1, s1, fastcc@gotpcrel32@hi+12
213 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x0
214 ; VI-NEXT:    s_mov_b64 s[0:1], s[88:89]
215 ; VI-NEXT:    s_mov_b64 s[2:3], s[90:91]
216 ; VI-NEXT:    v_mov_b32_e32 v0, 1.0
217 ; VI-NEXT:    s_mov_b32 s32, 0
218 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
219 ; VI-NEXT:    s_swappc_b64 s[30:31], s[4:5]
220 ; VI-NEXT:    flat_store_dword v[0:1], v0
221 ; VI-NEXT:    s_endpgm
223 ; GFX11-LABEL: call_fastcc:
224 ; GFX11:       ; %bb.0:
225 ; GFX11-NEXT:    s_getpc_b64 s[0:1]
226 ; GFX11-NEXT:    s_add_u32 s0, s0, fastcc@gotpcrel32@lo+4
227 ; GFX11-NEXT:    s_addc_u32 s1, s1, fastcc@gotpcrel32@hi+12
228 ; GFX11-NEXT:    v_mov_b32_e32 v0, 1.0
229 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x0
230 ; GFX11-NEXT:    s_mov_b32 s32, 0
231 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
232 ; GFX11-NEXT:    s_swappc_b64 s[30:31], s[0:1]
233 ; GFX11-NEXT:    global_store_b32 v[0:1], v0, off
234 ; GFX11-NEXT:    s_nop 0
235 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
236 ; GFX11-NEXT:    s_endpgm
237   %val = call float @fastcc(float 1.0)
238   store float %val, ptr addrspace(1) undef
239   ret void
242 ; Mesa compute shader: check for 47176 (COMPUTE_PGM_RSRC1) in .AMDGPU.config
243 define amdgpu_cs half @cs_mesa(half %arg0) {
244 ; SI-LABEL: cs_mesa:
245 ; SI:       ; %bb.0:
246 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
247 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
248 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
249 ; SI-NEXT:    ; return to shader part epilog
251 ; VI-LABEL: cs_mesa:
252 ; VI:       ; %bb.0:
253 ; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0
254 ; VI-NEXT:    ; return to shader part epilog
256 ; GFX11-LABEL: cs_mesa:
257 ; GFX11:       ; %bb.0:
258 ; GFX11-NEXT:    v_add_f16_e32 v0, 1.0, v0
259 ; GFX11-NEXT:    ; return to shader part epilog
260   %add = fadd half %arg0, 1.0
261   ret half %add
264 ; Mesa pixel shader: check for 45096 (SPI_SHADER_PGM_RSRC1_PS) in .AMDGPU.config
265 define amdgpu_ps half @ps_mesa_f16(half %arg0) {
266 ; SI-LABEL: ps_mesa_f16:
267 ; SI:       ; %bb.0:
268 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
269 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
270 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
271 ; SI-NEXT:    ; return to shader part epilog
273 ; VI-LABEL: ps_mesa_f16:
274 ; VI:       ; %bb.0:
275 ; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0
276 ; VI-NEXT:    ; return to shader part epilog
278 ; GFX11-LABEL: ps_mesa_f16:
279 ; GFX11:       ; %bb.0:
280 ; GFX11-NEXT:    v_add_f16_e32 v0, 1.0, v0
281 ; GFX11-NEXT:    ; return to shader part epilog
282   %add = fadd half %arg0, 1.0
283   ret half %add
286 ; Mesa vertex shader: check for 45352 (SPI_SHADER_PGM_RSRC1_VS) in .AMDGPU.config
287 define amdgpu_vs half @vs_mesa(half %arg0) {
288 ; SI-LABEL: vs_mesa:
289 ; SI:       ; %bb.0:
290 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
291 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
292 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
293 ; SI-NEXT:    ; return to shader part epilog
295 ; VI-LABEL: vs_mesa:
296 ; VI:       ; %bb.0:
297 ; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0
298 ; VI-NEXT:    ; return to shader part epilog
300 ; GFX11-LABEL: vs_mesa:
301 ; GFX11:       ; %bb.0:
302 ; GFX11-NEXT:    v_add_f16_e32 v0, 1.0, v0
303 ; GFX11-NEXT:    ; return to shader part epilog
304   %add = fadd half %arg0, 1.0
305   ret half %add
308 ; Mesa geometry shader: check for 45608 (SPI_SHADER_PGM_RSRC1_GS) in .AMDGPU.config
309 define amdgpu_gs half @gs_mesa(half %arg0) {
310 ; SI-LABEL: gs_mesa:
311 ; SI:       ; %bb.0:
312 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
313 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
314 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
315 ; SI-NEXT:    ; return to shader part epilog
317 ; VI-LABEL: gs_mesa:
318 ; VI:       ; %bb.0:
319 ; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0
320 ; VI-NEXT:    ; return to shader part epilog
322 ; GFX11-LABEL: gs_mesa:
323 ; GFX11:       ; %bb.0:
324 ; GFX11-NEXT:    v_add_f16_e32 v0, 1.0, v0
325 ; GFX11-NEXT:    ; return to shader part epilog
326   %add = fadd half %arg0, 1.0
327   ret half %add
330 ; Mesa hull shader: check for 46120 (SPI_SHADER_PGM_RSRC1_HS) in .AMDGPU.config
331 define amdgpu_hs half @hs_mesa(half %arg0) {
332 ; SI-LABEL: hs_mesa:
333 ; SI:       ; %bb.0:
334 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
335 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
336 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
337 ; SI-NEXT:    ; return to shader part epilog
339 ; VI-LABEL: hs_mesa:
340 ; VI:       ; %bb.0:
341 ; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0
342 ; VI-NEXT:    ; return to shader part epilog
344 ; GFX11-LABEL: hs_mesa:
345 ; GFX11:       ; %bb.0:
346 ; GFX11-NEXT:    v_add_f16_e32 v0, 1.0, v0
347 ; GFX11-NEXT:    ; return to shader part epilog
348   %add = fadd half %arg0, 1.0
349   ret half %add
352 ; FIXME: Inconsistent ABI between targets
354 define amdgpu_ps <2 x half> @ps_mesa_v2f16(<2 x half> %arg0) {
355 ; SI-LABEL: ps_mesa_v2f16:
356 ; SI:       ; %bb.0:
357 ; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1
358 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
359 ; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1
360 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
361 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
362 ; SI-NEXT:    v_add_f32_e32 v1, 1.0, v1
363 ; SI-NEXT:    ; return to shader part epilog
365 ; VI-LABEL: ps_mesa_v2f16:
366 ; VI:       ; %bb.0:
367 ; VI-NEXT:    v_mov_b32_e32 v1, 0x3c00
368 ; VI-NEXT:    v_add_f16_sdwa v1, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
369 ; VI-NEXT:    v_add_f16_e32 v0, 1.0, v0
370 ; VI-NEXT:    v_or_b32_e32 v0, v0, v1
371 ; VI-NEXT:    ; return to shader part epilog
373 ; GFX11-LABEL: ps_mesa_v2f16:
374 ; GFX11:       ; %bb.0:
375 ; GFX11-NEXT:    v_pk_add_f16 v0, v0, 1.0 op_sel_hi:[1,0]
376 ; GFX11-NEXT:    ; return to shader part epilog
377   %add = fadd <2 x half> %arg0, <half 1.0, half 1.0>
378   ret <2 x half> %add
381 define amdgpu_ps <2 x half> @ps_mesa_inreg_v2f16(<2 x half> inreg %arg0) {
382 ; SI-LABEL: ps_mesa_inreg_v2f16:
383 ; SI:       ; %bb.0:
384 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, s1
385 ; SI-NEXT:    v_cvt_f16_f32_e32 v1, s0
386 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v0
387 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v1
388 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
389 ; SI-NEXT:    v_add_f32_e32 v1, 1.0, v2
390 ; SI-NEXT:    ; return to shader part epilog
392 ; VI-LABEL: ps_mesa_inreg_v2f16:
393 ; VI:       ; %bb.0:
394 ; VI-NEXT:    s_lshr_b32 s1, s0, 16
395 ; VI-NEXT:    v_mov_b32_e32 v0, s1
396 ; VI-NEXT:    v_mov_b32_e32 v1, 0x3c00
397 ; VI-NEXT:    v_add_f16_sdwa v0, v0, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
398 ; VI-NEXT:    v_add_f16_e64 v1, s0, 1.0
399 ; VI-NEXT:    v_or_b32_e32 v0, v1, v0
400 ; VI-NEXT:    ; return to shader part epilog
402 ; GFX11-LABEL: ps_mesa_inreg_v2f16:
403 ; GFX11:       ; %bb.0:
404 ; GFX11-NEXT:    v_pk_add_f16 v0, s0, 1.0 op_sel_hi:[1,0]
405 ; GFX11-NEXT:    ; return to shader part epilog
406   %add = fadd <2 x half> %arg0, <half 1.0, half 1.0>
407   ret <2 x half> %add
410 define amdgpu_ps void @ps_mesa_v2i16(<2 x i16> %arg0) {
411 ; SI-LABEL: ps_mesa_v2i16:
412 ; SI:       ; %bb.0:
413 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v1
414 ; SI-NEXT:    v_add_i32_e32 v0, vcc, 1, v0
415 ; SI-NEXT:    s_mov_b32 s3, 0xf000
416 ; SI-NEXT:    v_and_b32_e32 v0, 0xffff, v0
417 ; SI-NEXT:    v_or_b32_e32 v0, v1, v0
418 ; SI-NEXT:    v_add_i32_e32 v0, vcc, 0x10000, v0
419 ; SI-NEXT:    s_mov_b32 s2, -1
420 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
421 ; SI-NEXT:    s_endpgm
423 ; VI-LABEL: ps_mesa_v2i16:
424 ; VI:       ; %bb.0:
425 ; VI-NEXT:    v_mov_b32_e32 v2, 1
426 ; VI-NEXT:    v_add_u16_e32 v1, 1, v0
427 ; VI-NEXT:    v_add_u16_sdwa v0, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
428 ; VI-NEXT:    v_or_b32_e32 v0, v1, v0
429 ; VI-NEXT:    flat_store_dword v[0:1], v0
430 ; VI-NEXT:    s_endpgm
432 ; GFX11-LABEL: ps_mesa_v2i16:
433 ; GFX11:       ; %bb.0:
434 ; GFX11-NEXT:    v_pk_sub_u16 v0, v0, -1 op_sel_hi:[1,0]
435 ; GFX11-NEXT:    global_store_b32 v[0:1], v0, off
436 ; GFX11-NEXT:    s_nop 0
437 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
438 ; GFX11-NEXT:    s_endpgm
439   %add = add <2 x i16> %arg0, <i16 1, i16 1>
440   store <2 x i16> %add, ptr addrspace(1) undef
441   ret void
444 define amdgpu_ps void @ps_mesa_inreg_v2i16(<2 x i16> inreg %arg0) {
445 ; SI-LABEL: ps_mesa_inreg_v2i16:
446 ; SI:       ; %bb.0:
447 ; SI-NEXT:    s_lshl_b32 s1, s1, 16
448 ; SI-NEXT:    s_add_i32 s0, s0, 1
449 ; SI-NEXT:    s_mov_b32 s3, 0xf000
450 ; SI-NEXT:    s_and_b32 s0, s0, 0xffff
451 ; SI-NEXT:    s_or_b32 s0, s1, s0
452 ; SI-NEXT:    s_add_i32 s0, s0, 0x10000
453 ; SI-NEXT:    s_mov_b32 s2, -1
454 ; SI-NEXT:    v_mov_b32_e32 v0, s0
455 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
456 ; SI-NEXT:    s_endpgm
458 ; VI-LABEL: ps_mesa_inreg_v2i16:
459 ; VI:       ; %bb.0:
460 ; VI-NEXT:    s_and_b32 s1, s0, 0xffff0000
461 ; VI-NEXT:    s_add_i32 s0, s0, 1
462 ; VI-NEXT:    s_and_b32 s0, s0, 0xffff
463 ; VI-NEXT:    s_or_b32 s0, s1, s0
464 ; VI-NEXT:    s_add_i32 s0, s0, 0x10000
465 ; VI-NEXT:    v_mov_b32_e32 v0, s0
466 ; VI-NEXT:    flat_store_dword v[0:1], v0
467 ; VI-NEXT:    s_endpgm
469 ; GFX11-LABEL: ps_mesa_inreg_v2i16:
470 ; GFX11:       ; %bb.0:
471 ; GFX11-NEXT:    v_pk_sub_u16 v0, s0, -1 op_sel_hi:[1,0]
472 ; GFX11-NEXT:    global_store_b32 v[0:1], v0, off
473 ; GFX11-NEXT:    s_nop 0
474 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
475 ; GFX11-NEXT:    s_endpgm
476   %add = add <2 x i16> %arg0, <i16 1, i16 1>
477   store <2 x i16> %add, ptr addrspace(1) undef
478   ret void
481 ; FIXME: Differenet ABI for VI+
483 define amdgpu_ps <4 x half> @ps_mesa_v4f16(<4 x half> %arg0) {
484 ; SI-LABEL: ps_mesa_v4f16:
485 ; SI:       ; %bb.0:
486 ; SI-NEXT:    v_cvt_f16_f32_e32 v3, v3
487 ; SI-NEXT:    v_cvt_f16_f32_e32 v2, v2
488 ; SI-NEXT:    v_cvt_f16_f32_e32 v1, v1
489 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v0
490 ; SI-NEXT:    v_cvt_f32_f16_e32 v3, v3
491 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2
492 ; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1
493 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
494 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
495 ; SI-NEXT:    v_add_f32_e32 v1, 1.0, v1
496 ; SI-NEXT:    v_add_f32_e32 v2, 1.0, v2
497 ; SI-NEXT:    v_add_f32_e32 v3, 1.0, v3
498 ; SI-NEXT:    ; return to shader part epilog
500 ; VI-LABEL: ps_mesa_v4f16:
501 ; VI:       ; %bb.0:
502 ; VI-NEXT:    v_mov_b32_e32 v3, 0x3c00
503 ; VI-NEXT:    v_add_f16_e32 v2, 1.0, v1
504 ; VI-NEXT:    v_add_f16_sdwa v1, v1, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
505 ; VI-NEXT:    v_add_f16_e32 v4, 1.0, v0
506 ; VI-NEXT:    v_add_f16_sdwa v0, v0, v3 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
507 ; VI-NEXT:    v_or_b32_e32 v0, v4, v0
508 ; VI-NEXT:    v_or_b32_e32 v1, v2, v1
509 ; VI-NEXT:    ; return to shader part epilog
511 ; GFX11-LABEL: ps_mesa_v4f16:
512 ; GFX11:       ; %bb.0:
513 ; GFX11-NEXT:    v_pk_add_f16 v0, v0, 1.0 op_sel_hi:[1,0]
514 ; GFX11-NEXT:    v_pk_add_f16 v1, v1, 1.0 op_sel_hi:[1,0]
515 ; GFX11-NEXT:    ; return to shader part epilog
516   %add = fadd <4 x half> %arg0, <half 1.0, half 1.0, half 1.0, half 1.0>
517   ret <4 x half> %add
520 define amdgpu_ps <4 x half> @ps_mesa_inreg_v4f16(<4 x half> inreg %arg0) {
521 ; SI-LABEL: ps_mesa_inreg_v4f16:
522 ; SI:       ; %bb.0:
523 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, s3
524 ; SI-NEXT:    v_cvt_f16_f32_e32 v1, s2
525 ; SI-NEXT:    v_cvt_f16_f32_e32 v2, s1
526 ; SI-NEXT:    v_cvt_f16_f32_e32 v3, s0
527 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v0
528 ; SI-NEXT:    v_cvt_f32_f16_e32 v5, v1
529 ; SI-NEXT:    v_cvt_f32_f16_e32 v1, v2
530 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v3
531 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
532 ; SI-NEXT:    v_add_f32_e32 v1, 1.0, v1
533 ; SI-NEXT:    v_add_f32_e32 v2, 1.0, v5
534 ; SI-NEXT:    v_add_f32_e32 v3, 1.0, v4
535 ; SI-NEXT:    ; return to shader part epilog
537 ; VI-LABEL: ps_mesa_inreg_v4f16:
538 ; VI:       ; %bb.0:
539 ; VI-NEXT:    v_add_f16_e64 v1, s1, 1.0
540 ; VI-NEXT:    s_lshr_b32 s1, s1, 16
541 ; VI-NEXT:    v_mov_b32_e32 v0, s1
542 ; VI-NEXT:    v_mov_b32_e32 v2, 0x3c00
543 ; VI-NEXT:    v_add_f16_sdwa v3, v0, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
544 ; VI-NEXT:    v_add_f16_e64 v0, s0, 1.0
545 ; VI-NEXT:    s_lshr_b32 s0, s0, 16
546 ; VI-NEXT:    v_mov_b32_e32 v4, s0
547 ; VI-NEXT:    v_add_f16_sdwa v2, v4, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
548 ; VI-NEXT:    v_or_b32_e32 v0, v0, v2
549 ; VI-NEXT:    v_or_b32_e32 v1, v1, v3
550 ; VI-NEXT:    ; return to shader part epilog
552 ; GFX11-LABEL: ps_mesa_inreg_v4f16:
553 ; GFX11:       ; %bb.0:
554 ; GFX11-NEXT:    v_pk_add_f16 v0, s0, 1.0 op_sel_hi:[1,0]
555 ; GFX11-NEXT:    v_pk_add_f16 v1, s1, 1.0 op_sel_hi:[1,0]
556 ; GFX11-NEXT:    ; return to shader part epilog
557   %add = fadd <4 x half> %arg0, <half 1.0, half 1.0, half 1.0, half 1.0>
558   ret <4 x half> %add
561 define amdgpu_ps void @ps_mesa_inreg_v3i32(<3 x i32> inreg %arg0) {
562 ; SI-LABEL: ps_mesa_inreg_v3i32:
563 ; SI:       ; %bb.0:
564 ; SI-NEXT:    s_add_i32 s1, s1, 2
565 ; SI-NEXT:    s_add_i32 s0, s0, 1
566 ; SI-NEXT:    s_add_i32 s4, s2, 3
567 ; SI-NEXT:    s_mov_b32 s3, 0xf000
568 ; SI-NEXT:    s_mov_b32 s2, -1
569 ; SI-NEXT:    v_mov_b32_e32 v0, s4
570 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
571 ; SI-NEXT:    s_waitcnt expcnt(0)
572 ; SI-NEXT:    v_mov_b32_e32 v0, s0
573 ; SI-NEXT:    v_mov_b32_e32 v1, s1
574 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
575 ; SI-NEXT:    s_endpgm
577 ; VI-LABEL: ps_mesa_inreg_v3i32:
578 ; VI:       ; %bb.0:
579 ; VI-NEXT:    s_add_i32 s2, s2, 3
580 ; VI-NEXT:    s_add_i32 s1, s1, 2
581 ; VI-NEXT:    s_add_i32 s0, s0, 1
582 ; VI-NEXT:    v_mov_b32_e32 v0, s0
583 ; VI-NEXT:    v_mov_b32_e32 v1, s1
584 ; VI-NEXT:    v_mov_b32_e32 v2, s2
585 ; VI-NEXT:    flat_store_dwordx3 v[0:1], v[0:2]
586 ; VI-NEXT:    s_endpgm
588 ; GFX11-LABEL: ps_mesa_inreg_v3i32:
589 ; GFX11:       ; %bb.0:
590 ; GFX11-NEXT:    s_add_i32 s2, s2, 3
591 ; GFX11-NEXT:    s_add_i32 s0, s0, 1
592 ; GFX11-NEXT:    s_add_i32 s1, s1, 2
593 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
594 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
595 ; GFX11-NEXT:    v_mov_b32_e32 v2, s2
596 ; GFX11-NEXT:    global_store_b96 v[0:1], v[0:2], off
597 ; GFX11-NEXT:    s_nop 0
598 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
599 ; GFX11-NEXT:    s_endpgm
600   %add = add <3 x i32> %arg0, <i32 1, i32 2, i32 3>
601   store <3 x i32> %add, ptr addrspace(1) undef
602   ret void
605 define amdgpu_ps void @ps_mesa_inreg_v3f32(<3 x float> inreg %arg0) {
606 ; SI-LABEL: ps_mesa_inreg_v3f32:
607 ; SI:       ; %bb.0:
608 ; SI-NEXT:    v_add_f32_e64 v1, s1, 2.0
609 ; SI-NEXT:    v_add_f32_e64 v0, s0, 1.0
610 ; SI-NEXT:    v_add_f32_e64 v2, s2, 4.0
611 ; SI-NEXT:    s_mov_b32 s3, 0xf000
612 ; SI-NEXT:    s_mov_b32 s2, -1
613 ; SI-NEXT:    buffer_store_dword v2, off, s[0:3], 0
614 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
615 ; SI-NEXT:    s_endpgm
617 ; VI-LABEL: ps_mesa_inreg_v3f32:
618 ; VI:       ; %bb.0:
619 ; VI-NEXT:    v_add_f32_e64 v2, s2, 4.0
620 ; VI-NEXT:    v_add_f32_e64 v1, s1, 2.0
621 ; VI-NEXT:    v_add_f32_e64 v0, s0, 1.0
622 ; VI-NEXT:    flat_store_dwordx3 v[0:1], v[0:2]
623 ; VI-NEXT:    s_endpgm
625 ; GFX11-LABEL: ps_mesa_inreg_v3f32:
626 ; GFX11:       ; %bb.0:
627 ; GFX11-NEXT:    v_add_f32_e64 v2, s2, 4.0
628 ; GFX11-NEXT:    v_add_f32_e64 v1, s1, 2.0
629 ; GFX11-NEXT:    v_add_f32_e64 v0, s0, 1.0
630 ; GFX11-NEXT:    global_store_b96 v[0:1], v[0:2], off
631 ; GFX11-NEXT:    s_nop 0
632 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
633 ; GFX11-NEXT:    s_endpgm
634   %add = fadd <3 x float> %arg0, <float 1.0, float 2.0, float 4.0>
635   store <3 x float> %add, ptr addrspace(1) undef
636   ret void
639 define amdgpu_ps void @ps_mesa_inreg_v5i32(<5 x i32> inreg %arg0) {
640 ; SI-LABEL: ps_mesa_inreg_v5i32:
641 ; SI:       ; %bb.0:
642 ; SI-NEXT:    s_add_i32 s5, s3, 4
643 ; SI-NEXT:    s_add_i32 s6, s2, 3
644 ; SI-NEXT:    s_add_i32 s1, s1, 2
645 ; SI-NEXT:    s_add_i32 s0, s0, 1
646 ; SI-NEXT:    s_add_i32 s4, s4, 5
647 ; SI-NEXT:    s_mov_b32 s3, 0xf000
648 ; SI-NEXT:    s_mov_b32 s2, -1
649 ; SI-NEXT:    v_mov_b32_e32 v0, s4
650 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
651 ; SI-NEXT:    s_waitcnt expcnt(0)
652 ; SI-NEXT:    v_mov_b32_e32 v0, s0
653 ; SI-NEXT:    v_mov_b32_e32 v1, s1
654 ; SI-NEXT:    v_mov_b32_e32 v2, s6
655 ; SI-NEXT:    v_mov_b32_e32 v3, s5
656 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
657 ; SI-NEXT:    s_endpgm
659 ; VI-LABEL: ps_mesa_inreg_v5i32:
660 ; VI:       ; %bb.0:
661 ; VI-NEXT:    s_add_i32 s4, s4, 5
662 ; VI-NEXT:    s_add_i32 s3, s3, 4
663 ; VI-NEXT:    s_add_i32 s2, s2, 3
664 ; VI-NEXT:    s_add_i32 s1, s1, 2
665 ; VI-NEXT:    s_add_i32 s0, s0, 1
666 ; VI-NEXT:    v_mov_b32_e32 v0, s4
667 ; VI-NEXT:    flat_store_dword v[0:1], v0
668 ; VI-NEXT:    v_mov_b32_e32 v0, s0
669 ; VI-NEXT:    v_mov_b32_e32 v1, s1
670 ; VI-NEXT:    v_mov_b32_e32 v2, s2
671 ; VI-NEXT:    v_mov_b32_e32 v3, s3
672 ; VI-NEXT:    flat_store_dwordx4 v[0:1], v[0:3]
673 ; VI-NEXT:    s_endpgm
675 ; GFX11-LABEL: ps_mesa_inreg_v5i32:
676 ; GFX11:       ; %bb.0:
677 ; GFX11-NEXT:    s_add_i32 s3, s3, 4
678 ; GFX11-NEXT:    s_add_i32 s2, s2, 3
679 ; GFX11-NEXT:    s_add_i32 s1, s1, 2
680 ; GFX11-NEXT:    s_add_i32 s4, s4, 5
681 ; GFX11-NEXT:    s_add_i32 s0, s0, 1
682 ; GFX11-NEXT:    v_dual_mov_b32 v4, s4 :: v_dual_mov_b32 v1, s1
683 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v3, s3
684 ; GFX11-NEXT:    v_mov_b32_e32 v2, s2
685 ; GFX11-NEXT:    s_clause 0x1
686 ; GFX11-NEXT:    global_store_b32 v[0:1], v4, off
687 ; GFX11-NEXT:    global_store_b128 v[0:1], v[0:3], off
688 ; GFX11-NEXT:    s_nop 0
689 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
690 ; GFX11-NEXT:    s_endpgm
691   %add = add <5 x i32> %arg0, <i32 1, i32 2, i32 3, i32 4, i32 5>
692   store <5 x i32> %add, ptr addrspace(1) undef
693   ret void
696 define amdgpu_ps void @ps_mesa_inreg_v5f32(<5 x float> inreg %arg0) {
697 ; SI-LABEL: ps_mesa_inreg_v5f32:
698 ; SI:       ; %bb.0:
699 ; SI-NEXT:    v_add_f32_e64 v3, s3, -1.0
700 ; SI-NEXT:    v_add_f32_e64 v2, s2, 4.0
701 ; SI-NEXT:    v_add_f32_e64 v1, s1, 2.0
702 ; SI-NEXT:    v_add_f32_e64 v0, s0, 1.0
703 ; SI-NEXT:    v_add_f32_e64 v4, s4, 0.5
704 ; SI-NEXT:    s_mov_b32 s3, 0xf000
705 ; SI-NEXT:    s_mov_b32 s2, -1
706 ; SI-NEXT:    buffer_store_dword v4, off, s[0:3], 0
707 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
708 ; SI-NEXT:    s_endpgm
710 ; VI-LABEL: ps_mesa_inreg_v5f32:
711 ; VI:       ; %bb.0:
712 ; VI-NEXT:    v_add_f32_e64 v3, s3, -1.0
713 ; VI-NEXT:    v_add_f32_e64 v2, s2, 4.0
714 ; VI-NEXT:    v_add_f32_e64 v1, s1, 2.0
715 ; VI-NEXT:    v_add_f32_e64 v0, s0, 1.0
716 ; VI-NEXT:    v_add_f32_e64 v4, s4, 0.5
717 ; VI-NEXT:    flat_store_dword v[0:1], v4
718 ; VI-NEXT:    flat_store_dwordx4 v[0:1], v[0:3]
719 ; VI-NEXT:    s_endpgm
721 ; GFX11-LABEL: ps_mesa_inreg_v5f32:
722 ; GFX11:       ; %bb.0:
723 ; GFX11-NEXT:    v_add_f32_e64 v3, s3, -1.0
724 ; GFX11-NEXT:    v_add_f32_e64 v2, s2, 4.0
725 ; GFX11-NEXT:    v_add_f32_e64 v1, s1, 2.0
726 ; GFX11-NEXT:    v_add_f32_e64 v4, s4, 0.5
727 ; GFX11-NEXT:    v_add_f32_e64 v0, s0, 1.0
728 ; GFX11-NEXT:    s_clause 0x1
729 ; GFX11-NEXT:    global_store_b32 v[0:1], v4, off
730 ; GFX11-NEXT:    global_store_b128 v[0:1], v[0:3], off
731 ; GFX11-NEXT:    s_nop 0
732 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
733 ; GFX11-NEXT:    s_endpgm
734   %add = fadd <5 x float> %arg0, <float 1.0, float 2.0, float 4.0, float -1.0, float 0.5>
735   store <5 x float> %add, ptr addrspace(1) undef
736   ret void
739 define amdgpu_ps void @ps_mesa_v3i32(<3 x i32> %arg0) {
740 ; SI-LABEL: ps_mesa_v3i32:
741 ; SI:       ; %bb.0:
742 ; SI-NEXT:    v_add_i32_e32 v1, vcc, 2, v1
743 ; SI-NEXT:    v_add_i32_e32 v0, vcc, 1, v0
744 ; SI-NEXT:    v_add_i32_e32 v2, vcc, 3, v2
745 ; SI-NEXT:    s_mov_b32 s3, 0xf000
746 ; SI-NEXT:    s_mov_b32 s2, -1
747 ; SI-NEXT:    buffer_store_dword v2, off, s[0:3], 0
748 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
749 ; SI-NEXT:    s_endpgm
751 ; VI-LABEL: ps_mesa_v3i32:
752 ; VI:       ; %bb.0:
753 ; VI-NEXT:    v_add_u32_e32 v2, vcc, 3, v2
754 ; VI-NEXT:    v_add_u32_e32 v1, vcc, 2, v1
755 ; VI-NEXT:    v_add_u32_e32 v0, vcc, 1, v0
756 ; VI-NEXT:    flat_store_dwordx3 v[0:1], v[0:2]
757 ; VI-NEXT:    s_endpgm
759 ; GFX11-LABEL: ps_mesa_v3i32:
760 ; GFX11:       ; %bb.0:
761 ; GFX11-NEXT:    v_add_nc_u32_e32 v2, 3, v2
762 ; GFX11-NEXT:    v_add_nc_u32_e32 v1, 2, v1
763 ; GFX11-NEXT:    v_add_nc_u32_e32 v0, 1, v0
764 ; GFX11-NEXT:    global_store_b96 v[0:1], v[0:2], off
765 ; GFX11-NEXT:    s_nop 0
766 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
767 ; GFX11-NEXT:    s_endpgm
768   %add = add <3 x i32> %arg0, <i32 1, i32 2, i32 3>
769   store <3 x i32> %add, ptr addrspace(1) undef
770   ret void
773 define amdgpu_ps void @ps_mesa_v3f32(<3 x float> %arg0) {
774 ; SI-LABEL: ps_mesa_v3f32:
775 ; SI:       ; %bb.0:
776 ; SI-NEXT:    v_add_f32_e32 v1, 2.0, v1
777 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
778 ; SI-NEXT:    v_add_f32_e32 v2, 4.0, v2
779 ; SI-NEXT:    s_mov_b32 s3, 0xf000
780 ; SI-NEXT:    s_mov_b32 s2, -1
781 ; SI-NEXT:    buffer_store_dword v2, off, s[0:3], 0
782 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
783 ; SI-NEXT:    s_endpgm
785 ; VI-LABEL: ps_mesa_v3f32:
786 ; VI:       ; %bb.0:
787 ; VI-NEXT:    v_add_f32_e32 v2, 4.0, v2
788 ; VI-NEXT:    v_add_f32_e32 v1, 2.0, v1
789 ; VI-NEXT:    v_add_f32_e32 v0, 1.0, v0
790 ; VI-NEXT:    flat_store_dwordx3 v[0:1], v[0:2]
791 ; VI-NEXT:    s_endpgm
793 ; GFX11-LABEL: ps_mesa_v3f32:
794 ; GFX11:       ; %bb.0:
795 ; GFX11-NEXT:    v_dual_add_f32 v2, 4.0, v2 :: v_dual_add_f32 v1, 2.0, v1
796 ; GFX11-NEXT:    v_add_f32_e32 v0, 1.0, v0
797 ; GFX11-NEXT:    global_store_b96 v[0:1], v[0:2], off
798 ; GFX11-NEXT:    s_nop 0
799 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
800 ; GFX11-NEXT:    s_endpgm
801   %add = fadd <3 x float> %arg0, <float 1.0, float 2.0, float 4.0>
802   store <3 x float> %add, ptr addrspace(1) undef
803   ret void
806 define amdgpu_ps void @ps_mesa_v5i32(<5 x i32> %arg0) {
807 ; SI-LABEL: ps_mesa_v5i32:
808 ; SI:       ; %bb.0:
809 ; SI-NEXT:    v_add_i32_e32 v3, vcc, 4, v3
810 ; SI-NEXT:    v_add_i32_e32 v2, vcc, 3, v2
811 ; SI-NEXT:    v_add_i32_e32 v1, vcc, 2, v1
812 ; SI-NEXT:    v_add_i32_e32 v0, vcc, 1, v0
813 ; SI-NEXT:    v_add_i32_e32 v4, vcc, 5, v4
814 ; SI-NEXT:    s_mov_b32 s3, 0xf000
815 ; SI-NEXT:    s_mov_b32 s2, -1
816 ; SI-NEXT:    buffer_store_dword v4, off, s[0:3], 0
817 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
818 ; SI-NEXT:    s_endpgm
820 ; VI-LABEL: ps_mesa_v5i32:
821 ; VI:       ; %bb.0:
822 ; VI-NEXT:    v_add_u32_e32 v3, vcc, 4, v3
823 ; VI-NEXT:    v_add_u32_e32 v2, vcc, 3, v2
824 ; VI-NEXT:    v_add_u32_e32 v1, vcc, 2, v1
825 ; VI-NEXT:    v_add_u32_e32 v0, vcc, 1, v0
826 ; VI-NEXT:    v_add_u32_e32 v4, vcc, 5, v4
827 ; VI-NEXT:    flat_store_dword v[0:1], v4
828 ; VI-NEXT:    flat_store_dwordx4 v[0:1], v[0:3]
829 ; VI-NEXT:    s_endpgm
831 ; GFX11-LABEL: ps_mesa_v5i32:
832 ; GFX11:       ; %bb.0:
833 ; GFX11-NEXT:    v_add_nc_u32_e32 v3, 4, v3
834 ; GFX11-NEXT:    v_add_nc_u32_e32 v2, 3, v2
835 ; GFX11-NEXT:    v_add_nc_u32_e32 v1, 2, v1
836 ; GFX11-NEXT:    v_add_nc_u32_e32 v4, 5, v4
837 ; GFX11-NEXT:    v_add_nc_u32_e32 v0, 1, v0
838 ; GFX11-NEXT:    s_clause 0x1
839 ; GFX11-NEXT:    global_store_b32 v[0:1], v4, off
840 ; GFX11-NEXT:    global_store_b128 v[0:1], v[0:3], off
841 ; GFX11-NEXT:    s_nop 0
842 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
843 ; GFX11-NEXT:    s_endpgm
844   %add = add <5 x i32> %arg0, <i32 1, i32 2, i32 3, i32 4, i32 5>
845   store <5 x i32> %add, ptr addrspace(1) undef
846   ret void
849 define amdgpu_ps void @ps_mesa_v5f32(<5 x float> %arg0) {
850 ; SI-LABEL: ps_mesa_v5f32:
851 ; SI:       ; %bb.0:
852 ; SI-NEXT:    v_add_f32_e32 v3, -1.0, v3
853 ; SI-NEXT:    v_add_f32_e32 v2, 4.0, v2
854 ; SI-NEXT:    v_add_f32_e32 v1, 2.0, v1
855 ; SI-NEXT:    v_add_f32_e32 v0, 1.0, v0
856 ; SI-NEXT:    v_add_f32_e32 v4, 0.5, v4
857 ; SI-NEXT:    s_mov_b32 s3, 0xf000
858 ; SI-NEXT:    s_mov_b32 s2, -1
859 ; SI-NEXT:    buffer_store_dword v4, off, s[0:3], 0
860 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
861 ; SI-NEXT:    s_endpgm
863 ; VI-LABEL: ps_mesa_v5f32:
864 ; VI:       ; %bb.0:
865 ; VI-NEXT:    v_add_f32_e32 v3, -1.0, v3
866 ; VI-NEXT:    v_add_f32_e32 v2, 4.0, v2
867 ; VI-NEXT:    v_add_f32_e32 v1, 2.0, v1
868 ; VI-NEXT:    v_add_f32_e32 v0, 1.0, v0
869 ; VI-NEXT:    v_add_f32_e32 v4, 0.5, v4
870 ; VI-NEXT:    flat_store_dword v[0:1], v4
871 ; VI-NEXT:    flat_store_dwordx4 v[0:1], v[0:3]
872 ; VI-NEXT:    s_endpgm
874 ; GFX11-LABEL: ps_mesa_v5f32:
875 ; GFX11:       ; %bb.0:
876 ; GFX11-NEXT:    v_dual_add_f32 v3, -1.0, v3 :: v_dual_add_f32 v2, 4.0, v2
877 ; GFX11-NEXT:    v_dual_add_f32 v1, 2.0, v1 :: v_dual_add_f32 v4, 0.5, v4
878 ; GFX11-NEXT:    v_add_f32_e32 v0, 1.0, v0
879 ; GFX11-NEXT:    s_clause 0x1
880 ; GFX11-NEXT:    global_store_b32 v[0:1], v4, off
881 ; GFX11-NEXT:    global_store_b128 v[0:1], v[0:3], off
882 ; GFX11-NEXT:    s_nop 0
883 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
884 ; GFX11-NEXT:    s_endpgm
885   %add = fadd <5 x float> %arg0, <float 1.0, float 2.0, float 4.0, float -1.0, float 0.5>
886   store <5 x float> %add, ptr addrspace(1) undef
887   ret void
890 define amdgpu_ps void @ps_mesa_i16(i16 %arg0) {
891 ; SI-LABEL: ps_mesa_i16:
892 ; SI:       ; %bb.0:
893 ; SI-NEXT:    v_add_i32_e32 v0, vcc, v0, v0
894 ; SI-NEXT:    s_mov_b32 s3, 0xf000
895 ; SI-NEXT:    s_mov_b32 s2, -1
896 ; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0
897 ; SI-NEXT:    s_endpgm
899 ; VI-LABEL: ps_mesa_i16:
900 ; VI:       ; %bb.0:
901 ; VI-NEXT:    v_add_u16_e32 v0, v0, v0
902 ; VI-NEXT:    flat_store_short v[0:1], v0
903 ; VI-NEXT:    s_endpgm
905 ; GFX11-LABEL: ps_mesa_i16:
906 ; GFX11:       ; %bb.0:
907 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
908 ; GFX11-NEXT:    global_store_b16 v[0:1], v0, off
909 ; GFX11-NEXT:    s_nop 0
910 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
911 ; GFX11-NEXT:    s_endpgm
912   %add = add i16 %arg0, %arg0
913   store i16 %add, ptr addrspace(1) undef
914   ret void
917 define amdgpu_ps void @ps_mesa_inreg_i16(i16 inreg %arg0) {
918 ; SI-LABEL: ps_mesa_inreg_i16:
919 ; SI:       ; %bb.0:
920 ; SI-NEXT:    s_add_i32 s0, s0, s0
921 ; SI-NEXT:    s_mov_b32 s3, 0xf000
922 ; SI-NEXT:    s_mov_b32 s2, -1
923 ; SI-NEXT:    v_mov_b32_e32 v0, s0
924 ; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0
925 ; SI-NEXT:    s_endpgm
927 ; VI-LABEL: ps_mesa_inreg_i16:
928 ; VI:       ; %bb.0:
929 ; VI-NEXT:    s_and_b32 s0, 0xffff, s0
930 ; VI-NEXT:    s_add_i32 s0, s0, s0
931 ; VI-NEXT:    v_mov_b32_e32 v0, s0
932 ; VI-NEXT:    flat_store_short v[0:1], v0
933 ; VI-NEXT:    s_endpgm
935 ; GFX11-LABEL: ps_mesa_inreg_i16:
936 ; GFX11:       ; %bb.0:
937 ; GFX11-NEXT:    s_and_b32 s0, 0xffff, s0
938 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
939 ; GFX11-NEXT:    s_add_i32 s0, s0, s0
940 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
941 ; GFX11-NEXT:    global_store_b16 v[0:1], v0, off
942 ; GFX11-NEXT:    s_nop 0
943 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
944 ; GFX11-NEXT:    s_endpgm
945   %add = add i16 %arg0, %arg0
946   store i16 %add, ptr addrspace(1) undef
947   ret void
950 define amdgpu_ps i16 @ret_ps_mesa_i16() {
951 ; GCN-LABEL: ret_ps_mesa_i16:
952 ; GCN:       ; %bb.0:
953 ; GCN-NEXT:    s_movk_i32 s0, 0x7b
954 ; GCN-NEXT:    ; return to shader part epilog
955   ret i16 123
958 define amdgpu_kernel void @amd_kernel_i8(i8 %arg0) {
959 ; SI-LABEL: amd_kernel_i8:
960 ; SI:       ; %bb.0: ; %entry
961 ; SI-NEXT:    s_load_dword s0, s[0:1], 0x9
962 ; SI-NEXT:    s_mov_b32 s3, 0xf000
963 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
964 ; SI-NEXT:    s_add_i32 s0, s0, s0
965 ; SI-NEXT:    s_mov_b32 s2, -1
966 ; SI-NEXT:    v_mov_b32_e32 v0, s0
967 ; SI-NEXT:    buffer_store_byte v0, off, s[0:3], 0
968 ; SI-NEXT:    s_endpgm
970 ; VI-LABEL: amd_kernel_i8:
971 ; VI:       ; %bb.0: ; %entry
972 ; VI-NEXT:    s_load_dword s0, s[0:1], 0x24
973 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
974 ; VI-NEXT:    s_add_i32 s0, s0, s0
975 ; VI-NEXT:    v_mov_b32_e32 v0, s0
976 ; VI-NEXT:    flat_store_byte v[0:1], v0
977 ; VI-NEXT:    s_endpgm
979 ; GFX11-LABEL: amd_kernel_i8:
980 ; GFX11:       ; %bb.0: ; %entry
981 ; GFX11-NEXT:    s_load_b32 s0, s[0:1], 0x24
982 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
983 ; GFX11-NEXT:    s_add_i32 s0, s0, s0
984 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
985 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
986 ; GFX11-NEXT:    global_store_b8 v[0:1], v0, off
987 ; GFX11-NEXT:    s_nop 0
988 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
989 ; GFX11-NEXT:    s_endpgm
990 entry:
991   %add = add i8 %arg0, %arg0
992   store i8 %add, ptr addrspace(1) undef
993   ret void
996 define amdgpu_kernel void @amd_kernel_v2i8(<2 x i8> %arg0) {
997 ; SI-LABEL: amd_kernel_v2i8:
998 ; SI:       ; %bb.0: ; %entry
999 ; SI-NEXT:    s_load_dword s1, s[0:1], 0x9
1000 ; SI-NEXT:    s_mov_b32 s0, 0
1001 ; SI-NEXT:    s_mov_b32 s3, 0xf000
1002 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1003 ; SI-NEXT:    s_bfe_u32 s2, s1, 0x80008
1004 ; SI-NEXT:    s_add_i32 s1, s1, s1
1005 ; SI-NEXT:    s_and_b32 s1, s1, 0xff
1006 ; SI-NEXT:    s_add_i32 s2, s2, s2
1007 ; SI-NEXT:    s_lshl_b32 s2, s2, 8
1008 ; SI-NEXT:    s_or_b32 s4, s1, s2
1009 ; SI-NEXT:    s_mov_b32 s2, -1
1010 ; SI-NEXT:    s_mov_b32 s1, s0
1011 ; SI-NEXT:    v_mov_b32_e32 v0, s4
1012 ; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0
1013 ; SI-NEXT:    s_endpgm
1015 ; VI-LABEL: amd_kernel_v2i8:
1016 ; VI:       ; %bb.0: ; %entry
1017 ; VI-NEXT:    s_load_dword s0, s[0:1], 0x24
1018 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1019 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1020 ; VI-NEXT:    s_add_i32 s0, s0, s0
1021 ; VI-NEXT:    v_add_u32_sdwa v2, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1022 ; VI-NEXT:    v_mov_b32_e32 v3, s0
1023 ; VI-NEXT:    v_mov_b32_e32 v0, 0
1024 ; VI-NEXT:    v_mov_b32_e32 v1, 0
1025 ; VI-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1026 ; VI-NEXT:    flat_store_short v[0:1], v2
1027 ; VI-NEXT:    s_endpgm
1029 ; GFX11-LABEL: amd_kernel_v2i8:
1030 ; GFX11:       ; %bb.0: ; %entry
1031 ; GFX11-NEXT:    s_load_b32 s0, s[0:1], 0x24
1032 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1033 ; GFX11-NEXT:    v_lshrrev_b16 v0, 8, s0
1034 ; GFX11-NEXT:    v_add_nc_u16 v1, s0, s0
1035 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1036 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
1037 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xff, v1
1038 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
1039 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v0
1040 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
1041 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
1042 ; GFX11-NEXT:    v_or_b32_e32 v2, v2, v3
1043 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
1044 ; GFX11-NEXT:    s_nop 0
1045 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1046 ; GFX11-NEXT:    s_endpgm
1047 entry:
1048   %add = add <2 x i8> %arg0, %arg0
1049   store <2 x i8> %add, ptr addrspace(1) null
1050   ret void
1053 define amdgpu_kernel void @amd_kernel_v4i8(<4 x i8> %arg0) {
1054 ; SI-LABEL: amd_kernel_v4i8:
1055 ; SI:       ; %bb.0: ; %entry
1056 ; SI-NEXT:    s_load_dword s1, s[0:1], 0x9
1057 ; SI-NEXT:    s_mov_b32 s0, 0
1058 ; SI-NEXT:    s_mov_b32 s3, 0xf000
1059 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1060 ; SI-NEXT:    s_lshr_b32 s2, s1, 16
1061 ; SI-NEXT:    s_lshr_b32 s4, s1, 24
1062 ; SI-NEXT:    s_bfe_u32 s5, s1, 0x80008
1063 ; SI-NEXT:    s_add_i32 s1, s1, s1
1064 ; SI-NEXT:    s_add_i32 s4, s4, s4
1065 ; SI-NEXT:    s_add_i32 s2, s2, s2
1066 ; SI-NEXT:    s_and_b32 s1, s1, 0xff
1067 ; SI-NEXT:    s_add_i32 s5, s5, s5
1068 ; SI-NEXT:    s_lshl_b32 s4, s4, 24
1069 ; SI-NEXT:    s_and_b32 s2, s2, 0xff
1070 ; SI-NEXT:    s_lshl_b32 s5, s5, 8
1071 ; SI-NEXT:    s_lshl_b32 s2, s2, 16
1072 ; SI-NEXT:    s_or_b32 s1, s1, s5
1073 ; SI-NEXT:    s_or_b32 s2, s4, s2
1074 ; SI-NEXT:    s_and_b32 s1, s1, 0xffff
1075 ; SI-NEXT:    s_or_b32 s4, s1, s2
1076 ; SI-NEXT:    s_mov_b32 s2, -1
1077 ; SI-NEXT:    s_mov_b32 s1, s0
1078 ; SI-NEXT:    v_mov_b32_e32 v0, s4
1079 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
1080 ; SI-NEXT:    s_endpgm
1082 ; VI-LABEL: amd_kernel_v4i8:
1083 ; VI:       ; %bb.0: ; %entry
1084 ; VI-NEXT:    s_load_dword s0, s[0:1], 0x24
1085 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1086 ; VI-NEXT:    s_lshr_b32 s1, s0, 24
1087 ; VI-NEXT:    s_lshr_b32 s2, s0, 16
1088 ; VI-NEXT:    s_add_i32 s2, s2, s2
1089 ; VI-NEXT:    s_add_i32 s1, s1, s1
1090 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1091 ; VI-NEXT:    s_add_i32 s0, s0, s0
1092 ; VI-NEXT:    v_lshlrev_b16_e64 v1, 8, s1
1093 ; VI-NEXT:    v_mov_b32_e32 v2, s2
1094 ; VI-NEXT:    v_add_u32_sdwa v0, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1095 ; VI-NEXT:    v_or_b32_sdwa v2, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1096 ; VI-NEXT:    v_mov_b32_e32 v1, s0
1097 ; VI-NEXT:    v_or_b32_sdwa v3, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1098 ; VI-NEXT:    v_mov_b32_e32 v0, 0
1099 ; VI-NEXT:    v_mov_b32_e32 v1, 0
1100 ; VI-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1101 ; VI-NEXT:    flat_store_dword v[0:1], v2
1102 ; VI-NEXT:    s_endpgm
1104 ; GFX11-LABEL: amd_kernel_v4i8:
1105 ; GFX11:       ; %bb.0: ; %entry
1106 ; GFX11-NEXT:    s_load_b32 s0, s[0:1], 0x24
1107 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1108 ; GFX11-NEXT:    v_lshrrev_b16 v0, 8, s0
1109 ; GFX11-NEXT:    s_lshr_b32 s1, s0, 16
1110 ; GFX11-NEXT:    s_lshr_b32 s2, s0, 24
1111 ; GFX11-NEXT:    v_add_nc_u16 v1, s0, s0
1112 ; GFX11-NEXT:    v_add_nc_u16 v2, s2, s2
1113 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
1114 ; GFX11-NEXT:    v_add_nc_u16 v3, s1, s1
1115 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1116 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xff, v1
1117 ; GFX11-NEXT:    v_lshlrev_b16 v2, 8, v2
1118 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1119 ; GFX11-NEXT:    v_lshlrev_b16 v0, 8, v0
1120 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xff, v3
1121 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1122 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
1123 ; GFX11-NEXT:    v_or_b32_e32 v1, v3, v2
1124 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1125 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v0
1126 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_lshlrev_b32 v3, 16, v1
1127 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
1128 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1129 ; GFX11-NEXT:    v_or_b32_e32 v2, v2, v3
1130 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
1131 ; GFX11-NEXT:    s_nop 0
1132 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1133 ; GFX11-NEXT:    s_endpgm
1134 entry:
1135   %add = add <4 x i8> %arg0, %arg0
1136   store <4 x i8> %add, ptr addrspace(1) null
1137   ret void
1140 define amdgpu_kernel void @amd_kernel_v3i8(<3 x i8> %arg0) {
1141 ; SI-LABEL: amd_kernel_v3i8:
1142 ; SI:       ; %bb.0: ; %entry
1143 ; SI-NEXT:    s_load_dword s4, s[0:1], 0x9
1144 ; SI-NEXT:    s_mov_b32 s1, 0
1145 ; SI-NEXT:    s_mov_b32 s0, 2
1146 ; SI-NEXT:    s_mov_b32 s3, 0xf000
1147 ; SI-NEXT:    s_mov_b32 s2, -1
1148 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1149 ; SI-NEXT:    s_lshr_b32 s5, s4, 16
1150 ; SI-NEXT:    s_bfe_u32 s6, s4, 0x80008
1151 ; SI-NEXT:    s_add_i32 s4, s4, s4
1152 ; SI-NEXT:    s_and_b32 s4, s4, 0xff
1153 ; SI-NEXT:    s_add_i32 s6, s6, s6
1154 ; SI-NEXT:    s_add_i32 s5, s5, s5
1155 ; SI-NEXT:    s_lshl_b32 s6, s6, 8
1156 ; SI-NEXT:    v_mov_b32_e32 v0, s5
1157 ; SI-NEXT:    s_or_b32 s4, s4, s6
1158 ; SI-NEXT:    buffer_store_byte v0, off, s[0:3], 0
1159 ; SI-NEXT:    s_mov_b32 s0, s1
1160 ; SI-NEXT:    s_waitcnt expcnt(0)
1161 ; SI-NEXT:    v_mov_b32_e32 v0, s4
1162 ; SI-NEXT:    buffer_store_short v0, off, s[0:3], 0
1163 ; SI-NEXT:    s_endpgm
1165 ; VI-LABEL: amd_kernel_v3i8:
1166 ; VI:       ; %bb.0: ; %entry
1167 ; VI-NEXT:    s_load_dword s0, s[0:1], 0x24
1168 ; VI-NEXT:    v_mov_b32_e32 v2, 0
1169 ; VI-NEXT:    v_mov_b32_e32 v3, 0
1170 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1171 ; VI-NEXT:    s_lshr_b32 s1, s0, 16
1172 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1173 ; VI-NEXT:    s_add_i32 s0, s0, s0
1174 ; VI-NEXT:    v_add_u32_sdwa v0, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1175 ; VI-NEXT:    v_mov_b32_e32 v1, s0
1176 ; VI-NEXT:    s_add_i32 s1, s1, s1
1177 ; VI-NEXT:    v_or_b32_sdwa v4, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1178 ; VI-NEXT:    v_mov_b32_e32 v0, 2
1179 ; VI-NEXT:    v_mov_b32_e32 v1, 0
1180 ; VI-NEXT:    v_mov_b32_e32 v5, s1
1181 ; VI-NEXT:    flat_store_byte v[0:1], v5
1182 ; VI-NEXT:    flat_store_short v[2:3], v4
1183 ; VI-NEXT:    s_endpgm
1185 ; GFX11-LABEL: amd_kernel_v3i8:
1186 ; GFX11:       ; %bb.0: ; %entry
1187 ; GFX11-NEXT:    s_load_b32 s0, s[0:1], 0x24
1188 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1189 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
1190 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1191 ; GFX11-NEXT:    v_lshrrev_b16 v0, 8, s0
1192 ; GFX11-NEXT:    v_add_nc_u16 v1, s0, s0
1193 ; GFX11-NEXT:    s_lshr_b32 s0, s0, 16
1194 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_3)
1195 ; GFX11-NEXT:    v_add_nc_u16 v6, s0, s0
1196 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
1197 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_2)
1198 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xff, v1
1199 ; GFX11-NEXT:    v_lshlrev_b16 v5, 8, v0
1200 ; GFX11-NEXT:    v_mov_b32_e32 v0, 2
1201 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
1202 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
1203 ; GFX11-NEXT:    v_or_b32_e32 v4, v4, v5
1204 ; GFX11-NEXT:    s_clause 0x1
1205 ; GFX11-NEXT:    global_store_b8 v[0:1], v6, off
1206 ; GFX11-NEXT:    global_store_b16 v[2:3], v4, off
1207 ; GFX11-NEXT:    s_nop 0
1208 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1209 ; GFX11-NEXT:    s_endpgm
1210 entry:
1211   %add = add <3 x i8> %arg0, %arg0
1212   store <3 x i8> %add, ptr addrspace(1) null
1213   ret void
1216 define amdgpu_kernel void @amd_kernel_v5i8(<5 x i8> %arg0) {
1217 ; SI-LABEL: amd_kernel_v5i8:
1218 ; SI:       ; %bb.0: ; %entry
1219 ; SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
1220 ; SI-NEXT:    s_mov_b32 s1, 0
1221 ; SI-NEXT:    s_mov_b32 s0, 4
1222 ; SI-NEXT:    s_mov_b32 s3, 0xf000
1223 ; SI-NEXT:    s_mov_b32 s2, -1
1224 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1225 ; SI-NEXT:    s_lshr_b32 s6, s4, 16
1226 ; SI-NEXT:    s_lshr_b32 s7, s4, 24
1227 ; SI-NEXT:    s_bfe_u32 s8, s4, 0x80008
1228 ; SI-NEXT:    s_add_i32 s4, s4, s4
1229 ; SI-NEXT:    s_add_i32 s5, s5, s5
1230 ; SI-NEXT:    s_add_i32 s7, s7, s7
1231 ; SI-NEXT:    s_add_i32 s6, s6, s6
1232 ; SI-NEXT:    s_and_b32 s4, s4, 0xff
1233 ; SI-NEXT:    s_add_i32 s8, s8, s8
1234 ; SI-NEXT:    v_mov_b32_e32 v0, s5
1235 ; SI-NEXT:    s_lshl_b32 s5, s7, 24
1236 ; SI-NEXT:    s_and_b32 s6, s6, 0xff
1237 ; SI-NEXT:    s_lshl_b32 s7, s8, 8
1238 ; SI-NEXT:    s_lshl_b32 s6, s6, 16
1239 ; SI-NEXT:    s_or_b32 s4, s4, s7
1240 ; SI-NEXT:    s_or_b32 s5, s5, s6
1241 ; SI-NEXT:    s_and_b32 s4, s4, 0xffff
1242 ; SI-NEXT:    s_or_b32 s4, s4, s5
1243 ; SI-NEXT:    buffer_store_byte v0, off, s[0:3], 0
1244 ; SI-NEXT:    s_mov_b32 s0, s1
1245 ; SI-NEXT:    s_waitcnt expcnt(0)
1246 ; SI-NEXT:    v_mov_b32_e32 v0, s4
1247 ; SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
1248 ; SI-NEXT:    s_endpgm
1250 ; VI-LABEL: amd_kernel_v5i8:
1251 ; VI:       ; %bb.0: ; %entry
1252 ; VI-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1253 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1254 ; VI-NEXT:    s_lshr_b32 s2, s0, 24
1255 ; VI-NEXT:    s_lshr_b32 s3, s0, 16
1256 ; VI-NEXT:    s_add_i32 s3, s3, s3
1257 ; VI-NEXT:    s_add_i32 s2, s2, s2
1258 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1259 ; VI-NEXT:    s_add_i32 s0, s0, s0
1260 ; VI-NEXT:    v_lshlrev_b16_e64 v1, 8, s2
1261 ; VI-NEXT:    v_mov_b32_e32 v2, s3
1262 ; VI-NEXT:    v_add_u32_sdwa v0, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1263 ; VI-NEXT:    v_or_b32_sdwa v1, v2, v1 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1264 ; VI-NEXT:    v_mov_b32_e32 v2, s0
1265 ; VI-NEXT:    s_and_b32 s1, s1, 0xff
1266 ; VI-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1267 ; VI-NEXT:    s_add_i32 s1, s1, s1
1268 ; VI-NEXT:    v_or_b32_sdwa v4, v0, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1269 ; VI-NEXT:    v_mov_b32_e32 v0, 4
1270 ; VI-NEXT:    v_mov_b32_e32 v1, 0
1271 ; VI-NEXT:    v_mov_b32_e32 v5, s1
1272 ; VI-NEXT:    v_mov_b32_e32 v2, 0
1273 ; VI-NEXT:    v_mov_b32_e32 v3, 0
1274 ; VI-NEXT:    flat_store_byte v[0:1], v5
1275 ; VI-NEXT:    flat_store_dword v[2:3], v4
1276 ; VI-NEXT:    s_endpgm
1278 ; GFX11-LABEL: amd_kernel_v5i8:
1279 ; GFX11:       ; %bb.0: ; %entry
1280 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1281 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1282 ; GFX11-NEXT:    v_lshrrev_b16 v0, 8, s0
1283 ; GFX11-NEXT:    s_lshr_b32 s2, s0, 16
1284 ; GFX11-NEXT:    s_lshr_b32 s3, s0, 24
1285 ; GFX11-NEXT:    v_add_nc_u16 v1, s0, s0
1286 ; GFX11-NEXT:    v_add_nc_u16 v2, s3, s3
1287 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
1288 ; GFX11-NEXT:    v_add_nc_u16 v3, s2, s2
1289 ; GFX11-NEXT:    v_add_nc_u16 v6, s1, s1
1290 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xff, v1
1291 ; GFX11-NEXT:    v_lshlrev_b16 v2, 8, v2
1292 ; GFX11-NEXT:    v_lshlrev_b16 v0, 8, v0
1293 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xff, v3
1294 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1295 ; GFX11-NEXT:    v_or_b32_e32 v0, v1, v0
1296 ; GFX11-NEXT:    v_or_b32_e32 v1, v3, v2
1297 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1298 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1299 ; GFX11-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v4, 0xffff, v0
1300 ; GFX11-NEXT:    v_dual_mov_b32 v0, 4 :: v_dual_lshlrev_b32 v5, 16, v1
1301 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
1302 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1303 ; GFX11-NEXT:    v_or_b32_e32 v4, v4, v5
1304 ; GFX11-NEXT:    s_clause 0x1
1305 ; GFX11-NEXT:    global_store_b8 v[0:1], v6, off
1306 ; GFX11-NEXT:    global_store_b32 v[2:3], v4, off
1307 ; GFX11-NEXT:    s_nop 0
1308 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1309 ; GFX11-NEXT:    s_endpgm
1310 entry:
1311   %add = add <5 x i8> %arg0, %arg0
1312   store <5 x i8> %add, ptr addrspace(1) null
1313   ret void
1316 define amdgpu_kernel void @amd_kernel_v8i8(<8 x i8> %arg0) {
1317 ; SI-LABEL: amd_kernel_v8i8:
1318 ; SI:       ; %bb.0: ; %entry
1319 ; SI-NEXT:    s_load_dwordx2 s[4:5], s[0:1], 0x9
1320 ; SI-NEXT:    s_mov_b32 s0, 0
1321 ; SI-NEXT:    s_mov_b32 s3, 0xf000
1322 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1323 ; SI-NEXT:    s_lshr_b32 s1, s4, 16
1324 ; SI-NEXT:    s_lshr_b32 s2, s4, 24
1325 ; SI-NEXT:    s_lshr_b32 s6, s5, 16
1326 ; SI-NEXT:    s_lshr_b32 s7, s5, 24
1327 ; SI-NEXT:    s_bfe_u32 s8, s4, 0x80008
1328 ; SI-NEXT:    s_bfe_u32 s9, s5, 0x80008
1329 ; SI-NEXT:    s_add_i32 s5, s5, s5
1330 ; SI-NEXT:    s_add_i32 s4, s4, s4
1331 ; SI-NEXT:    s_add_i32 s7, s7, s7
1332 ; SI-NEXT:    s_add_i32 s6, s6, s6
1333 ; SI-NEXT:    s_and_b32 s5, s5, 0xff
1334 ; SI-NEXT:    s_add_i32 s9, s9, s9
1335 ; SI-NEXT:    s_add_i32 s2, s2, s2
1336 ; SI-NEXT:    s_add_i32 s1, s1, s1
1337 ; SI-NEXT:    s_and_b32 s4, s4, 0xff
1338 ; SI-NEXT:    s_add_i32 s8, s8, s8
1339 ; SI-NEXT:    s_lshl_b32 s7, s7, 24
1340 ; SI-NEXT:    s_and_b32 s6, s6, 0xff
1341 ; SI-NEXT:    s_lshl_b32 s9, s9, 8
1342 ; SI-NEXT:    s_lshl_b32 s2, s2, 24
1343 ; SI-NEXT:    s_and_b32 s1, s1, 0xff
1344 ; SI-NEXT:    s_lshl_b32 s8, s8, 8
1345 ; SI-NEXT:    s_lshl_b32 s6, s6, 16
1346 ; SI-NEXT:    s_or_b32 s5, s5, s9
1347 ; SI-NEXT:    s_lshl_b32 s1, s1, 16
1348 ; SI-NEXT:    s_or_b32 s4, s4, s8
1349 ; SI-NEXT:    s_or_b32 s6, s7, s6
1350 ; SI-NEXT:    s_and_b32 s5, s5, 0xffff
1351 ; SI-NEXT:    s_or_b32 s1, s2, s1
1352 ; SI-NEXT:    s_and_b32 s2, s4, 0xffff
1353 ; SI-NEXT:    s_or_b32 s4, s5, s6
1354 ; SI-NEXT:    s_or_b32 s5, s2, s1
1355 ; SI-NEXT:    s_mov_b32 s2, -1
1356 ; SI-NEXT:    s_mov_b32 s1, s0
1357 ; SI-NEXT:    v_mov_b32_e32 v0, s5
1358 ; SI-NEXT:    v_mov_b32_e32 v1, s4
1359 ; SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
1360 ; SI-NEXT:    s_endpgm
1362 ; VI-LABEL: amd_kernel_v8i8:
1363 ; VI:       ; %bb.0: ; %entry
1364 ; VI-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
1365 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1366 ; VI-NEXT:    s_lshr_b32 s2, s1, 24
1367 ; VI-NEXT:    s_lshr_b32 s3, s1, 16
1368 ; VI-NEXT:    s_add_i32 s3, s3, s3
1369 ; VI-NEXT:    s_add_i32 s2, s2, s2
1370 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1371 ; VI-NEXT:    s_add_i32 s1, s1, s1
1372 ; VI-NEXT:    v_lshlrev_b16_e64 v2, 8, s2
1373 ; VI-NEXT:    v_mov_b32_e32 v3, s3
1374 ; VI-NEXT:    v_add_u32_sdwa v1, vcc, v1, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1375 ; VI-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1376 ; VI-NEXT:    v_mov_b32_e32 v3, s1
1377 ; VI-NEXT:    s_lshr_b32 s4, s0, 24
1378 ; VI-NEXT:    s_lshr_b32 s5, s0, 16
1379 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1380 ; VI-NEXT:    s_add_i32 s0, s0, s0
1381 ; VI-NEXT:    v_or_b32_sdwa v1, v3, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1382 ; VI-NEXT:    s_add_i32 s5, s5, s5
1383 ; VI-NEXT:    s_add_i32 s4, s4, s4
1384 ; VI-NEXT:    v_add_u32_sdwa v0, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1385 ; VI-NEXT:    v_or_b32_sdwa v1, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1386 ; VI-NEXT:    v_mov_b32_e32 v2, s0
1387 ; VI-NEXT:    v_or_b32_sdwa v0, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1388 ; VI-NEXT:    v_lshlrev_b16_e64 v2, 8, s4
1389 ; VI-NEXT:    v_mov_b32_e32 v3, s5
1390 ; VI-NEXT:    v_or_b32_sdwa v4, v3, v2 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1391 ; VI-NEXT:    v_mov_b32_e32 v2, 0
1392 ; VI-NEXT:    v_mov_b32_e32 v3, 0
1393 ; VI-NEXT:    v_or_b32_sdwa v0, v0, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1394 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1395 ; VI-NEXT:    s_endpgm
1397 ; GFX11-LABEL: amd_kernel_v8i8:
1398 ; GFX11:       ; %bb.0: ; %entry
1399 ; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x24
1400 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1401 ; GFX11-NEXT:    v_lshrrev_b16 v0, 8, s0
1402 ; GFX11-NEXT:    v_lshrrev_b16 v1, 8, s1
1403 ; GFX11-NEXT:    s_lshr_b32 s2, s0, 16
1404 ; GFX11-NEXT:    s_lshr_b32 s3, s0, 24
1405 ; GFX11-NEXT:    s_lshr_b32 s4, s1, 16
1406 ; GFX11-NEXT:    s_lshr_b32 s5, s1, 24
1407 ; GFX11-NEXT:    v_add_nc_u16 v2, s1, s1
1408 ; GFX11-NEXT:    v_add_nc_u16 v3, s0, s0
1409 ; GFX11-NEXT:    v_add_nc_u16 v4, s5, s5
1410 ; GFX11-NEXT:    v_add_nc_u16 v5, s4, s4
1411 ; GFX11-NEXT:    v_add_nc_u16 v6, s3, s3
1412 ; GFX11-NEXT:    v_add_nc_u16 v7, s2, s2
1413 ; GFX11-NEXT:    v_add_nc_u16 v1, v1, v1
1414 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
1415 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xff, v2
1416 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xff, v3
1417 ; GFX11-NEXT:    v_lshlrev_b16 v4, 8, v4
1418 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xff, v5
1419 ; GFX11-NEXT:    v_lshlrev_b16 v6, 8, v6
1420 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xff, v7
1421 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v1
1422 ; GFX11-NEXT:    v_lshlrev_b16 v0, 8, v0
1423 ; GFX11-NEXT:    v_or_b32_e32 v4, v5, v4
1424 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1425 ; GFX11-NEXT:    v_or_b32_e32 v5, v7, v6
1426 ; GFX11-NEXT:    v_or_b32_e32 v1, v2, v1
1427 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1428 ; GFX11-NEXT:    v_or_b32_e32 v0, v3, v0
1429 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 16, v4
1430 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1431 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v5
1432 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff, v1
1433 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_3)
1434 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_and_b32 v5, 0xffff, v0
1435 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
1436 ; GFX11-NEXT:    v_or_b32_e32 v3, v3, v2
1437 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
1438 ; GFX11-NEXT:    v_or_b32_e32 v2, v5, v4
1439 ; GFX11-NEXT:    global_store_b64 v[0:1], v[2:3], off
1440 ; GFX11-NEXT:    s_nop 0
1441 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1442 ; GFX11-NEXT:    s_endpgm
1443 entry:
1444   %add = add <8 x i8> %arg0, %arg0
1445   store <8 x i8> %add, ptr addrspace(1) null
1446   ret void
1449 define amdgpu_kernel void @amd_kernel_v16i8(<16 x i8> %arg0) {
1450 ; SI-LABEL: amd_kernel_v16i8:
1451 ; SI:       ; %bb.0: ; %entry
1452 ; SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1453 ; SI-NEXT:    s_mov_b32 s4, 0
1454 ; SI-NEXT:    s_mov_b32 s7, 0xf000
1455 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1456 ; SI-NEXT:    s_lshr_b32 s5, s0, 16
1457 ; SI-NEXT:    s_lshr_b32 s6, s0, 24
1458 ; SI-NEXT:    s_lshr_b32 s8, s1, 16
1459 ; SI-NEXT:    s_lshr_b32 s9, s1, 24
1460 ; SI-NEXT:    s_lshr_b32 s10, s2, 16
1461 ; SI-NEXT:    s_lshr_b32 s11, s2, 24
1462 ; SI-NEXT:    s_lshr_b32 s12, s3, 16
1463 ; SI-NEXT:    s_lshr_b32 s13, s3, 24
1464 ; SI-NEXT:    s_bfe_u32 s14, s0, 0x80008
1465 ; SI-NEXT:    s_bfe_u32 s15, s1, 0x80008
1466 ; SI-NEXT:    s_bfe_u32 s16, s2, 0x80008
1467 ; SI-NEXT:    s_bfe_u32 s17, s3, 0x80008
1468 ; SI-NEXT:    s_add_i32 s3, s3, s3
1469 ; SI-NEXT:    s_add_i32 s2, s2, s2
1470 ; SI-NEXT:    s_add_i32 s1, s1, s1
1471 ; SI-NEXT:    s_add_i32 s0, s0, s0
1472 ; SI-NEXT:    s_add_i32 s13, s13, s13
1473 ; SI-NEXT:    s_add_i32 s12, s12, s12
1474 ; SI-NEXT:    s_and_b32 s3, s3, 0xff
1475 ; SI-NEXT:    s_add_i32 s17, s17, s17
1476 ; SI-NEXT:    s_add_i32 s11, s11, s11
1477 ; SI-NEXT:    s_add_i32 s10, s10, s10
1478 ; SI-NEXT:    s_and_b32 s2, s2, 0xff
1479 ; SI-NEXT:    s_add_i32 s16, s16, s16
1480 ; SI-NEXT:    s_add_i32 s9, s9, s9
1481 ; SI-NEXT:    s_add_i32 s8, s8, s8
1482 ; SI-NEXT:    s_and_b32 s1, s1, 0xff
1483 ; SI-NEXT:    s_add_i32 s15, s15, s15
1484 ; SI-NEXT:    s_add_i32 s6, s6, s6
1485 ; SI-NEXT:    s_add_i32 s5, s5, s5
1486 ; SI-NEXT:    s_and_b32 s0, s0, 0xff
1487 ; SI-NEXT:    s_add_i32 s14, s14, s14
1488 ; SI-NEXT:    s_lshl_b32 s13, s13, 24
1489 ; SI-NEXT:    s_and_b32 s12, s12, 0xff
1490 ; SI-NEXT:    s_lshl_b32 s17, s17, 8
1491 ; SI-NEXT:    s_lshl_b32 s11, s11, 24
1492 ; SI-NEXT:    s_and_b32 s10, s10, 0xff
1493 ; SI-NEXT:    s_lshl_b32 s16, s16, 8
1494 ; SI-NEXT:    s_lshl_b32 s9, s9, 24
1495 ; SI-NEXT:    s_and_b32 s8, s8, 0xff
1496 ; SI-NEXT:    s_lshl_b32 s15, s15, 8
1497 ; SI-NEXT:    s_lshl_b32 s6, s6, 24
1498 ; SI-NEXT:    s_and_b32 s5, s5, 0xff
1499 ; SI-NEXT:    s_lshl_b32 s14, s14, 8
1500 ; SI-NEXT:    s_lshl_b32 s12, s12, 16
1501 ; SI-NEXT:    s_or_b32 s3, s3, s17
1502 ; SI-NEXT:    s_lshl_b32 s10, s10, 16
1503 ; SI-NEXT:    s_or_b32 s2, s2, s16
1504 ; SI-NEXT:    s_lshl_b32 s8, s8, 16
1505 ; SI-NEXT:    s_or_b32 s1, s1, s15
1506 ; SI-NEXT:    s_lshl_b32 s5, s5, 16
1507 ; SI-NEXT:    s_or_b32 s0, s0, s14
1508 ; SI-NEXT:    s_or_b32 s12, s13, s12
1509 ; SI-NEXT:    s_and_b32 s3, s3, 0xffff
1510 ; SI-NEXT:    s_or_b32 s10, s11, s10
1511 ; SI-NEXT:    s_and_b32 s2, s2, 0xffff
1512 ; SI-NEXT:    s_or_b32 s8, s9, s8
1513 ; SI-NEXT:    s_and_b32 s1, s1, 0xffff
1514 ; SI-NEXT:    s_or_b32 s5, s6, s5
1515 ; SI-NEXT:    s_and_b32 s0, s0, 0xffff
1516 ; SI-NEXT:    s_or_b32 s3, s3, s12
1517 ; SI-NEXT:    s_or_b32 s2, s2, s10
1518 ; SI-NEXT:    s_or_b32 s1, s1, s8
1519 ; SI-NEXT:    s_or_b32 s0, s0, s5
1520 ; SI-NEXT:    s_mov_b32 s6, -1
1521 ; SI-NEXT:    s_mov_b32 s5, s4
1522 ; SI-NEXT:    v_mov_b32_e32 v0, s0
1523 ; SI-NEXT:    v_mov_b32_e32 v1, s1
1524 ; SI-NEXT:    v_mov_b32_e32 v2, s2
1525 ; SI-NEXT:    v_mov_b32_e32 v3, s3
1526 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
1527 ; SI-NEXT:    s_endpgm
1529 ; VI-LABEL: amd_kernel_v16i8:
1530 ; VI:       ; %bb.0: ; %entry
1531 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
1532 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1533 ; VI-NEXT:    s_lshr_b32 s4, s3, 24
1534 ; VI-NEXT:    s_lshr_b32 s5, s3, 16
1535 ; VI-NEXT:    s_add_i32 s5, s5, s5
1536 ; VI-NEXT:    s_add_i32 s4, s4, s4
1537 ; VI-NEXT:    v_mov_b32_e32 v3, s3
1538 ; VI-NEXT:    s_add_i32 s3, s3, s3
1539 ; VI-NEXT:    v_lshlrev_b16_e64 v4, 8, s4
1540 ; VI-NEXT:    v_mov_b32_e32 v5, s5
1541 ; VI-NEXT:    s_lshr_b32 s6, s2, 24
1542 ; VI-NEXT:    s_lshr_b32 s7, s2, 16
1543 ; VI-NEXT:    v_add_u32_sdwa v3, vcc, v3, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1544 ; VI-NEXT:    v_or_b32_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1545 ; VI-NEXT:    v_mov_b32_e32 v5, s3
1546 ; VI-NEXT:    s_add_i32 s7, s7, s7
1547 ; VI-NEXT:    s_add_i32 s6, s6, s6
1548 ; VI-NEXT:    v_or_b32_sdwa v3, v5, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1549 ; VI-NEXT:    v_mov_b32_e32 v2, s2
1550 ; VI-NEXT:    s_add_i32 s2, s2, s2
1551 ; VI-NEXT:    v_or_b32_sdwa v3, v3, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1552 ; VI-NEXT:    v_lshlrev_b16_e64 v4, 8, s6
1553 ; VI-NEXT:    v_mov_b32_e32 v5, s7
1554 ; VI-NEXT:    s_lshr_b32 s8, s1, 24
1555 ; VI-NEXT:    s_lshr_b32 s9, s1, 16
1556 ; VI-NEXT:    v_add_u32_sdwa v2, vcc, v2, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1557 ; VI-NEXT:    v_or_b32_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1558 ; VI-NEXT:    v_mov_b32_e32 v5, s2
1559 ; VI-NEXT:    s_add_i32 s9, s9, s9
1560 ; VI-NEXT:    s_add_i32 s8, s8, s8
1561 ; VI-NEXT:    v_or_b32_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1562 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1563 ; VI-NEXT:    s_add_i32 s1, s1, s1
1564 ; VI-NEXT:    v_or_b32_sdwa v2, v2, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1565 ; VI-NEXT:    v_lshlrev_b16_e64 v4, 8, s8
1566 ; VI-NEXT:    v_mov_b32_e32 v5, s9
1567 ; VI-NEXT:    s_lshr_b32 s10, s0, 24
1568 ; VI-NEXT:    s_lshr_b32 s11, s0, 16
1569 ; VI-NEXT:    v_add_u32_sdwa v1, vcc, v1, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1570 ; VI-NEXT:    v_or_b32_sdwa v4, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1571 ; VI-NEXT:    v_mov_b32_e32 v5, s1
1572 ; VI-NEXT:    s_add_i32 s11, s11, s11
1573 ; VI-NEXT:    s_add_i32 s10, s10, s10
1574 ; VI-NEXT:    v_or_b32_sdwa v1, v5, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1575 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1576 ; VI-NEXT:    s_add_i32 s0, s0, s0
1577 ; VI-NEXT:    v_or_b32_sdwa v1, v1, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1578 ; VI-NEXT:    v_lshlrev_b16_e64 v4, 8, s10
1579 ; VI-NEXT:    v_mov_b32_e32 v5, s11
1580 ; VI-NEXT:    v_add_u32_sdwa v0, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1581 ; VI-NEXT:    v_or_b32_sdwa v6, v5, v4 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1582 ; VI-NEXT:    v_mov_b32_e32 v4, s0
1583 ; VI-NEXT:    v_or_b32_sdwa v0, v4, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1584 ; VI-NEXT:    v_mov_b32_e32 v4, 0
1585 ; VI-NEXT:    v_mov_b32_e32 v5, 0
1586 ; VI-NEXT:    v_or_b32_sdwa v0, v0, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1587 ; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1588 ; VI-NEXT:    s_endpgm
1590 ; GFX11-LABEL: amd_kernel_v16i8:
1591 ; GFX11:       ; %bb.0: ; %entry
1592 ; GFX11-NEXT:    s_load_b128 s[0:3], s[0:1], 0x24
1593 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1594 ; GFX11-NEXT:    s_lshr_b32 s10, s3, 16
1595 ; GFX11-NEXT:    s_lshr_b32 s11, s3, 24
1596 ; GFX11-NEXT:    v_lshrrev_b16 v2, 8, s2
1597 ; GFX11-NEXT:    v_lshrrev_b16 v3, 8, s3
1598 ; GFX11-NEXT:    v_add_nc_u16 v7, s11, s11
1599 ; GFX11-NEXT:    v_add_nc_u16 v8, s10, s10
1600 ; GFX11-NEXT:    v_add_nc_u16 v4, s3, s3
1601 ; GFX11-NEXT:    v_add_nc_u16 v5, s2, s2
1602 ; GFX11-NEXT:    v_add_nc_u16 v3, v3, v3
1603 ; GFX11-NEXT:    v_add_nc_u16 v2, v2, v2
1604 ; GFX11-NEXT:    v_lshlrev_b16 v7, 8, v7
1605 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xff, v8
1606 ; GFX11-NEXT:    s_lshr_b32 s7, s1, 24
1607 ; GFX11-NEXT:    v_lshrrev_b16 v1, 8, s1
1608 ; GFX11-NEXT:    v_lshrrev_b16 v0, 8, s0
1609 ; GFX11-NEXT:    v_add_nc_u16 v11, s7, s7
1610 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xff, v4
1611 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xff, v5
1612 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v3
1613 ; GFX11-NEXT:    v_lshlrev_b16 v2, 8, v2
1614 ; GFX11-NEXT:    v_or_b32_e32 v7, v8, v7
1615 ; GFX11-NEXT:    s_lshr_b32 s6, s1, 16
1616 ; GFX11-NEXT:    s_lshr_b32 s4, s0, 16
1617 ; GFX11-NEXT:    s_lshr_b32 s5, s0, 24
1618 ; GFX11-NEXT:    s_lshr_b32 s8, s2, 16
1619 ; GFX11-NEXT:    s_lshr_b32 s9, s2, 24
1620 ; GFX11-NEXT:    v_add_nc_u16 v6, s1, s1
1621 ; GFX11-NEXT:    v_add_nc_u16 v12, s6, s6
1622 ; GFX11-NEXT:    v_add_nc_u16 v1, v1, v1
1623 ; GFX11-NEXT:    v_add_nc_u16 v9, s9, s9
1624 ; GFX11-NEXT:    v_add_nc_u16 v10, s8, s8
1625 ; GFX11-NEXT:    v_or_b32_e32 v3, v4, v3
1626 ; GFX11-NEXT:    v_or_b32_e32 v2, v5, v2
1627 ; GFX11-NEXT:    v_lshlrev_b16 v4, 8, v11
1628 ; GFX11-NEXT:    v_lshlrev_b32_e32 v5, 16, v7
1629 ; GFX11-NEXT:    v_add_nc_u16 v7, s0, s0
1630 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
1631 ; GFX11-NEXT:    v_add_nc_u16 v8, s5, s5
1632 ; GFX11-NEXT:    v_add_nc_u16 v11, s4, s4
1633 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xff, v6
1634 ; GFX11-NEXT:    v_lshlrev_b16 v1, 8, v1
1635 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xff, v12
1636 ; GFX11-NEXT:    v_lshlrev_b16 v9, 8, v9
1637 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xff, v10
1638 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xff, v7
1639 ; GFX11-NEXT:    v_lshlrev_b16 v0, 8, v0
1640 ; GFX11-NEXT:    v_lshlrev_b16 v8, 8, v8
1641 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xff, v11
1642 ; GFX11-NEXT:    v_or_b32_e32 v1, v6, v1
1643 ; GFX11-NEXT:    v_or_b32_e32 v4, v12, v4
1644 ; GFX11-NEXT:    v_or_b32_e32 v9, v10, v9
1645 ; GFX11-NEXT:    v_or_b32_e32 v0, v7, v0
1646 ; GFX11-NEXT:    v_or_b32_e32 v6, v11, v8
1647 ; GFX11-NEXT:    v_and_b32_e32 v3, 0xffff, v3
1648 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1649 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 16, v4
1650 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1651 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v9
1652 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
1653 ; GFX11-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
1654 ; GFX11-NEXT:    v_or_b32_e32 v3, v3, v5
1655 ; GFX11-NEXT:    v_or_b32_e32 v1, v1, v4
1656 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0
1657 ; GFX11-NEXT:    v_or_b32_e32 v2, v2, v7
1658 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0
1659 ; GFX11-NEXT:    v_or_b32_e32 v0, v0, v6
1660 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
1661 ; GFX11-NEXT:    s_nop 0
1662 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1663 ; GFX11-NEXT:    s_endpgm
1664 entry:
1665   %add = add <16 x i8> %arg0, %arg0
1666   store <16 x i8> %add, ptr addrspace(1) null
1667   ret void
1670 define amdgpu_kernel void @amd_kernel_v32i8(<32 x i8> %arg0) {
1671 ; SI-LABEL: amd_kernel_v32i8:
1672 ; SI:       ; %bb.0: ; %entry
1673 ; SI-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x9
1674 ; SI-NEXT:    s_mov_b32 s9, 0
1675 ; SI-NEXT:    s_mov_b32 s8, 16
1676 ; SI-NEXT:    s_mov_b32 s11, 0xf000
1677 ; SI-NEXT:    s_mov_b32 s10, -1
1678 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1679 ; SI-NEXT:    s_lshr_b32 s12, s4, 16
1680 ; SI-NEXT:    s_lshr_b32 s13, s4, 24
1681 ; SI-NEXT:    s_lshr_b32 s14, s5, 16
1682 ; SI-NEXT:    s_lshr_b32 s15, s5, 24
1683 ; SI-NEXT:    s_lshr_b32 s16, s6, 16
1684 ; SI-NEXT:    s_lshr_b32 s17, s6, 24
1685 ; SI-NEXT:    s_lshr_b32 s18, s7, 16
1686 ; SI-NEXT:    s_lshr_b32 s19, s7, 24
1687 ; SI-NEXT:    s_lshr_b32 s20, s0, 16
1688 ; SI-NEXT:    s_lshr_b32 s21, s0, 24
1689 ; SI-NEXT:    s_lshr_b32 s22, s1, 16
1690 ; SI-NEXT:    s_lshr_b32 s23, s1, 24
1691 ; SI-NEXT:    s_lshr_b32 s24, s2, 16
1692 ; SI-NEXT:    s_lshr_b32 s25, s2, 24
1693 ; SI-NEXT:    s_lshr_b32 s26, s3, 16
1694 ; SI-NEXT:    s_lshr_b32 s27, s3, 24
1695 ; SI-NEXT:    s_bfe_u32 s28, s4, 0x80008
1696 ; SI-NEXT:    s_bfe_u32 s29, s5, 0x80008
1697 ; SI-NEXT:    s_bfe_u32 s30, s6, 0x80008
1698 ; SI-NEXT:    s_bfe_u32 s31, s7, 0x80008
1699 ; SI-NEXT:    s_bfe_u32 s33, s0, 0x80008
1700 ; SI-NEXT:    s_bfe_u32 s34, s1, 0x80008
1701 ; SI-NEXT:    s_bfe_u32 s35, s2, 0x80008
1702 ; SI-NEXT:    s_bfe_u32 s36, s3, 0x80008
1703 ; SI-NEXT:    s_add_i32 s3, s3, s3
1704 ; SI-NEXT:    s_add_i32 s2, s2, s2
1705 ; SI-NEXT:    s_add_i32 s1, s1, s1
1706 ; SI-NEXT:    s_add_i32 s0, s0, s0
1707 ; SI-NEXT:    s_add_i32 s7, s7, s7
1708 ; SI-NEXT:    s_add_i32 s6, s6, s6
1709 ; SI-NEXT:    s_add_i32 s5, s5, s5
1710 ; SI-NEXT:    s_add_i32 s4, s4, s4
1711 ; SI-NEXT:    s_add_i32 s27, s27, s27
1712 ; SI-NEXT:    s_add_i32 s26, s26, s26
1713 ; SI-NEXT:    s_and_b32 s3, s3, 0xff
1714 ; SI-NEXT:    s_add_i32 s36, s36, s36
1715 ; SI-NEXT:    s_add_i32 s25, s25, s25
1716 ; SI-NEXT:    s_add_i32 s24, s24, s24
1717 ; SI-NEXT:    s_and_b32 s2, s2, 0xff
1718 ; SI-NEXT:    s_add_i32 s35, s35, s35
1719 ; SI-NEXT:    s_add_i32 s23, s23, s23
1720 ; SI-NEXT:    s_add_i32 s22, s22, s22
1721 ; SI-NEXT:    s_and_b32 s1, s1, 0xff
1722 ; SI-NEXT:    s_add_i32 s34, s34, s34
1723 ; SI-NEXT:    s_add_i32 s21, s21, s21
1724 ; SI-NEXT:    s_add_i32 s20, s20, s20
1725 ; SI-NEXT:    s_and_b32 s0, s0, 0xff
1726 ; SI-NEXT:    s_add_i32 s33, s33, s33
1727 ; SI-NEXT:    s_add_i32 s19, s19, s19
1728 ; SI-NEXT:    s_add_i32 s18, s18, s18
1729 ; SI-NEXT:    s_and_b32 s7, s7, 0xff
1730 ; SI-NEXT:    s_add_i32 s31, s31, s31
1731 ; SI-NEXT:    s_add_i32 s17, s17, s17
1732 ; SI-NEXT:    s_add_i32 s16, s16, s16
1733 ; SI-NEXT:    s_and_b32 s6, s6, 0xff
1734 ; SI-NEXT:    s_add_i32 s30, s30, s30
1735 ; SI-NEXT:    s_add_i32 s15, s15, s15
1736 ; SI-NEXT:    s_add_i32 s14, s14, s14
1737 ; SI-NEXT:    s_and_b32 s5, s5, 0xff
1738 ; SI-NEXT:    s_add_i32 s29, s29, s29
1739 ; SI-NEXT:    s_add_i32 s13, s13, s13
1740 ; SI-NEXT:    s_add_i32 s12, s12, s12
1741 ; SI-NEXT:    s_and_b32 s4, s4, 0xff
1742 ; SI-NEXT:    s_add_i32 s28, s28, s28
1743 ; SI-NEXT:    s_lshl_b32 s27, s27, 24
1744 ; SI-NEXT:    s_and_b32 s26, s26, 0xff
1745 ; SI-NEXT:    s_lshl_b32 s36, s36, 8
1746 ; SI-NEXT:    s_lshl_b32 s25, s25, 24
1747 ; SI-NEXT:    s_and_b32 s24, s24, 0xff
1748 ; SI-NEXT:    s_lshl_b32 s35, s35, 8
1749 ; SI-NEXT:    s_lshl_b32 s23, s23, 24
1750 ; SI-NEXT:    s_and_b32 s22, s22, 0xff
1751 ; SI-NEXT:    s_lshl_b32 s34, s34, 8
1752 ; SI-NEXT:    s_lshl_b32 s21, s21, 24
1753 ; SI-NEXT:    s_and_b32 s20, s20, 0xff
1754 ; SI-NEXT:    s_lshl_b32 s33, s33, 8
1755 ; SI-NEXT:    s_lshl_b32 s19, s19, 24
1756 ; SI-NEXT:    s_and_b32 s18, s18, 0xff
1757 ; SI-NEXT:    s_lshl_b32 s31, s31, 8
1758 ; SI-NEXT:    s_lshl_b32 s17, s17, 24
1759 ; SI-NEXT:    s_and_b32 s16, s16, 0xff
1760 ; SI-NEXT:    s_lshl_b32 s30, s30, 8
1761 ; SI-NEXT:    s_lshl_b32 s15, s15, 24
1762 ; SI-NEXT:    s_and_b32 s14, s14, 0xff
1763 ; SI-NEXT:    s_lshl_b32 s29, s29, 8
1764 ; SI-NEXT:    s_lshl_b32 s13, s13, 24
1765 ; SI-NEXT:    s_and_b32 s12, s12, 0xff
1766 ; SI-NEXT:    s_lshl_b32 s28, s28, 8
1767 ; SI-NEXT:    s_lshl_b32 s26, s26, 16
1768 ; SI-NEXT:    s_or_b32 s3, s3, s36
1769 ; SI-NEXT:    s_lshl_b32 s24, s24, 16
1770 ; SI-NEXT:    s_or_b32 s2, s2, s35
1771 ; SI-NEXT:    s_lshl_b32 s22, s22, 16
1772 ; SI-NEXT:    s_or_b32 s1, s1, s34
1773 ; SI-NEXT:    s_lshl_b32 s20, s20, 16
1774 ; SI-NEXT:    s_or_b32 s0, s0, s33
1775 ; SI-NEXT:    s_lshl_b32 s18, s18, 16
1776 ; SI-NEXT:    s_or_b32 s7, s7, s31
1777 ; SI-NEXT:    s_lshl_b32 s16, s16, 16
1778 ; SI-NEXT:    s_or_b32 s6, s6, s30
1779 ; SI-NEXT:    s_lshl_b32 s14, s14, 16
1780 ; SI-NEXT:    s_or_b32 s5, s5, s29
1781 ; SI-NEXT:    s_lshl_b32 s12, s12, 16
1782 ; SI-NEXT:    s_or_b32 s4, s4, s28
1783 ; SI-NEXT:    s_or_b32 s26, s27, s26
1784 ; SI-NEXT:    s_and_b32 s3, s3, 0xffff
1785 ; SI-NEXT:    s_or_b32 s24, s25, s24
1786 ; SI-NEXT:    s_and_b32 s2, s2, 0xffff
1787 ; SI-NEXT:    s_or_b32 s22, s23, s22
1788 ; SI-NEXT:    s_and_b32 s1, s1, 0xffff
1789 ; SI-NEXT:    s_or_b32 s20, s21, s20
1790 ; SI-NEXT:    s_and_b32 s0, s0, 0xffff
1791 ; SI-NEXT:    s_or_b32 s18, s19, s18
1792 ; SI-NEXT:    s_and_b32 s7, s7, 0xffff
1793 ; SI-NEXT:    s_or_b32 s16, s17, s16
1794 ; SI-NEXT:    s_and_b32 s6, s6, 0xffff
1795 ; SI-NEXT:    s_or_b32 s14, s15, s14
1796 ; SI-NEXT:    s_and_b32 s5, s5, 0xffff
1797 ; SI-NEXT:    s_or_b32 s12, s13, s12
1798 ; SI-NEXT:    s_and_b32 s4, s4, 0xffff
1799 ; SI-NEXT:    s_or_b32 s3, s3, s26
1800 ; SI-NEXT:    s_or_b32 s2, s2, s24
1801 ; SI-NEXT:    s_or_b32 s1, s1, s22
1802 ; SI-NEXT:    s_or_b32 s7, s7, s18
1803 ; SI-NEXT:    s_or_b32 s6, s6, s16
1804 ; SI-NEXT:    s_or_b32 s5, s5, s14
1805 ; SI-NEXT:    s_or_b32 s4, s4, s12
1806 ; SI-NEXT:    s_or_b32 s0, s0, s20
1807 ; SI-NEXT:    v_mov_b32_e32 v0, s4
1808 ; SI-NEXT:    v_mov_b32_e32 v1, s5
1809 ; SI-NEXT:    v_mov_b32_e32 v2, s6
1810 ; SI-NEXT:    v_mov_b32_e32 v3, s7
1811 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
1812 ; SI-NEXT:    s_waitcnt expcnt(0)
1813 ; SI-NEXT:    v_mov_b32_e32 v0, s0
1814 ; SI-NEXT:    v_mov_b32_e32 v1, s1
1815 ; SI-NEXT:    v_mov_b32_e32 v2, s2
1816 ; SI-NEXT:    v_mov_b32_e32 v3, s3
1817 ; SI-NEXT:    s_mov_b32 s8, s9
1818 ; SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
1819 ; SI-NEXT:    s_endpgm
1821 ; VI-LABEL: amd_kernel_v32i8:
1822 ; VI:       ; %bb.0: ; %entry
1823 ; VI-NEXT:    s_load_dwordx8 s[0:7], s[0:1], 0x24
1824 ; VI-NEXT:    v_mov_b32_e32 v10, 0
1825 ; VI-NEXT:    v_mov_b32_e32 v11, 0
1826 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1827 ; VI-NEXT:    s_lshr_b32 s8, s3, 24
1828 ; VI-NEXT:    s_lshr_b32 s9, s3, 16
1829 ; VI-NEXT:    s_add_i32 s9, s9, s9
1830 ; VI-NEXT:    s_add_i32 s8, s8, s8
1831 ; VI-NEXT:    v_mov_b32_e32 v3, s3
1832 ; VI-NEXT:    s_add_i32 s3, s3, s3
1833 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s8
1834 ; VI-NEXT:    v_mov_b32_e32 v9, s9
1835 ; VI-NEXT:    s_lshr_b32 s10, s2, 24
1836 ; VI-NEXT:    s_lshr_b32 s11, s2, 16
1837 ; VI-NEXT:    v_add_u32_sdwa v3, vcc, v3, v3 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1838 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1839 ; VI-NEXT:    v_mov_b32_e32 v9, s3
1840 ; VI-NEXT:    s_add_i32 s11, s11, s11
1841 ; VI-NEXT:    s_add_i32 s10, s10, s10
1842 ; VI-NEXT:    v_or_b32_sdwa v3, v9, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1843 ; VI-NEXT:    v_mov_b32_e32 v2, s2
1844 ; VI-NEXT:    s_add_i32 s2, s2, s2
1845 ; VI-NEXT:    v_or_b32_sdwa v3, v3, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1846 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s10
1847 ; VI-NEXT:    v_mov_b32_e32 v9, s11
1848 ; VI-NEXT:    s_lshr_b32 s12, s1, 24
1849 ; VI-NEXT:    s_lshr_b32 s13, s1, 16
1850 ; VI-NEXT:    v_add_u32_sdwa v2, vcc, v2, v2 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1851 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1852 ; VI-NEXT:    v_mov_b32_e32 v9, s2
1853 ; VI-NEXT:    v_mov_b32_e32 v0, s4
1854 ; VI-NEXT:    s_add_i32 s13, s13, s13
1855 ; VI-NEXT:    s_add_i32 s12, s12, s12
1856 ; VI-NEXT:    v_or_b32_sdwa v2, v9, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1857 ; VI-NEXT:    v_add_u32_sdwa v4, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1858 ; VI-NEXT:    v_mov_b32_e32 v0, s5
1859 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1860 ; VI-NEXT:    s_add_i32 s1, s1, s1
1861 ; VI-NEXT:    v_or_b32_sdwa v2, v2, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1862 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s12
1863 ; VI-NEXT:    v_mov_b32_e32 v9, s13
1864 ; VI-NEXT:    s_lshr_b32 s14, s0, 24
1865 ; VI-NEXT:    s_lshr_b32 s15, s0, 16
1866 ; VI-NEXT:    v_add_u32_sdwa v5, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1867 ; VI-NEXT:    v_mov_b32_e32 v0, s6
1868 ; VI-NEXT:    v_add_u32_sdwa v1, vcc, v1, v1 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1869 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1870 ; VI-NEXT:    v_mov_b32_e32 v9, s1
1871 ; VI-NEXT:    v_add_u32_sdwa v6, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1872 ; VI-NEXT:    v_mov_b32_e32 v0, s7
1873 ; VI-NEXT:    s_add_i32 s15, s15, s15
1874 ; VI-NEXT:    s_add_i32 s14, s14, s14
1875 ; VI-NEXT:    v_or_b32_sdwa v1, v9, v1 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1876 ; VI-NEXT:    v_add_u32_sdwa v7, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1877 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1878 ; VI-NEXT:    s_add_i32 s0, s0, s0
1879 ; VI-NEXT:    v_or_b32_sdwa v1, v1, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1880 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s14
1881 ; VI-NEXT:    v_mov_b32_e32 v9, s15
1882 ; VI-NEXT:    s_lshr_b32 s16, s7, 24
1883 ; VI-NEXT:    s_lshr_b32 s17, s7, 16
1884 ; VI-NEXT:    v_add_u32_sdwa v0, vcc, v0, v0 dst_sel:BYTE_1 dst_unused:UNUSED_PAD src0_sel:BYTE_1 src1_sel:BYTE_1
1885 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1886 ; VI-NEXT:    v_mov_b32_e32 v9, s0
1887 ; VI-NEXT:    s_add_i32 s17, s17, s17
1888 ; VI-NEXT:    s_add_i32 s16, s16, s16
1889 ; VI-NEXT:    v_or_b32_sdwa v0, v9, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1890 ; VI-NEXT:    s_add_i32 s7, s7, s7
1891 ; VI-NEXT:    v_or_b32_sdwa v0, v0, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1892 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s16
1893 ; VI-NEXT:    v_mov_b32_e32 v9, s17
1894 ; VI-NEXT:    s_lshr_b32 s18, s6, 24
1895 ; VI-NEXT:    s_lshr_b32 s19, s6, 16
1896 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1897 ; VI-NEXT:    v_mov_b32_e32 v9, s7
1898 ; VI-NEXT:    s_add_i32 s19, s19, s19
1899 ; VI-NEXT:    s_add_i32 s18, s18, s18
1900 ; VI-NEXT:    v_or_b32_sdwa v7, v9, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1901 ; VI-NEXT:    s_add_i32 s6, s6, s6
1902 ; VI-NEXT:    v_or_b32_sdwa v7, v7, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1903 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s18
1904 ; VI-NEXT:    v_mov_b32_e32 v9, s19
1905 ; VI-NEXT:    s_lshr_b32 s20, s5, 24
1906 ; VI-NEXT:    s_lshr_b32 s21, s5, 16
1907 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1908 ; VI-NEXT:    v_mov_b32_e32 v9, s6
1909 ; VI-NEXT:    s_add_i32 s21, s21, s21
1910 ; VI-NEXT:    s_add_i32 s20, s20, s20
1911 ; VI-NEXT:    v_or_b32_sdwa v6, v9, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1912 ; VI-NEXT:    s_add_i32 s5, s5, s5
1913 ; VI-NEXT:    v_or_b32_sdwa v6, v6, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1914 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s20
1915 ; VI-NEXT:    v_mov_b32_e32 v9, s21
1916 ; VI-NEXT:    s_lshr_b32 s22, s4, 24
1917 ; VI-NEXT:    s_lshr_b32 s23, s4, 16
1918 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1919 ; VI-NEXT:    v_mov_b32_e32 v9, s5
1920 ; VI-NEXT:    s_add_i32 s23, s23, s23
1921 ; VI-NEXT:    s_add_i32 s22, s22, s22
1922 ; VI-NEXT:    v_or_b32_sdwa v5, v9, v5 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1923 ; VI-NEXT:    s_add_i32 s4, s4, s4
1924 ; VI-NEXT:    v_or_b32_sdwa v5, v5, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1925 ; VI-NEXT:    v_lshlrev_b16_e64 v8, 8, s22
1926 ; VI-NEXT:    v_mov_b32_e32 v9, s23
1927 ; VI-NEXT:    v_or_b32_sdwa v8, v9, v8 dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1928 ; VI-NEXT:    v_mov_b32_e32 v9, s4
1929 ; VI-NEXT:    v_or_b32_sdwa v4, v9, v4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:BYTE_0 src1_sel:DWORD
1930 ; VI-NEXT:    v_or_b32_sdwa v4, v4, v8 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1931 ; VI-NEXT:    v_mov_b32_e32 v8, 16
1932 ; VI-NEXT:    v_mov_b32_e32 v9, 0
1933 ; VI-NEXT:    flat_store_dwordx4 v[8:9], v[4:7]
1934 ; VI-NEXT:    flat_store_dwordx4 v[10:11], v[0:3]
1935 ; VI-NEXT:    s_endpgm
1937 ; GFX11-LABEL: amd_kernel_v32i8:
1938 ; GFX11:       ; %bb.0: ; %entry
1939 ; GFX11-NEXT:    s_load_b256 s[0:7], s[0:1], 0x24
1940 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1941 ; GFX11-NEXT:    v_lshrrev_b16 v3, 8, s2
1942 ; GFX11-NEXT:    v_lshrrev_b16 v7, 8, s3
1943 ; GFX11-NEXT:    s_lshr_b32 s21, s3, 16
1944 ; GFX11-NEXT:    s_lshr_b32 s22, s3, 24
1945 ; GFX11-NEXT:    v_add_nc_u16 v8, s3, s3
1946 ; GFX11-NEXT:    v_add_nc_u16 v9, s2, s2
1947 ; GFX11-NEXT:    v_add_nc_u16 v7, v7, v7
1948 ; GFX11-NEXT:    v_add_nc_u16 v10, s22, s22
1949 ; GFX11-NEXT:    v_add_nc_u16 v11, s21, s21
1950 ; GFX11-NEXT:    v_add_nc_u16 v3, v3, v3
1951 ; GFX11-NEXT:    v_lshrrev_b16 v2, 8, s1
1952 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xff, v8
1953 ; GFX11-NEXT:    v_lshlrev_b16 v7, 8, v7
1954 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xff, v9
1955 ; GFX11-NEXT:    v_lshlrev_b16 v10, 8, v10
1956 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xff, v11
1957 ; GFX11-NEXT:    v_lshlrev_b16 v3, 8, v3
1958 ; GFX11-NEXT:    s_lshr_b32 s18, s1, 16
1959 ; GFX11-NEXT:    s_lshr_b32 s19, s1, 24
1960 ; GFX11-NEXT:    s_lshr_b32 s20, s2, 24
1961 ; GFX11-NEXT:    s_lshr_b32 s2, s2, 16
1962 ; GFX11-NEXT:    v_or_b32_e32 v7, v8, v7
1963 ; GFX11-NEXT:    v_add_nc_u16 v8, s20, s20
1964 ; GFX11-NEXT:    v_or_b32_e32 v10, v11, v10
1965 ; GFX11-NEXT:    v_or_b32_e32 v3, v9, v3
1966 ; GFX11-NEXT:    v_add_nc_u16 v9, s2, s2
1967 ; GFX11-NEXT:    v_add_nc_u16 v11, s1, s1
1968 ; GFX11-NEXT:    v_add_nc_u16 v2, v2, v2
1969 ; GFX11-NEXT:    v_add_nc_u16 v12, s19, s19
1970 ; GFX11-NEXT:    v_add_nc_u16 v13, s18, s18
1971 ; GFX11-NEXT:    v_lshrrev_b16 v1, 8, s0
1972 ; GFX11-NEXT:    v_lshlrev_b16 v8, 8, v8
1973 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xff, v9
1974 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xff, v11
1975 ; GFX11-NEXT:    v_lshlrev_b16 v2, 8, v2
1976 ; GFX11-NEXT:    v_lshlrev_b16 v12, 8, v12
1977 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xff, v13
1978 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xffff, v3
1979 ; GFX11-NEXT:    v_or_b32_e32 v3, v9, v8
1980 ; GFX11-NEXT:    v_or_b32_e32 v2, v11, v2
1981 ; GFX11-NEXT:    v_add_nc_u16 v9, s0, s0
1982 ; GFX11-NEXT:    v_or_b32_e32 v8, v13, v12
1983 ; GFX11-NEXT:    v_add_nc_u16 v1, v1, v1
1984 ; GFX11-NEXT:    v_lshrrev_b16 v6, 8, s7
1985 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xffff, v7
1986 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v10
1987 ; GFX11-NEXT:    v_lshlrev_b32_e32 v11, 16, v3
1988 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xffff, v2
1989 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 16, v8
1990 ; GFX11-NEXT:    v_and_b32_e32 v9, 0xff, v9
1991 ; GFX11-NEXT:    v_lshlrev_b16 v13, 8, v1
1992 ; GFX11-NEXT:    v_lshrrev_b16 v5, 8, s6
1993 ; GFX11-NEXT:    s_lshr_b32 s14, s7, 16
1994 ; GFX11-NEXT:    s_lshr_b32 s15, s7, 24
1995 ; GFX11-NEXT:    s_lshr_b32 s16, s0, 16
1996 ; GFX11-NEXT:    s_lshr_b32 s17, s0, 24
1997 ; GFX11-NEXT:    v_or_b32_e32 v3, v7, v10
1998 ; GFX11-NEXT:    v_or_b32_e32 v2, v14, v11
1999 ; GFX11-NEXT:    v_add_nc_u16 v7, s7, s7
2000 ; GFX11-NEXT:    v_or_b32_e32 v1, v12, v8
2001 ; GFX11-NEXT:    v_or_b32_e32 v8, v9, v13
2002 ; GFX11-NEXT:    v_add_nc_u16 v9, s17, s17
2003 ; GFX11-NEXT:    v_add_nc_u16 v10, s16, s16
2004 ; GFX11-NEXT:    v_add_nc_u16 v6, v6, v6
2005 ; GFX11-NEXT:    v_add_nc_u16 v11, s15, s15
2006 ; GFX11-NEXT:    v_add_nc_u16 v12, s14, s14
2007 ; GFX11-NEXT:    v_add_nc_u16 v13, s6, s6
2008 ; GFX11-NEXT:    v_add_nc_u16 v5, v5, v5
2009 ; GFX11-NEXT:    v_and_b32_e32 v7, 0xff, v7
2010 ; GFX11-NEXT:    v_lshlrev_b16 v6, 8, v6
2011 ; GFX11-NEXT:    v_lshlrev_b16 v11, 8, v11
2012 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xff, v12
2013 ; GFX11-NEXT:    v_lshlrev_b16 v9, 8, v9
2014 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xff, v10
2015 ; GFX11-NEXT:    v_lshrrev_b16 v0, 8, s4
2016 ; GFX11-NEXT:    v_lshrrev_b16 v4, 8, s5
2017 ; GFX11-NEXT:    v_and_b32_e32 v13, 0xff, v13
2018 ; GFX11-NEXT:    v_lshlrev_b16 v5, 8, v5
2019 ; GFX11-NEXT:    s_lshr_b32 s12, s6, 16
2020 ; GFX11-NEXT:    s_lshr_b32 s13, s6, 24
2021 ; GFX11-NEXT:    s_lshr_b32 s8, s4, 16
2022 ; GFX11-NEXT:    s_lshr_b32 s9, s4, 24
2023 ; GFX11-NEXT:    s_lshr_b32 s10, s5, 16
2024 ; GFX11-NEXT:    s_lshr_b32 s11, s5, 24
2025 ; GFX11-NEXT:    v_or_b32_e32 v6, v7, v6
2026 ; GFX11-NEXT:    v_or_b32_e32 v7, v12, v11
2027 ; GFX11-NEXT:    v_and_b32_e32 v12, 0xffff, v8
2028 ; GFX11-NEXT:    v_or_b32_e32 v8, v10, v9
2029 ; GFX11-NEXT:    v_add_nc_u16 v9, s13, s13
2030 ; GFX11-NEXT:    v_add_nc_u16 v10, s12, s12
2031 ; GFX11-NEXT:    v_or_b32_e32 v5, v13, v5
2032 ; GFX11-NEXT:    v_add_nc_u16 v11, s5, s5
2033 ; GFX11-NEXT:    v_add_nc_u16 v4, v4, v4
2034 ; GFX11-NEXT:    v_add_nc_u16 v13, s11, s11
2035 ; GFX11-NEXT:    v_add_nc_u16 v14, s10, s10
2036 ; GFX11-NEXT:    v_add_nc_u16 v15, s4, s4
2037 ; GFX11-NEXT:    v_add_nc_u16 v0, v0, v0
2038 ; GFX11-NEXT:    v_add_nc_u16 v16, s9, s9
2039 ; GFX11-NEXT:    v_add_nc_u16 v17, s8, s8
2040 ; GFX11-NEXT:    v_lshlrev_b16 v9, 8, v9
2041 ; GFX11-NEXT:    v_and_b32_e32 v10, 0xff, v10
2042 ; GFX11-NEXT:    v_and_b32_e32 v11, 0xff, v11
2043 ; GFX11-NEXT:    v_lshlrev_b16 v4, 8, v4
2044 ; GFX11-NEXT:    v_lshlrev_b16 v13, 8, v13
2045 ; GFX11-NEXT:    v_and_b32_e32 v14, 0xff, v14
2046 ; GFX11-NEXT:    v_and_b32_e32 v15, 0xff, v15
2047 ; GFX11-NEXT:    v_lshlrev_b16 v0, 8, v0
2048 ; GFX11-NEXT:    v_lshlrev_b16 v16, 8, v16
2049 ; GFX11-NEXT:    v_and_b32_e32 v17, 0xff, v17
2050 ; GFX11-NEXT:    v_or_b32_e32 v9, v10, v9
2051 ; GFX11-NEXT:    v_or_b32_e32 v4, v11, v4
2052 ; GFX11-NEXT:    v_or_b32_e32 v10, v14, v13
2053 ; GFX11-NEXT:    v_or_b32_e32 v0, v15, v0
2054 ; GFX11-NEXT:    v_or_b32_e32 v11, v17, v16
2055 ; GFX11-NEXT:    v_and_b32_e32 v6, 0xffff, v6
2056 ; GFX11-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
2057 ; GFX11-NEXT:    v_and_b32_e32 v5, 0xffff, v5
2058 ; GFX11-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
2059 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff, v4
2060 ; GFX11-NEXT:    v_lshlrev_b32_e32 v10, 16, v10
2061 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
2062 ; GFX11-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
2063 ; GFX11-NEXT:    v_lshlrev_b32_e32 v13, 16, v8
2064 ; GFX11-NEXT:    v_or_b32_e32 v7, v6, v7
2065 ; GFX11-NEXT:    v_or_b32_e32 v6, v5, v9
2066 ; GFX11-NEXT:    v_mov_b32_e32 v8, 16
2067 ; GFX11-NEXT:    v_mov_b32_e32 v9, 0
2068 ; GFX11-NEXT:    v_or_b32_e32 v5, v4, v10
2069 ; GFX11-NEXT:    v_or_b32_e32 v4, v0, v11
2070 ; GFX11-NEXT:    v_mov_b32_e32 v10, 0
2071 ; GFX11-NEXT:    v_mov_b32_e32 v11, 0
2072 ; GFX11-NEXT:    v_or_b32_e32 v0, v12, v13
2073 ; GFX11-NEXT:    s_clause 0x1
2074 ; GFX11-NEXT:    global_store_b128 v[8:9], v[4:7], off
2075 ; GFX11-NEXT:    global_store_b128 v[10:11], v[0:3], off
2076 ; GFX11-NEXT:    s_nop 0
2077 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2078 ; GFX11-NEXT:    s_endpgm
2079 entry:
2080   %add = add <32 x i8> %arg0, %arg0
2081   store <32 x i8> %add, ptr addrspace(1) null
2082   ret void
2085 attributes #0 = { nounwind noinline }