Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / insert_vector_elt.v2i16.ll
blob647870f0e08979c486eb4ecf7e35ae00d8f0f626
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefix=GFX9 %s
3 ; RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=fiji < %s | FileCheck -check-prefixes=CIVI,VI %s
4 ; RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii < %s | FileCheck -check-prefixes=CIVI,CI %s
5 ; RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 < %s | FileCheck -check-prefix=GFX11 %s
7 define amdgpu_kernel void @s_insertelement_v2i16_0(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {
8 ; GFX9-LABEL: s_insertelement_v2i16_0:
9 ; GFX9:       ; %bb.0:
10 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
11 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
12 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
13 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
14 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
15 ; GFX9-NEXT:    s_pack_lh_b32_b16 s2, 0x3e7, s2
16 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
17 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
18 ; GFX9-NEXT:    s_endpgm
20 ; CIVI-LABEL: s_insertelement_v2i16_0:
21 ; CIVI:       ; %bb.0:
22 ; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
23 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
24 ; CIVI-NEXT:    s_load_dword s2, s[2:3], 0x0
25 ; CIVI-NEXT:    v_mov_b32_e32 v0, s0
26 ; CIVI-NEXT:    v_mov_b32_e32 v1, s1
27 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
28 ; CIVI-NEXT:    s_and_b32 s0, s2, 0xffff0000
29 ; CIVI-NEXT:    s_or_b32 s0, s0, 0x3e7
30 ; CIVI-NEXT:    v_mov_b32_e32 v2, s0
31 ; CIVI-NEXT:    flat_store_dword v[0:1], v2
32 ; CIVI-NEXT:    s_endpgm
34 ; GFX11-LABEL: s_insertelement_v2i16_0:
35 ; GFX11:       ; %bb.0:
36 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
37 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
38 ; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0
39 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
40 ; GFX11-NEXT:    s_pack_lh_b32_b16 s2, 0x3e7, s2
41 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
42 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
43 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
44 ; GFX11-NEXT:    s_nop 0
45 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
46 ; GFX11-NEXT:    s_endpgm
47   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
48   %vecins = insertelement <2 x i16> %vec, i16 999, i32 0
49   store <2 x i16> %vecins, ptr addrspace(1) %out
50   ret void
54 define amdgpu_kernel void @s_insertelement_v2i16_0_reg(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i16 %elt) #0 {
55 ; GFX9-LABEL: s_insertelement_v2i16_0_reg:
56 ; GFX9:       ; %bb.0:
57 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
58 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x30
59 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
60 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
61 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
62 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
63 ; GFX9-NEXT:    s_pack_lh_b32_b16 s2, s4, s2
64 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
65 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
66 ; GFX9-NEXT:    s_endpgm
68 ; VI-LABEL: s_insertelement_v2i16_0_reg:
69 ; VI:       ; %bb.0:
70 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
71 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x30
72 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
73 ; VI-NEXT:    s_load_dword s2, s[2:3], 0x0
74 ; VI-NEXT:    v_mov_b32_e32 v0, s0
75 ; VI-NEXT:    v_mov_b32_e32 v1, s1
76 ; VI-NEXT:    s_and_b32 s0, s4, 0xffff
77 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
78 ; VI-NEXT:    s_and_b32 s1, s2, 0xffff0000
79 ; VI-NEXT:    s_or_b32 s0, s0, s1
80 ; VI-NEXT:    v_mov_b32_e32 v2, s0
81 ; VI-NEXT:    flat_store_dword v[0:1], v2
82 ; VI-NEXT:    s_endpgm
84 ; CI-LABEL: s_insertelement_v2i16_0_reg:
85 ; CI:       ; %bb.0:
86 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
87 ; CI-NEXT:    s_load_dword s4, s[6:7], 0xc
88 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
89 ; CI-NEXT:    s_load_dword s2, s[2:3], 0x0
90 ; CI-NEXT:    v_mov_b32_e32 v0, s0
91 ; CI-NEXT:    v_mov_b32_e32 v1, s1
92 ; CI-NEXT:    s_and_b32 s1, s4, 0xffff
93 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
94 ; CI-NEXT:    s_and_b32 s0, s2, 0xffff0000
95 ; CI-NEXT:    s_or_b32 s0, s1, s0
96 ; CI-NEXT:    v_mov_b32_e32 v2, s0
97 ; CI-NEXT:    flat_store_dword v[0:1], v2
98 ; CI-NEXT:    s_endpgm
100 ; GFX11-LABEL: s_insertelement_v2i16_0_reg:
101 ; GFX11:       ; %bb.0:
102 ; GFX11-NEXT:    s_clause 0x1
103 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
104 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x30
105 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
106 ; GFX11-NEXT:    s_load_b32 s1, s[6:7], 0x0
107 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
108 ; GFX11-NEXT:    s_pack_lh_b32_b16 s0, s0, s1
109 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
110 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
111 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
112 ; GFX11-NEXT:    s_nop 0
113 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
114 ; GFX11-NEXT:    s_endpgm
115   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
116   %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0
117   store <2 x i16> %vecins, ptr addrspace(1) %out
118   ret void
121 define amdgpu_kernel void @s_insertelement_v2i16_0_multi_use_hi_reg(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i16 %elt) #0 {
122 ; GFX9-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:
123 ; GFX9:       ; %bb.0:
124 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
125 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x30
126 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
127 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
128 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
129 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
130 ; GFX9-NEXT:    s_lshr_b32 s2, s2, 16
131 ; GFX9-NEXT:    s_pack_ll_b32_b16 s3, s4, s2
132 ; GFX9-NEXT:    v_mov_b32_e32 v1, s3
133 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
134 ; GFX9-NEXT:    ;;#ASMSTART
135 ; GFX9-NEXT:    ; use s2
136 ; GFX9-NEXT:    ;;#ASMEND
137 ; GFX9-NEXT:    s_endpgm
139 ; VI-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:
140 ; VI:       ; %bb.0:
141 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
142 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x30
143 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
144 ; VI-NEXT:    s_load_dword s2, s[2:3], 0x0
145 ; VI-NEXT:    v_mov_b32_e32 v0, s0
146 ; VI-NEXT:    v_mov_b32_e32 v1, s1
147 ; VI-NEXT:    s_and_b32 s0, s4, 0xffff
148 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
149 ; VI-NEXT:    s_lshr_b32 s1, s2, 16
150 ; VI-NEXT:    s_and_b32 s2, s2, 0xffff0000
151 ; VI-NEXT:    s_or_b32 s0, s0, s2
152 ; VI-NEXT:    v_mov_b32_e32 v2, s0
153 ; VI-NEXT:    flat_store_dword v[0:1], v2
154 ; VI-NEXT:    ;;#ASMSTART
155 ; VI-NEXT:    ; use s1
156 ; VI-NEXT:    ;;#ASMEND
157 ; VI-NEXT:    s_endpgm
159 ; CI-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:
160 ; CI:       ; %bb.0:
161 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
162 ; CI-NEXT:    s_load_dword s4, s[6:7], 0xc
163 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
164 ; CI-NEXT:    s_load_dword s2, s[2:3], 0x0
165 ; CI-NEXT:    v_mov_b32_e32 v0, s0
166 ; CI-NEXT:    v_mov_b32_e32 v1, s1
167 ; CI-NEXT:    s_and_b32 s0, s4, 0xffff
168 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
169 ; CI-NEXT:    s_and_b32 s1, s2, 0xffff0000
170 ; CI-NEXT:    s_or_b32 s0, s0, s1
171 ; CI-NEXT:    v_mov_b32_e32 v2, s0
172 ; CI-NEXT:    s_lshr_b32 s2, s2, 16
173 ; CI-NEXT:    flat_store_dword v[0:1], v2
174 ; CI-NEXT:    ;;#ASMSTART
175 ; CI-NEXT:    ; use s2
176 ; CI-NEXT:    ;;#ASMEND
177 ; CI-NEXT:    s_endpgm
179 ; GFX11-LABEL: s_insertelement_v2i16_0_multi_use_hi_reg:
180 ; GFX11:       ; %bb.0:
181 ; GFX11-NEXT:    s_clause 0x1
182 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
183 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x30
184 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
185 ; GFX11-NEXT:    s_load_b32 s1, s[6:7], 0x0
186 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
187 ; GFX11-NEXT:    s_lshr_b32 s1, s1, 16
188 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
189 ; GFX11-NEXT:    s_pack_ll_b32_b16 s0, s0, s1
190 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
191 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
192 ; GFX11-NEXT:    ;;#ASMSTART
193 ; GFX11-NEXT:    ; use s1
194 ; GFX11-NEXT:    ;;#ASMEND
195 ; GFX11-NEXT:    s_nop 0
196 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
197 ; GFX11-NEXT:    s_endpgm
198   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
199   %elt1 = extractelement <2 x i16> %vec, i32 1
200   %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0
201   store <2 x i16> %vecins, ptr addrspace(1) %out
202   %use1 = zext i16 %elt1 to i32
203   call void asm sideeffect "; use $0", "s"(i32 %use1) #0
204   ret void
207 define amdgpu_kernel void @s_insertelement_v2i16_0_reghi(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i32 %elt.arg) #0 {
208 ; GFX9-LABEL: s_insertelement_v2i16_0_reghi:
209 ; GFX9:       ; %bb.0:
210 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
211 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x30
212 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
213 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
214 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
215 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
216 ; GFX9-NEXT:    s_pack_hh_b32_b16 s2, s4, s2
217 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
218 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
219 ; GFX9-NEXT:    s_endpgm
221 ; VI-LABEL: s_insertelement_v2i16_0_reghi:
222 ; VI:       ; %bb.0:
223 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
224 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x30
225 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
226 ; VI-NEXT:    s_load_dword s2, s[2:3], 0x0
227 ; VI-NEXT:    v_mov_b32_e32 v0, s0
228 ; VI-NEXT:    v_mov_b32_e32 v2, s4
229 ; VI-NEXT:    v_mov_b32_e32 v1, s1
230 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
231 ; VI-NEXT:    s_lshr_b32 s0, s2, 16
232 ; VI-NEXT:    v_alignbit_b32 v2, s0, v2, 16
233 ; VI-NEXT:    flat_store_dword v[0:1], v2
234 ; VI-NEXT:    s_endpgm
236 ; CI-LABEL: s_insertelement_v2i16_0_reghi:
237 ; CI:       ; %bb.0:
238 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
239 ; CI-NEXT:    s_load_dword s4, s[6:7], 0xc
240 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
241 ; CI-NEXT:    s_load_dword s2, s[2:3], 0x0
242 ; CI-NEXT:    v_mov_b32_e32 v0, s0
243 ; CI-NEXT:    v_mov_b32_e32 v2, s4
244 ; CI-NEXT:    v_mov_b32_e32 v1, s1
245 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
246 ; CI-NEXT:    s_lshr_b32 s0, s2, 16
247 ; CI-NEXT:    v_alignbit_b32 v2, s0, v2, 16
248 ; CI-NEXT:    flat_store_dword v[0:1], v2
249 ; CI-NEXT:    s_endpgm
251 ; GFX11-LABEL: s_insertelement_v2i16_0_reghi:
252 ; GFX11:       ; %bb.0:
253 ; GFX11-NEXT:    s_clause 0x1
254 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
255 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x30
256 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
257 ; GFX11-NEXT:    s_load_b32 s1, s[6:7], 0x0
258 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
259 ; GFX11-NEXT:    s_pack_hh_b32_b16 s0, s0, s1
260 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
261 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
262 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
263 ; GFX11-NEXT:    s_nop 0
264 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
265 ; GFX11-NEXT:    s_endpgm
266   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
267   %elt.hi = lshr i32 %elt.arg, 16
268   %elt = trunc i32 %elt.hi to i16
269   %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0
270   store <2 x i16> %vecins, ptr addrspace(1) %out
271   ret void
274 define amdgpu_kernel void @s_insertelement_v2i16_0_reghi_multi_use_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, i32 %elt.arg) #0 {
275 ; GFX9-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:
276 ; GFX9:       ; %bb.0:
277 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
278 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
279 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
280 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
281 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
282 ; GFX9-NEXT:    s_lshr_b32 s3, s4, 16
283 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
284 ; GFX9-NEXT:    s_pack_lh_b32_b16 s2, s3, s2
285 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
286 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
287 ; GFX9-NEXT:    ;;#ASMSTART
288 ; GFX9-NEXT:    ; use s3
289 ; GFX9-NEXT:    ;;#ASMEND
290 ; GFX9-NEXT:    s_endpgm
292 ; VI-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:
293 ; VI:       ; %bb.0:
294 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
295 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
296 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
297 ; VI-NEXT:    s_load_dword s2, s[2:3], 0x0
298 ; VI-NEXT:    v_mov_b32_e32 v1, s1
299 ; VI-NEXT:    v_mov_b32_e32 v2, s4
300 ; VI-NEXT:    v_mov_b32_e32 v0, s0
301 ; VI-NEXT:    s_lshr_b32 s0, s4, 16
302 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
303 ; VI-NEXT:    s_lshr_b32 s1, s2, 16
304 ; VI-NEXT:    v_alignbit_b32 v2, s1, v2, 16
305 ; VI-NEXT:    flat_store_dword v[0:1], v2
306 ; VI-NEXT:    ;;#ASMSTART
307 ; VI-NEXT:    ; use s0
308 ; VI-NEXT:    ;;#ASMEND
309 ; VI-NEXT:    s_endpgm
311 ; CI-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:
312 ; CI:       ; %bb.0:
313 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
314 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
315 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
316 ; CI-NEXT:    s_load_dword s2, s[2:3], 0x0
317 ; CI-NEXT:    v_mov_b32_e32 v1, s1
318 ; CI-NEXT:    v_mov_b32_e32 v2, s4
319 ; CI-NEXT:    v_mov_b32_e32 v0, s0
320 ; CI-NEXT:    s_lshr_b32 s0, s4, 16
321 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
322 ; CI-NEXT:    s_lshr_b32 s1, s2, 16
323 ; CI-NEXT:    v_alignbit_b32 v2, s1, v2, 16
324 ; CI-NEXT:    flat_store_dword v[0:1], v2
325 ; CI-NEXT:    ;;#ASMSTART
326 ; CI-NEXT:    ; use s0
327 ; CI-NEXT:    ;;#ASMEND
328 ; CI-NEXT:    s_endpgm
330 ; GFX11-LABEL: s_insertelement_v2i16_0_reghi_multi_use_1:
331 ; GFX11:       ; %bb.0:
332 ; GFX11-NEXT:    s_clause 0x1
333 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
334 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
335 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
336 ; GFX11-NEXT:    s_load_b32 s1, s[6:7], 0x0
337 ; GFX11-NEXT:    s_lshr_b32 s0, s0, 16
338 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
339 ; GFX11-NEXT:    s_pack_lh_b32_b16 s1, s0, s1
340 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
341 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s1
342 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
343 ; GFX11-NEXT:    ;;#ASMSTART
344 ; GFX11-NEXT:    ; use s0
345 ; GFX11-NEXT:    ;;#ASMEND
346 ; GFX11-NEXT:    s_nop 0
347 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
348 ; GFX11-NEXT:    s_endpgm
349   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
350   %elt.hi = lshr i32 %elt.arg, 16
351   %elt = trunc i32 %elt.hi to i16
352   %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0
353   store <2 x i16> %vecins, ptr addrspace(1) %out
354   %use1 = zext i16 %elt to i32
355   call void asm sideeffect "; use $0", "s"(i32 %use1) #0
356   ret void
359 define amdgpu_kernel void @s_insertelement_v2i16_0_reghi_both_multi_use_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, i32 %elt.arg) #0 {
360 ; GFX9-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:
361 ; GFX9:       ; %bb.0:
362 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
363 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
364 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
365 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
366 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
367 ; GFX9-NEXT:    s_lshr_b32 s3, s4, 16
368 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
369 ; GFX9-NEXT:    s_lshr_b32 s2, s2, 16
370 ; GFX9-NEXT:    s_pack_ll_b32_b16 s4, s3, s2
371 ; GFX9-NEXT:    v_mov_b32_e32 v1, s4
372 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
373 ; GFX9-NEXT:    ;;#ASMSTART
374 ; GFX9-NEXT:    ; use s3
375 ; GFX9-NEXT:    ;;#ASMEND
376 ; GFX9-NEXT:    ;;#ASMSTART
377 ; GFX9-NEXT:    ; use s2
378 ; GFX9-NEXT:    ;;#ASMEND
379 ; GFX9-NEXT:    s_endpgm
381 ; VI-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:
382 ; VI:       ; %bb.0:
383 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
384 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
385 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
386 ; VI-NEXT:    s_load_dword s2, s[2:3], 0x0
387 ; VI-NEXT:    v_mov_b32_e32 v1, s1
388 ; VI-NEXT:    v_mov_b32_e32 v2, s4
389 ; VI-NEXT:    v_mov_b32_e32 v0, s0
390 ; VI-NEXT:    s_lshr_b32 s0, s4, 16
391 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
392 ; VI-NEXT:    s_lshr_b32 s1, s2, 16
393 ; VI-NEXT:    v_alignbit_b32 v2, s1, v2, 16
394 ; VI-NEXT:    flat_store_dword v[0:1], v2
395 ; VI-NEXT:    ;;#ASMSTART
396 ; VI-NEXT:    ; use s0
397 ; VI-NEXT:    ;;#ASMEND
398 ; VI-NEXT:    ;;#ASMSTART
399 ; VI-NEXT:    ; use s1
400 ; VI-NEXT:    ;;#ASMEND
401 ; VI-NEXT:    s_endpgm
403 ; CI-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:
404 ; CI:       ; %bb.0:
405 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
406 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
407 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
408 ; CI-NEXT:    s_load_dword s2, s[2:3], 0x0
409 ; CI-NEXT:    v_mov_b32_e32 v1, s1
410 ; CI-NEXT:    v_mov_b32_e32 v2, s4
411 ; CI-NEXT:    v_mov_b32_e32 v0, s0
412 ; CI-NEXT:    s_lshr_b32 s0, s4, 16
413 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
414 ; CI-NEXT:    s_lshr_b32 s1, s2, 16
415 ; CI-NEXT:    v_alignbit_b32 v2, s1, v2, 16
416 ; CI-NEXT:    flat_store_dword v[0:1], v2
417 ; CI-NEXT:    ;;#ASMSTART
418 ; CI-NEXT:    ; use s0
419 ; CI-NEXT:    ;;#ASMEND
420 ; CI-NEXT:    ;;#ASMSTART
421 ; CI-NEXT:    ; use s1
422 ; CI-NEXT:    ;;#ASMEND
423 ; CI-NEXT:    s_endpgm
425 ; GFX11-LABEL: s_insertelement_v2i16_0_reghi_both_multi_use_1:
426 ; GFX11:       ; %bb.0:
427 ; GFX11-NEXT:    s_clause 0x1
428 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
429 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
430 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
431 ; GFX11-NEXT:    s_load_b32 s1, s[6:7], 0x0
432 ; GFX11-NEXT:    s_lshr_b32 s0, s0, 16
433 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
434 ; GFX11-NEXT:    s_lshr_b32 s1, s1, 16
435 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
436 ; GFX11-NEXT:    s_pack_ll_b32_b16 s2, s0, s1
437 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
438 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
439 ; GFX11-NEXT:    ;;#ASMSTART
440 ; GFX11-NEXT:    ; use s0
441 ; GFX11-NEXT:    ;;#ASMEND
442 ; GFX11-NEXT:    ;;#ASMSTART
443 ; GFX11-NEXT:    ; use s1
444 ; GFX11-NEXT:    ;;#ASMEND
445 ; GFX11-NEXT:    s_nop 0
446 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
447 ; GFX11-NEXT:    s_endpgm
448   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
449   %elt.hi = lshr i32 %elt.arg, 16
450   %elt = trunc i32 %elt.hi to i16
451   %vec.hi = extractelement <2 x i16> %vec, i32 1
452   %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0
453   store <2 x i16> %vecins, ptr addrspace(1) %out
454   %use1 = zext i16 %elt to i32
455   %vec.hi.use1 = zext i16 %vec.hi to i32
457   call void asm sideeffect "; use $0", "s"(i32 %use1) #0
458   call void asm sideeffect "; use $0", "s"(i32 %vec.hi.use1) #0
459   ret void
462 define amdgpu_kernel void @s_insertelement_v2i16_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {
463 ; GFX9-LABEL: s_insertelement_v2i16_1:
464 ; GFX9:       ; %bb.0:
465 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
466 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
467 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
468 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
469 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
470 ; GFX9-NEXT:    s_pack_ll_b32_b16 s2, s2, 0x3e7
471 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
472 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
473 ; GFX9-NEXT:    s_endpgm
475 ; CIVI-LABEL: s_insertelement_v2i16_1:
476 ; CIVI:       ; %bb.0:
477 ; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
478 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
479 ; CIVI-NEXT:    s_load_dword s2, s[2:3], 0x0
480 ; CIVI-NEXT:    v_mov_b32_e32 v0, s0
481 ; CIVI-NEXT:    v_mov_b32_e32 v1, s1
482 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
483 ; CIVI-NEXT:    s_and_b32 s0, s2, 0xffff
484 ; CIVI-NEXT:    s_or_b32 s0, s0, 0x3e70000
485 ; CIVI-NEXT:    v_mov_b32_e32 v2, s0
486 ; CIVI-NEXT:    flat_store_dword v[0:1], v2
487 ; CIVI-NEXT:    s_endpgm
489 ; GFX11-LABEL: s_insertelement_v2i16_1:
490 ; GFX11:       ; %bb.0:
491 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
492 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
493 ; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0
494 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
495 ; GFX11-NEXT:    s_pack_ll_b32_b16 s2, s2, 0x3e7
496 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
497 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
498 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
499 ; GFX11-NEXT:    s_nop 0
500 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
501 ; GFX11-NEXT:    s_endpgm
502   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
503   %vecins = insertelement <2 x i16> %vec, i16 999, i32 1
504   store <2 x i16> %vecins, ptr addrspace(1) %out
505   ret void
508 define amdgpu_kernel void @s_insertelement_v2i16_1_reg(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, [8 x i32], i16 %elt) #0 {
509 ; GFX9-LABEL: s_insertelement_v2i16_1_reg:
510 ; GFX9:       ; %bb.0:
511 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
512 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x30
513 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
514 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
515 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
516 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
517 ; GFX9-NEXT:    s_pack_ll_b32_b16 s2, s2, s4
518 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
519 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
520 ; GFX9-NEXT:    s_endpgm
522 ; VI-LABEL: s_insertelement_v2i16_1_reg:
523 ; VI:       ; %bb.0:
524 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
525 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x30
526 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
527 ; VI-NEXT:    s_load_dword s2, s[2:3], 0x0
528 ; VI-NEXT:    v_mov_b32_e32 v0, s0
529 ; VI-NEXT:    v_mov_b32_e32 v1, s1
530 ; VI-NEXT:    s_lshl_b32 s0, s4, 16
531 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
532 ; VI-NEXT:    s_and_b32 s1, s2, 0xffff
533 ; VI-NEXT:    s_or_b32 s0, s1, s0
534 ; VI-NEXT:    v_mov_b32_e32 v2, s0
535 ; VI-NEXT:    flat_store_dword v[0:1], v2
536 ; VI-NEXT:    s_endpgm
538 ; CI-LABEL: s_insertelement_v2i16_1_reg:
539 ; CI:       ; %bb.0:
540 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
541 ; CI-NEXT:    s_load_dword s4, s[6:7], 0xc
542 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
543 ; CI-NEXT:    s_load_dword s2, s[2:3], 0x0
544 ; CI-NEXT:    v_mov_b32_e32 v0, s0
545 ; CI-NEXT:    v_mov_b32_e32 v1, s1
546 ; CI-NEXT:    s_lshl_b32 s1, s4, 16
547 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
548 ; CI-NEXT:    s_and_b32 s0, s2, 0xffff
549 ; CI-NEXT:    s_or_b32 s0, s0, s1
550 ; CI-NEXT:    v_mov_b32_e32 v2, s0
551 ; CI-NEXT:    flat_store_dword v[0:1], v2
552 ; CI-NEXT:    s_endpgm
554 ; GFX11-LABEL: s_insertelement_v2i16_1_reg:
555 ; GFX11:       ; %bb.0:
556 ; GFX11-NEXT:    s_clause 0x1
557 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
558 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x30
559 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
560 ; GFX11-NEXT:    s_load_b32 s1, s[6:7], 0x0
561 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
562 ; GFX11-NEXT:    s_pack_ll_b32_b16 s0, s1, s0
563 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
564 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s0
565 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
566 ; GFX11-NEXT:    s_nop 0
567 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
568 ; GFX11-NEXT:    s_endpgm
569   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
570   %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 1
571   store <2 x i16> %vecins, ptr addrspace(1) %out
572   ret void
575 define amdgpu_kernel void @s_insertelement_v2f16_0(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {
576 ; GFX9-LABEL: s_insertelement_v2f16_0:
577 ; GFX9:       ; %bb.0:
578 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
579 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
580 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
581 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
582 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
583 ; GFX9-NEXT:    s_lshr_b32 s2, s2, 16
584 ; GFX9-NEXT:    s_pack_ll_b32_b16 s2, 0x4500, s2
585 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
586 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
587 ; GFX9-NEXT:    s_endpgm
589 ; CIVI-LABEL: s_insertelement_v2f16_0:
590 ; CIVI:       ; %bb.0:
591 ; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
592 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
593 ; CIVI-NEXT:    s_load_dword s2, s[2:3], 0x0
594 ; CIVI-NEXT:    v_mov_b32_e32 v0, s0
595 ; CIVI-NEXT:    v_mov_b32_e32 v1, s1
596 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
597 ; CIVI-NEXT:    s_and_b32 s0, s2, 0xffff0000
598 ; CIVI-NEXT:    s_or_b32 s0, s0, 0x4500
599 ; CIVI-NEXT:    v_mov_b32_e32 v2, s0
600 ; CIVI-NEXT:    flat_store_dword v[0:1], v2
601 ; CIVI-NEXT:    s_endpgm
603 ; GFX11-LABEL: s_insertelement_v2f16_0:
604 ; GFX11:       ; %bb.0:
605 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
606 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
607 ; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0
608 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
609 ; GFX11-NEXT:    s_lshr_b32 s2, s2, 16
610 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
611 ; GFX11-NEXT:    s_pack_ll_b32_b16 s2, 0x4500, s2
612 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
613 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
614 ; GFX11-NEXT:    s_nop 0
615 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
616 ; GFX11-NEXT:    s_endpgm
617   %vec = load <2 x half>, ptr addrspace(4) %vec.ptr
618   %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 0
619   store <2 x half> %vecins, ptr addrspace(1) %out
620   ret void
623 define amdgpu_kernel void @s_insertelement_v2f16_1(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr) #0 {
624 ; GFX9-LABEL: s_insertelement_v2f16_1:
625 ; GFX9:       ; %bb.0:
626 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
627 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
628 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
629 ; GFX9-NEXT:    s_load_dword s2, s[2:3], 0x0
630 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
631 ; GFX9-NEXT:    s_pack_ll_b32_b16 s2, s2, 0x4500
632 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
633 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
634 ; GFX9-NEXT:    s_endpgm
636 ; CIVI-LABEL: s_insertelement_v2f16_1:
637 ; CIVI:       ; %bb.0:
638 ; CIVI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
639 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
640 ; CIVI-NEXT:    s_load_dword s2, s[2:3], 0x0
641 ; CIVI-NEXT:    v_mov_b32_e32 v0, s0
642 ; CIVI-NEXT:    v_mov_b32_e32 v1, s1
643 ; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
644 ; CIVI-NEXT:    s_and_b32 s0, s2, 0xffff
645 ; CIVI-NEXT:    s_or_b32 s0, s0, 0x45000000
646 ; CIVI-NEXT:    v_mov_b32_e32 v2, s0
647 ; CIVI-NEXT:    flat_store_dword v[0:1], v2
648 ; CIVI-NEXT:    s_endpgm
650 ; GFX11-LABEL: s_insertelement_v2f16_1:
651 ; GFX11:       ; %bb.0:
652 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
653 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
654 ; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0
655 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
656 ; GFX11-NEXT:    s_pack_ll_b32_b16 s2, s2, 0x4500
657 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
658 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
659 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
660 ; GFX11-NEXT:    s_nop 0
661 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
662 ; GFX11-NEXT:    s_endpgm
663   %vec = load <2 x half>, ptr addrspace(4) %vec.ptr
664   %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 1
665   store <2 x half> %vecins, ptr addrspace(1) %out
666   ret void
669 define amdgpu_kernel void @v_insertelement_v2i16_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
670 ; GFX9-LABEL: v_insertelement_v2i16_0:
671 ; GFX9:       ; %bb.0:
672 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
673 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
674 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x3e7
675 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
676 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
677 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
678 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
679 ; GFX9-NEXT:    v_bfi_b32 v1, s2, v2, v1
680 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
681 ; GFX9-NEXT:    s_endpgm
683 ; VI-LABEL: v_insertelement_v2i16_0:
684 ; VI:       ; %bb.0:
685 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
686 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
687 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
688 ; VI-NEXT:    v_mov_b32_e32 v1, s3
689 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
690 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
691 ; VI-NEXT:    flat_load_dword v3, v[0:1]
692 ; VI-NEXT:    v_mov_b32_e32 v1, s1
693 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
694 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
695 ; VI-NEXT:    s_waitcnt vmcnt(0)
696 ; VI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
697 ; VI-NEXT:    v_or_b32_e32 v2, 0x3e7, v2
698 ; VI-NEXT:    flat_store_dword v[0:1], v2
699 ; VI-NEXT:    s_endpgm
701 ; CI-LABEL: v_insertelement_v2i16_0:
702 ; CI:       ; %bb.0:
703 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
704 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
705 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
706 ; CI-NEXT:    v_mov_b32_e32 v1, s3
707 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
708 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
709 ; CI-NEXT:    flat_load_dword v3, v[0:1]
710 ; CI-NEXT:    v_mov_b32_e32 v1, s1
711 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
712 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
713 ; CI-NEXT:    s_waitcnt vmcnt(0)
714 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
715 ; CI-NEXT:    v_or_b32_e32 v2, 0x3e7, v2
716 ; CI-NEXT:    flat_store_dword v[0:1], v2
717 ; CI-NEXT:    s_endpgm
719 ; GFX11-LABEL: v_insertelement_v2i16_0:
720 ; GFX11:       ; %bb.0:
721 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
722 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
723 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
724 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
725 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
726 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
727 ; GFX11-NEXT:    s_movk_i32 s2, 0x3e7
728 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
729 ; GFX11-NEXT:    v_bfi_b32 v1, 0xffff, s2, v1
730 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
731 ; GFX11-NEXT:    s_nop 0
732 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
733 ; GFX11-NEXT:    s_endpgm
734   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
735   %tid.ext = sext i32 %tid to i64
736   %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext
737   %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext
738   %vec = load <2 x i16>, ptr addrspace(1) %in.gep
739   %vecins = insertelement <2 x i16> %vec, i16 999, i32 0
740   store <2 x i16> %vecins, ptr addrspace(1) %out.gep
741   ret void
744 define amdgpu_kernel void @v_insertelement_v2i16_0_reghi(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %elt.arg) #0 {
745 ; GFX9-LABEL: v_insertelement_v2i16_0_reghi:
746 ; GFX9:       ; %bb.0:
747 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
748 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
749 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
750 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x7060302
751 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
752 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
753 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
754 ; GFX9-NEXT:    v_perm_b32 v1, v1, s4, v2
755 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
756 ; GFX9-NEXT:    s_endpgm
758 ; VI-LABEL: v_insertelement_v2i16_0_reghi:
759 ; VI:       ; %bb.0:
760 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
761 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
762 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
763 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
764 ; VI-NEXT:    v_mov_b32_e32 v1, s3
765 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
766 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
767 ; VI-NEXT:    flat_load_dword v3, v[0:1]
768 ; VI-NEXT:    v_mov_b32_e32 v1, s1
769 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
770 ; VI-NEXT:    v_mov_b32_e32 v2, 0x3020706
771 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
772 ; VI-NEXT:    s_waitcnt vmcnt(0)
773 ; VI-NEXT:    v_perm_b32 v2, s4, v3, v2
774 ; VI-NEXT:    flat_store_dword v[0:1], v2
775 ; VI-NEXT:    s_endpgm
777 ; CI-LABEL: v_insertelement_v2i16_0_reghi:
778 ; CI:       ; %bb.0:
779 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
780 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
781 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
782 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
783 ; CI-NEXT:    v_mov_b32_e32 v1, s3
784 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
785 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
786 ; CI-NEXT:    flat_load_dword v3, v[0:1]
787 ; CI-NEXT:    v_mov_b32_e32 v1, s1
788 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
789 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
790 ; CI-NEXT:    s_waitcnt vmcnt(0)
791 ; CI-NEXT:    v_lshrrev_b32_e32 v2, 16, v3
792 ; CI-NEXT:    v_alignbit_b32 v2, v2, s4, 16
793 ; CI-NEXT:    flat_store_dword v[0:1], v2
794 ; CI-NEXT:    s_endpgm
796 ; GFX11-LABEL: v_insertelement_v2i16_0_reghi:
797 ; GFX11:       ; %bb.0:
798 ; GFX11-NEXT:    s_clause 0x1
799 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
800 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
801 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
802 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
803 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
804 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
805 ; GFX11-NEXT:    global_load_b32 v1, v0, s[6:7]
806 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
807 ; GFX11-NEXT:    v_perm_b32 v1, v1, s0, 0x7060302
808 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
809 ; GFX11-NEXT:    s_nop 0
810 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
811 ; GFX11-NEXT:    s_endpgm
812   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
813   %tid.ext = sext i32 %tid to i64
814   %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext
815   %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext
816   %vec = load <2 x i16>, ptr addrspace(1) %in.gep
817   %elt.hi = lshr i32 %elt.arg, 16
818   %elt = trunc i32 %elt.hi to i16
819   %vecins = insertelement <2 x i16> %vec, i16 %elt, i32 0
820   store <2 x i16> %vecins, ptr addrspace(1) %out.gep
821   ret void
824 define amdgpu_kernel void @v_insertelement_v2i16_0_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
825 ; GFX9-LABEL: v_insertelement_v2i16_0_inlineimm:
826 ; GFX9:       ; %bb.0:
827 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
828 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
829 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
830 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
831 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
832 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
833 ; GFX9-NEXT:    v_bfi_b32 v1, s2, 53, v1
834 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
835 ; GFX9-NEXT:    s_endpgm
837 ; VI-LABEL: v_insertelement_v2i16_0_inlineimm:
838 ; VI:       ; %bb.0:
839 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
840 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
841 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
842 ; VI-NEXT:    v_mov_b32_e32 v1, s3
843 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
844 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
845 ; VI-NEXT:    flat_load_dword v3, v[0:1]
846 ; VI-NEXT:    v_mov_b32_e32 v1, s1
847 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
848 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
849 ; VI-NEXT:    s_waitcnt vmcnt(0)
850 ; VI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
851 ; VI-NEXT:    v_or_b32_e32 v2, 53, v2
852 ; VI-NEXT:    flat_store_dword v[0:1], v2
853 ; VI-NEXT:    s_endpgm
855 ; CI-LABEL: v_insertelement_v2i16_0_inlineimm:
856 ; CI:       ; %bb.0:
857 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
858 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
859 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
860 ; CI-NEXT:    v_mov_b32_e32 v1, s3
861 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
862 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
863 ; CI-NEXT:    flat_load_dword v3, v[0:1]
864 ; CI-NEXT:    v_mov_b32_e32 v1, s1
865 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
866 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
867 ; CI-NEXT:    s_waitcnt vmcnt(0)
868 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
869 ; CI-NEXT:    v_or_b32_e32 v2, 53, v2
870 ; CI-NEXT:    flat_store_dword v[0:1], v2
871 ; CI-NEXT:    s_endpgm
873 ; GFX11-LABEL: v_insertelement_v2i16_0_inlineimm:
874 ; GFX11:       ; %bb.0:
875 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
876 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
877 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
878 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
879 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
880 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
881 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
882 ; GFX11-NEXT:    v_bfi_b32 v1, 0xffff, 53, v1
883 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
884 ; GFX11-NEXT:    s_nop 0
885 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
886 ; GFX11-NEXT:    s_endpgm
887   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
888   %tid.ext = sext i32 %tid to i64
889   %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext
890   %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext
891   %vec = load <2 x i16>, ptr addrspace(1) %in.gep
892   %vecins = insertelement <2 x i16> %vec, i16 53, i32 0
893   store <2 x i16> %vecins, ptr addrspace(1) %out.gep
894   ret void
897 ; FIXME: fold lshl_or c0, c1, v0 -> or (c0 << c1), v0
898 define amdgpu_kernel void @v_insertelement_v2i16_1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
899 ; GFX9-LABEL: v_insertelement_v2i16_1:
900 ; GFX9:       ; %bb.0:
901 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
902 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
903 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x5040100
904 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
905 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
906 ; GFX9-NEXT:    s_movk_i32 s2, 0x3e7
907 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
908 ; GFX9-NEXT:    v_perm_b32 v1, s2, v1, v2
909 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
910 ; GFX9-NEXT:    s_endpgm
912 ; VI-LABEL: v_insertelement_v2i16_1:
913 ; VI:       ; %bb.0:
914 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
915 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
916 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
917 ; VI-NEXT:    v_mov_b32_e32 v1, s3
918 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
919 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
920 ; VI-NEXT:    flat_load_dword v3, v[0:1]
921 ; VI-NEXT:    v_mov_b32_e32 v1, s1
922 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
923 ; VI-NEXT:    v_mov_b32_e32 v2, 0x3e70000
924 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
925 ; VI-NEXT:    s_waitcnt vmcnt(0)
926 ; VI-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
927 ; VI-NEXT:    flat_store_dword v[0:1], v2
928 ; VI-NEXT:    s_endpgm
930 ; CI-LABEL: v_insertelement_v2i16_1:
931 ; CI:       ; %bb.0:
932 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
933 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
934 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
935 ; CI-NEXT:    v_mov_b32_e32 v1, s3
936 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
937 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
938 ; CI-NEXT:    flat_load_dword v3, v[0:1]
939 ; CI-NEXT:    v_mov_b32_e32 v1, s1
940 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
941 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
942 ; CI-NEXT:    s_waitcnt vmcnt(0)
943 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff, v3
944 ; CI-NEXT:    v_or_b32_e32 v2, 0x3e70000, v2
945 ; CI-NEXT:    flat_store_dword v[0:1], v2
946 ; CI-NEXT:    s_endpgm
948 ; GFX11-LABEL: v_insertelement_v2i16_1:
949 ; GFX11:       ; %bb.0:
950 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
951 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
952 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
953 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
954 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
955 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
956 ; GFX11-NEXT:    s_movk_i32 s2, 0x3e7
957 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
958 ; GFX11-NEXT:    v_perm_b32 v1, s2, v1, 0x5040100
959 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
960 ; GFX11-NEXT:    s_nop 0
961 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
962 ; GFX11-NEXT:    s_endpgm
963   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
964   %tid.ext = sext i32 %tid to i64
965   %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext
966   %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext
967   %vec = load <2 x i16>, ptr addrspace(1) %in.gep
968   %vecins = insertelement <2 x i16> %vec, i16 999, i32 1
969   store <2 x i16> %vecins, ptr addrspace(1) %out.gep
970   ret void
973 define amdgpu_kernel void @v_insertelement_v2i16_1_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
974 ; GFX9-LABEL: v_insertelement_v2i16_1_inlineimm:
975 ; GFX9:       ; %bb.0:
976 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
977 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
978 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x5040100
979 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
980 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
981 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
982 ; GFX9-NEXT:    v_perm_b32 v1, -15, v1, v2
983 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
984 ; GFX9-NEXT:    s_endpgm
986 ; VI-LABEL: v_insertelement_v2i16_1_inlineimm:
987 ; VI:       ; %bb.0:
988 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
989 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
990 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
991 ; VI-NEXT:    v_mov_b32_e32 v1, s3
992 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
993 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
994 ; VI-NEXT:    flat_load_dword v3, v[0:1]
995 ; VI-NEXT:    v_mov_b32_e32 v1, s1
996 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
997 ; VI-NEXT:    v_mov_b32_e32 v2, 0xfff10000
998 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
999 ; VI-NEXT:    s_waitcnt vmcnt(0)
1000 ; VI-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1001 ; VI-NEXT:    flat_store_dword v[0:1], v2
1002 ; VI-NEXT:    s_endpgm
1004 ; CI-LABEL: v_insertelement_v2i16_1_inlineimm:
1005 ; CI:       ; %bb.0:
1006 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1007 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1008 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1009 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1010 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1011 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1012 ; CI-NEXT:    flat_load_dword v3, v[0:1]
1013 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1014 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
1015 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1016 ; CI-NEXT:    s_waitcnt vmcnt(0)
1017 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff, v3
1018 ; CI-NEXT:    v_or_b32_e32 v2, 0xfff10000, v2
1019 ; CI-NEXT:    flat_store_dword v[0:1], v2
1020 ; CI-NEXT:    s_endpgm
1022 ; GFX11-LABEL: v_insertelement_v2i16_1_inlineimm:
1023 ; GFX11:       ; %bb.0:
1024 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1025 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1026 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1027 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1028 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1029 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
1030 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1031 ; GFX11-NEXT:    v_perm_b32 v1, -15, v1, 0x5040100
1032 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
1033 ; GFX11-NEXT:    s_nop 0
1034 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1035 ; GFX11-NEXT:    s_endpgm
1036   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1037   %tid.ext = sext i32 %tid to i64
1038   %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext
1039   %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext
1040   %vec = load <2 x i16>, ptr addrspace(1) %in.gep
1041   %vecins = insertelement <2 x i16> %vec, i16 -15, i32 1
1042   store <2 x i16> %vecins, ptr addrspace(1) %out.gep
1043   ret void
1046 define amdgpu_kernel void @v_insertelement_v2f16_0(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1047 ; GFX9-LABEL: v_insertelement_v2f16_0:
1048 ; GFX9:       ; %bb.0:
1049 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1050 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1051 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x4500
1052 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1053 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
1054 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1055 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1056 ; GFX9-NEXT:    v_bfi_b32 v1, s2, v2, v1
1057 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
1058 ; GFX9-NEXT:    s_endpgm
1060 ; VI-LABEL: v_insertelement_v2f16_0:
1061 ; VI:       ; %bb.0:
1062 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1063 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1064 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1065 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1066 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1067 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1068 ; VI-NEXT:    flat_load_dword v3, v[0:1]
1069 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1070 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
1071 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1072 ; VI-NEXT:    s_waitcnt vmcnt(0)
1073 ; VI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
1074 ; VI-NEXT:    v_or_b32_e32 v2, 0x4500, v2
1075 ; VI-NEXT:    flat_store_dword v[0:1], v2
1076 ; VI-NEXT:    s_endpgm
1078 ; CI-LABEL: v_insertelement_v2f16_0:
1079 ; CI:       ; %bb.0:
1080 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1081 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1082 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1083 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1084 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1085 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1086 ; CI-NEXT:    flat_load_dword v3, v[0:1]
1087 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1088 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
1089 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1090 ; CI-NEXT:    s_waitcnt vmcnt(0)
1091 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
1092 ; CI-NEXT:    v_or_b32_e32 v2, 0x4500, v2
1093 ; CI-NEXT:    flat_store_dword v[0:1], v2
1094 ; CI-NEXT:    s_endpgm
1096 ; GFX11-LABEL: v_insertelement_v2f16_0:
1097 ; GFX11:       ; %bb.0:
1098 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1099 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1100 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1101 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1102 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1103 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
1104 ; GFX11-NEXT:    s_movk_i32 s2, 0x4500
1105 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1106 ; GFX11-NEXT:    v_bfi_b32 v1, 0xffff, s2, v1
1107 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
1108 ; GFX11-NEXT:    s_nop 0
1109 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1110 ; GFX11-NEXT:    s_endpgm
1111   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1112   %tid.ext = sext i32 %tid to i64
1113   %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext
1114   %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext
1115   %vec = load <2 x half>, ptr addrspace(1) %in.gep
1116   %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 0
1117   store <2 x half> %vecins, ptr addrspace(1) %out.gep
1118   ret void
1121 define amdgpu_kernel void @v_insertelement_v2f16_0_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1122 ; GFX9-LABEL: v_insertelement_v2f16_0_inlineimm:
1123 ; GFX9:       ; %bb.0:
1124 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1125 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1126 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1127 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
1128 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1129 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1130 ; GFX9-NEXT:    v_bfi_b32 v1, s2, 53, v1
1131 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
1132 ; GFX9-NEXT:    s_endpgm
1134 ; VI-LABEL: v_insertelement_v2f16_0_inlineimm:
1135 ; VI:       ; %bb.0:
1136 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1137 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1138 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1139 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1140 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1141 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1142 ; VI-NEXT:    flat_load_dword v3, v[0:1]
1143 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1144 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
1145 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1146 ; VI-NEXT:    s_waitcnt vmcnt(0)
1147 ; VI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
1148 ; VI-NEXT:    v_or_b32_e32 v2, 53, v2
1149 ; VI-NEXT:    flat_store_dword v[0:1], v2
1150 ; VI-NEXT:    s_endpgm
1152 ; CI-LABEL: v_insertelement_v2f16_0_inlineimm:
1153 ; CI:       ; %bb.0:
1154 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1155 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1156 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1157 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1158 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1159 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1160 ; CI-NEXT:    flat_load_dword v3, v[0:1]
1161 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1162 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
1163 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1164 ; CI-NEXT:    s_waitcnt vmcnt(0)
1165 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff0000, v3
1166 ; CI-NEXT:    v_or_b32_e32 v2, 53, v2
1167 ; CI-NEXT:    flat_store_dword v[0:1], v2
1168 ; CI-NEXT:    s_endpgm
1170 ; GFX11-LABEL: v_insertelement_v2f16_0_inlineimm:
1171 ; GFX11:       ; %bb.0:
1172 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1173 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1174 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1175 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1176 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1177 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
1178 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1179 ; GFX11-NEXT:    v_bfi_b32 v1, 0xffff, 53, v1
1180 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
1181 ; GFX11-NEXT:    s_nop 0
1182 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1183 ; GFX11-NEXT:    s_endpgm
1184   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1185   %tid.ext = sext i32 %tid to i64
1186   %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext
1187   %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext
1188   %vec = load <2 x half>, ptr addrspace(1) %in.gep
1189   %vecins = insertelement <2 x half> %vec, half 0xH0035, i32 0
1190   store <2 x half> %vecins, ptr addrspace(1) %out.gep
1191   ret void
1194 define amdgpu_kernel void @v_insertelement_v2f16_1(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1195 ; GFX9-LABEL: v_insertelement_v2f16_1:
1196 ; GFX9:       ; %bb.0:
1197 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1198 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1199 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x5040100
1200 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1201 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
1202 ; GFX9-NEXT:    s_movk_i32 s2, 0x4500
1203 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1204 ; GFX9-NEXT:    v_perm_b32 v1, s2, v1, v2
1205 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
1206 ; GFX9-NEXT:    s_endpgm
1208 ; VI-LABEL: v_insertelement_v2f16_1:
1209 ; VI:       ; %bb.0:
1210 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1211 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1212 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1213 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1214 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1215 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1216 ; VI-NEXT:    flat_load_dword v3, v[0:1]
1217 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1218 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
1219 ; VI-NEXT:    v_mov_b32_e32 v2, 0x45000000
1220 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1221 ; VI-NEXT:    s_waitcnt vmcnt(0)
1222 ; VI-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1223 ; VI-NEXT:    flat_store_dword v[0:1], v2
1224 ; VI-NEXT:    s_endpgm
1226 ; CI-LABEL: v_insertelement_v2f16_1:
1227 ; CI:       ; %bb.0:
1228 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1229 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1230 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1231 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1232 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1233 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1234 ; CI-NEXT:    flat_load_dword v3, v[0:1]
1235 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1236 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
1237 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1238 ; CI-NEXT:    s_waitcnt vmcnt(0)
1239 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff, v3
1240 ; CI-NEXT:    v_or_b32_e32 v2, 0x45000000, v2
1241 ; CI-NEXT:    flat_store_dword v[0:1], v2
1242 ; CI-NEXT:    s_endpgm
1244 ; GFX11-LABEL: v_insertelement_v2f16_1:
1245 ; GFX11:       ; %bb.0:
1246 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1247 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1248 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1249 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1250 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1251 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
1252 ; GFX11-NEXT:    s_movk_i32 s2, 0x4500
1253 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1254 ; GFX11-NEXT:    v_perm_b32 v1, s2, v1, 0x5040100
1255 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
1256 ; GFX11-NEXT:    s_nop 0
1257 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1258 ; GFX11-NEXT:    s_endpgm
1259   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1260   %tid.ext = sext i32 %tid to i64
1261   %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext
1262   %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext
1263   %vec = load <2 x half>, ptr addrspace(1) %in.gep
1264   %vecins = insertelement <2 x half> %vec, half 5.000000e+00, i32 1
1265   store <2 x half> %vecins, ptr addrspace(1) %out.gep
1266   ret void
1269 define amdgpu_kernel void @v_insertelement_v2f16_1_inlineimm(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
1270 ; GFX9-LABEL: v_insertelement_v2f16_1_inlineimm:
1271 ; GFX9:       ; %bb.0:
1272 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1273 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1274 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x5040100
1275 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1276 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
1277 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1278 ; GFX9-NEXT:    v_perm_b32 v1, 35, v1, v2
1279 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
1280 ; GFX9-NEXT:    s_endpgm
1282 ; VI-LABEL: v_insertelement_v2f16_1_inlineimm:
1283 ; VI:       ; %bb.0:
1284 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1285 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1286 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1287 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1288 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1289 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1290 ; VI-NEXT:    flat_load_dword v3, v[0:1]
1291 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1292 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
1293 ; VI-NEXT:    v_mov_b32_e32 v2, 0x230000
1294 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1295 ; VI-NEXT:    s_waitcnt vmcnt(0)
1296 ; VI-NEXT:    v_or_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
1297 ; VI-NEXT:    flat_store_dword v[0:1], v2
1298 ; VI-NEXT:    s_endpgm
1300 ; CI-LABEL: v_insertelement_v2f16_1_inlineimm:
1301 ; CI:       ; %bb.0:
1302 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1303 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1304 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1305 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1306 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1307 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1308 ; CI-NEXT:    flat_load_dword v3, v[0:1]
1309 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1310 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
1311 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1312 ; CI-NEXT:    s_waitcnt vmcnt(0)
1313 ; CI-NEXT:    v_and_b32_e32 v2, 0xffff, v3
1314 ; CI-NEXT:    v_or_b32_e32 v2, 0x230000, v2
1315 ; CI-NEXT:    flat_store_dword v[0:1], v2
1316 ; CI-NEXT:    s_endpgm
1318 ; GFX11-LABEL: v_insertelement_v2f16_1_inlineimm:
1319 ; GFX11:       ; %bb.0:
1320 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1321 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1322 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1323 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1324 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1325 ; GFX11-NEXT:    global_load_b32 v1, v0, s[2:3]
1326 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1327 ; GFX11-NEXT:    v_perm_b32 v1, 35, v1, 0x5040100
1328 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
1329 ; GFX11-NEXT:    s_nop 0
1330 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1331 ; GFX11-NEXT:    s_endpgm
1332   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1333   %tid.ext = sext i32 %tid to i64
1334   %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext
1335   %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext
1336   %vec = load <2 x half>, ptr addrspace(1) %in.gep
1337   %vecins = insertelement <2 x half> %vec, half 0xH0023, i32 1
1338   store <2 x half> %vecins, ptr addrspace(1) %out.gep
1339   ret void
1342 ; FIXME: Enable for others when argument load not split
1343 define amdgpu_kernel void @s_insertelement_v2i16_dynamic(ptr addrspace(1) %out, ptr addrspace(4) %vec.ptr, ptr addrspace(4) %idx.ptr) #0 {
1344 ; GFX9-LABEL: s_insertelement_v2i16_dynamic:
1345 ; GFX9:       ; %bb.0:
1346 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
1347 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1348 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
1349 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1350 ; GFX9-NEXT:    s_load_dword s6, s[4:5], 0x0
1351 ; GFX9-NEXT:    s_load_dword s7, s[2:3], 0x0
1352 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1353 ; GFX9-NEXT:    s_lshl_b32 s2, s6, 4
1354 ; GFX9-NEXT:    s_lshl_b32 s2, 0xffff, s2
1355 ; GFX9-NEXT:    s_andn2_b32 s3, s7, s2
1356 ; GFX9-NEXT:    s_and_b32 s2, s2, 0x3e703e7
1357 ; GFX9-NEXT:    s_or_b32 s2, s2, s3
1358 ; GFX9-NEXT:    v_mov_b32_e32 v1, s2
1359 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
1360 ; GFX9-NEXT:    s_endpgm
1362 ; VI-LABEL: s_insertelement_v2i16_dynamic:
1363 ; VI:       ; %bb.0:
1364 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
1365 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1366 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1367 ; VI-NEXT:    s_load_dword s4, s[4:5], 0x0
1368 ; VI-NEXT:    s_load_dword s2, s[2:3], 0x0
1369 ; VI-NEXT:    v_mov_b32_e32 v0, s0
1370 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1371 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1372 ; VI-NEXT:    s_lshl_b32 s0, s4, 4
1373 ; VI-NEXT:    s_lshl_b32 s0, 0xffff, s0
1374 ; VI-NEXT:    s_andn2_b32 s1, s2, s0
1375 ; VI-NEXT:    s_and_b32 s0, s0, 0x3e703e7
1376 ; VI-NEXT:    s_or_b32 s0, s0, s1
1377 ; VI-NEXT:    v_mov_b32_e32 v2, s0
1378 ; VI-NEXT:    flat_store_dword v[0:1], v2
1379 ; VI-NEXT:    s_endpgm
1381 ; CI-LABEL: s_insertelement_v2i16_dynamic:
1382 ; CI:       ; %bb.0:
1383 ; CI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x4
1384 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1385 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1386 ; CI-NEXT:    s_load_dword s4, s[4:5], 0x0
1387 ; CI-NEXT:    s_load_dword s2, s[2:3], 0x0
1388 ; CI-NEXT:    v_mov_b32_e32 v0, s0
1389 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1390 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1391 ; CI-NEXT:    s_lshl_b32 s0, s4, 4
1392 ; CI-NEXT:    s_lshl_b32 s0, 0xffff, s0
1393 ; CI-NEXT:    s_andn2_b32 s1, s2, s0
1394 ; CI-NEXT:    s_and_b32 s0, s0, 0x3e703e7
1395 ; CI-NEXT:    s_or_b32 s0, s0, s1
1396 ; CI-NEXT:    v_mov_b32_e32 v2, s0
1397 ; CI-NEXT:    flat_store_dword v[0:1], v2
1398 ; CI-NEXT:    s_endpgm
1400 ; GFX11-LABEL: s_insertelement_v2i16_dynamic:
1401 ; GFX11:       ; %bb.0:
1402 ; GFX11-NEXT:    s_clause 0x1
1403 ; GFX11-NEXT:    s_load_b64 s[4:5], s[2:3], 0x10
1404 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1405 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1406 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x0
1407 ; GFX11-NEXT:    s_load_b32 s2, s[2:3], 0x0
1408 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1409 ; GFX11-NEXT:    s_lshl_b32 s3, s4, 4
1410 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
1411 ; GFX11-NEXT:    s_lshl_b32 s3, 0xffff, s3
1412 ; GFX11-NEXT:    s_and_not1_b32 s2, s2, s3
1413 ; GFX11-NEXT:    s_and_b32 s3, s3, 0x3e703e7
1414 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
1415 ; GFX11-NEXT:    s_or_b32 s2, s3, s2
1416 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_mov_b32 v1, s2
1417 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
1418 ; GFX11-NEXT:    s_nop 0
1419 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1420 ; GFX11-NEXT:    s_endpgm
1421   %idx = load volatile i32, ptr addrspace(4) %idx.ptr
1422   %vec = load <2 x i16>, ptr addrspace(4) %vec.ptr
1423   %vecins = insertelement <2 x i16> %vec, i16 999, i32 %idx
1424   store <2 x i16> %vecins, ptr addrspace(1) %out
1425   ret void
1428 define amdgpu_kernel void @v_insertelement_v2i16_dynamic_sgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %idx) #0 {
1429 ; GFX9-LABEL: v_insertelement_v2i16_dynamic_sgpr:
1430 ; GFX9:       ; %bb.0:
1431 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1432 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
1433 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1434 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x3e703e7
1435 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1436 ; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
1437 ; GFX9-NEXT:    s_lshl_b32 s2, s4, 4
1438 ; GFX9-NEXT:    s_lshl_b32 s2, 0xffff, s2
1439 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1440 ; GFX9-NEXT:    v_bfi_b32 v1, s2, v2, v1
1441 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
1442 ; GFX9-NEXT:    s_endpgm
1444 ; VI-LABEL: v_insertelement_v2i16_dynamic_sgpr:
1445 ; VI:       ; %bb.0:
1446 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1447 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
1448 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1449 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1450 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1451 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1452 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1453 ; VI-NEXT:    flat_load_dword v3, v[0:1]
1454 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
1455 ; VI-NEXT:    s_lshl_b32 s0, s4, 4
1456 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1457 ; VI-NEXT:    s_lshl_b32 s0, 0xffff, s0
1458 ; VI-NEXT:    v_mov_b32_e32 v2, 0x3e703e7
1459 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1460 ; VI-NEXT:    s_waitcnt vmcnt(0)
1461 ; VI-NEXT:    v_bfi_b32 v2, s0, v2, v3
1462 ; VI-NEXT:    flat_store_dword v[0:1], v2
1463 ; VI-NEXT:    s_endpgm
1465 ; CI-LABEL: v_insertelement_v2i16_dynamic_sgpr:
1466 ; CI:       ; %bb.0:
1467 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1468 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
1469 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1470 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1471 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1472 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1473 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1474 ; CI-NEXT:    flat_load_dword v3, v[0:1]
1475 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
1476 ; CI-NEXT:    s_lshl_b32 s0, s4, 4
1477 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1478 ; CI-NEXT:    s_lshl_b32 s0, 0xffff, s0
1479 ; CI-NEXT:    v_mov_b32_e32 v2, 0x3e703e7
1480 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1481 ; CI-NEXT:    s_waitcnt vmcnt(0)
1482 ; CI-NEXT:    v_bfi_b32 v2, s0, v2, v3
1483 ; CI-NEXT:    flat_store_dword v[0:1], v2
1484 ; CI-NEXT:    s_endpgm
1486 ; GFX11-LABEL: v_insertelement_v2i16_dynamic_sgpr:
1487 ; GFX11:       ; %bb.0:
1488 ; GFX11-NEXT:    s_clause 0x1
1489 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
1490 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
1491 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1492 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(SALU_CYCLE_1)
1493 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1494 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1495 ; GFX11-NEXT:    global_load_b32 v1, v0, s[6:7]
1496 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
1497 ; GFX11-NEXT:    s_lshl_b32 s0, 0xffff, s0
1498 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1499 ; GFX11-NEXT:    v_bfi_b32 v1, s0, 0x3e703e7, v1
1500 ; GFX11-NEXT:    global_store_b32 v0, v1, s[4:5]
1501 ; GFX11-NEXT:    s_nop 0
1502 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1503 ; GFX11-NEXT:    s_endpgm
1504   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1505   %tid.ext = sext i32 %tid to i64
1506   %in.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %in, i64 %tid.ext
1507   %out.gep = getelementptr inbounds <2 x i16>, ptr addrspace(1) %out, i64 %tid.ext
1508   %vec = load <2 x i16>, ptr addrspace(1) %in.gep
1509   %vecins = insertelement <2 x i16> %vec, i16 999, i32 %idx
1510   store <2 x i16> %vecins, ptr addrspace(1) %out.gep
1511   ret void
1514 define amdgpu_kernel void @v_insertelement_v2f16_dynamic_vgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, ptr addrspace(1) %idx.ptr) #0 {
1515 ; GFX9-LABEL: v_insertelement_v2f16_dynamic_vgpr:
1516 ; GFX9:       ; %bb.0:
1517 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
1518 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1519 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1520 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1521 ; GFX9-NEXT:    global_load_dword v1, v0, s[4:5]
1522 ; GFX9-NEXT:    global_load_dword v2, v0, s[2:3]
1523 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1524 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
1525 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
1526 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s2
1527 ; GFX9-NEXT:    s_mov_b32 s2, 0x12341234
1528 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1529 ; GFX9-NEXT:    v_bfi_b32 v1, v1, s2, v2
1530 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
1531 ; GFX9-NEXT:    s_endpgm
1533 ; VI-LABEL: v_insertelement_v2f16_dynamic_vgpr:
1534 ; VI:       ; %bb.0:
1535 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1536 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
1537 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1538 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1539 ; VI-NEXT:    v_mov_b32_e32 v3, s3
1540 ; VI-NEXT:    v_mov_b32_e32 v1, s5
1541 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s4, v2
1542 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1543 ; VI-NEXT:    flat_load_dword v4, v[0:1]
1544 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1545 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v3, vcc
1546 ; VI-NEXT:    flat_load_dword v3, v[0:1]
1547 ; VI-NEXT:    s_mov_b32 s2, 0xffff
1548 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s0, v2
1549 ; VI-NEXT:    v_mov_b32_e32 v1, s1
1550 ; VI-NEXT:    s_mov_b32 s0, 0x12341234
1551 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1552 ; VI-NEXT:    s_waitcnt vmcnt(1)
1553 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 4, v4
1554 ; VI-NEXT:    v_lshlrev_b32_e64 v2, v2, s2
1555 ; VI-NEXT:    s_waitcnt vmcnt(0)
1556 ; VI-NEXT:    v_bfi_b32 v2, v2, s0, v3
1557 ; VI-NEXT:    flat_store_dword v[0:1], v2
1558 ; VI-NEXT:    s_endpgm
1560 ; CI-LABEL: v_insertelement_v2f16_dynamic_vgpr:
1561 ; CI:       ; %bb.0:
1562 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1563 ; CI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x4
1564 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 2, v0
1565 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1566 ; CI-NEXT:    v_mov_b32_e32 v3, s3
1567 ; CI-NEXT:    v_mov_b32_e32 v1, s5
1568 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s4, v2
1569 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1570 ; CI-NEXT:    flat_load_dword v4, v[0:1]
1571 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1572 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v3, vcc
1573 ; CI-NEXT:    flat_load_dword v3, v[0:1]
1574 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s0, v2
1575 ; CI-NEXT:    v_mov_b32_e32 v1, s1
1576 ; CI-NEXT:    s_mov_b32 s0, 0x12341234
1577 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1578 ; CI-NEXT:    s_waitcnt vmcnt(1)
1579 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 4, v4
1580 ; CI-NEXT:    v_lshl_b32_e32 v2, 0xffff, v2
1581 ; CI-NEXT:    s_waitcnt vmcnt(0)
1582 ; CI-NEXT:    v_bfi_b32 v2, v2, s0, v3
1583 ; CI-NEXT:    flat_store_dword v[0:1], v2
1584 ; CI-NEXT:    s_endpgm
1586 ; GFX11-LABEL: v_insertelement_v2f16_dynamic_vgpr:
1587 ; GFX11:       ; %bb.0:
1588 ; GFX11-NEXT:    s_clause 0x1
1589 ; GFX11-NEXT:    s_load_b64 s[4:5], s[2:3], 0x10
1590 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1591 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1592 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1593 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
1594 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1595 ; GFX11-NEXT:    s_clause 0x1
1596 ; GFX11-NEXT:    global_load_b32 v1, v0, s[4:5]
1597 ; GFX11-NEXT:    global_load_b32 v2, v0, s[2:3]
1598 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
1599 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
1600 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1601 ; GFX11-NEXT:    v_lshlrev_b32_e64 v1, v1, 0xffff
1602 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1603 ; GFX11-NEXT:    v_bfi_b32 v1, v1, 0x12341234, v2
1604 ; GFX11-NEXT:    global_store_b32 v0, v1, s[0:1]
1605 ; GFX11-NEXT:    s_nop 0
1606 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1607 ; GFX11-NEXT:    s_endpgm
1608   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1609   %tid.ext = sext i32 %tid to i64
1610   %in.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %in, i64 %tid.ext
1611   %idx.gep = getelementptr inbounds i32, ptr addrspace(1) %idx.ptr, i64 %tid.ext
1612   %out.gep = getelementptr inbounds <2 x half>, ptr addrspace(1) %out, i64 %tid.ext
1613   %idx = load i32, ptr addrspace(1) %idx.gep
1614   %vec = load <2 x half>, ptr addrspace(1) %in.gep
1615   %vecins = insertelement <2 x half> %vec, half 0xH1234, i32 %idx
1616   store <2 x half> %vecins, ptr addrspace(1) %out.gep
1617   ret void
1620 define amdgpu_kernel void @v_insertelement_v4f16_0(ptr addrspace(1) %out, ptr addrspace(1) %in, [8 x i32], i32 %val) #0 {
1621 ; GFX9-LABEL: v_insertelement_v4f16_0:
1622 ; GFX9:       ; %bb.0:
1623 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1624 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x30
1625 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1626 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1627 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v2, s[2:3]
1628 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1629 ; GFX9-NEXT:    v_mov_b32_e32 v3, s4
1630 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1631 ; GFX9-NEXT:    v_bfi_b32 v0, s2, v3, v0
1632 ; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1633 ; GFX9-NEXT:    s_endpgm
1635 ; VI-LABEL: v_insertelement_v4f16_0:
1636 ; VI:       ; %bb.0:
1637 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1638 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x30
1639 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1640 ; VI-NEXT:    v_mov_b32_e32 v4, 0x3020504
1641 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1642 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1643 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1644 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1645 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1646 ; VI-NEXT:    v_mov_b32_e32 v3, s1
1647 ; VI-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
1648 ; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1649 ; VI-NEXT:    s_waitcnt vmcnt(0)
1650 ; VI-NEXT:    v_perm_b32 v0, s4, v0, v4
1651 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1652 ; VI-NEXT:    s_endpgm
1654 ; CI-LABEL: v_insertelement_v4f16_0:
1655 ; CI:       ; %bb.0:
1656 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1657 ; CI-NEXT:    s_load_dword s4, s[6:7], 0xc
1658 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1659 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1660 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1661 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1662 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1663 ; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1664 ; CI-NEXT:    v_mov_b32_e32 v3, s1
1665 ; CI-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
1666 ; CI-NEXT:    s_mov_b32 s0, 0xffff
1667 ; CI-NEXT:    v_mov_b32_e32 v4, s4
1668 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1669 ; CI-NEXT:    s_waitcnt vmcnt(0)
1670 ; CI-NEXT:    v_bfi_b32 v0, s0, v4, v0
1671 ; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1672 ; CI-NEXT:    s_endpgm
1674 ; GFX11-LABEL: v_insertelement_v4f16_0:
1675 ; GFX11:       ; %bb.0:
1676 ; GFX11-NEXT:    s_clause 0x1
1677 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
1678 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x30
1679 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1680 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1681 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1682 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1683 ; GFX11-NEXT:    global_load_b64 v[0:1], v2, s[6:7]
1684 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1685 ; GFX11-NEXT:    v_bfi_b32 v0, 0xffff, s0, v0
1686 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[4:5]
1687 ; GFX11-NEXT:    s_nop 0
1688 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1689 ; GFX11-NEXT:    s_endpgm
1690   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1691   %tid.ext = sext i32 %tid to i64
1692   %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext
1693   %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext
1694   %vec = load <4 x half>, ptr addrspace(1) %in.gep
1695   %val.trunc = trunc i32 %val to i16
1696   %val.cvt = bitcast i16 %val.trunc to half
1697   %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 0
1698   store <4 x half> %vecins, ptr addrspace(1) %out.gep
1699   ret void
1702 define amdgpu_kernel void @v_insertelement_v4f16_1(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {
1703 ; GFX9-LABEL: v_insertelement_v4f16_1:
1704 ; GFX9:       ; %bb.0:
1705 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1706 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
1707 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1708 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x5040100
1709 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1710 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v2, s[2:3]
1711 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1712 ; GFX9-NEXT:    v_perm_b32 v0, s4, v0, v3
1713 ; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1714 ; GFX9-NEXT:    s_endpgm
1716 ; VI-LABEL: v_insertelement_v4f16_1:
1717 ; VI:       ; %bb.0:
1718 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1719 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
1720 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1721 ; VI-NEXT:    v_mov_b32_e32 v4, 0x1000504
1722 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1723 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1724 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1725 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1726 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1727 ; VI-NEXT:    v_mov_b32_e32 v3, s1
1728 ; VI-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
1729 ; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1730 ; VI-NEXT:    s_waitcnt vmcnt(0)
1731 ; VI-NEXT:    v_perm_b32 v0, v0, s4, v4
1732 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1733 ; VI-NEXT:    s_endpgm
1735 ; CI-LABEL: v_insertelement_v4f16_1:
1736 ; CI:       ; %bb.0:
1737 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1738 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
1739 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1740 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1741 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1742 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1743 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1744 ; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1745 ; CI-NEXT:    v_mov_b32_e32 v3, s1
1746 ; CI-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
1747 ; CI-NEXT:    s_lshl_b32 s0, s4, 16
1748 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1749 ; CI-NEXT:    s_waitcnt vmcnt(0)
1750 ; CI-NEXT:    v_and_b32_e32 v0, 0xffff, v0
1751 ; CI-NEXT:    v_or_b32_e32 v0, s0, v0
1752 ; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1753 ; CI-NEXT:    s_endpgm
1755 ; GFX11-LABEL: v_insertelement_v4f16_1:
1756 ; GFX11:       ; %bb.0:
1757 ; GFX11-NEXT:    s_clause 0x1
1758 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
1759 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
1760 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1761 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1762 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1763 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1764 ; GFX11-NEXT:    global_load_b64 v[0:1], v2, s[6:7]
1765 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1766 ; GFX11-NEXT:    v_perm_b32 v0, s0, v0, 0x5040100
1767 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[4:5]
1768 ; GFX11-NEXT:    s_nop 0
1769 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1770 ; GFX11-NEXT:    s_endpgm
1771   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1772   %tid.ext = sext i32 %tid to i64
1773   %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext
1774   %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext
1775   %vec = load <4 x half>, ptr addrspace(1) %in.gep
1776   %val.trunc = trunc i32 %val to i16
1777   %val.cvt = bitcast i16 %val.trunc to half
1778   %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 1
1779   store <4 x half> %vecins, ptr addrspace(1) %out.gep
1780   ret void
1783 define amdgpu_kernel void @v_insertelement_v4f16_2(ptr addrspace(1) %out, ptr addrspace(1) %in, [8 x i32], i32 %val) #0 {
1784 ; GFX9-LABEL: v_insertelement_v4f16_2:
1785 ; GFX9:       ; %bb.0:
1786 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1787 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x30
1788 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1789 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1790 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v2, s[2:3]
1791 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1792 ; GFX9-NEXT:    v_mov_b32_e32 v3, s4
1793 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1794 ; GFX9-NEXT:    v_bfi_b32 v1, s2, v3, v1
1795 ; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1796 ; GFX9-NEXT:    s_endpgm
1798 ; VI-LABEL: v_insertelement_v4f16_2:
1799 ; VI:       ; %bb.0:
1800 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1801 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x30
1802 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1803 ; VI-NEXT:    v_mov_b32_e32 v4, 0x3020504
1804 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1805 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1806 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1807 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1808 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1809 ; VI-NEXT:    v_mov_b32_e32 v3, s1
1810 ; VI-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
1811 ; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1812 ; VI-NEXT:    s_waitcnt vmcnt(0)
1813 ; VI-NEXT:    v_perm_b32 v1, s4, v1, v4
1814 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1815 ; VI-NEXT:    s_endpgm
1817 ; CI-LABEL: v_insertelement_v4f16_2:
1818 ; CI:       ; %bb.0:
1819 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1820 ; CI-NEXT:    s_load_dword s4, s[6:7], 0xc
1821 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1822 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1823 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1824 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1825 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1826 ; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1827 ; CI-NEXT:    v_mov_b32_e32 v3, s1
1828 ; CI-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
1829 ; CI-NEXT:    s_mov_b32 s0, 0xffff
1830 ; CI-NEXT:    v_mov_b32_e32 v4, s4
1831 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1832 ; CI-NEXT:    s_waitcnt vmcnt(0)
1833 ; CI-NEXT:    v_bfi_b32 v1, s0, v4, v1
1834 ; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1835 ; CI-NEXT:    s_endpgm
1837 ; GFX11-LABEL: v_insertelement_v4f16_2:
1838 ; GFX11:       ; %bb.0:
1839 ; GFX11-NEXT:    s_clause 0x1
1840 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
1841 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x30
1842 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1843 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1844 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1845 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1846 ; GFX11-NEXT:    global_load_b64 v[0:1], v2, s[6:7]
1847 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1848 ; GFX11-NEXT:    v_bfi_b32 v1, 0xffff, s0, v1
1849 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[4:5]
1850 ; GFX11-NEXT:    s_nop 0
1851 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1852 ; GFX11-NEXT:    s_endpgm
1853   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1854   %tid.ext = sext i32 %tid to i64
1855   %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext
1856   %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext
1857   %vec = load <4 x half>, ptr addrspace(1) %in.gep
1858   %val.trunc = trunc i32 %val to i16
1859   %val.cvt = bitcast i16 %val.trunc to half
1860   %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 2
1861   store <4 x half> %vecins, ptr addrspace(1) %out.gep
1862   ret void
1865 define amdgpu_kernel void @v_insertelement_v4f16_3(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {
1866 ; GFX9-LABEL: v_insertelement_v4f16_3:
1867 ; GFX9:       ; %bb.0:
1868 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1869 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
1870 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1871 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x5040100
1872 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1873 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v2, s[2:3]
1874 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1875 ; GFX9-NEXT:    v_perm_b32 v1, s4, v1, v3
1876 ; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1877 ; GFX9-NEXT:    s_endpgm
1879 ; VI-LABEL: v_insertelement_v4f16_3:
1880 ; VI:       ; %bb.0:
1881 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1882 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
1883 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1884 ; VI-NEXT:    v_mov_b32_e32 v4, 0x1000504
1885 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1886 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1887 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1888 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1889 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1890 ; VI-NEXT:    v_mov_b32_e32 v3, s1
1891 ; VI-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
1892 ; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1893 ; VI-NEXT:    s_waitcnt vmcnt(0)
1894 ; VI-NEXT:    v_perm_b32 v1, v1, s4, v4
1895 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1896 ; VI-NEXT:    s_endpgm
1898 ; CI-LABEL: v_insertelement_v4f16_3:
1899 ; CI:       ; %bb.0:
1900 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1901 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
1902 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1903 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1904 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1905 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1906 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1907 ; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1908 ; CI-NEXT:    v_mov_b32_e32 v3, s1
1909 ; CI-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
1910 ; CI-NEXT:    s_lshl_b32 s0, s4, 16
1911 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1912 ; CI-NEXT:    s_waitcnt vmcnt(0)
1913 ; CI-NEXT:    v_and_b32_e32 v1, 0xffff, v1
1914 ; CI-NEXT:    v_or_b32_e32 v1, s0, v1
1915 ; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1916 ; CI-NEXT:    s_endpgm
1918 ; GFX11-LABEL: v_insertelement_v4f16_3:
1919 ; GFX11:       ; %bb.0:
1920 ; GFX11-NEXT:    s_clause 0x1
1921 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
1922 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
1923 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1924 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1925 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1926 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1927 ; GFX11-NEXT:    global_load_b64 v[0:1], v2, s[6:7]
1928 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1929 ; GFX11-NEXT:    v_perm_b32 v1, s0, v1, 0x5040100
1930 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[4:5]
1931 ; GFX11-NEXT:    s_nop 0
1932 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1933 ; GFX11-NEXT:    s_endpgm
1934   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
1935   %tid.ext = sext i32 %tid to i64
1936   %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext
1937   %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext
1938   %vec = load <4 x half>, ptr addrspace(1) %in.gep
1939   %val.trunc = trunc i32 %val to i16
1940   %val.cvt = bitcast i16 %val.trunc to half
1941   %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 3
1942   store <4 x half> %vecins, ptr addrspace(1) %out.gep
1943   ret void
1946 define amdgpu_kernel void @v_insertelement_v4i16_2(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {
1947 ; GFX9-LABEL: v_insertelement_v4i16_2:
1948 ; GFX9:       ; %bb.0:
1949 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1950 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
1951 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1952 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1953 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v2, s[2:3]
1954 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1955 ; GFX9-NEXT:    v_mov_b32_e32 v3, s4
1956 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1957 ; GFX9-NEXT:    v_bfi_b32 v1, s2, v3, v1
1958 ; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1959 ; GFX9-NEXT:    s_endpgm
1961 ; VI-LABEL: v_insertelement_v4i16_2:
1962 ; VI:       ; %bb.0:
1963 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1964 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
1965 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1966 ; VI-NEXT:    v_mov_b32_e32 v4, 0x3020504
1967 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
1968 ; VI-NEXT:    v_mov_b32_e32 v1, s3
1969 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
1970 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1971 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1972 ; VI-NEXT:    v_mov_b32_e32 v3, s1
1973 ; VI-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
1974 ; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1975 ; VI-NEXT:    s_waitcnt vmcnt(0)
1976 ; VI-NEXT:    v_perm_b32 v1, s4, v1, v4
1977 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1978 ; VI-NEXT:    s_endpgm
1980 ; CI-LABEL: v_insertelement_v4i16_2:
1981 ; CI:       ; %bb.0:
1982 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
1983 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
1984 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
1985 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
1986 ; CI-NEXT:    v_mov_b32_e32 v1, s3
1987 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
1988 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
1989 ; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1990 ; CI-NEXT:    v_mov_b32_e32 v3, s1
1991 ; CI-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
1992 ; CI-NEXT:    s_mov_b32 s0, 0xffff
1993 ; CI-NEXT:    v_mov_b32_e32 v4, s4
1994 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
1995 ; CI-NEXT:    s_waitcnt vmcnt(0)
1996 ; CI-NEXT:    v_bfi_b32 v1, s0, v4, v1
1997 ; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1998 ; CI-NEXT:    s_endpgm
2000 ; GFX11-LABEL: v_insertelement_v4i16_2:
2001 ; GFX11:       ; %bb.0:
2002 ; GFX11-NEXT:    s_clause 0x1
2003 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2004 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
2005 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2006 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2007 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
2008 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2009 ; GFX11-NEXT:    global_load_b64 v[0:1], v2, s[6:7]
2010 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2011 ; GFX11-NEXT:    v_bfi_b32 v1, 0xffff, s0, v1
2012 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[4:5]
2013 ; GFX11-NEXT:    s_nop 0
2014 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2015 ; GFX11-NEXT:    s_endpgm
2016   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2017   %tid.ext = sext i32 %tid to i64
2018   %in.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %in, i64 %tid.ext
2019   %out.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %out, i64 %tid.ext
2020   %vec = load <4 x i16>, ptr addrspace(1) %in.gep
2021   %val.trunc = trunc i32 %val to i16
2022   %val.cvt = bitcast i16 %val.trunc to i16
2023   %vecins = insertelement <4 x i16> %vec, i16 %val.cvt, i32 2
2024   store <4 x i16> %vecins, ptr addrspace(1) %out.gep
2025   ret void
2028 ; FIXME: Better code on CI?
2029 define amdgpu_kernel void @v_insertelement_v4i16_dynamic_vgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) #0 {
2030 ; GFX9-LABEL: v_insertelement_v4i16_dynamic_vgpr:
2031 ; GFX9:       ; %bb.0:
2032 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2033 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
2034 ; GFX9-NEXT:    global_load_dword v2, v[0:1], off glc
2035 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2036 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 3, v0
2037 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2038 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v4, s[2:3]
2039 ; GFX9-NEXT:    s_mov_b64 s[2:3], 0xffff
2040 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
2041 ; GFX9-NEXT:    v_lshlrev_b64 v[2:3], v2, s[2:3]
2042 ; GFX9-NEXT:    s_pack_ll_b32_b16 s2, s4, s4
2043 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2044 ; GFX9-NEXT:    v_bfi_b32 v1, v3, s2, v1
2045 ; GFX9-NEXT:    v_bfi_b32 v0, v2, s2, v0
2046 ; GFX9-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1]
2047 ; GFX9-NEXT:    s_endpgm
2049 ; VI-LABEL: v_insertelement_v4i16_dynamic_vgpr:
2050 ; VI:       ; %bb.0:
2051 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2052 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
2053 ; VI-NEXT:    flat_load_dword v4, v[0:1] glc
2054 ; VI-NEXT:    s_waitcnt vmcnt(0)
2055 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
2056 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2057 ; VI-NEXT:    v_mov_b32_e32 v1, s3
2058 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
2059 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2060 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
2061 ; VI-NEXT:    s_mov_b64 s[2:3], 0xffff
2062 ; VI-NEXT:    v_mov_b32_e32 v3, s1
2063 ; VI-NEXT:    s_lshl_b32 s1, s4, 16
2064 ; VI-NEXT:    s_and_b32 s4, s4, 0xffff
2065 ; VI-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
2066 ; VI-NEXT:    s_or_b32 s0, s4, s1
2067 ; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
2068 ; VI-NEXT:    v_lshlrev_b32_e32 v4, 4, v4
2069 ; VI-NEXT:    v_lshlrev_b64 v[4:5], v4, s[2:3]
2070 ; VI-NEXT:    s_waitcnt vmcnt(0)
2071 ; VI-NEXT:    v_bfi_b32 v1, v5, s0, v1
2072 ; VI-NEXT:    v_bfi_b32 v0, v4, s0, v0
2073 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
2074 ; VI-NEXT:    s_endpgm
2076 ; CI-LABEL: v_insertelement_v4i16_dynamic_vgpr:
2077 ; CI:       ; %bb.0:
2078 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2079 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
2080 ; CI-NEXT:    flat_load_dword v4, v[0:1] glc
2081 ; CI-NEXT:    s_waitcnt vmcnt(0)
2082 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
2083 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
2084 ; CI-NEXT:    v_mov_b32_e32 v1, s3
2085 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
2086 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2087 ; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
2088 ; CI-NEXT:    s_mov_b64 s[2:3], 0xffff
2089 ; CI-NEXT:    v_mov_b32_e32 v3, s1
2090 ; CI-NEXT:    s_lshl_b32 s1, s4, 16
2091 ; CI-NEXT:    s_and_b32 s4, s4, 0xffff
2092 ; CI-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
2093 ; CI-NEXT:    s_or_b32 s0, s4, s1
2094 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
2095 ; CI-NEXT:    v_lshlrev_b32_e32 v4, 4, v4
2096 ; CI-NEXT:    v_lshl_b64 v[4:5], s[2:3], v4
2097 ; CI-NEXT:    s_waitcnt vmcnt(0)
2098 ; CI-NEXT:    v_bfi_b32 v1, v5, s0, v1
2099 ; CI-NEXT:    v_bfi_b32 v0, v4, s0, v0
2100 ; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
2101 ; CI-NEXT:    s_endpgm
2103 ; GFX11-LABEL: v_insertelement_v4i16_dynamic_vgpr:
2104 ; GFX11:       ; %bb.0:
2105 ; GFX11-NEXT:    s_clause 0x1
2106 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2107 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
2108 ; GFX11-NEXT:    global_load_b32 v2, v[0:1], off glc dlc
2109 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2110 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2111 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_1)
2112 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 3, v0
2113 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2114 ; GFX11-NEXT:    global_load_b64 v[0:1], v4, s[6:7]
2115 ; GFX11-NEXT:    s_pack_ll_b32_b16 s0, s0, s0
2116 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
2117 ; GFX11-NEXT:    v_lshlrev_b64 v[2:3], v2, 0xffff
2118 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2119 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2120 ; GFX11-NEXT:    v_bfi_b32 v1, v3, s0, v1
2121 ; GFX11-NEXT:    v_bfi_b32 v0, v2, s0, v0
2122 ; GFX11-NEXT:    global_store_b64 v4, v[0:1], s[4:5]
2123 ; GFX11-NEXT:    s_nop 0
2124 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2125 ; GFX11-NEXT:    s_endpgm
2126   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2127   %tid.ext = sext i32 %tid to i64
2128   %in.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %in, i64 %tid.ext
2129   %out.gep = getelementptr inbounds <4 x i16>, ptr addrspace(1) %out, i64 %tid.ext
2130   %idx.val = load volatile i32, ptr addrspace(1) undef
2131   %vec = load <4 x i16>, ptr addrspace(1) %in.gep
2132   %val.trunc = trunc i32 %val to i16
2133   %val.cvt = bitcast i16 %val.trunc to i16
2134   %vecins = insertelement <4 x i16> %vec, i16 %val.cvt, i32 %idx.val
2135   store <4 x i16> %vecins, ptr addrspace(1) %out.gep
2136   ret void
2139 define amdgpu_kernel void @v_insertelement_v4f16_dynamic_sgpr(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val, i32 %idxval) #0 {
2140 ; GFX9-LABEL: v_insertelement_v4f16_dynamic_sgpr:
2141 ; GFX9:       ; %bb.0:
2142 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2143 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
2144 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
2145 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2146 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v2, s[2:3]
2147 ; GFX9-NEXT:    s_lshl_b32 s2, s5, 4
2148 ; GFX9-NEXT:    s_pack_ll_b32_b16 s4, s4, s4
2149 ; GFX9-NEXT:    s_lshl_b64 s[2:3], 0xffff, s2
2150 ; GFX9-NEXT:    v_mov_b32_e32 v3, s4
2151 ; GFX9-NEXT:    v_mov_b32_e32 v4, s4
2152 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2153 ; GFX9-NEXT:    v_bfi_b32 v1, s3, v3, v1
2154 ; GFX9-NEXT:    v_bfi_b32 v0, s2, v4, v0
2155 ; GFX9-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2156 ; GFX9-NEXT:    s_endpgm
2158 ; VI-LABEL: v_insertelement_v4f16_dynamic_sgpr:
2159 ; VI:       ; %bb.0:
2160 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2161 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
2162 ; VI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
2163 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2164 ; VI-NEXT:    v_mov_b32_e32 v1, s3
2165 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v2
2166 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2167 ; VI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
2168 ; VI-NEXT:    v_mov_b32_e32 v3, s1
2169 ; VI-NEXT:    s_lshl_b32 s1, s4, 16
2170 ; VI-NEXT:    s_and_b32 s2, s4, 0xffff
2171 ; VI-NEXT:    s_lshl_b32 s3, s5, 4
2172 ; VI-NEXT:    s_or_b32 s2, s2, s1
2173 ; VI-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
2174 ; VI-NEXT:    s_lshl_b64 s[0:1], 0xffff, s3
2175 ; VI-NEXT:    v_mov_b32_e32 v4, s2
2176 ; VI-NEXT:    v_mov_b32_e32 v5, s2
2177 ; VI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
2178 ; VI-NEXT:    s_waitcnt vmcnt(0)
2179 ; VI-NEXT:    v_bfi_b32 v1, s1, v4, v1
2180 ; VI-NEXT:    v_bfi_b32 v0, s0, v5, v0
2181 ; VI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
2182 ; VI-NEXT:    s_endpgm
2184 ; CI-LABEL: v_insertelement_v4f16_dynamic_sgpr:
2185 ; CI:       ; %bb.0:
2186 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2187 ; CI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x4
2188 ; CI-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
2189 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
2190 ; CI-NEXT:    v_mov_b32_e32 v1, s3
2191 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v2
2192 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2193 ; CI-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
2194 ; CI-NEXT:    v_mov_b32_e32 v3, s1
2195 ; CI-NEXT:    s_and_b32 s1, s4, 0xffff
2196 ; CI-NEXT:    s_lshl_b32 s2, s4, 16
2197 ; CI-NEXT:    s_lshl_b32 s3, s5, 4
2198 ; CI-NEXT:    s_or_b32 s2, s1, s2
2199 ; CI-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
2200 ; CI-NEXT:    s_lshl_b64 s[0:1], 0xffff, s3
2201 ; CI-NEXT:    v_mov_b32_e32 v4, s2
2202 ; CI-NEXT:    v_mov_b32_e32 v5, s2
2203 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
2204 ; CI-NEXT:    s_waitcnt vmcnt(0)
2205 ; CI-NEXT:    v_bfi_b32 v1, s1, v4, v1
2206 ; CI-NEXT:    v_bfi_b32 v0, s0, v5, v0
2207 ; CI-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
2208 ; CI-NEXT:    s_endpgm
2210 ; GFX11-LABEL: v_insertelement_v4f16_dynamic_sgpr:
2211 ; GFX11:       ; %bb.0:
2212 ; GFX11-NEXT:    s_clause 0x1
2213 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2214 ; GFX11-NEXT:    s_load_b64 s[0:1], s[2:3], 0x10
2215 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2216 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2217 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 3, v0
2218 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2219 ; GFX11-NEXT:    global_load_b64 v[0:1], v2, s[6:7]
2220 ; GFX11-NEXT:    s_lshl_b32 s1, s1, 4
2221 ; GFX11-NEXT:    s_pack_ll_b32_b16 s2, s0, s0
2222 ; GFX11-NEXT:    s_lshl_b64 s[0:1], 0xffff, s1
2223 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2224 ; GFX11-NEXT:    v_bfi_b32 v1, s1, s2, v1
2225 ; GFX11-NEXT:    v_bfi_b32 v0, s0, s2, v0
2226 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[4:5]
2227 ; GFX11-NEXT:    s_nop 0
2228 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2229 ; GFX11-NEXT:    s_endpgm
2230   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2231   %tid.ext = sext i32 %tid to i64
2232   %in.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %in, i64 %tid.ext
2233   %out.gep = getelementptr inbounds <4 x half>, ptr addrspace(1) %out, i64 %tid.ext
2234   %vec = load <4 x half>, ptr addrspace(1) %in.gep
2235   %val.trunc = trunc i32 %val to i16
2236   %val.cvt = bitcast i16 %val.trunc to half
2237   %vecins = insertelement <4 x half> %vec, half %val.cvt, i32 %idxval
2238   store <4 x half> %vecins, ptr addrspace(1) %out.gep
2239   ret void
2242 define amdgpu_kernel void @v_insertelement_v8f16_3(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {
2243 ; GFX9-LABEL: v_insertelement_v8f16_3:
2244 ; GFX9:       ; %bb.0:
2245 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2246 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
2247 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2248 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0x5040100
2249 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2250 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v4, s[2:3]
2251 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2252 ; GFX9-NEXT:    v_perm_b32 v1, s4, v1, v5
2253 ; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1]
2254 ; GFX9-NEXT:    s_endpgm
2256 ; VI-LABEL: v_insertelement_v8f16_3:
2257 ; VI:       ; %bb.0:
2258 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2259 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
2260 ; VI-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2261 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2262 ; VI-NEXT:    v_mov_b32_e32 v1, s3
2263 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v4
2264 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2265 ; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2266 ; VI-NEXT:    v_add_u32_e32 v4, vcc, s0, v4
2267 ; VI-NEXT:    s_lshl_b32 s0, s4, 16
2268 ; VI-NEXT:    v_mov_b32_e32 v5, s1
2269 ; VI-NEXT:    v_mov_b32_e32 v6, s0
2270 ; VI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
2271 ; VI-NEXT:    s_waitcnt vmcnt(0)
2272 ; VI-NEXT:    v_or_b32_sdwa v1, v1, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2273 ; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2274 ; VI-NEXT:    s_endpgm
2276 ; CI-LABEL: v_insertelement_v8f16_3:
2277 ; CI:       ; %bb.0:
2278 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2279 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
2280 ; CI-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2281 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
2282 ; CI-NEXT:    v_mov_b32_e32 v1, s3
2283 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v4
2284 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2285 ; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2286 ; CI-NEXT:    v_mov_b32_e32 v5, s1
2287 ; CI-NEXT:    v_add_i32_e32 v4, vcc, s0, v4
2288 ; CI-NEXT:    s_lshl_b32 s0, s4, 16
2289 ; CI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
2290 ; CI-NEXT:    s_waitcnt vmcnt(0)
2291 ; CI-NEXT:    v_and_b32_e32 v1, 0xffff, v1
2292 ; CI-NEXT:    v_or_b32_e32 v1, s0, v1
2293 ; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2294 ; CI-NEXT:    s_endpgm
2296 ; GFX11-LABEL: v_insertelement_v8f16_3:
2297 ; GFX11:       ; %bb.0:
2298 ; GFX11-NEXT:    s_clause 0x1
2299 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2300 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
2301 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2302 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2303 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2304 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2305 ; GFX11-NEXT:    global_load_b128 v[0:3], v4, s[6:7]
2306 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2307 ; GFX11-NEXT:    v_perm_b32 v1, s0, v1, 0x5040100
2308 ; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[4:5]
2309 ; GFX11-NEXT:    s_nop 0
2310 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2311 ; GFX11-NEXT:    s_endpgm
2312   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2313   %tid.ext = sext i32 %tid to i64
2314   %in.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %in, i64 %tid.ext
2315   %out.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %out, i64 %tid.ext
2316   %vec = load <8 x half>, ptr addrspace(1) %in.gep
2317   %val.trunc = trunc i32 %val to i16
2318   %val.cvt = bitcast i16 %val.trunc to half
2319   %vecins = insertelement <8 x half> %vec, half %val.cvt, i32 3
2320   store <8 x half> %vecins, ptr addrspace(1) %out.gep
2321   ret void
2324 define amdgpu_kernel void @v_insertelement_v8i16_6(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {
2325 ; GFX9-LABEL: v_insertelement_v8i16_6:
2326 ; GFX9:       ; %bb.0:
2327 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2328 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
2329 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2330 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2331 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v4, s[2:3]
2332 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
2333 ; GFX9-NEXT:    v_mov_b32_e32 v5, s4
2334 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2335 ; GFX9-NEXT:    v_bfi_b32 v3, s2, v5, v3
2336 ; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1]
2337 ; GFX9-NEXT:    s_endpgm
2339 ; VI-LABEL: v_insertelement_v8i16_6:
2340 ; VI:       ; %bb.0:
2341 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2342 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
2343 ; VI-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2344 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2345 ; VI-NEXT:    v_mov_b32_e32 v1, s3
2346 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v4
2347 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2348 ; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2349 ; VI-NEXT:    v_mov_b32_e32 v5, s1
2350 ; VI-NEXT:    v_add_u32_e32 v4, vcc, s0, v4
2351 ; VI-NEXT:    s_mov_b32 s0, 0xffff
2352 ; VI-NEXT:    v_mov_b32_e32 v6, s4
2353 ; VI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
2354 ; VI-NEXT:    s_waitcnt vmcnt(0)
2355 ; VI-NEXT:    v_bfi_b32 v3, s0, v6, v3
2356 ; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2357 ; VI-NEXT:    s_endpgm
2359 ; CI-LABEL: v_insertelement_v8i16_6:
2360 ; CI:       ; %bb.0:
2361 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2362 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
2363 ; CI-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2364 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
2365 ; CI-NEXT:    v_mov_b32_e32 v1, s3
2366 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v4
2367 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2368 ; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2369 ; CI-NEXT:    v_mov_b32_e32 v5, s1
2370 ; CI-NEXT:    v_add_i32_e32 v4, vcc, s0, v4
2371 ; CI-NEXT:    s_mov_b32 s0, 0xffff
2372 ; CI-NEXT:    v_mov_b32_e32 v6, s4
2373 ; CI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
2374 ; CI-NEXT:    s_waitcnt vmcnt(0)
2375 ; CI-NEXT:    v_bfi_b32 v3, s0, v6, v3
2376 ; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2377 ; CI-NEXT:    s_endpgm
2379 ; GFX11-LABEL: v_insertelement_v8i16_6:
2380 ; GFX11:       ; %bb.0:
2381 ; GFX11-NEXT:    s_clause 0x1
2382 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2383 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
2384 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2385 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2386 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2387 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2388 ; GFX11-NEXT:    global_load_b128 v[0:3], v4, s[6:7]
2389 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2390 ; GFX11-NEXT:    v_bfi_b32 v3, 0xffff, s0, v3
2391 ; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[4:5]
2392 ; GFX11-NEXT:    s_nop 0
2393 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2394 ; GFX11-NEXT:    s_endpgm
2395   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2396   %tid.ext = sext i32 %tid to i64
2397   %in.gep = getelementptr inbounds <8 x i16>, ptr addrspace(1) %in, i64 %tid.ext
2398   %out.gep = getelementptr inbounds <8 x i16>, ptr addrspace(1) %out, i64 %tid.ext
2399   %vec = load <8 x i16>, ptr addrspace(1) %in.gep
2400   %val.trunc = trunc i32 %val to i16
2401   %val.cvt = bitcast i16 %val.trunc to i16
2402   %vecins = insertelement <8 x i16> %vec, i16 %val.cvt, i32 6
2403   store <8 x i16> %vecins, ptr addrspace(1) %out.gep
2404   ret void
2407 define amdgpu_kernel void @v_insertelement_v8f16_dynamic(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val, i32 %n) {
2408 ; GFX9-LABEL: v_insertelement_v8f16_dynamic:
2409 ; GFX9:       ; %bb.0:
2410 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2411 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
2412 ; GFX9-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2413 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2414 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v4, s[2:3]
2415 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 6
2416 ; GFX9-NEXT:    v_mov_b32_e32 v5, s4
2417 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2418 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 7
2419 ; GFX9-NEXT:    s_mov_b32 s2, 0x5040100
2420 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2421 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v3, v5, vcc
2422 ; GFX9-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2423 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2424 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 4
2425 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v5, vcc
2426 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2427 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 5
2428 ; GFX9-NEXT:    v_lshrrev_b32_e32 v7, 16, v2
2429 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v5, vcc
2430 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2431 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 2
2432 ; GFX9-NEXT:    v_perm_b32 v3, v3, v6, s2
2433 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v7, v5, vcc
2434 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2435 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 3
2436 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 16, v1
2437 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
2438 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2439 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 0
2440 ; GFX9-NEXT:    v_perm_b32 v2, v6, v2, s2
2441 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v8, v5, vcc
2442 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2443 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 1
2444 ; GFX9-NEXT:    v_lshrrev_b32_e32 v9, 16, v0
2445 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v5, vcc
2446 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2447 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v9, v5, vcc
2448 ; GFX9-NEXT:    v_perm_b32 v1, v6, v1, s2
2449 ; GFX9-NEXT:    v_perm_b32 v0, v5, v0, s2
2450 ; GFX9-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1]
2451 ; GFX9-NEXT:    s_endpgm
2453 ; VI-LABEL: v_insertelement_v8f16_dynamic:
2454 ; VI:       ; %bb.0:
2455 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2456 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
2457 ; VI-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2458 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2459 ; VI-NEXT:    v_mov_b32_e32 v1, s3
2460 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v4
2461 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2462 ; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2463 ; VI-NEXT:    v_mov_b32_e32 v5, s1
2464 ; VI-NEXT:    v_add_u32_e32 v4, vcc, s0, v4
2465 ; VI-NEXT:    s_cmp_eq_u32 s5, 6
2466 ; VI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
2467 ; VI-NEXT:    v_mov_b32_e32 v6, s4
2468 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2469 ; VI-NEXT:    s_cmp_eq_u32 s5, 7
2470 ; VI-NEXT:    s_waitcnt vmcnt(0)
2471 ; VI-NEXT:    v_cndmask_b32_e32 v7, v3, v6, vcc
2472 ; VI-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2473 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2474 ; VI-NEXT:    s_cmp_eq_u32 s5, 4
2475 ; VI-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc
2476 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2477 ; VI-NEXT:    s_cmp_eq_u32 s5, 5
2478 ; VI-NEXT:    v_lshrrev_b32_e32 v8, 16, v2
2479 ; VI-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
2480 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2481 ; VI-NEXT:    s_cmp_eq_u32 s5, 2
2482 ; VI-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
2483 ; VI-NEXT:    v_cndmask_b32_e32 v8, v8, v6, vcc
2484 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2485 ; VI-NEXT:    s_cmp_eq_u32 s5, 3
2486 ; VI-NEXT:    v_lshrrev_b32_e32 v9, 16, v1
2487 ; VI-NEXT:    v_or_b32_sdwa v3, v7, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2488 ; VI-NEXT:    v_lshlrev_b32_e32 v7, 16, v8
2489 ; VI-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2490 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2491 ; VI-NEXT:    s_cmp_eq_u32 s5, 0
2492 ; VI-NEXT:    v_or_b32_sdwa v2, v2, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2493 ; VI-NEXT:    v_cndmask_b32_e32 v7, v9, v6, vcc
2494 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2495 ; VI-NEXT:    s_cmp_eq_u32 s5, 1
2496 ; VI-NEXT:    v_lshrrev_b32_e32 v10, 16, v0
2497 ; VI-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc
2498 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2499 ; VI-NEXT:    v_cndmask_b32_e32 v6, v10, v6, vcc
2500 ; VI-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
2501 ; VI-NEXT:    v_lshlrev_b32_e32 v6, 16, v6
2502 ; VI-NEXT:    v_or_b32_sdwa v1, v1, v7 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2503 ; VI-NEXT:    v_or_b32_sdwa v0, v0, v6 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2504 ; VI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2505 ; VI-NEXT:    s_endpgm
2507 ; CI-LABEL: v_insertelement_v8f16_dynamic:
2508 ; CI:       ; %bb.0:
2509 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2510 ; CI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x4
2511 ; CI-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2512 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
2513 ; CI-NEXT:    v_mov_b32_e32 v1, s3
2514 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v4
2515 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2516 ; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2517 ; CI-NEXT:    v_mov_b32_e32 v5, s1
2518 ; CI-NEXT:    v_add_i32_e32 v4, vcc, s0, v4
2519 ; CI-NEXT:    v_cvt_f32_f16_e32 v6, s4
2520 ; CI-NEXT:    s_cmp_eq_u32 s5, 7
2521 ; CI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
2522 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
2523 ; CI-NEXT:    s_cmp_eq_u32 s5, 6
2524 ; CI-NEXT:    s_cselect_b64 s[0:1], -1, 0
2525 ; CI-NEXT:    s_cmp_eq_u32 s5, 5
2526 ; CI-NEXT:    s_cselect_b64 s[2:3], -1, 0
2527 ; CI-NEXT:    s_cmp_eq_u32 s5, 4
2528 ; CI-NEXT:    s_waitcnt vmcnt(0)
2529 ; CI-NEXT:    v_lshrrev_b32_e32 v7, 16, v3
2530 ; CI-NEXT:    v_cvt_f32_f16_e32 v3, v3
2531 ; CI-NEXT:    v_lshrrev_b32_e32 v9, 16, v1
2532 ; CI-NEXT:    v_cvt_f32_f16_e32 v7, v7
2533 ; CI-NEXT:    v_cvt_f32_f16_e32 v9, v9
2534 ; CI-NEXT:    v_lshrrev_b32_e32 v8, 16, v2
2535 ; CI-NEXT:    v_cvt_f32_f16_e32 v1, v1
2536 ; CI-NEXT:    v_lshrrev_b32_e32 v10, 16, v0
2537 ; CI-NEXT:    v_cvt_f32_f16_e32 v8, v8
2538 ; CI-NEXT:    v_cvt_f32_f16_e32 v10, v10
2539 ; CI-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[0:1]
2540 ; CI-NEXT:    s_cselect_b64 s[0:1], -1, 0
2541 ; CI-NEXT:    s_cmp_eq_u32 s5, 3
2542 ; CI-NEXT:    v_cvt_f32_f16_e32 v2, v2
2543 ; CI-NEXT:    v_cvt_f32_f16_e32 v0, v0
2544 ; CI-NEXT:    v_cndmask_b32_e32 v7, v7, v6, vcc
2545 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
2546 ; CI-NEXT:    s_cmp_eq_u32 s5, 2
2547 ; CI-NEXT:    v_cndmask_b32_e32 v9, v9, v6, vcc
2548 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
2549 ; CI-NEXT:    s_cmp_eq_u32 s5, 1
2550 ; CI-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2551 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
2552 ; CI-NEXT:    s_cmp_eq_u32 s5, 0
2553 ; CI-NEXT:    v_cndmask_b32_e64 v8, v8, v6, s[2:3]
2554 ; CI-NEXT:    v_cvt_f16_f32_e32 v7, v7
2555 ; CI-NEXT:    v_cndmask_b32_e32 v10, v10, v6, vcc
2556 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
2557 ; CI-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
2558 ; CI-NEXT:    v_cvt_f16_f32_e32 v3, v3
2559 ; CI-NEXT:    v_cvt_f16_f32_e32 v8, v8
2560 ; CI-NEXT:    v_cvt_f16_f32_e32 v9, v9
2561 ; CI-NEXT:    v_cvt_f16_f32_e32 v10, v10
2562 ; CI-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc
2563 ; CI-NEXT:    v_cvt_f16_f32_e32 v2, v2
2564 ; CI-NEXT:    v_cvt_f16_f32_e32 v1, v1
2565 ; CI-NEXT:    v_cvt_f16_f32_e32 v0, v0
2566 ; CI-NEXT:    v_lshlrev_b32_e32 v6, 16, v7
2567 ; CI-NEXT:    v_lshlrev_b32_e32 v7, 16, v8
2568 ; CI-NEXT:    v_lshlrev_b32_e32 v8, 16, v9
2569 ; CI-NEXT:    v_or_b32_e32 v3, v3, v6
2570 ; CI-NEXT:    v_lshlrev_b32_e32 v6, 16, v10
2571 ; CI-NEXT:    v_or_b32_e32 v2, v2, v7
2572 ; CI-NEXT:    v_or_b32_e32 v1, v1, v8
2573 ; CI-NEXT:    v_or_b32_e32 v0, v0, v6
2574 ; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2575 ; CI-NEXT:    s_endpgm
2577 ; GFX11-LABEL: v_insertelement_v8f16_dynamic:
2578 ; GFX11:       ; %bb.0:
2579 ; GFX11-NEXT:    s_clause 0x1
2580 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2581 ; GFX11-NEXT:    s_load_b64 s[0:1], s[2:3], 0x10
2582 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2583 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2584 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 4, v0
2585 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2586 ; GFX11-NEXT:    global_load_b128 v[0:3], v4, s[6:7]
2587 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 6
2588 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
2589 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 7
2590 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2591 ; GFX11-NEXT:    v_cndmask_b32_e64 v5, v3, s0, s2
2592 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
2593 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 4
2594 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2595 ; GFX11-NEXT:    s_cselect_b32 s3, -1, 0
2596 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 5
2597 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v2
2598 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, s0, s3
2599 ; GFX11-NEXT:    s_cselect_b32 s3, -1, 0
2600 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 2
2601 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 16, v1
2602 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, s0, s2
2603 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
2604 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 3
2605 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s0, s2
2606 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
2607 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 0
2608 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 16, v0
2609 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v7, s0, s2
2610 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
2611 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 1
2612 ; GFX11-NEXT:    v_cndmask_b32_e64 v6, v6, s0, s3
2613 ; GFX11-NEXT:    s_cselect_b32 s1, -1, 0
2614 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, s0, s2
2615 ; GFX11-NEXT:    v_cndmask_b32_e64 v8, v8, s0, s1
2616 ; GFX11-NEXT:    v_perm_b32 v3, v3, v5, 0x5040100
2617 ; GFX11-NEXT:    v_perm_b32 v2, v6, v2, 0x5040100
2618 ; GFX11-NEXT:    v_perm_b32 v1, v7, v1, 0x5040100
2619 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2620 ; GFX11-NEXT:    v_perm_b32 v0, v8, v0, 0x5040100
2621 ; GFX11-NEXT:    global_store_b128 v4, v[0:3], s[4:5]
2622 ; GFX11-NEXT:    s_nop 0
2623 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2624 ; GFX11-NEXT:    s_endpgm
2625   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2626   %tid.ext = sext i32 %tid to i64
2627   %in.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %in, i64 %tid.ext
2628   %out.gep = getelementptr inbounds <8 x half>, ptr addrspace(1) %out, i64 %tid.ext
2629   %vec = load <8 x half>, ptr addrspace(1) %in.gep
2630   %val.trunc = trunc i32 %val to i16
2631   %val.cvt = bitcast i16 %val.trunc to half
2632   %vecins = insertelement <8 x half> %vec, half %val.cvt, i32 %n
2633   store <8 x half> %vecins, ptr addrspace(1) %out.gep
2634   ret void
2637 define amdgpu_kernel void @v_insertelement_v16f16_3(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {
2638 ; GFX9-LABEL: v_insertelement_v16f16_3:
2639 ; GFX9:       ; %bb.0:
2640 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2641 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
2642 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2643 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0x5040100
2644 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2645 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v8, s[2:3]
2646 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v8, s[2:3] offset:16
2647 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
2648 ; GFX9-NEXT:    v_perm_b32 v1, s4, v1, v9
2649 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2650 ; GFX9-NEXT:    global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
2651 ; GFX9-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1]
2652 ; GFX9-NEXT:    s_endpgm
2654 ; VI-LABEL: v_insertelement_v16f16_3:
2655 ; VI:       ; %bb.0:
2656 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2657 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
2658 ; VI-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2659 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2660 ; VI-NEXT:    v_mov_b32_e32 v1, s3
2661 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v8
2662 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2663 ; VI-NEXT:    v_add_u32_e32 v4, vcc, 16, v0
2664 ; VI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc
2665 ; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2666 ; VI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
2667 ; VI-NEXT:    v_mov_b32_e32 v9, s1
2668 ; VI-NEXT:    v_add_u32_e32 v8, vcc, s0, v8
2669 ; VI-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc
2670 ; VI-NEXT:    s_lshl_b32 s1, s4, 16
2671 ; VI-NEXT:    v_add_u32_e32 v10, vcc, 16, v8
2672 ; VI-NEXT:    v_mov_b32_e32 v12, s1
2673 ; VI-NEXT:    v_addc_u32_e32 v11, vcc, 0, v9, vcc
2674 ; VI-NEXT:    s_waitcnt vmcnt(1)
2675 ; VI-NEXT:    v_or_b32_sdwa v1, v1, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2676 ; VI-NEXT:    s_waitcnt vmcnt(0)
2677 ; VI-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
2678 ; VI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
2679 ; VI-NEXT:    s_endpgm
2681 ; CI-LABEL: v_insertelement_v16f16_3:
2682 ; CI:       ; %bb.0:
2683 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2684 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
2685 ; CI-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2686 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
2687 ; CI-NEXT:    v_mov_b32_e32 v0, s3
2688 ; CI-NEXT:    v_add_i32_e32 v4, vcc, s2, v8
2689 ; CI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v0, vcc
2690 ; CI-NEXT:    flat_load_dwordx4 v[0:3], v[4:5]
2691 ; CI-NEXT:    v_add_i32_e32 v4, vcc, 16, v4
2692 ; CI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
2693 ; CI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
2694 ; CI-NEXT:    v_mov_b32_e32 v9, s1
2695 ; CI-NEXT:    v_add_i32_e32 v8, vcc, s0, v8
2696 ; CI-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc
2697 ; CI-NEXT:    v_add_i32_e32 v10, vcc, 16, v8
2698 ; CI-NEXT:    s_lshl_b32 s1, s4, 16
2699 ; CI-NEXT:    v_addc_u32_e32 v11, vcc, 0, v9, vcc
2700 ; CI-NEXT:    s_waitcnt vmcnt(1)
2701 ; CI-NEXT:    v_and_b32_e32 v1, 0xffff, v1
2702 ; CI-NEXT:    v_or_b32_e32 v1, s1, v1
2703 ; CI-NEXT:    s_waitcnt vmcnt(0)
2704 ; CI-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
2705 ; CI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
2706 ; CI-NEXT:    s_endpgm
2708 ; GFX11-LABEL: v_insertelement_v16f16_3:
2709 ; GFX11:       ; %bb.0:
2710 ; GFX11-NEXT:    s_clause 0x1
2711 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2712 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
2713 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2714 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2715 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2716 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2717 ; GFX11-NEXT:    s_clause 0x1
2718 ; GFX11-NEXT:    global_load_b128 v[0:3], v8, s[6:7]
2719 ; GFX11-NEXT:    global_load_b128 v[4:7], v8, s[6:7] offset:16
2720 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
2721 ; GFX11-NEXT:    v_perm_b32 v1, s0, v1, 0x5040100
2722 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2723 ; GFX11-NEXT:    s_clause 0x1
2724 ; GFX11-NEXT:    global_store_b128 v8, v[4:7], s[4:5] offset:16
2725 ; GFX11-NEXT:    global_store_b128 v8, v[0:3], s[4:5]
2726 ; GFX11-NEXT:    s_nop 0
2727 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2728 ; GFX11-NEXT:    s_endpgm
2729   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2730   %tid.ext = sext i32 %tid to i64
2731   %in.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %in, i64 %tid.ext
2732   %out.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %out, i64 %tid.ext
2733   %vec = load <16 x half>, ptr addrspace(1) %in.gep
2734   %val.trunc = trunc i32 %val to i16
2735   %val.cvt = bitcast i16 %val.trunc to half
2736   %vecins = insertelement <16 x half> %vec, half %val.cvt, i32 3
2737   store <16 x half> %vecins, ptr addrspace(1) %out.gep
2738   ret void
2741 define amdgpu_kernel void @v_insertelement_v16i16_6(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val) {
2742 ; GFX9-LABEL: v_insertelement_v16i16_6:
2743 ; GFX9:       ; %bb.0:
2744 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2745 ; GFX9-NEXT:    s_load_dword s4, s[6:7], 0x10
2746 ; GFX9-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2747 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2748 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v8, s[2:3]
2749 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v8, s[2:3] offset:16
2750 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
2751 ; GFX9-NEXT:    v_mov_b32_e32 v9, s4
2752 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
2753 ; GFX9-NEXT:    v_bfi_b32 v3, s2, v9, v3
2754 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2755 ; GFX9-NEXT:    global_store_dwordx4 v8, v[4:7], s[0:1] offset:16
2756 ; GFX9-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1]
2757 ; GFX9-NEXT:    s_endpgm
2759 ; VI-LABEL: v_insertelement_v16i16_6:
2760 ; VI:       ; %bb.0:
2761 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2762 ; VI-NEXT:    s_load_dword s4, s[6:7], 0x10
2763 ; VI-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2764 ; VI-NEXT:    v_mov_b32_e32 v12, 0x3020504
2765 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2766 ; VI-NEXT:    v_mov_b32_e32 v1, s3
2767 ; VI-NEXT:    v_add_u32_e32 v0, vcc, s2, v8
2768 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2769 ; VI-NEXT:    v_add_u32_e32 v4, vcc, 16, v0
2770 ; VI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc
2771 ; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2772 ; VI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
2773 ; VI-NEXT:    v_mov_b32_e32 v9, s1
2774 ; VI-NEXT:    v_add_u32_e32 v8, vcc, s0, v8
2775 ; VI-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc
2776 ; VI-NEXT:    v_add_u32_e32 v10, vcc, 16, v8
2777 ; VI-NEXT:    v_addc_u32_e32 v11, vcc, 0, v9, vcc
2778 ; VI-NEXT:    s_waitcnt vmcnt(1)
2779 ; VI-NEXT:    v_perm_b32 v3, s4, v3, v12
2780 ; VI-NEXT:    s_waitcnt vmcnt(0)
2781 ; VI-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
2782 ; VI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
2783 ; VI-NEXT:    s_endpgm
2785 ; CI-LABEL: v_insertelement_v16i16_6:
2786 ; CI:       ; %bb.0:
2787 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2788 ; CI-NEXT:    s_load_dword s4, s[6:7], 0x4
2789 ; CI-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2790 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
2791 ; CI-NEXT:    v_mov_b32_e32 v1, s3
2792 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v8
2793 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
2794 ; CI-NEXT:    v_add_i32_e32 v4, vcc, 16, v0
2795 ; CI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc
2796 ; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2797 ; CI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
2798 ; CI-NEXT:    v_mov_b32_e32 v9, s1
2799 ; CI-NEXT:    v_add_i32_e32 v8, vcc, s0, v8
2800 ; CI-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc
2801 ; CI-NEXT:    v_add_i32_e32 v10, vcc, 16, v8
2802 ; CI-NEXT:    s_mov_b32 s2, 0xffff
2803 ; CI-NEXT:    v_mov_b32_e32 v12, s4
2804 ; CI-NEXT:    v_addc_u32_e32 v11, vcc, 0, v9, vcc
2805 ; CI-NEXT:    s_waitcnt vmcnt(1)
2806 ; CI-NEXT:    v_bfi_b32 v3, s2, v12, v3
2807 ; CI-NEXT:    s_waitcnt vmcnt(0)
2808 ; CI-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
2809 ; CI-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
2810 ; CI-NEXT:    s_endpgm
2812 ; GFX11-LABEL: v_insertelement_v16i16_6:
2813 ; GFX11:       ; %bb.0:
2814 ; GFX11-NEXT:    s_clause 0x1
2815 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2816 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x10
2817 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
2818 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2819 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2820 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2821 ; GFX11-NEXT:    s_clause 0x1
2822 ; GFX11-NEXT:    global_load_b128 v[0:3], v8, s[6:7]
2823 ; GFX11-NEXT:    global_load_b128 v[4:7], v8, s[6:7] offset:16
2824 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
2825 ; GFX11-NEXT:    v_bfi_b32 v3, 0xffff, s0, v3
2826 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2827 ; GFX11-NEXT:    s_clause 0x1
2828 ; GFX11-NEXT:    global_store_b128 v8, v[4:7], s[4:5] offset:16
2829 ; GFX11-NEXT:    global_store_b128 v8, v[0:3], s[4:5]
2830 ; GFX11-NEXT:    s_nop 0
2831 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2832 ; GFX11-NEXT:    s_endpgm
2833   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
2834   %tid.ext = sext i32 %tid to i64
2835   %in.gep = getelementptr inbounds <16 x i16>, ptr addrspace(1) %in, i64 %tid.ext
2836   %out.gep = getelementptr inbounds <16 x i16>, ptr addrspace(1) %out, i64 %tid.ext
2837   %vec = load <16 x i16>, ptr addrspace(1) %in.gep
2838   %val.trunc = trunc i32 %val to i16
2839   %val.cvt = bitcast i16 %val.trunc to i16
2840   %vecins = insertelement <16 x i16> %vec, i16 %val.cvt, i32 6
2841   store <16 x i16> %vecins, ptr addrspace(1) %out.gep
2842   ret void
2845 define amdgpu_kernel void @v_insertelement_v16f16_dynamic(ptr addrspace(1) %out, ptr addrspace(1) %in, i32 %val, i32 %n) {
2846 ; GFX9-LABEL: v_insertelement_v16f16_dynamic:
2847 ; GFX9:       ; %bb.0:
2848 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2849 ; GFX9-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
2850 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 5, v0
2851 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2852 ; GFX9-NEXT:    global_load_dwordx4 v[1:4], v0, s[2:3]
2853 ; GFX9-NEXT:    global_load_dwordx4 v[5:8], v0, s[2:3] offset:16
2854 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 6
2855 ; GFX9-NEXT:    v_mov_b32_e32 v9, s4
2856 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2857 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 7
2858 ; GFX9-NEXT:    s_mov_b32 s2, 0x5040100
2859 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
2860 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v4, v9, vcc
2861 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 16, v4
2862 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2863 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 4
2864 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v4, v9, vcc
2865 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2866 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 5
2867 ; GFX9-NEXT:    v_lshrrev_b32_e32 v11, 16, v3
2868 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v9, vcc
2869 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2870 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 2
2871 ; GFX9-NEXT:    v_perm_b32 v4, v4, v10, s2
2872 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v11, v9, vcc
2873 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2874 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 3
2875 ; GFX9-NEXT:    v_lshrrev_b32_e32 v12, 16, v2
2876 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v9, vcc
2877 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2878 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 0
2879 ; GFX9-NEXT:    v_perm_b32 v3, v10, v3, s2
2880 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v12, v9, vcc
2881 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2882 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 1
2883 ; GFX9-NEXT:    v_lshrrev_b32_e32 v13, 16, v1
2884 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v9, vcc
2885 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2886 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 14
2887 ; GFX9-NEXT:    v_perm_b32 v2, v10, v2, s2
2888 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v13, v9, vcc
2889 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2890 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 15
2891 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2892 ; GFX9-NEXT:    v_lshrrev_b32_e32 v14, 16, v8
2893 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v8, v9, vcc
2894 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2895 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 12
2896 ; GFX9-NEXT:    v_perm_b32 v1, v10, v1, s2
2897 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v14, v9, vcc
2898 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2899 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 13
2900 ; GFX9-NEXT:    v_lshrrev_b32_e32 v15, 16, v7
2901 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v7, v9, vcc
2902 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2903 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 10
2904 ; GFX9-NEXT:    v_perm_b32 v8, v10, v8, s2
2905 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v15, v9, vcc
2906 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2907 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 11
2908 ; GFX9-NEXT:    v_lshrrev_b32_e32 v16, 16, v6
2909 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v6, v9, vcc
2910 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2911 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 8
2912 ; GFX9-NEXT:    v_perm_b32 v7, v10, v7, s2
2913 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v16, v9, vcc
2914 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2915 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 9
2916 ; GFX9-NEXT:    v_lshrrev_b32_e32 v17, 16, v5
2917 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v5, v9, vcc
2918 ; GFX9-NEXT:    s_cselect_b64 vcc, -1, 0
2919 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v17, v9, vcc
2920 ; GFX9-NEXT:    v_perm_b32 v6, v10, v6, s2
2921 ; GFX9-NEXT:    v_perm_b32 v5, v9, v5, s2
2922 ; GFX9-NEXT:    global_store_dwordx4 v0, v[5:8], s[0:1] offset:16
2923 ; GFX9-NEXT:    global_store_dwordx4 v0, v[1:4], s[0:1]
2924 ; GFX9-NEXT:    s_endpgm
2926 ; VI-LABEL: v_insertelement_v16f16_dynamic:
2927 ; VI:       ; %bb.0:
2928 ; VI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
2929 ; VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x10
2930 ; VI-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
2931 ; VI-NEXT:    s_waitcnt lgkmcnt(0)
2932 ; VI-NEXT:    v_mov_b32_e32 v0, s3
2933 ; VI-NEXT:    v_add_u32_e32 v4, vcc, s2, v8
2934 ; VI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v0, vcc
2935 ; VI-NEXT:    v_add_u32_e32 v0, vcc, 16, v4
2936 ; VI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v5, vcc
2937 ; VI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
2938 ; VI-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
2939 ; VI-NEXT:    v_mov_b32_e32 v9, s1
2940 ; VI-NEXT:    v_add_u32_e32 v8, vcc, s0, v8
2941 ; VI-NEXT:    v_addc_u32_e32 v9, vcc, 0, v9, vcc
2942 ; VI-NEXT:    v_add_u32_e32 v10, vcc, 16, v8
2943 ; VI-NEXT:    s_cmp_eq_u32 s5, 14
2944 ; VI-NEXT:    v_addc_u32_e32 v11, vcc, 0, v9, vcc
2945 ; VI-NEXT:    v_mov_b32_e32 v12, s4
2946 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2947 ; VI-NEXT:    s_cmp_eq_u32 s5, 15
2948 ; VI-NEXT:    s_waitcnt vmcnt(1)
2949 ; VI-NEXT:    v_cndmask_b32_e32 v13, v3, v12, vcc
2950 ; VI-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
2951 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2952 ; VI-NEXT:    s_cmp_eq_u32 s5, 12
2953 ; VI-NEXT:    v_cndmask_b32_e32 v3, v3, v12, vcc
2954 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2955 ; VI-NEXT:    s_cmp_eq_u32 s5, 13
2956 ; VI-NEXT:    v_lshrrev_b32_e32 v14, 16, v2
2957 ; VI-NEXT:    v_cndmask_b32_e32 v2, v2, v12, vcc
2958 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2959 ; VI-NEXT:    s_cmp_eq_u32 s5, 10
2960 ; VI-NEXT:    v_lshlrev_b32_e32 v3, 16, v3
2961 ; VI-NEXT:    v_cndmask_b32_e32 v14, v14, v12, vcc
2962 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2963 ; VI-NEXT:    s_cmp_eq_u32 s5, 11
2964 ; VI-NEXT:    v_lshrrev_b32_e32 v15, 16, v1
2965 ; VI-NEXT:    v_or_b32_sdwa v3, v13, v3 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2966 ; VI-NEXT:    v_lshlrev_b32_e32 v13, 16, v14
2967 ; VI-NEXT:    v_cndmask_b32_e32 v1, v1, v12, vcc
2968 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2969 ; VI-NEXT:    s_cmp_eq_u32 s5, 8
2970 ; VI-NEXT:    v_or_b32_sdwa v2, v2, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2971 ; VI-NEXT:    v_cndmask_b32_e32 v13, v15, v12, vcc
2972 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2973 ; VI-NEXT:    s_cmp_eq_u32 s5, 9
2974 ; VI-NEXT:    v_lshrrev_b32_e32 v16, 16, v0
2975 ; VI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
2976 ; VI-NEXT:    v_cndmask_b32_e32 v0, v0, v12, vcc
2977 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2978 ; VI-NEXT:    s_cmp_eq_u32 s5, 6
2979 ; VI-NEXT:    v_or_b32_sdwa v1, v1, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2980 ; VI-NEXT:    v_cndmask_b32_e32 v13, v16, v12, vcc
2981 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2982 ; VI-NEXT:    s_cmp_eq_u32 s5, 7
2983 ; VI-NEXT:    s_waitcnt vmcnt(0)
2984 ; VI-NEXT:    v_lshrrev_b32_e32 v17, 16, v7
2985 ; VI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
2986 ; VI-NEXT:    v_cndmask_b32_e32 v7, v7, v12, vcc
2987 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2988 ; VI-NEXT:    s_cmp_eq_u32 s5, 4
2989 ; VI-NEXT:    v_or_b32_sdwa v0, v0, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2990 ; VI-NEXT:    v_cndmask_b32_e32 v13, v17, v12, vcc
2991 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2992 ; VI-NEXT:    s_cmp_eq_u32 s5, 5
2993 ; VI-NEXT:    v_lshrrev_b32_e32 v18, 16, v6
2994 ; VI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
2995 ; VI-NEXT:    v_cndmask_b32_e32 v6, v6, v12, vcc
2996 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
2997 ; VI-NEXT:    s_cmp_eq_u32 s5, 2
2998 ; VI-NEXT:    v_or_b32_sdwa v7, v7, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
2999 ; VI-NEXT:    v_cndmask_b32_e32 v13, v18, v12, vcc
3000 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
3001 ; VI-NEXT:    s_cmp_eq_u32 s5, 3
3002 ; VI-NEXT:    v_lshrrev_b32_e32 v19, 16, v5
3003 ; VI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
3004 ; VI-NEXT:    v_cndmask_b32_e32 v5, v5, v12, vcc
3005 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
3006 ; VI-NEXT:    s_cmp_eq_u32 s5, 0
3007 ; VI-NEXT:    v_or_b32_sdwa v6, v6, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3008 ; VI-NEXT:    v_cndmask_b32_e32 v13, v19, v12, vcc
3009 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
3010 ; VI-NEXT:    s_cmp_eq_u32 s5, 1
3011 ; VI-NEXT:    v_lshrrev_b32_e32 v20, 16, v4
3012 ; VI-NEXT:    v_cndmask_b32_e32 v4, v4, v12, vcc
3013 ; VI-NEXT:    s_cselect_b64 vcc, -1, 0
3014 ; VI-NEXT:    v_cndmask_b32_e32 v12, v20, v12, vcc
3015 ; VI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
3016 ; VI-NEXT:    v_lshlrev_b32_e32 v12, 16, v12
3017 ; VI-NEXT:    v_or_b32_sdwa v5, v5, v13 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3018 ; VI-NEXT:    v_or_b32_sdwa v4, v4, v12 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_0 src1_sel:DWORD
3019 ; VI-NEXT:    flat_store_dwordx4 v[8:9], v[4:7]
3020 ; VI-NEXT:    flat_store_dwordx4 v[10:11], v[0:3]
3021 ; VI-NEXT:    s_endpgm
3023 ; CI-LABEL: v_insertelement_v16f16_dynamic:
3024 ; CI:       ; %bb.0:
3025 ; CI-NEXT:    s_load_dwordx4 s[0:3], s[6:7], 0x0
3026 ; CI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x4
3027 ; CI-NEXT:    v_lshlrev_b32_e32 v4, 5, v0
3028 ; CI-NEXT:    s_waitcnt lgkmcnt(0)
3029 ; CI-NEXT:    v_mov_b32_e32 v1, s3
3030 ; CI-NEXT:    v_add_i32_e32 v0, vcc, s2, v4
3031 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
3032 ; CI-NEXT:    v_add_i32_e32 v2, vcc, 16, v0
3033 ; CI-NEXT:    v_addc_u32_e32 v3, vcc, 0, v1, vcc
3034 ; CI-NEXT:    flat_load_dwordx4 v[7:10], v[2:3]
3035 ; CI-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
3036 ; CI-NEXT:    v_mov_b32_e32 v5, s1
3037 ; CI-NEXT:    v_add_i32_e32 v4, vcc, s0, v4
3038 ; CI-NEXT:    v_cvt_f32_f16_e32 v6, s4
3039 ; CI-NEXT:    s_cmp_eq_u32 s5, 15
3040 ; CI-NEXT:    v_addc_u32_e32 v5, vcc, 0, v5, vcc
3041 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3042 ; CI-NEXT:    s_cmp_eq_u32 s5, 14
3043 ; CI-NEXT:    s_cselect_b64 s[0:1], -1, 0
3044 ; CI-NEXT:    s_cmp_eq_u32 s5, 13
3045 ; CI-NEXT:    s_cselect_b64 s[2:3], -1, 0
3046 ; CI-NEXT:    s_cmp_eq_u32 s5, 12
3047 ; CI-NEXT:    s_waitcnt vmcnt(1)
3048 ; CI-NEXT:    v_lshrrev_b32_e32 v11, 16, v10
3049 ; CI-NEXT:    v_cvt_f32_f16_e32 v10, v10
3050 ; CI-NEXT:    v_lshrrev_b32_e32 v13, 16, v8
3051 ; CI-NEXT:    v_cvt_f32_f16_e32 v11, v11
3052 ; CI-NEXT:    v_cvt_f32_f16_e32 v13, v13
3053 ; CI-NEXT:    v_cvt_f32_f16_e32 v8, v8
3054 ; CI-NEXT:    v_lshrrev_b32_e32 v14, 16, v7
3055 ; CI-NEXT:    v_cvt_f32_f16_e32 v14, v14
3056 ; CI-NEXT:    v_cndmask_b32_e64 v10, v10, v6, s[0:1]
3057 ; CI-NEXT:    s_cselect_b64 s[0:1], -1, 0
3058 ; CI-NEXT:    s_cmp_eq_u32 s5, 11
3059 ; CI-NEXT:    v_cvt_f32_f16_e32 v7, v7
3060 ; CI-NEXT:    s_waitcnt vmcnt(0)
3061 ; CI-NEXT:    v_lshrrev_b32_e32 v15, 16, v3
3062 ; CI-NEXT:    v_cndmask_b32_e32 v11, v11, v6, vcc
3063 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3064 ; CI-NEXT:    s_cmp_eq_u32 s5, 10
3065 ; CI-NEXT:    v_cvt_f32_f16_e32 v15, v15
3066 ; CI-NEXT:    v_cndmask_b32_e32 v13, v13, v6, vcc
3067 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3068 ; CI-NEXT:    s_cmp_eq_u32 s5, 9
3069 ; CI-NEXT:    v_cvt_f32_f16_e32 v3, v3
3070 ; CI-NEXT:    v_lshrrev_b32_e32 v16, 16, v2
3071 ; CI-NEXT:    v_cvt_f16_f32_e32 v11, v11
3072 ; CI-NEXT:    v_cndmask_b32_e32 v8, v8, v6, vcc
3073 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3074 ; CI-NEXT:    s_cmp_eq_u32 s5, 8
3075 ; CI-NEXT:    v_cvt_f32_f16_e32 v16, v16
3076 ; CI-NEXT:    v_cvt_f16_f32_e32 v10, v10
3077 ; CI-NEXT:    v_cndmask_b32_e32 v14, v14, v6, vcc
3078 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3079 ; CI-NEXT:    s_cmp_eq_u32 s5, 7
3080 ; CI-NEXT:    v_lshrrev_b32_e32 v12, 16, v9
3081 ; CI-NEXT:    v_cvt_f32_f16_e32 v2, v2
3082 ; CI-NEXT:    v_cndmask_b32_e32 v7, v7, v6, vcc
3083 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3084 ; CI-NEXT:    s_cmp_eq_u32 s5, 6
3085 ; CI-NEXT:    v_cvt_f32_f16_e32 v12, v12
3086 ; CI-NEXT:    v_cndmask_b32_e32 v15, v15, v6, vcc
3087 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3088 ; CI-NEXT:    s_cmp_eq_u32 s5, 5
3089 ; CI-NEXT:    v_cvt_f32_f16_e32 v9, v9
3090 ; CI-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
3091 ; CI-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc
3092 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3093 ; CI-NEXT:    s_cmp_eq_u32 s5, 4
3094 ; CI-NEXT:    v_or_b32_e32 v10, v10, v11
3095 ; CI-NEXT:    v_cndmask_b32_e32 v11, v16, v6, vcc
3096 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3097 ; CI-NEXT:    v_cvt_f16_f32_e32 v11, v11
3098 ; CI-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
3099 ; CI-NEXT:    v_cndmask_b32_e64 v12, v12, v6, s[2:3]
3100 ; CI-NEXT:    v_cvt_f16_f32_e32 v2, v2
3101 ; CI-NEXT:    v_cndmask_b32_e64 v9, v9, v6, s[0:1]
3102 ; CI-NEXT:    v_cvt_f16_f32_e32 v12, v12
3103 ; CI-NEXT:    v_lshrrev_b32_e32 v17, 16, v1
3104 ; CI-NEXT:    v_cvt_f16_f32_e32 v9, v9
3105 ; CI-NEXT:    v_cvt_f16_f32_e32 v14, v14
3106 ; CI-NEXT:    v_cvt_f32_f16_e32 v17, v17
3107 ; CI-NEXT:    v_cvt_f16_f32_e32 v7, v7
3108 ; CI-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
3109 ; CI-NEXT:    v_cvt_f32_f16_e32 v1, v1
3110 ; CI-NEXT:    v_or_b32_e32 v2, v2, v11
3111 ; CI-NEXT:    v_lshrrev_b32_e32 v11, 16, v0
3112 ; CI-NEXT:    v_lshlrev_b32_e32 v12, 16, v12
3113 ; CI-NEXT:    s_cmp_eq_u32 s5, 3
3114 ; CI-NEXT:    v_cvt_f32_f16_e32 v11, v11
3115 ; CI-NEXT:    v_or_b32_e32 v9, v9, v12
3116 ; CI-NEXT:    v_lshlrev_b32_e32 v12, 16, v14
3117 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3118 ; CI-NEXT:    s_cmp_eq_u32 s5, 2
3119 ; CI-NEXT:    v_cvt_f32_f16_e32 v0, v0
3120 ; CI-NEXT:    v_or_b32_e32 v7, v7, v12
3121 ; CI-NEXT:    v_cndmask_b32_e32 v12, v17, v6, vcc
3122 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3123 ; CI-NEXT:    s_cmp_eq_u32 s5, 1
3124 ; CI-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
3125 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3126 ; CI-NEXT:    s_cmp_eq_u32 s5, 0
3127 ; CI-NEXT:    v_cvt_f16_f32_e32 v13, v13
3128 ; CI-NEXT:    v_cvt_f16_f32_e32 v12, v12
3129 ; CI-NEXT:    v_cndmask_b32_e32 v11, v11, v6, vcc
3130 ; CI-NEXT:    s_cselect_b64 vcc, -1, 0
3131 ; CI-NEXT:    v_cvt_f16_f32_e32 v8, v8
3132 ; CI-NEXT:    v_cvt_f16_f32_e32 v15, v15
3133 ; CI-NEXT:    v_cvt_f16_f32_e32 v1, v1
3134 ; CI-NEXT:    v_cvt_f16_f32_e32 v11, v11
3135 ; CI-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc
3136 ; CI-NEXT:    v_cvt_f16_f32_e32 v3, v3
3137 ; CI-NEXT:    v_cvt_f16_f32_e32 v0, v0
3138 ; CI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
3139 ; CI-NEXT:    v_lshlrev_b32_e32 v6, 16, v12
3140 ; CI-NEXT:    v_or_b32_e32 v8, v8, v13
3141 ; CI-NEXT:    v_lshlrev_b32_e32 v13, 16, v15
3142 ; CI-NEXT:    v_or_b32_e32 v1, v1, v6
3143 ; CI-NEXT:    v_lshlrev_b32_e32 v6, 16, v11
3144 ; CI-NEXT:    v_or_b32_e32 v3, v3, v13
3145 ; CI-NEXT:    v_or_b32_e32 v0, v0, v6
3146 ; CI-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3147 ; CI-NEXT:    s_nop 0
3148 ; CI-NEXT:    v_add_i32_e32 v0, vcc, 16, v4
3149 ; CI-NEXT:    v_addc_u32_e32 v1, vcc, 0, v5, vcc
3150 ; CI-NEXT:    flat_store_dwordx4 v[0:1], v[7:10]
3151 ; CI-NEXT:    s_endpgm
3153 ; GFX11-LABEL: v_insertelement_v16f16_dynamic:
3154 ; GFX11:       ; %bb.0:
3155 ; GFX11-NEXT:    s_clause 0x1
3156 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
3157 ; GFX11-NEXT:    s_load_b64 s[0:1], s[2:3], 0x10
3158 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3159 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3160 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, 5, v0
3161 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3162 ; GFX11-NEXT:    s_clause 0x1
3163 ; GFX11-NEXT:    global_load_b128 v[0:3], v8, s[6:7]
3164 ; GFX11-NEXT:    global_load_b128 v[4:7], v8, s[6:7] offset:16
3165 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 6
3166 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3167 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 7
3168 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
3169 ; GFX11-NEXT:    v_cndmask_b32_e64 v9, v3, s0, s2
3170 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3171 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 4
3172 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
3173 ; GFX11-NEXT:    s_cselect_b32 s3, -1, 0
3174 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 5
3175 ; GFX11-NEXT:    v_lshrrev_b32_e32 v10, 16, v2
3176 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, s0, s3
3177 ; GFX11-NEXT:    s_cselect_b32 s3, -1, 0
3178 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 2
3179 ; GFX11-NEXT:    v_lshrrev_b32_e32 v11, 16, v1
3180 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, s0, s2
3181 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3182 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 3
3183 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s0, s2
3184 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3185 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 0
3186 ; GFX11-NEXT:    v_lshrrev_b32_e32 v12, 16, v0
3187 ; GFX11-NEXT:    v_cndmask_b32_e64 v11, v11, s0, s2
3188 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3189 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 1
3190 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, s0, s2
3191 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3192 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 14
3193 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3194 ; GFX11-NEXT:    v_lshrrev_b32_e32 v13, 16, v7
3195 ; GFX11-NEXT:    v_cndmask_b32_e64 v10, v10, s0, s3
3196 ; GFX11-NEXT:    v_perm_b32 v3, v3, v9, 0x5040100
3197 ; GFX11-NEXT:    v_cndmask_b32_e64 v9, v12, s0, s2
3198 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3199 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 15
3200 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v7, s0, s2
3201 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3202 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 12
3203 ; GFX11-NEXT:    v_lshrrev_b32_e32 v14, 16, v6
3204 ; GFX11-NEXT:    v_perm_b32 v2, v10, v2, 0x5040100
3205 ; GFX11-NEXT:    v_cndmask_b32_e64 v10, v13, s0, s2
3206 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3207 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 13
3208 ; GFX11-NEXT:    v_cndmask_b32_e64 v6, v6, s0, s2
3209 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3210 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 10
3211 ; GFX11-NEXT:    v_lshrrev_b32_e32 v15, 16, v5
3212 ; GFX11-NEXT:    v_cndmask_b32_e64 v12, v14, s0, s2
3213 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3214 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 11
3215 ; GFX11-NEXT:    v_cndmask_b32_e64 v5, v5, s0, s2
3216 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3217 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 8
3218 ; GFX11-NEXT:    v_lshrrev_b32_e32 v16, 16, v4
3219 ; GFX11-NEXT:    v_cndmask_b32_e64 v13, v15, s0, s2
3220 ; GFX11-NEXT:    s_cselect_b32 s2, -1, 0
3221 ; GFX11-NEXT:    s_cmp_eq_u32 s1, 9
3222 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, v4, s0, s2
3223 ; GFX11-NEXT:    s_cselect_b32 s1, -1, 0
3224 ; GFX11-NEXT:    v_perm_b32 v7, v10, v7, 0x5040100
3225 ; GFX11-NEXT:    v_cndmask_b32_e64 v14, v16, s0, s1
3226 ; GFX11-NEXT:    v_perm_b32 v6, v12, v6, 0x5040100
3227 ; GFX11-NEXT:    v_perm_b32 v5, v13, v5, 0x5040100
3228 ; GFX11-NEXT:    v_perm_b32 v1, v11, v1, 0x5040100
3229 ; GFX11-NEXT:    v_perm_b32 v0, v9, v0, 0x5040100
3230 ; GFX11-NEXT:    v_perm_b32 v4, v14, v4, 0x5040100
3231 ; GFX11-NEXT:    s_clause 0x1
3232 ; GFX11-NEXT:    global_store_b128 v8, v[4:7], s[4:5] offset:16
3233 ; GFX11-NEXT:    global_store_b128 v8, v[0:3], s[4:5]
3234 ; GFX11-NEXT:    s_nop 0
3235 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3236 ; GFX11-NEXT:    s_endpgm
3237   %tid = call i32 @llvm.amdgcn.workitem.id.x() #1
3238   %tid.ext = sext i32 %tid to i64
3239   %in.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %in, i64 %tid.ext
3240   %out.gep = getelementptr inbounds <16 x half>, ptr addrspace(1) %out, i64 %tid.ext
3241   %vec = load <16 x half>, ptr addrspace(1) %in.gep
3242   %val.trunc = trunc i32 %val to i16
3243   %val.cvt = bitcast i16 %val.trunc to half
3244   %vecins = insertelement <16 x half> %vec, half %val.cvt, i32 %n
3245   store <16 x half> %vecins, ptr addrspace(1) %out.gep
3246   ret void
3250 declare i32 @llvm.amdgcn.workitem.id.x() #1
3252 attributes #0 = { nounwind }
3253 attributes #1 = { nounwind readnone }