[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / insertelement.i16.ll
blob64c3cd4e8c067f51907599509d892d87df04062e
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX9 %s
3 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -verify-machineinstrs < %s | FileCheck --check-prefix=GFX8 %s
4 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=hawaii -verify-machineinstrs < %s | FileCheck --check-prefix=GFX7 %s
5 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX10 %s
6 ; RUN: llc -global-isel -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck --check-prefix=GFX11 %s
8 define amdgpu_ps void @insertelement_s_v2i16_s_s(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 inreg %idx) {
9 ; GFX9-LABEL: insertelement_s_v2i16_s_s:
10 ; GFX9:       ; %bb.0:
11 ; GFX9-NEXT:    s_load_dword s0, s[2:3], 0x0
12 ; GFX9-NEXT:    s_and_b32 s1, s5, 1
13 ; GFX9-NEXT:    s_lshl_b32 s1, s1, 4
14 ; GFX9-NEXT:    s_and_b32 s2, s4, 0xffff
15 ; GFX9-NEXT:    s_lshl_b32 s2, s2, s1
16 ; GFX9-NEXT:    s_lshl_b32 s1, 0xffff, s1
17 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
18 ; GFX9-NEXT:    s_andn2_b32 s0, s0, s1
19 ; GFX9-NEXT:    s_or_b32 s0, s0, s2
20 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
21 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
22 ; GFX9-NEXT:    v_mov_b32_e32 v2, s0
23 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
24 ; GFX9-NEXT:    s_endpgm
26 ; GFX8-LABEL: insertelement_s_v2i16_s_s:
27 ; GFX8:       ; %bb.0:
28 ; GFX8-NEXT:    s_load_dword s0, s[2:3], 0x0
29 ; GFX8-NEXT:    s_and_b32 s1, s5, 1
30 ; GFX8-NEXT:    s_lshl_b32 s1, s1, 4
31 ; GFX8-NEXT:    s_and_b32 s2, s4, 0xffff
32 ; GFX8-NEXT:    s_lshl_b32 s2, s2, s1
33 ; GFX8-NEXT:    s_lshl_b32 s1, 0xffff, s1
34 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
35 ; GFX8-NEXT:    s_andn2_b32 s0, s0, s1
36 ; GFX8-NEXT:    s_or_b32 s0, s0, s2
37 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
38 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
39 ; GFX8-NEXT:    v_mov_b32_e32 v2, s0
40 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
41 ; GFX8-NEXT:    s_endpgm
43 ; GFX7-LABEL: insertelement_s_v2i16_s_s:
44 ; GFX7:       ; %bb.0:
45 ; GFX7-NEXT:    s_load_dword s0, s[2:3], 0x0
46 ; GFX7-NEXT:    s_and_b32 s1, s5, 1
47 ; GFX7-NEXT:    s_lshl_b32 s1, s1, 4
48 ; GFX7-NEXT:    s_and_b32 s2, s4, 0xffff
49 ; GFX7-NEXT:    s_lshl_b32 s2, s2, s1
50 ; GFX7-NEXT:    s_lshl_b32 s1, 0xffff, s1
51 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
52 ; GFX7-NEXT:    s_andn2_b32 s0, s0, s1
53 ; GFX7-NEXT:    s_or_b32 s2, s0, s2
54 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
55 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
56 ; GFX7-NEXT:    s_mov_b32 s2, -1
57 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
58 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
59 ; GFX7-NEXT:    s_endpgm
61 ; GFX10-LABEL: insertelement_s_v2i16_s_s:
62 ; GFX10:       ; %bb.0:
63 ; GFX10-NEXT:    s_load_dword s0, s[2:3], 0x0
64 ; GFX10-NEXT:    s_and_b32 s1, s5, 1
65 ; GFX10-NEXT:    s_and_b32 s2, s4, 0xffff
66 ; GFX10-NEXT:    s_lshl_b32 s1, s1, 4
67 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
68 ; GFX10-NEXT:    s_lshl_b32 s3, 0xffff, s1
69 ; GFX10-NEXT:    s_lshl_b32 s1, s2, s1
70 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
71 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
72 ; GFX10-NEXT:    s_andn2_b32 s0, s0, s3
73 ; GFX10-NEXT:    s_or_b32 s0, s0, s1
74 ; GFX10-NEXT:    v_mov_b32_e32 v2, s0
75 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
76 ; GFX10-NEXT:    s_endpgm
78 ; GFX11-LABEL: insertelement_s_v2i16_s_s:
79 ; GFX11:       ; %bb.0:
80 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x0
81 ; GFX11-NEXT:    s_and_b32 s1, s5, 1
82 ; GFX11-NEXT:    s_and_b32 s2, s4, 0xffff
83 ; GFX11-NEXT:    s_lshl_b32 s1, s1, 4
84 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
85 ; GFX11-NEXT:    s_lshl_b32 s3, 0xffff, s1
86 ; GFX11-NEXT:    s_lshl_b32 s1, s2, s1
87 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
88 ; GFX11-NEXT:    s_and_not1_b32 s0, s0, s3
89 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
90 ; GFX11-NEXT:    s_or_b32 s0, s0, s1
91 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v2, s0
92 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
93 ; GFX11-NEXT:    s_nop 0
94 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
95 ; GFX11-NEXT:    s_endpgm
96   %vec = load <2 x i16>, ptr addrspace(4) %ptr
97   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
98   store <2 x i16> %insert, ptr addrspace(1) null
99   ret void
102 define amdgpu_ps void @insertelement_v_v2i16_s_s(ptr addrspace(1) %ptr, i16 inreg %val, i32 inreg %idx) {
103 ; GFX9-LABEL: insertelement_v_v2i16_s_s:
104 ; GFX9:       ; %bb.0:
105 ; GFX9-NEXT:    global_load_dword v2, v[0:1], off
106 ; GFX9-NEXT:    s_and_b32 s0, s3, 1
107 ; GFX9-NEXT:    s_lshl_b32 s0, s0, 4
108 ; GFX9-NEXT:    s_and_b32 s1, s2, 0xffff
109 ; GFX9-NEXT:    s_lshl_b32 s1, s1, s0
110 ; GFX9-NEXT:    s_lshl_b32 s0, 0xffff, s0
111 ; GFX9-NEXT:    s_not_b32 s0, s0
112 ; GFX9-NEXT:    v_mov_b32_e32 v3, s1
113 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
114 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
115 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
116 ; GFX9-NEXT:    v_and_or_b32 v2, v2, s0, v3
117 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
118 ; GFX9-NEXT:    s_endpgm
120 ; GFX8-LABEL: insertelement_v_v2i16_s_s:
121 ; GFX8:       ; %bb.0:
122 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
123 ; GFX8-NEXT:    s_and_b32 s0, s3, 1
124 ; GFX8-NEXT:    s_and_b32 s1, s2, 0xffff
125 ; GFX8-NEXT:    s_lshl_b32 s0, s0, 4
126 ; GFX8-NEXT:    s_lshl_b32 s1, s1, s0
127 ; GFX8-NEXT:    s_lshl_b32 s0, 0xffff, s0
128 ; GFX8-NEXT:    s_not_b32 s0, s0
129 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
130 ; GFX8-NEXT:    v_and_b32_e32 v2, s0, v0
131 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
132 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
133 ; GFX8-NEXT:    v_or_b32_e32 v2, s1, v2
134 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
135 ; GFX8-NEXT:    s_endpgm
137 ; GFX7-LABEL: insertelement_v_v2i16_s_s:
138 ; GFX7:       ; %bb.0:
139 ; GFX7-NEXT:    s_mov_b32 s6, 0
140 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
141 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
142 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
143 ; GFX7-NEXT:    s_and_b32 s0, s3, 1
144 ; GFX7-NEXT:    s_and_b32 s1, s2, 0xffff
145 ; GFX7-NEXT:    s_lshl_b32 s0, s0, 4
146 ; GFX7-NEXT:    s_lshl_b32 s1, s1, s0
147 ; GFX7-NEXT:    s_lshl_b32 s0, 0xffff, s0
148 ; GFX7-NEXT:    s_not_b32 s0, s0
149 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
150 ; GFX7-NEXT:    s_mov_b32 s6, -1
151 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
152 ; GFX7-NEXT:    v_and_b32_e32 v0, s0, v0
153 ; GFX7-NEXT:    v_or_b32_e32 v0, s1, v0
154 ; GFX7-NEXT:    buffer_store_dword v0, off, s[4:7], 0
155 ; GFX7-NEXT:    s_endpgm
157 ; GFX10-LABEL: insertelement_v_v2i16_s_s:
158 ; GFX10:       ; %bb.0:
159 ; GFX10-NEXT:    global_load_dword v2, v[0:1], off
160 ; GFX10-NEXT:    s_and_b32 s0, s3, 1
161 ; GFX10-NEXT:    s_and_b32 s1, s2, 0xffff
162 ; GFX10-NEXT:    s_lshl_b32 s0, s0, 4
163 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
164 ; GFX10-NEXT:    s_lshl_b32 s2, 0xffff, s0
165 ; GFX10-NEXT:    s_lshl_b32 s0, s1, s0
166 ; GFX10-NEXT:    s_not_b32 s1, s2
167 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
168 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
169 ; GFX10-NEXT:    v_and_or_b32 v2, v2, s1, s0
170 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
171 ; GFX10-NEXT:    s_endpgm
173 ; GFX11-LABEL: insertelement_v_v2i16_s_s:
174 ; GFX11:       ; %bb.0:
175 ; GFX11-NEXT:    global_load_b32 v2, v[0:1], off
176 ; GFX11-NEXT:    s_and_b32 s0, s3, 1
177 ; GFX11-NEXT:    s_and_b32 s1, s2, 0xffff
178 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
179 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
180 ; GFX11-NEXT:    s_lshl_b32 s2, 0xffff, s0
181 ; GFX11-NEXT:    s_lshl_b32 s0, s1, s0
182 ; GFX11-NEXT:    s_not_b32 s1, s2
183 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
184 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
185 ; GFX11-NEXT:    v_and_or_b32 v2, v2, s1, s0
186 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
187 ; GFX11-NEXT:    s_nop 0
188 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
189 ; GFX11-NEXT:    s_endpgm
190   %vec = load <2 x i16>, ptr addrspace(1 ) %ptr
191   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
192   store <2 x i16> %insert, ptr addrspace(1) null
193   ret void
196 define amdgpu_ps void @insertelement_s_v2i16_v_s(ptr addrspace(4) inreg %ptr, i16 %val, i32 inreg %idx) {
197 ; GFX9-LABEL: insertelement_s_v2i16_v_s:
198 ; GFX9:       ; %bb.0:
199 ; GFX9-NEXT:    s_load_dword s0, s[2:3], 0x0
200 ; GFX9-NEXT:    s_and_b32 s1, s4, 1
201 ; GFX9-NEXT:    s_lshl_b32 s1, s1, 4
202 ; GFX9-NEXT:    s_lshl_b32 s2, 0xffff, s1
203 ; GFX9-NEXT:    v_and_b32_e32 v2, 0xffff, v0
204 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
205 ; GFX9-NEXT:    s_andn2_b32 s0, s0, s2
206 ; GFX9-NEXT:    v_mov_b32_e32 v3, s0
207 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
208 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
209 ; GFX9-NEXT:    v_lshl_or_b32 v2, v2, s1, v3
210 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
211 ; GFX9-NEXT:    s_endpgm
213 ; GFX8-LABEL: insertelement_s_v2i16_v_s:
214 ; GFX8:       ; %bb.0:
215 ; GFX8-NEXT:    s_load_dword s0, s[2:3], 0x0
216 ; GFX8-NEXT:    s_and_b32 s1, s4, 1
217 ; GFX8-NEXT:    s_lshl_b32 s1, s1, 4
218 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
219 ; GFX8-NEXT:    s_lshl_b32 s1, 0xffff, s1
220 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
221 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
222 ; GFX8-NEXT:    s_andn2_b32 s0, s0, s1
223 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
224 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
225 ; GFX8-NEXT:    v_or_b32_e32 v2, s0, v2
226 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
227 ; GFX8-NEXT:    s_endpgm
229 ; GFX7-LABEL: insertelement_s_v2i16_v_s:
230 ; GFX7:       ; %bb.0:
231 ; GFX7-NEXT:    s_load_dword s0, s[2:3], 0x0
232 ; GFX7-NEXT:    s_and_b32 s1, s4, 1
233 ; GFX7-NEXT:    s_lshl_b32 s1, s1, 4
234 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
235 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s1, v0
236 ; GFX7-NEXT:    s_lshl_b32 s1, 0xffff, s1
237 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
238 ; GFX7-NEXT:    s_andn2_b32 s0, s0, s1
239 ; GFX7-NEXT:    v_or_b32_e32 v0, s0, v0
240 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
241 ; GFX7-NEXT:    s_mov_b32 s2, -1
242 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
243 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
244 ; GFX7-NEXT:    s_endpgm
246 ; GFX10-LABEL: insertelement_s_v2i16_v_s:
247 ; GFX10:       ; %bb.0:
248 ; GFX10-NEXT:    s_load_dword s0, s[2:3], 0x0
249 ; GFX10-NEXT:    s_and_b32 s1, s4, 1
250 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v0
251 ; GFX10-NEXT:    s_lshl_b32 s1, s1, 4
252 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
253 ; GFX10-NEXT:    s_lshl_b32 s2, 0xffff, s1
254 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
255 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
256 ; GFX10-NEXT:    s_andn2_b32 s0, s0, s2
257 ; GFX10-NEXT:    v_lshl_or_b32 v2, v2, s1, s0
258 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
259 ; GFX10-NEXT:    s_endpgm
261 ; GFX11-LABEL: insertelement_s_v2i16_v_s:
262 ; GFX11:       ; %bb.0:
263 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x0
264 ; GFX11-NEXT:    s_and_b32 s1, s4, 1
265 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v0
266 ; GFX11-NEXT:    s_lshl_b32 s1, s1, 4
267 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
268 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
269 ; GFX11-NEXT:    s_lshl_b32 s2, 0xffff, s1
270 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
271 ; GFX11-NEXT:    s_and_not1_b32 s0, s0, s2
272 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
273 ; GFX11-NEXT:    v_lshl_or_b32 v2, v2, s1, s0
274 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
275 ; GFX11-NEXT:    s_nop 0
276 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
277 ; GFX11-NEXT:    s_endpgm
278   %vec = load <2 x i16>, ptr addrspace(4) %ptr
279   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
280   store <2 x i16> %insert, ptr addrspace(1) null
281   ret void
284 define amdgpu_ps void @insertelement_s_v2i16_s_v(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 %idx) {
285 ; GFX9-LABEL: insertelement_s_v2i16_s_v:
286 ; GFX9:       ; %bb.0:
287 ; GFX9-NEXT:    s_load_dword s0, s[2:3], 0x0
288 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
289 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
290 ; GFX9-NEXT:    s_mov_b32 s1, 0xffff
291 ; GFX9-NEXT:    s_and_b32 s2, s4, 0xffff
292 ; GFX9-NEXT:    v_lshlrev_b32_e64 v2, v0, s2
293 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, v0, s1
294 ; GFX9-NEXT:    v_not_b32_e32 v3, v0
295 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
296 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
297 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
298 ; GFX9-NEXT:    v_and_or_b32 v2, s0, v3, v2
299 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
300 ; GFX9-NEXT:    s_endpgm
302 ; GFX8-LABEL: insertelement_s_v2i16_s_v:
303 ; GFX8:       ; %bb.0:
304 ; GFX8-NEXT:    s_load_dword s0, s[2:3], 0x0
305 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
306 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
307 ; GFX8-NEXT:    s_mov_b32 s1, 0xffff
308 ; GFX8-NEXT:    s_and_b32 s2, s4, 0xffff
309 ; GFX8-NEXT:    v_lshlrev_b32_e64 v2, v0, s2
310 ; GFX8-NEXT:    v_lshlrev_b32_e64 v0, v0, s1
311 ; GFX8-NEXT:    v_not_b32_e32 v0, v0
312 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
313 ; GFX8-NEXT:    v_and_b32_e32 v3, s0, v0
314 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
315 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
316 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
317 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
318 ; GFX8-NEXT:    s_endpgm
320 ; GFX7-LABEL: insertelement_s_v2i16_s_v:
321 ; GFX7:       ; %bb.0:
322 ; GFX7-NEXT:    s_load_dword s0, s[2:3], 0x0
323 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
324 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
325 ; GFX7-NEXT:    s_and_b32 s1, s4, 0xffff
326 ; GFX7-NEXT:    v_lshl_b32_e32 v1, s1, v0
327 ; GFX7-NEXT:    v_lshl_b32_e32 v0, 0xffff, v0
328 ; GFX7-NEXT:    v_not_b32_e32 v0, v0
329 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
330 ; GFX7-NEXT:    v_and_b32_e32 v0, s0, v0
331 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
332 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
333 ; GFX7-NEXT:    s_mov_b32 s2, -1
334 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
335 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
336 ; GFX7-NEXT:    s_endpgm
338 ; GFX10-LABEL: insertelement_s_v2i16_s_v:
339 ; GFX10:       ; %bb.0:
340 ; GFX10-NEXT:    s_load_dword s0, s[2:3], 0x0
341 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
342 ; GFX10-NEXT:    s_and_b32 s1, s4, 0xffff
343 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
344 ; GFX10-NEXT:    v_lshlrev_b32_e64 v1, v0, 0xffff
345 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v0, s1
346 ; GFX10-NEXT:    v_not_b32_e32 v3, v1
347 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
348 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
349 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
350 ; GFX10-NEXT:    v_and_or_b32 v2, s0, v3, v2
351 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
352 ; GFX10-NEXT:    s_endpgm
354 ; GFX11-LABEL: insertelement_s_v2i16_s_v:
355 ; GFX11:       ; %bb.0:
356 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x0
357 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
358 ; GFX11-NEXT:    s_and_b32 s1, s4, 0xffff
359 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
360 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
361 ; GFX11-NEXT:    v_lshlrev_b32_e64 v1, v0, 0xffff
362 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v0, s1
363 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)
364 ; GFX11-NEXT:    v_not_b32_e32 v3, v1
365 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
366 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
367 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
368 ; GFX11-NEXT:    v_and_or_b32 v2, s0, v3, v2
369 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
370 ; GFX11-NEXT:    s_nop 0
371 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
372 ; GFX11-NEXT:    s_endpgm
373   %vec = load <2 x i16>, ptr addrspace(4) %ptr
374   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
375   store <2 x i16> %insert, ptr addrspace(1) null
376   ret void
379 define amdgpu_ps void @insertelement_s_v2i16_v_v(ptr addrspace(4) inreg %ptr, i16 %val, i32 %idx) {
380 ; GFX9-LABEL: insertelement_s_v2i16_v_v:
381 ; GFX9:       ; %bb.0:
382 ; GFX9-NEXT:    s_load_dword s0, s[2:3], 0x0
383 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
384 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
385 ; GFX9-NEXT:    s_mov_b32 s1, 0xffff
386 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
387 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, v1, s1
388 ; GFX9-NEXT:    v_not_b32_e32 v3, v0
389 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
390 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
391 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
392 ; GFX9-NEXT:    v_and_or_b32 v2, s0, v3, v2
393 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
394 ; GFX9-NEXT:    s_endpgm
396 ; GFX8-LABEL: insertelement_s_v2i16_v_v:
397 ; GFX8:       ; %bb.0:
398 ; GFX8-NEXT:    s_load_dword s0, s[2:3], 0x0
399 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v1
400 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
401 ; GFX8-NEXT:    s_mov_b32 s1, 0xffff
402 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
403 ; GFX8-NEXT:    v_lshlrev_b32_e64 v0, v1, s1
404 ; GFX8-NEXT:    v_not_b32_e32 v0, v0
405 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
406 ; GFX8-NEXT:    v_and_b32_e32 v3, s0, v0
407 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
408 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
409 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
410 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
411 ; GFX8-NEXT:    s_endpgm
413 ; GFX7-LABEL: insertelement_s_v2i16_v_v:
414 ; GFX7:       ; %bb.0:
415 ; GFX7-NEXT:    s_load_dword s0, s[2:3], 0x0
416 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
417 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
418 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
419 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, v1, v0
420 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
421 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
422 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
423 ; GFX7-NEXT:    v_and_b32_e32 v1, s0, v1
424 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
425 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
426 ; GFX7-NEXT:    s_mov_b32 s2, -1
427 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
428 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
429 ; GFX7-NEXT:    s_endpgm
431 ; GFX10-LABEL: insertelement_s_v2i16_v_v:
432 ; GFX10:       ; %bb.0:
433 ; GFX10-NEXT:    s_load_dword s0, s[2:3], 0x0
434 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v1
435 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
436 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v1, 0xffff
437 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v3, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
438 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
439 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
440 ; GFX10-NEXT:    v_not_b32_e32 v2, v2
441 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
442 ; GFX10-NEXT:    v_and_or_b32 v2, s0, v2, v3
443 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
444 ; GFX10-NEXT:    s_endpgm
446 ; GFX11-LABEL: insertelement_s_v2i16_v_v:
447 ; GFX11:       ; %bb.0:
448 ; GFX11-NEXT:    s_load_b32 s0, s[2:3], 0x0
449 ; GFX11-NEXT:    v_and_b32_e32 v1, 1, v1
450 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
451 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
452 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
453 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v1, 0xffff
454 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
455 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_lshlrev_b32 v3, v1, v0
456 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
457 ; GFX11-NEXT:    v_not_b32_e32 v2, v2
458 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
459 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
460 ; GFX11-NEXT:    v_and_or_b32 v2, s0, v2, v3
461 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
462 ; GFX11-NEXT:    s_nop 0
463 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
464 ; GFX11-NEXT:    s_endpgm
465   %vec = load <2 x i16>, ptr addrspace(4) %ptr
466   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
467   store <2 x i16> %insert, ptr addrspace(1) null
468   ret void
471 define amdgpu_ps void @insertelement_v_v2i16_s_v(ptr addrspace(1) %ptr, i16 inreg %val, i32 %idx) {
472 ; GFX9-LABEL: insertelement_v_v2i16_s_v:
473 ; GFX9:       ; %bb.0:
474 ; GFX9-NEXT:    global_load_dword v3, v[0:1], off
475 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v2
476 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
477 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
478 ; GFX9-NEXT:    s_and_b32 s1, s2, 0xffff
479 ; GFX9-NEXT:    v_lshlrev_b32_e64 v2, v0, s1
480 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, v0, s0
481 ; GFX9-NEXT:    v_not_b32_e32 v4, v0
482 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
483 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
484 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
485 ; GFX9-NEXT:    v_and_or_b32 v2, v3, v4, v2
486 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
487 ; GFX9-NEXT:    s_endpgm
489 ; GFX8-LABEL: insertelement_v_v2i16_s_v:
490 ; GFX8:       ; %bb.0:
491 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
492 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v2
493 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
494 ; GFX8-NEXT:    s_and_b32 s1, s2, 0xffff
495 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
496 ; GFX8-NEXT:    v_lshlrev_b32_e64 v2, v1, s1
497 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
498 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
499 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
500 ; GFX8-NEXT:    v_and_b32_e32 v3, v0, v1
501 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
502 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
503 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
504 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
505 ; GFX8-NEXT:    s_endpgm
507 ; GFX7-LABEL: insertelement_v_v2i16_s_v:
508 ; GFX7:       ; %bb.0:
509 ; GFX7-NEXT:    s_mov_b32 s6, 0
510 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
511 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
512 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
513 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v2
514 ; GFX7-NEXT:    s_and_b32 s0, s2, 0xffff
515 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
516 ; GFX7-NEXT:    v_lshl_b32_e32 v2, s0, v1
517 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
518 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
519 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
520 ; GFX7-NEXT:    s_mov_b32 s6, -1
521 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
522 ; GFX7-NEXT:    v_and_b32_e32 v0, v0, v1
523 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v2
524 ; GFX7-NEXT:    buffer_store_dword v0, off, s[4:7], 0
525 ; GFX7-NEXT:    s_endpgm
527 ; GFX10-LABEL: insertelement_v_v2i16_s_v:
528 ; GFX10:       ; %bb.0:
529 ; GFX10-NEXT:    global_load_dword v3, v[0:1], off
530 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v2
531 ; GFX10-NEXT:    s_and_b32 s0, s2, 0xffff
532 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
533 ; GFX10-NEXT:    v_lshlrev_b32_e64 v1, v0, 0xffff
534 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v0, s0
535 ; GFX10-NEXT:    v_not_b32_e32 v4, v1
536 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
537 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
538 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
539 ; GFX10-NEXT:    v_and_or_b32 v2, v3, v4, v2
540 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
541 ; GFX10-NEXT:    s_endpgm
543 ; GFX11-LABEL: insertelement_v_v2i16_s_v:
544 ; GFX11:       ; %bb.0:
545 ; GFX11-NEXT:    global_load_b32 v3, v[0:1], off
546 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v2
547 ; GFX11-NEXT:    s_and_b32 s0, s2, 0xffff
548 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
549 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
550 ; GFX11-NEXT:    v_lshlrev_b32_e64 v1, v0, 0xffff
551 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v0, s0
552 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)
553 ; GFX11-NEXT:    v_not_b32_e32 v4, v1
554 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
555 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
556 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
557 ; GFX11-NEXT:    v_and_or_b32 v2, v3, v4, v2
558 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
559 ; GFX11-NEXT:    s_nop 0
560 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
561 ; GFX11-NEXT:    s_endpgm
562   %vec = load <2 x i16>, ptr addrspace(1) %ptr
563   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
564   store <2 x i16> %insert, ptr addrspace(1) null
565   ret void
568 define amdgpu_ps void @insertelement_v_v2i16_v_s(ptr addrspace(1) %ptr, i16 %val, i32 inreg %idx) {
569 ; GFX9-LABEL: insertelement_v_v2i16_v_s:
570 ; GFX9:       ; %bb.0:
571 ; GFX9-NEXT:    global_load_dword v3, v[0:1], off
572 ; GFX9-NEXT:    s_and_b32 s0, s2, 1
573 ; GFX9-NEXT:    s_lshl_b32 s0, s0, 4
574 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
575 ; GFX9-NEXT:    s_lshl_b32 s0, 0xffff, s0
576 ; GFX9-NEXT:    s_not_b32 s0, s0
577 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
578 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
579 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
580 ; GFX9-NEXT:    v_and_or_b32 v2, v3, s0, v2
581 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
582 ; GFX9-NEXT:    s_endpgm
584 ; GFX8-LABEL: insertelement_v_v2i16_v_s:
585 ; GFX8:       ; %bb.0:
586 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
587 ; GFX8-NEXT:    s_and_b32 s0, s2, 1
588 ; GFX8-NEXT:    s_lshl_b32 s0, s0, 4
589 ; GFX8-NEXT:    v_mov_b32_e32 v1, s0
590 ; GFX8-NEXT:    s_lshl_b32 s0, 0xffff, s0
591 ; GFX8-NEXT:    s_not_b32 s0, s0
592 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
593 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
594 ; GFX8-NEXT:    v_and_b32_e32 v3, s0, v0
595 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
596 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
597 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
598 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
599 ; GFX8-NEXT:    s_endpgm
601 ; GFX7-LABEL: insertelement_v_v2i16_v_s:
602 ; GFX7:       ; %bb.0:
603 ; GFX7-NEXT:    s_mov_b32 s6, 0
604 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
605 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
606 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[4:7], 0 addr64
607 ; GFX7-NEXT:    s_and_b32 s0, s2, 1
608 ; GFX7-NEXT:    v_and_b32_e32 v1, 0xffff, v2
609 ; GFX7-NEXT:    s_lshl_b32 s0, s0, 4
610 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, s0, v1
611 ; GFX7-NEXT:    s_lshl_b32 s0, 0xffff, s0
612 ; GFX7-NEXT:    s_not_b32 s0, s0
613 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
614 ; GFX7-NEXT:    s_mov_b32 s6, -1
615 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
616 ; GFX7-NEXT:    v_and_b32_e32 v0, s0, v0
617 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v1
618 ; GFX7-NEXT:    buffer_store_dword v0, off, s[4:7], 0
619 ; GFX7-NEXT:    s_endpgm
621 ; GFX10-LABEL: insertelement_v_v2i16_v_s:
622 ; GFX10:       ; %bb.0:
623 ; GFX10-NEXT:    global_load_dword v3, v[0:1], off
624 ; GFX10-NEXT:    s_and_b32 s0, s2, 1
625 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
626 ; GFX10-NEXT:    s_lshl_b32 s0, s0, 4
627 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
628 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v2, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
629 ; GFX10-NEXT:    s_lshl_b32 s0, 0xffff, s0
630 ; GFX10-NEXT:    s_not_b32 s0, s0
631 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
632 ; GFX10-NEXT:    v_and_or_b32 v2, v3, s0, v2
633 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
634 ; GFX10-NEXT:    s_endpgm
636 ; GFX11-LABEL: insertelement_v_v2i16_v_s:
637 ; GFX11:       ; %bb.0:
638 ; GFX11-NEXT:    global_load_b32 v3, v[0:1], off
639 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v2
640 ; GFX11-NEXT:    s_and_b32 s0, s2, 1
641 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
642 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
643 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
644 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, s0, v0
645 ; GFX11-NEXT:    s_lshl_b32 s0, 0xffff, s0
646 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
647 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
648 ; GFX11-NEXT:    s_not_b32 s0, s0
649 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
650 ; GFX11-NEXT:    v_and_or_b32 v2, v3, s0, v2
651 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
652 ; GFX11-NEXT:    s_nop 0
653 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
654 ; GFX11-NEXT:    s_endpgm
655   %vec = load <2 x i16>, ptr addrspace(1) %ptr
656   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
657   store <2 x i16> %insert, ptr addrspace(1) null
658   ret void
661 define amdgpu_ps void @insertelement_v_v2i16_v_v(ptr addrspace(1) %ptr, i16 %val, i32 %idx) {
662 ; GFX9-LABEL: insertelement_v_v2i16_v_v:
663 ; GFX9:       ; %bb.0:
664 ; GFX9-NEXT:    global_load_dword v4, v[0:1], off
665 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v3
666 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
667 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
668 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
669 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, v0, s0
670 ; GFX9-NEXT:    v_not_b32_e32 v3, v0
671 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0
672 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0
673 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
674 ; GFX9-NEXT:    v_and_or_b32 v2, v4, v3, v2
675 ; GFX9-NEXT:    global_store_dword v[0:1], v2, off
676 ; GFX9-NEXT:    s_endpgm
678 ; GFX8-LABEL: insertelement_v_v2i16_v_v:
679 ; GFX8:       ; %bb.0:
680 ; GFX8-NEXT:    flat_load_dword v0, v[0:1]
681 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v3
682 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
683 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
684 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
685 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
686 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
687 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
688 ; GFX8-NEXT:    v_and_b32_e32 v3, v0, v1
689 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
690 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
691 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
692 ; GFX8-NEXT:    flat_store_dword v[0:1], v2
693 ; GFX8-NEXT:    s_endpgm
695 ; GFX7-LABEL: insertelement_v_v2i16_v_v:
696 ; GFX7:       ; %bb.0:
697 ; GFX7-NEXT:    s_mov_b32 s2, 0
698 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
699 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
700 ; GFX7-NEXT:    buffer_load_dword v0, v[0:1], s[0:3], 0 addr64
701 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v3
702 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
703 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
704 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, v1, v2
705 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
706 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
707 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
708 ; GFX7-NEXT:    s_mov_b32 s2, -1
709 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
710 ; GFX7-NEXT:    v_and_b32_e32 v0, v0, v1
711 ; GFX7-NEXT:    v_or_b32_e32 v0, v0, v2
712 ; GFX7-NEXT:    buffer_store_dword v0, off, s[0:3], 0
713 ; GFX7-NEXT:    s_endpgm
715 ; GFX10-LABEL: insertelement_v_v2i16_v_v:
716 ; GFX10:       ; %bb.0:
717 ; GFX10-NEXT:    global_load_dword v4, v[0:1], off
718 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v3
719 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
720 ; GFX10-NEXT:    v_lshlrev_b32_e64 v1, v0, 0xffff
721 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v2, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
722 ; GFX10-NEXT:    v_not_b32_e32 v3, v1
723 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
724 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
725 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
726 ; GFX10-NEXT:    v_and_or_b32 v2, v4, v3, v2
727 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
728 ; GFX10-NEXT:    s_endpgm
730 ; GFX11-LABEL: insertelement_v_v2i16_v_v:
731 ; GFX11:       ; %bb.0:
732 ; GFX11-NEXT:    global_load_b32 v4, v[0:1], off
733 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v3
734 ; GFX11-NEXT:    v_and_b32_e32 v1, 0xffff, v2
735 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_1)
736 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
737 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v0, 0xffff
738 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_1) | instid1(VALU_DEP_3)
739 ; GFX11-NEXT:    v_dual_mov_b32 v0, 0 :: v_dual_lshlrev_b32 v3, v0, v1
740 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
741 ; GFX11-NEXT:    v_not_b32_e32 v2, v2
742 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
743 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
744 ; GFX11-NEXT:    v_and_or_b32 v2, v4, v2, v3
745 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
746 ; GFX11-NEXT:    s_nop 0
747 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
748 ; GFX11-NEXT:    s_endpgm
749   %vec = load <2 x i16>, ptr addrspace(1) %ptr
750   %insert = insertelement <2 x i16> %vec, i16 %val, i32 %idx
751   store <2 x i16> %insert, ptr addrspace(1) null
752   ret void
755 ; FIXME: 3 element load/store legalization
756 ; define amdgpu_ps void @insertelement_s_v3i16_s_s(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 inreg %idx) {
757 ;   %vec = load <3 x i16>, ptr addrspace(4) %ptr
758 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
759 ;   store <3 x i16> %insert, ptr addrspace(1) null
760 ;   ret void
761 ; }
763 ; define amdgpu_ps void @insertelement_v_v3i16_s_s(ptr addrspace(1) %ptr, i16 inreg %val, i32 inreg %idx) {
764 ;   %vec = load <3 x i16>, ptr addrspace(1 ) %ptr
765 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
766 ;   store <3 x i16> %insert, ptr addrspace(1) null
767 ;   ret void
768 ; }
770 ; define amdgpu_ps void @insertelement_s_v3i16_v_s(ptr addrspace(4) inreg %ptr, i16 %val, i32 inreg %idx) {
771 ;   %vec = load <3 x i16>, ptr addrspace(4) %ptr
772 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
773 ;   store <3 x i16> %insert, ptr addrspace(1) null
774 ;   ret void
775 ; }
777 ; define amdgpu_ps void @insertelement_s_v3i16_s_v(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 %idx) {
778 ;   %vec = load <3 x i16>, ptr addrspace(4) %ptr
779 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
780 ;   store <3 x i16> %insert, ptr addrspace(1) null
781 ;   ret void
782 ; }
784 ; define amdgpu_ps void @insertelement_s_v3i16_v_v(ptr addrspace(4) inreg %ptr, i16 %val, i32 %idx) {
785 ;   %vec = load <3 x i16>, ptr addrspace(4) %ptr
786 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
787 ;   store <3 x i16> %insert, ptr addrspace(1) null
788 ;   ret void
789 ; }
791 ; define amdgpu_ps void @insertelement_v_v3i16_s_v(ptr addrspace(1) %ptr, i16 inreg %val, i32 %idx) {
792 ;   %vec = load <3 x i16>, ptr addrspace(1) %ptr
793 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
794 ;   store <3 x i16> %insert, ptr addrspace(1) null
795 ;   ret void
796 ; }
798 ; define amdgpu_ps void @insertelement_v_v3i16_v_s(ptr addrspace(1) %ptr, i16 %val, i32 inreg %idx) {
799 ;   %vec = load <3 x i16>, ptr addrspace(1) %ptr
800 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
801 ;   store <3 x i16> %insert, ptr addrspace(1) null
802 ;   ret void
803 ; }
805 ; define amdgpu_ps void @insertelement_v_v3i16_v_v(ptr addrspace(1) %ptr, i16 %val, i32 %idx) {
806 ;   %vec = load <3 x i16>, ptr addrspace(1) %ptr
807 ;   %insert = insertelement <3 x i16> %vec, i16 %val, i32 %idx
808 ;   store <3 x i16> %insert, ptr addrspace(1) null
809 ;   ret void
810 ; }
812 define amdgpu_ps void @insertelement_v_v4i16_s_s(ptr addrspace(1) %ptr, i16 inreg %val, i32 inreg %idx) {
813 ; GFX9-LABEL: insertelement_v_v4i16_s_s:
814 ; GFX9:       ; %bb.0:
815 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
816 ; GFX9-NEXT:    s_and_b32 s1, s3, 1
817 ; GFX9-NEXT:    s_lshr_b32 s0, s3, 1
818 ; GFX9-NEXT:    s_and_b32 s2, s2, 0xffff
819 ; GFX9-NEXT:    s_lshl_b32 s1, s1, 4
820 ; GFX9-NEXT:    s_lshl_b32 s2, s2, s1
821 ; GFX9-NEXT:    s_lshl_b32 s1, 0xffff, s1
822 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s0, 1
823 ; GFX9-NEXT:    s_not_b32 s1, s1
824 ; GFX9-NEXT:    v_mov_b32_e32 v4, s2
825 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
826 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
827 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
828 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v0, v1, vcc
829 ; GFX9-NEXT:    v_and_or_b32 v4, v5, s1, v4
830 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], s0, 0
831 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
832 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
833 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
834 ; GFX9-NEXT:    s_endpgm
836 ; GFX8-LABEL: insertelement_v_v4i16_s_s:
837 ; GFX8:       ; %bb.0:
838 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
839 ; GFX8-NEXT:    s_and_b32 s1, s3, 1
840 ; GFX8-NEXT:    s_lshr_b32 s0, s3, 1
841 ; GFX8-NEXT:    s_and_b32 s2, s2, 0xffff
842 ; GFX8-NEXT:    s_lshl_b32 s1, s1, 4
843 ; GFX8-NEXT:    s_lshl_b32 s2, s2, s1
844 ; GFX8-NEXT:    s_lshl_b32 s1, 0xffff, s1
845 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s0, 1
846 ; GFX8-NEXT:    s_not_b32 s1, s1
847 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0
848 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0
849 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
850 ; GFX8-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc
851 ; GFX8-NEXT:    v_and_b32_e32 v4, s1, v4
852 ; GFX8-NEXT:    v_or_b32_e32 v4, s2, v4
853 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], s0, 0
854 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
855 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
856 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
857 ; GFX8-NEXT:    s_endpgm
859 ; GFX7-LABEL: insertelement_v_v4i16_s_s:
860 ; GFX7:       ; %bb.0:
861 ; GFX7-NEXT:    s_mov_b32 s6, 0
862 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
863 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
864 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
865 ; GFX7-NEXT:    s_and_b32 s1, s3, 1
866 ; GFX7-NEXT:    s_lshr_b32 s0, s3, 1
867 ; GFX7-NEXT:    s_and_b32 s2, s2, 0xffff
868 ; GFX7-NEXT:    s_lshl_b32 s1, s1, 4
869 ; GFX7-NEXT:    s_lshl_b32 s2, s2, s1
870 ; GFX7-NEXT:    s_lshl_b32 s1, 0xffff, s1
871 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s0, 1
872 ; GFX7-NEXT:    s_not_b32 s1, s1
873 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
874 ; GFX7-NEXT:    s_mov_b32 s6, -1
875 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
876 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v0, v1, vcc
877 ; GFX7-NEXT:    v_and_b32_e32 v2, s1, v2
878 ; GFX7-NEXT:    v_or_b32_e32 v2, s2, v2
879 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], s0, 0
880 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
881 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
882 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
883 ; GFX7-NEXT:    s_endpgm
885 ; GFX10-LABEL: insertelement_v_v4i16_s_s:
886 ; GFX10:       ; %bb.0:
887 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
888 ; GFX10-NEXT:    s_lshr_b32 s0, s3, 1
889 ; GFX10-NEXT:    s_and_b32 s1, s3, 1
890 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s0, 1
891 ; GFX10-NEXT:    s_lshl_b32 s1, s1, 4
892 ; GFX10-NEXT:    s_and_b32 s2, s2, 0xffff
893 ; GFX10-NEXT:    s_lshl_b32 s3, 0xffff, s1
894 ; GFX10-NEXT:    s_lshl_b32 s1, s2, s1
895 ; GFX10-NEXT:    s_not_b32 s2, s3
896 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, s0, 0
897 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
898 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v0, v1, vcc_lo
899 ; GFX10-NEXT:    v_and_or_b32 v4, v2, s2, s1
900 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
901 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
902 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
903 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
904 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
905 ; GFX10-NEXT:    s_endpgm
907 ; GFX11-LABEL: insertelement_v_v4i16_s_s:
908 ; GFX11:       ; %bb.0:
909 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
910 ; GFX11-NEXT:    s_lshr_b32 s0, s3, 1
911 ; GFX11-NEXT:    s_and_b32 s1, s3, 1
912 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s0, 1
913 ; GFX11-NEXT:    s_lshl_b32 s1, s1, 4
914 ; GFX11-NEXT:    s_and_b32 s2, s2, 0xffff
915 ; GFX11-NEXT:    s_lshl_b32 s3, 0xffff, s1
916 ; GFX11-NEXT:    s_lshl_b32 s1, s2, s1
917 ; GFX11-NEXT:    s_not_b32 s2, s3
918 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, s0, 0
919 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
920 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v0, v1, vcc_lo
921 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
922 ; GFX11-NEXT:    v_and_or_b32 v4, v2, s2, s1
923 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
924 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
925 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
926 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
927 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
928 ; GFX11-NEXT:    s_nop 0
929 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
930 ; GFX11-NEXT:    s_endpgm
931   %vec = load <4 x i16>, ptr addrspace(1 ) %ptr
932   %insert = insertelement <4 x i16> %vec, i16 %val, i32 %idx
933   store <4 x i16> %insert, ptr addrspace(1) null
934   ret void
937 define amdgpu_ps void @insertelement_s_v4i16_v_s(ptr addrspace(4) inreg %ptr, i16 %val, i32 inreg %idx) {
938 ; GFX9-LABEL: insertelement_s_v4i16_v_s:
939 ; GFX9:       ; %bb.0:
940 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
941 ; GFX9-NEXT:    s_lshr_b32 s2, s4, 1
942 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 1
943 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
944 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 0
945 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
946 ; GFX9-NEXT:    s_cselect_b32 s3, s1, s0
947 ; GFX9-NEXT:    s_and_b32 s4, s4, 1
948 ; GFX9-NEXT:    s_lshl_b32 s4, s4, 4
949 ; GFX9-NEXT:    s_lshl_b32 s5, 0xffff, s4
950 ; GFX9-NEXT:    s_andn2_b32 s3, s3, s5
951 ; GFX9-NEXT:    v_mov_b32_e32 v1, s3
952 ; GFX9-NEXT:    v_lshl_or_b32 v4, v0, s4, v1
953 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
954 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
955 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
956 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
957 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 1
958 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
959 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
960 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
961 ; GFX9-NEXT:    s_endpgm
963 ; GFX8-LABEL: insertelement_s_v4i16_v_s:
964 ; GFX8:       ; %bb.0:
965 ; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
966 ; GFX8-NEXT:    s_lshr_b32 s2, s4, 1
967 ; GFX8-NEXT:    s_cmp_eq_u32 s2, 1
968 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 0
969 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0
970 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
971 ; GFX8-NEXT:    s_cselect_b32 s3, s1, s0
972 ; GFX8-NEXT:    s_and_b32 s4, s4, 1
973 ; GFX8-NEXT:    s_lshl_b32 s4, s4, 4
974 ; GFX8-NEXT:    v_mov_b32_e32 v1, s4
975 ; GFX8-NEXT:    s_lshl_b32 s4, 0xffff, s4
976 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
977 ; GFX8-NEXT:    s_andn2_b32 s3, s3, s4
978 ; GFX8-NEXT:    v_or_b32_e32 v4, s3, v0
979 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
980 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
981 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
982 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 1
983 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0
984 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
985 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
986 ; GFX8-NEXT:    s_endpgm
988 ; GFX7-LABEL: insertelement_s_v4i16_v_s:
989 ; GFX7:       ; %bb.0:
990 ; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
991 ; GFX7-NEXT:    s_lshr_b32 s2, s4, 1
992 ; GFX7-NEXT:    s_cmp_eq_u32 s2, 1
993 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
994 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 0
995 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
996 ; GFX7-NEXT:    s_cselect_b32 s3, s1, s0
997 ; GFX7-NEXT:    s_and_b32 s4, s4, 1
998 ; GFX7-NEXT:    s_lshl_b32 s4, s4, 4
999 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s4, v0
1000 ; GFX7-NEXT:    s_lshl_b32 s4, 0xffff, s4
1001 ; GFX7-NEXT:    s_andn2_b32 s3, s3, s4
1002 ; GFX7-NEXT:    v_or_b32_e32 v2, s3, v0
1003 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
1004 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
1005 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v0, v2, vcc
1006 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 1
1007 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1008 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
1009 ; GFX7-NEXT:    s_mov_b32 s2, -1
1010 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
1011 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
1012 ; GFX7-NEXT:    s_endpgm
1014 ; GFX10-LABEL: insertelement_s_v4i16_v_s:
1015 ; GFX10:       ; %bb.0:
1016 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1017 ; GFX10-NEXT:    s_lshr_b32 s2, s4, 1
1018 ; GFX10-NEXT:    v_and_b32_e32 v2, 0xffff, v0
1019 ; GFX10-NEXT:    s_cmp_eq_u32 s2, 1
1020 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s2, 0
1021 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1022 ; GFX10-NEXT:    s_cselect_b32 s3, s1, s0
1023 ; GFX10-NEXT:    s_and_b32 s4, s4, 1
1024 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1025 ; GFX10-NEXT:    s_lshl_b32 s4, s4, 4
1026 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1027 ; GFX10-NEXT:    s_lshl_b32 s5, 0xffff, s4
1028 ; GFX10-NEXT:    s_andn2_b32 s3, s3, s5
1029 ; GFX10-NEXT:    v_lshl_or_b32 v4, v2, s4, s3
1030 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
1031 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
1032 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc_lo
1033 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s2, 1
1034 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1035 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1036 ; GFX10-NEXT:    s_endpgm
1038 ; GFX11-LABEL: insertelement_s_v4i16_v_s:
1039 ; GFX11:       ; %bb.0:
1040 ; GFX11-NEXT:    s_load_b64 s[0:1], s[2:3], 0x0
1041 ; GFX11-NEXT:    s_lshr_b32 s2, s4, 1
1042 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v0
1043 ; GFX11-NEXT:    s_cmp_eq_u32 s2, 1
1044 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s2, 0
1045 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1046 ; GFX11-NEXT:    s_cselect_b32 s3, s1, s0
1047 ; GFX11-NEXT:    s_and_b32 s4, s4, 1
1048 ; GFX11-NEXT:    v_mov_b32_e32 v0, s0
1049 ; GFX11-NEXT:    s_lshl_b32 s4, s4, 4
1050 ; GFX11-NEXT:    v_mov_b32_e32 v1, s1
1051 ; GFX11-NEXT:    s_lshl_b32 s5, 0xffff, s4
1052 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
1053 ; GFX11-NEXT:    s_and_not1_b32 s3, s3, s5
1054 ; GFX11-NEXT:    v_lshl_or_b32 v4, v2, s4, s3
1055 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1056 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1057 ; GFX11-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_cndmask_b32 v0, v0, v4
1058 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s2, 1
1059 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1060 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1061 ; GFX11-NEXT:    s_nop 0
1062 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1063 ; GFX11-NEXT:    s_endpgm
1064   %vec = load <4 x i16>, ptr addrspace(4) %ptr
1065   %insert = insertelement <4 x i16> %vec, i16 %val, i32 %idx
1066   store <4 x i16> %insert, ptr addrspace(1) null
1067   ret void
1070 define amdgpu_ps void @insertelement_s_v4i16_s_v(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 %idx) {
1071 ; GFX9-LABEL: insertelement_s_v4i16_s_v:
1072 ; GFX9:       ; %bb.0:
1073 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1074 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 1, v0
1075 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
1076 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
1077 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
1078 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1079 ; GFX9-NEXT:    v_mov_b32_e32 v1, s0
1080 ; GFX9-NEXT:    v_mov_b32_e32 v3, s1
1081 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1082 ; GFX9-NEXT:    s_and_b32 s3, s4, 0xffff
1083 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
1084 ; GFX9-NEXT:    v_lshlrev_b32_e64 v3, v0, s3
1085 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, v0, s2
1086 ; GFX9-NEXT:    v_not_b32_e32 v0, v0
1087 ; GFX9-NEXT:    v_and_or_b32 v4, v1, v0, v3
1088 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
1089 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
1090 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v2
1091 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
1092 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
1093 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
1094 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1095 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1096 ; GFX9-NEXT:    s_endpgm
1098 ; GFX8-LABEL: insertelement_s_v4i16_s_v:
1099 ; GFX8:       ; %bb.0:
1100 ; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1101 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 1, v0
1102 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
1103 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
1104 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
1105 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
1106 ; GFX8-NEXT:    v_mov_b32_e32 v1, s0
1107 ; GFX8-NEXT:    v_mov_b32_e32 v3, s1
1108 ; GFX8-NEXT:    s_mov_b32 s2, 0xffff
1109 ; GFX8-NEXT:    s_and_b32 s3, s4, 0xffff
1110 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
1111 ; GFX8-NEXT:    v_lshlrev_b32_e64 v3, v0, s3
1112 ; GFX8-NEXT:    v_lshlrev_b32_e64 v0, v0, s2
1113 ; GFX8-NEXT:    v_not_b32_e32 v0, v0
1114 ; GFX8-NEXT:    v_and_b32_e32 v0, v1, v0
1115 ; GFX8-NEXT:    v_or_b32_e32 v4, v0, v3
1116 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
1117 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
1118 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v2
1119 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0
1120 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
1121 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0
1122 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1123 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1124 ; GFX8-NEXT:    s_endpgm
1126 ; GFX7-LABEL: insertelement_s_v4i16_s_v:
1127 ; GFX7:       ; %bb.0:
1128 ; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1129 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 1, v0
1130 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
1131 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
1132 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
1133 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
1134 ; GFX7-NEXT:    v_mov_b32_e32 v1, s0
1135 ; GFX7-NEXT:    v_mov_b32_e32 v3, s1
1136 ; GFX7-NEXT:    s_and_b32 s2, s4, 0xffff
1137 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
1138 ; GFX7-NEXT:    v_lshl_b32_e32 v3, s2, v0
1139 ; GFX7-NEXT:    v_lshl_b32_e32 v0, 0xffff, v0
1140 ; GFX7-NEXT:    v_not_b32_e32 v0, v0
1141 ; GFX7-NEXT:    v_and_b32_e32 v0, v1, v0
1142 ; GFX7-NEXT:    v_or_b32_e32 v3, v0, v3
1143 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
1144 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
1145 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v2
1146 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v3, s[0:1]
1147 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
1148 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
1149 ; GFX7-NEXT:    s_mov_b32 s2, -1
1150 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
1151 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
1152 ; GFX7-NEXT:    s_endpgm
1154 ; GFX10-LABEL: insertelement_s_v4i16_s_v:
1155 ; GFX10:       ; %bb.0:
1156 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1157 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v0
1158 ; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 1, v0
1159 ; GFX10-NEXT:    s_and_b32 s2, s4, 0xffff
1160 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
1161 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
1162 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v1, 0xffff
1163 ; GFX10-NEXT:    v_lshlrev_b32_e64 v3, v1, s2
1164 ; GFX10-NEXT:    v_not_b32_e32 v2, v2
1165 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1166 ; GFX10-NEXT:    v_mov_b32_e32 v0, s1
1167 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, s0, v0, vcc_lo
1168 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1169 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1170 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 0, v4
1171 ; GFX10-NEXT:    v_and_or_b32 v5, v5, v2, v3
1172 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
1173 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
1174 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s0
1175 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
1176 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1177 ; GFX10-NEXT:    s_endpgm
1179 ; GFX11-LABEL: insertelement_s_v4i16_s_v:
1180 ; GFX11:       ; %bb.0:
1181 ; GFX11-NEXT:    s_load_b64 s[0:1], s[2:3], 0x0
1182 ; GFX11-NEXT:    v_and_b32_e32 v1, 1, v0
1183 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 1, v0
1184 ; GFX11-NEXT:    s_and_b32 s2, s4, 0xffff
1185 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1186 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
1187 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1188 ; GFX11-NEXT:    v_dual_mov_b32 v0, s1 :: v_dual_lshlrev_b32 v1, 4, v1
1189 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, s0, v0, vcc_lo
1190 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_4)
1191 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v1, 0xffff
1192 ; GFX11-NEXT:    v_lshlrev_b32_e64 v3, v1, s2
1193 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1194 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 0, v4
1195 ; GFX11-NEXT:    v_not_b32_e32 v2, v2
1196 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
1197 ; GFX11-NEXT:    v_and_or_b32 v5, v5, v2, v3
1198 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1199 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
1200 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s0
1201 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
1202 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1203 ; GFX11-NEXT:    s_nop 0
1204 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1205 ; GFX11-NEXT:    s_endpgm
1206   %vec = load <4 x i16>, ptr addrspace(4) %ptr
1207   %insert = insertelement <4 x i16> %vec, i16 %val, i32 %idx
1208   store <4 x i16> %insert, ptr addrspace(1) null
1209   ret void
1212 define amdgpu_ps void @insertelement_s_v4i16_v_v(ptr addrspace(4) inreg %ptr, i16 %val, i32 %idx) {
1213 ; GFX9-LABEL: insertelement_s_v4i16_v_v:
1214 ; GFX9:       ; %bb.0:
1215 ; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1216 ; GFX9-NEXT:    v_lshrrev_b32_e32 v2, 1, v1
1217 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
1218 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
1219 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
1220 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1221 ; GFX9-NEXT:    v_mov_b32_e32 v3, s0
1222 ; GFX9-NEXT:    v_mov_b32_e32 v4, s1
1223 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
1224 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1225 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s2
1226 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1227 ; GFX9-NEXT:    v_not_b32_e32 v1, v1
1228 ; GFX9-NEXT:    v_and_or_b32 v4, v3, v1, v0
1229 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
1230 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
1231 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v2
1232 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0
1233 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
1234 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
1235 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1236 ; GFX9-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1237 ; GFX9-NEXT:    s_endpgm
1239 ; GFX8-LABEL: insertelement_s_v4i16_v_v:
1240 ; GFX8:       ; %bb.0:
1241 ; GFX8-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1242 ; GFX8-NEXT:    v_lshrrev_b32_e32 v2, 1, v1
1243 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v1
1244 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
1245 ; GFX8-NEXT:    s_mov_b32 s2, 0xffff
1246 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
1247 ; GFX8-NEXT:    v_mov_b32_e32 v3, s0
1248 ; GFX8-NEXT:    v_mov_b32_e32 v4, s1
1249 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
1250 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1251 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s2
1252 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1253 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
1254 ; GFX8-NEXT:    v_and_b32_e32 v1, v3, v1
1255 ; GFX8-NEXT:    v_or_b32_e32 v4, v1, v0
1256 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
1257 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
1258 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v2
1259 ; GFX8-NEXT:    v_mov_b32_e32 v2, 0
1260 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[0:1]
1261 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0
1262 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1263 ; GFX8-NEXT:    flat_store_dwordx2 v[2:3], v[0:1]
1264 ; GFX8-NEXT:    s_endpgm
1266 ; GFX7-LABEL: insertelement_s_v4i16_v_v:
1267 ; GFX7:       ; %bb.0:
1268 ; GFX7-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1269 ; GFX7-NEXT:    v_lshrrev_b32_e32 v2, 1, v1
1270 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
1271 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
1272 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
1273 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
1274 ; GFX7-NEXT:    v_mov_b32_e32 v3, s0
1275 ; GFX7-NEXT:    v_mov_b32_e32 v4, s1
1276 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v2
1277 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, v1, v0
1278 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
1279 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
1280 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
1281 ; GFX7-NEXT:    v_and_b32_e32 v1, v3, v1
1282 ; GFX7-NEXT:    v_or_b32_e32 v3, v1, v0
1283 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
1284 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
1285 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v2
1286 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v3, s[0:1]
1287 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v3, vcc
1288 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
1289 ; GFX7-NEXT:    s_mov_b32 s2, -1
1290 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
1291 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
1292 ; GFX7-NEXT:    s_endpgm
1294 ; GFX10-LABEL: insertelement_s_v4i16_v_v:
1295 ; GFX10:       ; %bb.0:
1296 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1297 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v1
1298 ; GFX10-NEXT:    v_lshrrev_b32_e32 v4, 1, v1
1299 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
1300 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
1301 ; GFX10-NEXT:    v_lshlrev_b32_e64 v3, v2, 0xffff
1302 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v2, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1303 ; GFX10-NEXT:    v_not_b32_e32 v3, v3
1304 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1305 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1306 ; GFX10-NEXT:    v_cndmask_b32_e32 v5, s0, v1, vcc_lo
1307 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1308 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1309 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 0, v4
1310 ; GFX10-NEXT:    v_and_or_b32 v5, v5, v3, v2
1311 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
1312 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
1313 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s0
1314 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
1315 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1316 ; GFX10-NEXT:    s_endpgm
1318 ; GFX11-LABEL: insertelement_s_v4i16_v_v:
1319 ; GFX11:       ; %bb.0:
1320 ; GFX11-NEXT:    s_load_b64 s[0:1], s[2:3], 0x0
1321 ; GFX11-NEXT:    v_and_b32_e32 v2, 1, v1
1322 ; GFX11-NEXT:    v_lshrrev_b32_e32 v4, 1, v1
1323 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
1324 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1325 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v4
1326 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1327 ; GFX11-NEXT:    v_dual_mov_b32 v1, s1 :: v_dual_lshlrev_b32 v2, 4, v2
1328 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, s0, v1, vcc_lo
1329 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_4)
1330 ; GFX11-NEXT:    v_lshlrev_b32_e64 v3, v2, 0xffff
1331 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, v2, v0
1332 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
1333 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 0, v4
1334 ; GFX11-NEXT:    v_not_b32_e32 v3, v3
1335 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
1336 ; GFX11-NEXT:    v_and_or_b32 v5, v5, v3, v2
1337 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1338 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
1339 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s0
1340 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc_lo
1341 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1342 ; GFX11-NEXT:    s_nop 0
1343 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1344 ; GFX11-NEXT:    s_endpgm
1345   %vec = load <4 x i16>, ptr addrspace(4) %ptr
1346   %insert = insertelement <4 x i16> %vec, i16 %val, i32 %idx
1347   store <4 x i16> %insert, ptr addrspace(1) null
1348   ret void
1351 define amdgpu_ps void @insertelement_v_v4i16_s_v(ptr addrspace(1) %ptr, i16 inreg %val, i32 %idx) {
1352 ; GFX9-LABEL: insertelement_v_v4i16_s_v:
1353 ; GFX9:       ; %bb.0:
1354 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
1355 ; GFX9-NEXT:    v_lshrrev_b32_e32 v5, 1, v2
1356 ; GFX9-NEXT:    v_and_b32_e32 v2, 1, v2
1357 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
1358 ; GFX9-NEXT:    s_and_b32 s1, s2, 0xffff
1359 ; GFX9-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
1360 ; GFX9-NEXT:    v_lshlrev_b32_e64 v6, v2, s1
1361 ; GFX9-NEXT:    v_lshlrev_b32_e64 v2, v2, s0
1362 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
1363 ; GFX9-NEXT:    v_not_b32_e32 v2, v2
1364 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
1365 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v5
1366 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
1367 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1368 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v0, v1, vcc
1369 ; GFX9-NEXT:    v_and_or_b32 v2, v7, v2, v6
1370 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1371 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1372 ; GFX9-NEXT:    global_store_dwordx2 v[3:4], v[0:1], off
1373 ; GFX9-NEXT:    s_endpgm
1375 ; GFX8-LABEL: insertelement_v_v4i16_s_v:
1376 ; GFX8:       ; %bb.0:
1377 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1378 ; GFX8-NEXT:    v_lshrrev_b32_e32 v5, 1, v2
1379 ; GFX8-NEXT:    v_and_b32_e32 v2, 1, v2
1380 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
1381 ; GFX8-NEXT:    s_and_b32 s1, s2, 0xffff
1382 ; GFX8-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
1383 ; GFX8-NEXT:    v_lshlrev_b32_e64 v6, v2, s1
1384 ; GFX8-NEXT:    v_lshlrev_b32_e64 v2, v2, s0
1385 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v5
1386 ; GFX8-NEXT:    v_not_b32_e32 v2, v2
1387 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0
1388 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v5
1389 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
1390 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1391 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v0, v1, vcc
1392 ; GFX8-NEXT:    v_and_b32_e32 v2, v7, v2
1393 ; GFX8-NEXT:    v_or_b32_e32 v2, v2, v6
1394 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1395 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1396 ; GFX8-NEXT:    flat_store_dwordx2 v[3:4], v[0:1]
1397 ; GFX8-NEXT:    s_endpgm
1399 ; GFX7-LABEL: insertelement_v_v4i16_s_v:
1400 ; GFX7:       ; %bb.0:
1401 ; GFX7-NEXT:    s_mov_b32 s6, 0
1402 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1403 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1404 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
1405 ; GFX7-NEXT:    v_lshrrev_b32_e32 v3, 1, v2
1406 ; GFX7-NEXT:    v_and_b32_e32 v2, 1, v2
1407 ; GFX7-NEXT:    s_and_b32 s0, s2, 0xffff
1408 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
1409 ; GFX7-NEXT:    v_lshl_b32_e32 v4, s0, v2
1410 ; GFX7-NEXT:    v_lshl_b32_e32 v2, 0xffff, v2
1411 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v3
1412 ; GFX7-NEXT:    v_not_b32_e32 v2, v2
1413 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v3
1414 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1415 ; GFX7-NEXT:    s_mov_b32 s6, -1
1416 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1417 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v0, v1, vcc
1418 ; GFX7-NEXT:    v_and_b32_e32 v2, v5, v2
1419 ; GFX7-NEXT:    v_or_b32_e32 v2, v2, v4
1420 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1421 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1422 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
1423 ; GFX7-NEXT:    s_endpgm
1425 ; GFX10-LABEL: insertelement_v_v4i16_s_v:
1426 ; GFX10:       ; %bb.0:
1427 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
1428 ; GFX10-NEXT:    v_and_b32_e32 v3, 1, v2
1429 ; GFX10-NEXT:    v_lshrrev_b32_e32 v5, 1, v2
1430 ; GFX10-NEXT:    s_and_b32 s0, s2, 0xffff
1431 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 4, v3
1432 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v5
1433 ; GFX10-NEXT:    v_lshlrev_b32_e64 v4, v3, 0xffff
1434 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v3, s0
1435 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 0, v5
1436 ; GFX10-NEXT:    v_not_b32_e32 v3, v4
1437 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1438 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc_lo
1439 ; GFX10-NEXT:    v_and_or_b32 v4, v4, v3, v2
1440 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
1441 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
1442 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
1443 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1444 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1445 ; GFX10-NEXT:    s_endpgm
1447 ; GFX11-LABEL: insertelement_v_v4i16_s_v:
1448 ; GFX11:       ; %bb.0:
1449 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
1450 ; GFX11-NEXT:    v_lshrrev_b32_e32 v5, 1, v2
1451 ; GFX11-NEXT:    s_and_b32 s0, s2, 0xffff
1452 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_1)
1453 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v5
1454 ; GFX11-NEXT:    v_and_b32_e32 v3, 1, v2
1455 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 4, v3
1456 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
1457 ; GFX11-NEXT:    v_lshlrev_b32_e64 v4, v3, 0xffff
1458 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v3, s0
1459 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 0, v5
1460 ; GFX11-NEXT:    v_not_b32_e32 v3, v4
1461 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1462 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc_lo
1463 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
1464 ; GFX11-NEXT:    v_and_or_b32 v4, v4, v3, v2
1465 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1466 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
1467 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1468 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
1469 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1470 ; GFX11-NEXT:    s_nop 0
1471 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1472 ; GFX11-NEXT:    s_endpgm
1473   %vec = load <4 x i16>, ptr addrspace(1) %ptr
1474   %insert = insertelement <4 x i16> %vec, i16 %val, i32 %idx
1475   store <4 x i16> %insert, ptr addrspace(1) null
1476   ret void
1479 define amdgpu_ps void @insertelement_v_v4i16_v_s(ptr addrspace(1) %ptr, i16 %val, i32 inreg %idx) {
1480 ; GFX9-LABEL: insertelement_v_v4i16_v_s:
1481 ; GFX9:       ; %bb.0:
1482 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
1483 ; GFX9-NEXT:    s_and_b32 s1, s2, 1
1484 ; GFX9-NEXT:    s_lshr_b32 s0, s2, 1
1485 ; GFX9-NEXT:    s_lshl_b32 s1, s1, 4
1486 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, s1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1487 ; GFX9-NEXT:    s_lshl_b32 s1, 0xffff, s1
1488 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s0, 1
1489 ; GFX9-NEXT:    s_not_b32 s1, s1
1490 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0
1491 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
1492 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1493 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v0, v1, vcc
1494 ; GFX9-NEXT:    v_and_or_b32 v2, v5, s1, v2
1495 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], s0, 0
1496 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1497 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1498 ; GFX9-NEXT:    global_store_dwordx2 v[3:4], v[0:1], off
1499 ; GFX9-NEXT:    s_endpgm
1501 ; GFX8-LABEL: insertelement_v_v4i16_v_s:
1502 ; GFX8:       ; %bb.0:
1503 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1504 ; GFX8-NEXT:    s_and_b32 s1, s2, 1
1505 ; GFX8-NEXT:    s_lshr_b32 s0, s2, 1
1506 ; GFX8-NEXT:    s_lshl_b32 s1, s1, 4
1507 ; GFX8-NEXT:    v_mov_b32_e32 v5, s1
1508 ; GFX8-NEXT:    s_lshl_b32 s1, 0xffff, s1
1509 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s0, 1
1510 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v5, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1511 ; GFX8-NEXT:    s_not_b32 s1, s1
1512 ; GFX8-NEXT:    v_mov_b32_e32 v3, 0
1513 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
1514 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1515 ; GFX8-NEXT:    v_cndmask_b32_e32 v5, v0, v1, vcc
1516 ; GFX8-NEXT:    v_and_b32_e32 v5, s1, v5
1517 ; GFX8-NEXT:    v_or_b32_e32 v2, v5, v2
1518 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], s0, 0
1519 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1520 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1521 ; GFX8-NEXT:    flat_store_dwordx2 v[3:4], v[0:1]
1522 ; GFX8-NEXT:    s_endpgm
1524 ; GFX7-LABEL: insertelement_v_v4i16_v_s:
1525 ; GFX7:       ; %bb.0:
1526 ; GFX7-NEXT:    s_mov_b32 s6, 0
1527 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1528 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1529 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
1530 ; GFX7-NEXT:    s_and_b32 s1, s2, 1
1531 ; GFX7-NEXT:    s_lshr_b32 s0, s2, 1
1532 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1533 ; GFX7-NEXT:    s_lshl_b32 s1, s1, 4
1534 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, s1, v2
1535 ; GFX7-NEXT:    s_lshl_b32 s1, 0xffff, s1
1536 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s0, 1
1537 ; GFX7-NEXT:    s_not_b32 s1, s1
1538 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1539 ; GFX7-NEXT:    s_mov_b32 s6, -1
1540 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1541 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v0, v1, vcc
1542 ; GFX7-NEXT:    v_and_b32_e32 v3, s1, v3
1543 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
1544 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], s0, 0
1545 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1546 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1547 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
1548 ; GFX7-NEXT:    s_endpgm
1550 ; GFX10-LABEL: insertelement_v_v4i16_v_s:
1551 ; GFX10:       ; %bb.0:
1552 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
1553 ; GFX10-NEXT:    s_lshr_b32 s1, s2, 1
1554 ; GFX10-NEXT:    s_and_b32 s0, s2, 1
1555 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s1, 1
1556 ; GFX10-NEXT:    s_lshl_b32 s0, s0, 4
1557 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v2, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1558 ; GFX10-NEXT:    s_lshl_b32 s0, 0xffff, s0
1559 ; GFX10-NEXT:    s_not_b32 s0, s0
1560 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1561 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v0, v1, vcc_lo
1562 ; GFX10-NEXT:    v_and_or_b32 v4, v3, s0, v2
1563 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, s1, 0
1564 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
1565 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
1566 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1567 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
1568 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1569 ; GFX10-NEXT:    s_endpgm
1571 ; GFX11-LABEL: insertelement_v_v4i16_v_s:
1572 ; GFX11:       ; %bb.0:
1573 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
1574 ; GFX11-NEXT:    s_lshr_b32 s1, s2, 1
1575 ; GFX11-NEXT:    s_and_b32 s0, s2, 1
1576 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s1, 1
1577 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1578 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
1579 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1580 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
1581 ; GFX11-NEXT:    v_dual_cndmask_b32 v3, v0, v1 :: v_dual_lshlrev_b32 v2, s0, v2
1582 ; GFX11-NEXT:    s_lshl_b32 s0, 0xffff, s0
1583 ; GFX11-NEXT:    s_not_b32 s0, s0
1584 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
1585 ; GFX11-NEXT:    v_and_or_b32 v4, v3, s0, v2
1586 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, s1, 0
1587 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1588 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
1589 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
1590 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1591 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
1592 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1593 ; GFX11-NEXT:    s_nop 0
1594 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1595 ; GFX11-NEXT:    s_endpgm
1596   %vec = load <4 x i16>, ptr addrspace(1) %ptr
1597   %insert = insertelement <4 x i16> %vec, i16 %val, i32 %idx
1598   store <4 x i16> %insert, ptr addrspace(1) null
1599   ret void
1602 define amdgpu_ps void @insertelement_v_v4i16_v_v(ptr addrspace(1) %ptr, i16 %val, i32 %idx) {
1603 ; GFX9-LABEL: insertelement_v_v4i16_v_v:
1604 ; GFX9:       ; %bb.0:
1605 ; GFX9-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
1606 ; GFX9-NEXT:    v_lshrrev_b32_e32 v6, 1, v3
1607 ; GFX9-NEXT:    v_and_b32_e32 v3, 1, v3
1608 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
1609 ; GFX9-NEXT:    v_lshlrev_b32_e32 v3, 4, v3
1610 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1611 ; GFX9-NEXT:    v_lshlrev_b32_e64 v3, v3, s0
1612 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
1613 ; GFX9-NEXT:    v_not_b32_e32 v3, v3
1614 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
1615 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v6
1616 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
1617 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1618 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v0, v1, vcc
1619 ; GFX9-NEXT:    v_and_or_b32 v2, v7, v3, v2
1620 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1621 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1622 ; GFX9-NEXT:    global_store_dwordx2 v[4:5], v[0:1], off
1623 ; GFX9-NEXT:    s_endpgm
1625 ; GFX8-LABEL: insertelement_v_v4i16_v_v:
1626 ; GFX8:       ; %bb.0:
1627 ; GFX8-NEXT:    flat_load_dwordx2 v[0:1], v[0:1]
1628 ; GFX8-NEXT:    v_lshrrev_b32_e32 v6, 1, v3
1629 ; GFX8-NEXT:    v_and_b32_e32 v3, 1, v3
1630 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
1631 ; GFX8-NEXT:    v_lshlrev_b32_e32 v3, 4, v3
1632 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1633 ; GFX8-NEXT:    v_lshlrev_b32_e64 v3, v3, s0
1634 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v6
1635 ; GFX8-NEXT:    v_not_b32_e32 v3, v3
1636 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
1637 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v6
1638 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
1639 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1640 ; GFX8-NEXT:    v_cndmask_b32_e32 v7, v0, v1, vcc
1641 ; GFX8-NEXT:    v_and_b32_e32 v3, v7, v3
1642 ; GFX8-NEXT:    v_or_b32_e32 v2, v3, v2
1643 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1644 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1645 ; GFX8-NEXT:    flat_store_dwordx2 v[4:5], v[0:1]
1646 ; GFX8-NEXT:    s_endpgm
1648 ; GFX7-LABEL: insertelement_v_v4i16_v_v:
1649 ; GFX7:       ; %bb.0:
1650 ; GFX7-NEXT:    s_mov_b32 s6, 0
1651 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1652 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1653 ; GFX7-NEXT:    buffer_load_dwordx2 v[0:1], v[0:1], s[4:7], 0 addr64
1654 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 1, v3
1655 ; GFX7-NEXT:    v_and_b32_e32 v3, 1, v3
1656 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1657 ; GFX7-NEXT:    v_lshlrev_b32_e32 v3, 4, v3
1658 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, v3, v2
1659 ; GFX7-NEXT:    v_lshl_b32_e32 v3, 0xffff, v3
1660 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
1661 ; GFX7-NEXT:    v_not_b32_e32 v3, v3
1662 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 0, v4
1663 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1664 ; GFX7-NEXT:    s_mov_b32 s6, -1
1665 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1666 ; GFX7-NEXT:    v_cndmask_b32_e32 v5, v0, v1, vcc
1667 ; GFX7-NEXT:    v_and_b32_e32 v3, v5, v3
1668 ; GFX7-NEXT:    v_or_b32_e32 v2, v3, v2
1669 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v2, s[0:1]
1670 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
1671 ; GFX7-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
1672 ; GFX7-NEXT:    s_endpgm
1674 ; GFX10-LABEL: insertelement_v_v4i16_v_v:
1675 ; GFX10:       ; %bb.0:
1676 ; GFX10-NEXT:    global_load_dwordx2 v[0:1], v[0:1], off
1677 ; GFX10-NEXT:    v_and_b32_e32 v4, 1, v3
1678 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 1, v3
1679 ; GFX10-NEXT:    v_lshlrev_b32_e32 v4, 4, v4
1680 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
1681 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 0, v6
1682 ; GFX10-NEXT:    v_lshlrev_b32_e64 v5, v4, 0xffff
1683 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v2, v4, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
1684 ; GFX10-NEXT:    v_not_b32_e32 v3, v5
1685 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
1686 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc_lo
1687 ; GFX10-NEXT:    v_and_or_b32 v4, v4, v3, v2
1688 ; GFX10-NEXT:    v_mov_b32_e32 v2, 0
1689 ; GFX10-NEXT:    v_mov_b32_e32 v3, 0
1690 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
1691 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1692 ; GFX10-NEXT:    global_store_dwordx2 v[2:3], v[0:1], off
1693 ; GFX10-NEXT:    s_endpgm
1695 ; GFX11-LABEL: insertelement_v_v4i16_v_v:
1696 ; GFX11:       ; %bb.0:
1697 ; GFX11-NEXT:    global_load_b64 v[0:1], v[0:1], off
1698 ; GFX11-NEXT:    v_and_b32_e32 v4, 1, v3
1699 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 1, v3
1700 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1701 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, 4, v4
1702 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
1703 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1704 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 0, v6
1705 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_3)
1706 ; GFX11-NEXT:    v_lshlrev_b32_e64 v5, v4, 0xffff
1707 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, v4, v2
1708 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1709 ; GFX11-NEXT:    v_not_b32_e32 v3, v5
1710 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1711 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc_lo
1712 ; GFX11-NEXT:    v_and_or_b32 v4, v4, v3, v2
1713 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1714 ; GFX11-NEXT:    v_mov_b32_e32 v3, 0
1715 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
1716 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc_lo
1717 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s0
1718 ; GFX11-NEXT:    global_store_b64 v[2:3], v[0:1], off
1719 ; GFX11-NEXT:    s_nop 0
1720 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1721 ; GFX11-NEXT:    s_endpgm
1722   %vec = load <4 x i16>, ptr addrspace(1) %ptr
1723   %insert = insertelement <4 x i16> %vec, i16 %val, i32 %idx
1724   store <4 x i16> %insert, ptr addrspace(1) null
1725   ret void
1728 define amdgpu_ps void @insertelement_s_v8i16_s_s(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 inreg %idx) {
1729 ; GFX9-LABEL: insertelement_s_v8i16_s_s:
1730 ; GFX9:       ; %bb.0:
1731 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
1732 ; GFX9-NEXT:    s_lshr_b32 s6, s5, 1
1733 ; GFX9-NEXT:    s_cmp_eq_u32 s6, 1
1734 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
1735 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
1736 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1737 ; GFX9-NEXT:    s_cselect_b32 s7, s1, s0
1738 ; GFX9-NEXT:    s_cmp_eq_u32 s6, 2
1739 ; GFX9-NEXT:    s_cselect_b32 s7, s2, s7
1740 ; GFX9-NEXT:    s_cmp_eq_u32 s6, 3
1741 ; GFX9-NEXT:    s_cselect_b32 s7, s3, s7
1742 ; GFX9-NEXT:    s_and_b32 s5, s5, 1
1743 ; GFX9-NEXT:    s_lshl_b32 s5, s5, 4
1744 ; GFX9-NEXT:    s_and_b32 s4, s4, 0xffff
1745 ; GFX9-NEXT:    s_lshl_b32 s4, s4, s5
1746 ; GFX9-NEXT:    s_lshl_b32 s5, 0xffff, s5
1747 ; GFX9-NEXT:    s_andn2_b32 s5, s7, s5
1748 ; GFX9-NEXT:    s_or_b32 s4, s5, s4
1749 ; GFX9-NEXT:    s_cmp_eq_u32 s6, 0
1750 ; GFX9-NEXT:    s_cselect_b32 s0, s4, s0
1751 ; GFX9-NEXT:    s_cmp_eq_u32 s6, 1
1752 ; GFX9-NEXT:    s_cselect_b32 s1, s4, s1
1753 ; GFX9-NEXT:    s_cmp_eq_u32 s6, 2
1754 ; GFX9-NEXT:    s_cselect_b32 s2, s4, s2
1755 ; GFX9-NEXT:    s_cmp_eq_u32 s6, 3
1756 ; GFX9-NEXT:    s_cselect_b32 s3, s4, s3
1757 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
1758 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
1759 ; GFX9-NEXT:    v_mov_b32_e32 v2, s2
1760 ; GFX9-NEXT:    v_mov_b32_e32 v3, s3
1761 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
1762 ; GFX9-NEXT:    s_endpgm
1764 ; GFX8-LABEL: insertelement_s_v8i16_s_s:
1765 ; GFX8:       ; %bb.0:
1766 ; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
1767 ; GFX8-NEXT:    s_lshr_b32 s6, s5, 1
1768 ; GFX8-NEXT:    s_cmp_eq_u32 s6, 1
1769 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
1770 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
1771 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
1772 ; GFX8-NEXT:    s_cselect_b32 s7, s1, s0
1773 ; GFX8-NEXT:    s_cmp_eq_u32 s6, 2
1774 ; GFX8-NEXT:    s_cselect_b32 s7, s2, s7
1775 ; GFX8-NEXT:    s_cmp_eq_u32 s6, 3
1776 ; GFX8-NEXT:    s_cselect_b32 s7, s3, s7
1777 ; GFX8-NEXT:    s_and_b32 s5, s5, 1
1778 ; GFX8-NEXT:    s_lshl_b32 s5, s5, 4
1779 ; GFX8-NEXT:    s_and_b32 s4, s4, 0xffff
1780 ; GFX8-NEXT:    s_lshl_b32 s4, s4, s5
1781 ; GFX8-NEXT:    s_lshl_b32 s5, 0xffff, s5
1782 ; GFX8-NEXT:    s_andn2_b32 s5, s7, s5
1783 ; GFX8-NEXT:    s_or_b32 s4, s5, s4
1784 ; GFX8-NEXT:    s_cmp_eq_u32 s6, 0
1785 ; GFX8-NEXT:    s_cselect_b32 s0, s4, s0
1786 ; GFX8-NEXT:    s_cmp_eq_u32 s6, 1
1787 ; GFX8-NEXT:    s_cselect_b32 s1, s4, s1
1788 ; GFX8-NEXT:    s_cmp_eq_u32 s6, 2
1789 ; GFX8-NEXT:    s_cselect_b32 s2, s4, s2
1790 ; GFX8-NEXT:    s_cmp_eq_u32 s6, 3
1791 ; GFX8-NEXT:    s_cselect_b32 s3, s4, s3
1792 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
1793 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
1794 ; GFX8-NEXT:    v_mov_b32_e32 v2, s2
1795 ; GFX8-NEXT:    v_mov_b32_e32 v3, s3
1796 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1797 ; GFX8-NEXT:    s_endpgm
1799 ; GFX7-LABEL: insertelement_s_v8i16_s_s:
1800 ; GFX7:       ; %bb.0:
1801 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
1802 ; GFX7-NEXT:    s_lshr_b32 s6, s5, 1
1803 ; GFX7-NEXT:    s_cmp_eq_u32 s6, 1
1804 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
1805 ; GFX7-NEXT:    s_cselect_b32 s7, s1, s0
1806 ; GFX7-NEXT:    s_cmp_eq_u32 s6, 2
1807 ; GFX7-NEXT:    s_cselect_b32 s7, s2, s7
1808 ; GFX7-NEXT:    s_cmp_eq_u32 s6, 3
1809 ; GFX7-NEXT:    s_cselect_b32 s7, s3, s7
1810 ; GFX7-NEXT:    s_and_b32 s5, s5, 1
1811 ; GFX7-NEXT:    s_lshl_b32 s5, s5, 4
1812 ; GFX7-NEXT:    s_and_b32 s4, s4, 0xffff
1813 ; GFX7-NEXT:    s_lshl_b32 s4, s4, s5
1814 ; GFX7-NEXT:    s_lshl_b32 s5, 0xffff, s5
1815 ; GFX7-NEXT:    s_andn2_b32 s5, s7, s5
1816 ; GFX7-NEXT:    s_or_b32 s4, s5, s4
1817 ; GFX7-NEXT:    s_cmp_eq_u32 s6, 0
1818 ; GFX7-NEXT:    s_cselect_b32 s0, s4, s0
1819 ; GFX7-NEXT:    s_cmp_eq_u32 s6, 1
1820 ; GFX7-NEXT:    s_cselect_b32 s1, s4, s1
1821 ; GFX7-NEXT:    s_cmp_eq_u32 s6, 2
1822 ; GFX7-NEXT:    s_cselect_b32 s2, s4, s2
1823 ; GFX7-NEXT:    s_cmp_eq_u32 s6, 3
1824 ; GFX7-NEXT:    s_cselect_b32 s3, s4, s3
1825 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
1826 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
1827 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
1828 ; GFX7-NEXT:    v_mov_b32_e32 v2, s2
1829 ; GFX7-NEXT:    v_mov_b32_e32 v3, s3
1830 ; GFX7-NEXT:    s_mov_b32 s6, -1
1831 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
1832 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
1833 ; GFX7-NEXT:    s_endpgm
1835 ; GFX10-LABEL: insertelement_s_v8i16_s_s:
1836 ; GFX10:       ; %bb.0:
1837 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
1838 ; GFX10-NEXT:    s_lshr_b32 s6, s5, 1
1839 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
1840 ; GFX10-NEXT:    s_cmp_eq_u32 s6, 1
1841 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0
1842 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1843 ; GFX10-NEXT:    s_cselect_b32 s7, s1, s0
1844 ; GFX10-NEXT:    s_cmp_eq_u32 s6, 2
1845 ; GFX10-NEXT:    s_cselect_b32 s7, s2, s7
1846 ; GFX10-NEXT:    s_cmp_eq_u32 s6, 3
1847 ; GFX10-NEXT:    s_cselect_b32 s7, s3, s7
1848 ; GFX10-NEXT:    s_and_b32 s5, s5, 1
1849 ; GFX10-NEXT:    s_and_b32 s4, s4, 0xffff
1850 ; GFX10-NEXT:    s_lshl_b32 s5, s5, 4
1851 ; GFX10-NEXT:    s_lshl_b32 s8, 0xffff, s5
1852 ; GFX10-NEXT:    s_lshl_b32 s4, s4, s5
1853 ; GFX10-NEXT:    s_andn2_b32 s5, s7, s8
1854 ; GFX10-NEXT:    s_or_b32 s4, s5, s4
1855 ; GFX10-NEXT:    s_cmp_eq_u32 s6, 0
1856 ; GFX10-NEXT:    s_cselect_b32 s0, s4, s0
1857 ; GFX10-NEXT:    s_cmp_eq_u32 s6, 1
1858 ; GFX10-NEXT:    s_cselect_b32 s1, s4, s1
1859 ; GFX10-NEXT:    s_cmp_eq_u32 s6, 2
1860 ; GFX10-NEXT:    s_cselect_b32 s2, s4, s2
1861 ; GFX10-NEXT:    s_cmp_eq_u32 s6, 3
1862 ; GFX10-NEXT:    s_cselect_b32 s3, s4, s3
1863 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
1864 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
1865 ; GFX10-NEXT:    v_mov_b32_e32 v2, s2
1866 ; GFX10-NEXT:    v_mov_b32_e32 v3, s3
1867 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
1868 ; GFX10-NEXT:    s_endpgm
1870 ; GFX11-LABEL: insertelement_s_v8i16_s_s:
1871 ; GFX11:       ; %bb.0:
1872 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
1873 ; GFX11-NEXT:    s_lshr_b32 s6, s5, 1
1874 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
1875 ; GFX11-NEXT:    s_cmp_eq_u32 s6, 1
1876 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1877 ; GFX11-NEXT:    s_cselect_b32 s7, s1, s0
1878 ; GFX11-NEXT:    s_cmp_eq_u32 s6, 2
1879 ; GFX11-NEXT:    s_cselect_b32 s7, s2, s7
1880 ; GFX11-NEXT:    s_cmp_eq_u32 s6, 3
1881 ; GFX11-NEXT:    s_cselect_b32 s7, s3, s7
1882 ; GFX11-NEXT:    s_and_b32 s5, s5, 1
1883 ; GFX11-NEXT:    s_and_b32 s4, s4, 0xffff
1884 ; GFX11-NEXT:    s_lshl_b32 s5, s5, 4
1885 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(SALU_CYCLE_1)
1886 ; GFX11-NEXT:    s_lshl_b32 s8, 0xffff, s5
1887 ; GFX11-NEXT:    s_lshl_b32 s4, s4, s5
1888 ; GFX11-NEXT:    s_and_not1_b32 s5, s7, s8
1889 ; GFX11-NEXT:    s_or_b32 s4, s5, s4
1890 ; GFX11-NEXT:    s_cmp_eq_u32 s6, 0
1891 ; GFX11-NEXT:    s_cselect_b32 s0, s4, s0
1892 ; GFX11-NEXT:    s_cmp_eq_u32 s6, 1
1893 ; GFX11-NEXT:    s_cselect_b32 s1, s4, s1
1894 ; GFX11-NEXT:    s_cmp_eq_u32 s6, 2
1895 ; GFX11-NEXT:    s_cselect_b32 s2, s4, s2
1896 ; GFX11-NEXT:    s_cmp_eq_u32 s6, 3
1897 ; GFX11-NEXT:    s_cselect_b32 s3, s4, s3
1898 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0
1899 ; GFX11-NEXT:    v_dual_mov_b32 v5, 0 :: v_dual_mov_b32 v0, s0
1900 ; GFX11-NEXT:    v_dual_mov_b32 v1, s1 :: v_dual_mov_b32 v2, s2
1901 ; GFX11-NEXT:    v_mov_b32_e32 v3, s3
1902 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
1903 ; GFX11-NEXT:    s_nop 0
1904 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
1905 ; GFX11-NEXT:    s_endpgm
1906   %vec = load <8 x i16>, ptr addrspace(4) %ptr
1907   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
1908   store <8 x i16> %insert, ptr addrspace(1) null
1909   ret void
1912 define amdgpu_ps void @insertelement_v_v8i16_s_s(ptr addrspace(1) %ptr, i16 inreg %val, i32 inreg %idx) {
1913 ; GFX9-LABEL: insertelement_v_v8i16_s_s:
1914 ; GFX9:       ; %bb.0:
1915 ; GFX9-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
1916 ; GFX9-NEXT:    s_and_b32 s0, s3, 1
1917 ; GFX9-NEXT:    s_lshr_b32 s4, s3, 1
1918 ; GFX9-NEXT:    s_and_b32 s1, s2, 0xffff
1919 ; GFX9-NEXT:    s_lshl_b32 s0, s0, 4
1920 ; GFX9-NEXT:    s_lshl_b32 s1, s1, s0
1921 ; GFX9-NEXT:    s_lshl_b32 s0, 0xffff, s0
1922 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s4, 1
1923 ; GFX9-NEXT:    s_not_b32 s5, s0
1924 ; GFX9-NEXT:    v_mov_b32_e32 v6, s1
1925 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], s4, 2
1926 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], s4, 3
1927 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
1928 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
1929 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1930 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v0, v1, vcc
1931 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v7, v2, s[0:1]
1932 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v7, v3, s[2:3]
1933 ; GFX9-NEXT:    v_and_or_b32 v6, v7, s5, v6
1934 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], s4, 0
1935 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s[4:5]
1936 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
1937 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
1938 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[2:3]
1939 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
1940 ; GFX9-NEXT:    s_endpgm
1942 ; GFX8-LABEL: insertelement_v_v8i16_s_s:
1943 ; GFX8:       ; %bb.0:
1944 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
1945 ; GFX8-NEXT:    s_and_b32 s0, s3, 1
1946 ; GFX8-NEXT:    s_lshr_b32 s4, s3, 1
1947 ; GFX8-NEXT:    s_and_b32 s1, s2, 0xffff
1948 ; GFX8-NEXT:    s_lshl_b32 s0, s0, 4
1949 ; GFX8-NEXT:    s_lshl_b32 s5, s1, s0
1950 ; GFX8-NEXT:    s_lshl_b32 s0, 0xffff, s0
1951 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s4, 1
1952 ; GFX8-NEXT:    s_not_b32 s6, s0
1953 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], s4, 2
1954 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], s4, 3
1955 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
1956 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
1957 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
1958 ; GFX8-NEXT:    v_cndmask_b32_e32 v6, v0, v1, vcc
1959 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v6, v2, s[0:1]
1960 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v6, v3, s[2:3]
1961 ; GFX8-NEXT:    v_and_b32_e32 v6, s6, v6
1962 ; GFX8-NEXT:    v_or_b32_e32 v6, s5, v6
1963 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], s4, 0
1964 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s[4:5]
1965 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
1966 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
1967 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[2:3]
1968 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1969 ; GFX8-NEXT:    s_endpgm
1971 ; GFX7-LABEL: insertelement_v_v8i16_s_s:
1972 ; GFX7:       ; %bb.0:
1973 ; GFX7-NEXT:    s_mov_b32 s10, 0
1974 ; GFX7-NEXT:    s_mov_b32 s11, 0xf000
1975 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
1976 ; GFX7-NEXT:    buffer_load_dwordx4 v[0:3], v[0:1], s[8:11], 0 addr64
1977 ; GFX7-NEXT:    s_and_b32 s0, s3, 1
1978 ; GFX7-NEXT:    s_lshr_b32 s4, s3, 1
1979 ; GFX7-NEXT:    s_and_b32 s1, s2, 0xffff
1980 ; GFX7-NEXT:    s_lshl_b32 s0, s0, 4
1981 ; GFX7-NEXT:    s_lshl_b32 s5, s1, s0
1982 ; GFX7-NEXT:    s_lshl_b32 s0, 0xffff, s0
1983 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s4, 1
1984 ; GFX7-NEXT:    s_not_b32 s6, s0
1985 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], s4, 2
1986 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], s4, 3
1987 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
1988 ; GFX7-NEXT:    s_mov_b32 s10, -1
1989 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
1990 ; GFX7-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc
1991 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, v4, v2, s[0:1]
1992 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, v4, v3, s[2:3]
1993 ; GFX7-NEXT:    v_and_b32_e32 v4, s6, v4
1994 ; GFX7-NEXT:    v_or_b32_e32 v4, s5, v4
1995 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], s4, 0
1996 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v4, s[4:5]
1997 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
1998 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[0:1]
1999 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v4, s[2:3]
2000 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
2001 ; GFX7-NEXT:    s_endpgm
2003 ; GFX10-LABEL: insertelement_v_v8i16_s_s:
2004 ; GFX10:       ; %bb.0:
2005 ; GFX10-NEXT:    global_load_dwordx4 v[0:3], v[0:1], off
2006 ; GFX10-NEXT:    s_lshr_b32 s4, s3, 1
2007 ; GFX10-NEXT:    s_and_b32 s1, s3, 1
2008 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s4, 1
2009 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, s4, 2
2010 ; GFX10-NEXT:    s_lshl_b32 s3, s1, 4
2011 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, s4, 3
2012 ; GFX10-NEXT:    s_and_b32 s2, s2, 0xffff
2013 ; GFX10-NEXT:    s_lshl_b32 s5, 0xffff, s3
2014 ; GFX10-NEXT:    s_lshl_b32 s2, s2, s3
2015 ; GFX10-NEXT:    s_not_b32 s3, s5
2016 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2017 ; GFX10-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc_lo
2018 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v2, s0
2019 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v3, s1
2020 ; GFX10-NEXT:    v_and_or_b32 v6, v4, s3, s2
2021 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, s4, 0
2022 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
2023 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0
2024 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc_lo
2025 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s2
2026 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s0
2027 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s1
2028 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
2029 ; GFX10-NEXT:    s_endpgm
2031 ; GFX11-LABEL: insertelement_v_v8i16_s_s:
2032 ; GFX11:       ; %bb.0:
2033 ; GFX11-NEXT:    global_load_b128 v[0:3], v[0:1], off
2034 ; GFX11-NEXT:    s_lshr_b32 s4, s3, 1
2035 ; GFX11-NEXT:    s_and_b32 s1, s3, 1
2036 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s4, 1
2037 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, s4, 2
2038 ; GFX11-NEXT:    s_lshl_b32 s3, s1, 4
2039 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, s4, 3
2040 ; GFX11-NEXT:    s_and_b32 s2, s2, 0xffff
2041 ; GFX11-NEXT:    s_lshl_b32 s5, 0xffff, s3
2042 ; GFX11-NEXT:    s_lshl_b32 s2, s2, s3
2043 ; GFX11-NEXT:    s_not_b32 s3, s5
2044 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2045 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc_lo
2046 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2047 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, v4, v2, s0
2048 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, v4, v3, s1
2049 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_4)
2050 ; GFX11-NEXT:    v_and_or_b32 v6, v4, s3, s2
2051 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, s4, 0
2052 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0
2053 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0
2054 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc_lo
2055 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2056 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s2
2057 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s0
2058 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s1
2059 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
2060 ; GFX11-NEXT:    s_nop 0
2061 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2062 ; GFX11-NEXT:    s_endpgm
2063   %vec = load <8 x i16>, ptr addrspace(1 ) %ptr
2064   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
2065   store <8 x i16> %insert, ptr addrspace(1) null
2066   ret void
2069 define amdgpu_ps void @insertelement_s_v8i16_v_s(ptr addrspace(4) inreg %ptr, i16 %val, i32 inreg %idx) {
2070 ; GFX9-LABEL: insertelement_s_v8i16_v_s:
2071 ; GFX9:       ; %bb.0:
2072 ; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
2073 ; GFX9-NEXT:    s_lshr_b32 s5, s4, 1
2074 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 1
2075 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
2076 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 0
2077 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2078 ; GFX9-NEXT:    s_cselect_b32 s6, s1, s0
2079 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 2
2080 ; GFX9-NEXT:    s_cselect_b32 s6, s2, s6
2081 ; GFX9-NEXT:    s_cmp_eq_u32 s5, 3
2082 ; GFX9-NEXT:    s_cselect_b32 s6, s3, s6
2083 ; GFX9-NEXT:    s_and_b32 s4, s4, 1
2084 ; GFX9-NEXT:    s_lshl_b32 s4, s4, 4
2085 ; GFX9-NEXT:    s_lshl_b32 s7, 0xffff, s4
2086 ; GFX9-NEXT:    s_andn2_b32 s6, s6, s7
2087 ; GFX9-NEXT:    v_mov_b32_e32 v1, s6
2088 ; GFX9-NEXT:    v_lshl_or_b32 v6, v0, s4, v1
2089 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
2090 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
2091 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc
2092 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 1
2093 ; GFX9-NEXT:    v_mov_b32_e32 v2, s2
2094 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2095 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 2
2096 ; GFX9-NEXT:    v_mov_b32_e32 v3, s3
2097 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
2098 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
2099 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 3
2100 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
2101 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc
2102 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
2103 ; GFX9-NEXT:    s_endpgm
2105 ; GFX8-LABEL: insertelement_s_v8i16_v_s:
2106 ; GFX8:       ; %bb.0:
2107 ; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
2108 ; GFX8-NEXT:    s_lshr_b32 s5, s4, 1
2109 ; GFX8-NEXT:    s_cmp_eq_u32 s5, 1
2110 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 0
2111 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
2112 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
2113 ; GFX8-NEXT:    s_cselect_b32 s6, s1, s0
2114 ; GFX8-NEXT:    s_cmp_eq_u32 s5, 2
2115 ; GFX8-NEXT:    s_cselect_b32 s6, s2, s6
2116 ; GFX8-NEXT:    s_cmp_eq_u32 s5, 3
2117 ; GFX8-NEXT:    s_cselect_b32 s6, s3, s6
2118 ; GFX8-NEXT:    s_and_b32 s4, s4, 1
2119 ; GFX8-NEXT:    s_lshl_b32 s4, s4, 4
2120 ; GFX8-NEXT:    v_mov_b32_e32 v1, s4
2121 ; GFX8-NEXT:    s_lshl_b32 s4, 0xffff, s4
2122 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2123 ; GFX8-NEXT:    s_andn2_b32 s4, s6, s4
2124 ; GFX8-NEXT:    v_or_b32_e32 v6, s4, v0
2125 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
2126 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
2127 ; GFX8-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc
2128 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 1
2129 ; GFX8-NEXT:    v_mov_b32_e32 v2, s2
2130 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2131 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 2
2132 ; GFX8-NEXT:    v_mov_b32_e32 v3, s3
2133 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc
2134 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 3
2135 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
2136 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc
2137 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2138 ; GFX8-NEXT:    s_endpgm
2140 ; GFX7-LABEL: insertelement_s_v8i16_v_s:
2141 ; GFX7:       ; %bb.0:
2142 ; GFX7-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
2143 ; GFX7-NEXT:    s_lshr_b32 s5, s4, 1
2144 ; GFX7-NEXT:    s_cmp_eq_u32 s5, 1
2145 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
2146 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 0
2147 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
2148 ; GFX7-NEXT:    s_cselect_b32 s6, s1, s0
2149 ; GFX7-NEXT:    s_cmp_eq_u32 s5, 2
2150 ; GFX7-NEXT:    s_cselect_b32 s6, s2, s6
2151 ; GFX7-NEXT:    s_cmp_eq_u32 s5, 3
2152 ; GFX7-NEXT:    s_cselect_b32 s6, s3, s6
2153 ; GFX7-NEXT:    s_and_b32 s4, s4, 1
2154 ; GFX7-NEXT:    s_lshl_b32 s4, s4, 4
2155 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s4, v0
2156 ; GFX7-NEXT:    s_lshl_b32 s4, 0xffff, s4
2157 ; GFX7-NEXT:    s_andn2_b32 s4, s6, s4
2158 ; GFX7-NEXT:    v_or_b32_e32 v4, s4, v0
2159 ; GFX7-NEXT:    v_mov_b32_e32 v0, s0
2160 ; GFX7-NEXT:    v_mov_b32_e32 v1, s1
2161 ; GFX7-NEXT:    v_cndmask_b32_e32 v0, v0, v4, vcc
2162 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 1
2163 ; GFX7-NEXT:    v_mov_b32_e32 v2, s2
2164 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v4, vcc
2165 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 2
2166 ; GFX7-NEXT:    v_mov_b32_e32 v3, s3
2167 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v4, vcc
2168 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s5, 3
2169 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v3, v4, vcc
2170 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
2171 ; GFX7-NEXT:    s_mov_b32 s2, -1
2172 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
2173 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
2174 ; GFX7-NEXT:    s_endpgm
2176 ; GFX10-LABEL: insertelement_s_v8i16_v_s:
2177 ; GFX10:       ; %bb.0:
2178 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
2179 ; GFX10-NEXT:    s_lshr_b32 s5, s4, 1
2180 ; GFX10-NEXT:    v_and_b32_e32 v4, 0xffff, v0
2181 ; GFX10-NEXT:    s_cmp_eq_u32 s5, 1
2182 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 0
2183 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2184 ; GFX10-NEXT:    s_cselect_b32 s6, s1, s0
2185 ; GFX10-NEXT:    s_cmp_eq_u32 s5, 2
2186 ; GFX10-NEXT:    v_mov_b32_e32 v0, s0
2187 ; GFX10-NEXT:    s_cselect_b32 s6, s2, s6
2188 ; GFX10-NEXT:    s_cmp_eq_u32 s5, 3
2189 ; GFX10-NEXT:    v_mov_b32_e32 v1, s1
2190 ; GFX10-NEXT:    s_cselect_b32 s6, s3, s6
2191 ; GFX10-NEXT:    s_and_b32 s4, s4, 1
2192 ; GFX10-NEXT:    v_mov_b32_e32 v2, s2
2193 ; GFX10-NEXT:    s_lshl_b32 s4, s4, 4
2194 ; GFX10-NEXT:    v_mov_b32_e32 v3, s3
2195 ; GFX10-NEXT:    s_lshl_b32 s7, 0xffff, s4
2196 ; GFX10-NEXT:    s_andn2_b32 s6, s6, s7
2197 ; GFX10-NEXT:    v_lshl_or_b32 v6, v4, s4, s6
2198 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
2199 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0
2200 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc_lo
2201 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 1
2202 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc_lo
2203 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 2
2204 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc_lo
2205 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 3
2206 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc_lo
2207 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
2208 ; GFX10-NEXT:    s_endpgm
2210 ; GFX11-LABEL: insertelement_s_v8i16_v_s:
2211 ; GFX11:       ; %bb.0:
2212 ; GFX11-NEXT:    s_load_b128 s[0:3], s[2:3], 0x0
2213 ; GFX11-NEXT:    s_lshr_b32 s5, s4, 1
2214 ; GFX11-NEXT:    v_and_b32_e32 v4, 0xffff, v0
2215 ; GFX11-NEXT:    s_cmp_eq_u32 s5, 1
2216 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 0
2217 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2218 ; GFX11-NEXT:    s_cselect_b32 s6, s1, s0
2219 ; GFX11-NEXT:    s_cmp_eq_u32 s5, 2
2220 ; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v3, s3
2221 ; GFX11-NEXT:    s_cselect_b32 s6, s2, s6
2222 ; GFX11-NEXT:    s_cmp_eq_u32 s5, 3
2223 ; GFX11-NEXT:    v_mov_b32_e32 v1, s1
2224 ; GFX11-NEXT:    s_cselect_b32 s6, s3, s6
2225 ; GFX11-NEXT:    s_and_b32 s4, s4, 1
2226 ; GFX11-NEXT:    v_mov_b32_e32 v2, s2
2227 ; GFX11-NEXT:    s_lshl_b32 s4, s4, 4
2228 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
2229 ; GFX11-NEXT:    s_lshl_b32 s7, 0xffff, s4
2230 ; GFX11-NEXT:    s_and_not1_b32 s6, s6, s7
2231 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2232 ; GFX11-NEXT:    v_lshl_or_b32 v6, v4, s4, s6
2233 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v0, v6, vcc_lo
2234 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 1
2235 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0
2236 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0
2237 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc_lo
2238 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 2
2239 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v2, v6, vcc_lo
2240 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s5, 3
2241 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, v3, v6, vcc_lo
2242 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
2243 ; GFX11-NEXT:    s_nop 0
2244 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2245 ; GFX11-NEXT:    s_endpgm
2246   %vec = load <8 x i16>, ptr addrspace(4) %ptr
2247   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
2248   store <8 x i16> %insert, ptr addrspace(1) null
2249   ret void
2252 define amdgpu_ps void @insertelement_s_v8i16_s_v(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 %idx) {
2253 ; GFX9-LABEL: insertelement_s_v8i16_s_v:
2254 ; GFX9:       ; %bb.0:
2255 ; GFX9-NEXT:    s_load_dwordx4 s[8:11], s[2:3], 0x0
2256 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 1, v0
2257 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
2258 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
2259 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v4
2260 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2261 ; GFX9-NEXT:    v_mov_b32_e32 v1, s8
2262 ; GFX9-NEXT:    v_mov_b32_e32 v2, s9
2263 ; GFX9-NEXT:    v_mov_b32_e32 v3, s10
2264 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
2265 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2266 ; GFX9-NEXT:    s_mov_b32 s5, 0xffff
2267 ; GFX9-NEXT:    s_and_b32 s4, s4, 0xffff
2268 ; GFX9-NEXT:    v_mov_b32_e32 v5, s11
2269 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
2270 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v4
2271 ; GFX9-NEXT:    v_lshlrev_b32_e64 v2, v0, s4
2272 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, v0, s5
2273 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[2:3]
2274 ; GFX9-NEXT:    v_not_b32_e32 v0, v0
2275 ; GFX9-NEXT:    v_and_or_b32 v6, v1, v0, v2
2276 ; GFX9-NEXT:    v_mov_b32_e32 v0, s8
2277 ; GFX9-NEXT:    v_mov_b32_e32 v1, s9
2278 ; GFX9-NEXT:    v_mov_b32_e32 v2, s10
2279 ; GFX9-NEXT:    v_mov_b32_e32 v3, s11
2280 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
2281 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
2282 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s[4:5]
2283 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2284 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
2285 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
2286 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[2:3]
2287 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
2288 ; GFX9-NEXT:    s_endpgm
2290 ; GFX8-LABEL: insertelement_s_v8i16_s_v:
2291 ; GFX8:       ; %bb.0:
2292 ; GFX8-NEXT:    s_load_dwordx4 s[8:11], s[2:3], 0x0
2293 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 1, v0
2294 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
2295 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
2296 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v4
2297 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
2298 ; GFX8-NEXT:    v_mov_b32_e32 v1, s8
2299 ; GFX8-NEXT:    v_mov_b32_e32 v2, s9
2300 ; GFX8-NEXT:    v_mov_b32_e32 v3, s10
2301 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
2302 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2303 ; GFX8-NEXT:    s_mov_b32 s5, 0xffff
2304 ; GFX8-NEXT:    s_and_b32 s4, s4, 0xffff
2305 ; GFX8-NEXT:    v_mov_b32_e32 v5, s11
2306 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
2307 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v4
2308 ; GFX8-NEXT:    v_lshlrev_b32_e64 v2, v0, s4
2309 ; GFX8-NEXT:    v_lshlrev_b32_e64 v0, v0, s5
2310 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[2:3]
2311 ; GFX8-NEXT:    v_not_b32_e32 v0, v0
2312 ; GFX8-NEXT:    v_and_b32_e32 v0, v1, v0
2313 ; GFX8-NEXT:    v_or_b32_e32 v6, v0, v2
2314 ; GFX8-NEXT:    v_mov_b32_e32 v0, s8
2315 ; GFX8-NEXT:    v_mov_b32_e32 v1, s9
2316 ; GFX8-NEXT:    v_mov_b32_e32 v2, s10
2317 ; GFX8-NEXT:    v_mov_b32_e32 v3, s11
2318 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
2319 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
2320 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s[4:5]
2321 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2322 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
2323 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
2324 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[2:3]
2325 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2326 ; GFX8-NEXT:    s_endpgm
2328 ; GFX7-LABEL: insertelement_s_v8i16_s_v:
2329 ; GFX7:       ; %bb.0:
2330 ; GFX7-NEXT:    s_load_dwordx4 s[8:11], s[2:3], 0x0
2331 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 1, v0
2332 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
2333 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
2334 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v4
2335 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
2336 ; GFX7-NEXT:    v_mov_b32_e32 v1, s8
2337 ; GFX7-NEXT:    v_mov_b32_e32 v2, s9
2338 ; GFX7-NEXT:    v_mov_b32_e32 v3, s10
2339 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
2340 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2341 ; GFX7-NEXT:    s_and_b32 s4, s4, 0xffff
2342 ; GFX7-NEXT:    v_mov_b32_e32 v5, s11
2343 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
2344 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v4
2345 ; GFX7-NEXT:    v_lshl_b32_e32 v2, s4, v0
2346 ; GFX7-NEXT:    v_lshl_b32_e32 v0, 0xffff, v0
2347 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[2:3]
2348 ; GFX7-NEXT:    v_not_b32_e32 v0, v0
2349 ; GFX7-NEXT:    v_and_b32_e32 v0, v1, v0
2350 ; GFX7-NEXT:    v_or_b32_e32 v5, v0, v2
2351 ; GFX7-NEXT:    v_mov_b32_e32 v0, s8
2352 ; GFX7-NEXT:    v_mov_b32_e32 v1, s9
2353 ; GFX7-NEXT:    v_mov_b32_e32 v2, s10
2354 ; GFX7-NEXT:    v_mov_b32_e32 v3, s11
2355 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
2356 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s[4:5]
2357 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
2358 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[0:1]
2359 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s[2:3]
2360 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
2361 ; GFX7-NEXT:    s_mov_b32 s2, -1
2362 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
2363 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
2364 ; GFX7-NEXT:    s_endpgm
2366 ; GFX10-LABEL: insertelement_s_v8i16_s_v:
2367 ; GFX10:       ; %bb.0:
2368 ; GFX10-NEXT:    s_load_dwordx4 s[8:11], s[2:3], 0x0
2369 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 1, v0
2370 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v0
2371 ; GFX10-NEXT:    s_and_b32 s1, s4, 0xffff
2372 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
2373 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2374 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v6
2375 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 0, v6
2376 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v1, 0xffff
2377 ; GFX10-NEXT:    v_lshlrev_b32_e64 v4, v1, s1
2378 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v6
2379 ; GFX10-NEXT:    v_not_b32_e32 v5, v2
2380 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2381 ; GFX10-NEXT:    v_mov_b32_e32 v0, s9
2382 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, s8, v0, vcc_lo
2383 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, s10, s0
2384 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v0, s11, s1
2385 ; GFX10-NEXT:    v_mov_b32_e32 v0, s8
2386 ; GFX10-NEXT:    v_mov_b32_e32 v1, s9
2387 ; GFX10-NEXT:    v_mov_b32_e32 v2, s10
2388 ; GFX10-NEXT:    v_mov_b32_e32 v3, s11
2389 ; GFX10-NEXT:    v_and_or_b32 v7, v7, v5, v4
2390 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
2391 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0
2392 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v7, s2
2393 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc_lo
2394 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s0
2395 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s1
2396 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
2397 ; GFX10-NEXT:    s_endpgm
2399 ; GFX11-LABEL: insertelement_s_v8i16_s_v:
2400 ; GFX11:       ; %bb.0:
2401 ; GFX11-NEXT:    s_load_b128 s[8:11], s[2:3], 0x0
2402 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 1, v0
2403 ; GFX11-NEXT:    v_and_b32_e32 v1, 1, v0
2404 ; GFX11-NEXT:    s_and_b32 s1, s4, 0xffff
2405 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_1)
2406 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
2407 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v6
2408 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 0, v6
2409 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2410 ; GFX11-NEXT:    v_dual_mov_b32 v0, s9 :: v_dual_lshlrev_b32 v1, 4, v1
2411 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, s8, v0, vcc_lo
2412 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_4)
2413 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v1, 0xffff
2414 ; GFX11-NEXT:    v_lshlrev_b32_e64 v4, v1, s1
2415 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v6
2416 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, s10, s0
2417 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_2)
2418 ; GFX11-NEXT:    v_not_b32_e32 v5, v2
2419 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v0, s11, s1
2420 ; GFX11-NEXT:    v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v1, s9
2421 ; GFX11-NEXT:    v_dual_mov_b32 v2, s10 :: v_dual_mov_b32 v3, s11
2422 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
2423 ; GFX11-NEXT:    v_and_or_b32 v7, v7, v5, v4
2424 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0
2425 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0
2426 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc_lo
2427 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v7, s2
2428 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s0
2429 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s1
2430 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
2431 ; GFX11-NEXT:    s_nop 0
2432 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2433 ; GFX11-NEXT:    s_endpgm
2434   %vec = load <8 x i16>, ptr addrspace(4) %ptr
2435   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
2436   store <8 x i16> %insert, ptr addrspace(1) null
2437   ret void
2440 define amdgpu_ps void @insertelement_s_v8i16_v_v(ptr addrspace(4) inreg %ptr, i16 %val, i32 %idx) {
2441 ; GFX9-LABEL: insertelement_s_v8i16_v_v:
2442 ; GFX9:       ; %bb.0:
2443 ; GFX9-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
2444 ; GFX9-NEXT:    v_lshrrev_b32_e32 v4, 1, v1
2445 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
2446 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
2447 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v4
2448 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
2449 ; GFX9-NEXT:    v_mov_b32_e32 v2, s4
2450 ; GFX9-NEXT:    v_mov_b32_e32 v3, s5
2451 ; GFX9-NEXT:    v_mov_b32_e32 v5, s6
2452 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2453 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2454 ; GFX9-NEXT:    s_mov_b32 s8, 0xffff
2455 ; GFX9-NEXT:    v_mov_b32_e32 v6, s7
2456 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[0:1]
2457 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v4
2458 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2459 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s8
2460 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[2:3]
2461 ; GFX9-NEXT:    v_not_b32_e32 v1, v1
2462 ; GFX9-NEXT:    v_and_or_b32 v6, v2, v1, v0
2463 ; GFX9-NEXT:    v_mov_b32_e32 v0, s4
2464 ; GFX9-NEXT:    v_mov_b32_e32 v1, s5
2465 ; GFX9-NEXT:    v_mov_b32_e32 v2, s6
2466 ; GFX9-NEXT:    v_mov_b32_e32 v3, s7
2467 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
2468 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
2469 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s[4:5]
2470 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2471 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
2472 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
2473 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[2:3]
2474 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
2475 ; GFX9-NEXT:    s_endpgm
2477 ; GFX8-LABEL: insertelement_s_v8i16_v_v:
2478 ; GFX8:       ; %bb.0:
2479 ; GFX8-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
2480 ; GFX8-NEXT:    v_lshrrev_b32_e32 v4, 1, v1
2481 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
2482 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v1
2483 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v4
2484 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
2485 ; GFX8-NEXT:    v_mov_b32_e32 v2, s4
2486 ; GFX8-NEXT:    v_mov_b32_e32 v3, s5
2487 ; GFX8-NEXT:    v_mov_b32_e32 v5, s6
2488 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2489 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2490 ; GFX8-NEXT:    s_mov_b32 s8, 0xffff
2491 ; GFX8-NEXT:    v_mov_b32_e32 v6, s7
2492 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[0:1]
2493 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v4
2494 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2495 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s8
2496 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[2:3]
2497 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
2498 ; GFX8-NEXT:    v_and_b32_e32 v1, v2, v1
2499 ; GFX8-NEXT:    v_or_b32_e32 v6, v1, v0
2500 ; GFX8-NEXT:    v_mov_b32_e32 v0, s4
2501 ; GFX8-NEXT:    v_mov_b32_e32 v1, s5
2502 ; GFX8-NEXT:    v_mov_b32_e32 v2, s6
2503 ; GFX8-NEXT:    v_mov_b32_e32 v3, s7
2504 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
2505 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
2506 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s[4:5]
2507 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v6, vcc
2508 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[0:1]
2509 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
2510 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[2:3]
2511 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2512 ; GFX8-NEXT:    s_endpgm
2514 ; GFX7-LABEL: insertelement_s_v8i16_v_v:
2515 ; GFX7:       ; %bb.0:
2516 ; GFX7-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
2517 ; GFX7-NEXT:    v_lshrrev_b32_e32 v4, 1, v1
2518 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v4
2519 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
2520 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v4
2521 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
2522 ; GFX7-NEXT:    v_mov_b32_e32 v2, s4
2523 ; GFX7-NEXT:    v_mov_b32_e32 v3, s5
2524 ; GFX7-NEXT:    v_mov_b32_e32 v5, s6
2525 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
2526 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2527 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
2528 ; GFX7-NEXT:    v_mov_b32_e32 v6, s7
2529 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[0:1]
2530 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v4
2531 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, v1, v0
2532 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
2533 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[2:3]
2534 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
2535 ; GFX7-NEXT:    v_and_b32_e32 v1, v2, v1
2536 ; GFX7-NEXT:    v_or_b32_e32 v5, v1, v0
2537 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
2538 ; GFX7-NEXT:    v_mov_b32_e32 v1, s5
2539 ; GFX7-NEXT:    v_mov_b32_e32 v2, s6
2540 ; GFX7-NEXT:    v_mov_b32_e32 v3, s7
2541 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v4
2542 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s[4:5]
2543 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v5, vcc
2544 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[0:1]
2545 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v5, s[2:3]
2546 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
2547 ; GFX7-NEXT:    s_mov_b32 s2, -1
2548 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
2549 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
2550 ; GFX7-NEXT:    s_endpgm
2552 ; GFX10-LABEL: insertelement_s_v8i16_v_v:
2553 ; GFX10:       ; %bb.0:
2554 ; GFX10-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
2555 ; GFX10-NEXT:    v_lshrrev_b32_e32 v6, 1, v1
2556 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v1
2557 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
2558 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
2559 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v6
2560 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v6
2561 ; GFX10-NEXT:    s_mov_b32 null, 0
2562 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 0, v6
2563 ; GFX10-NEXT:    v_lshlrev_b32_e64 v3, v2, 0xffff
2564 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v4, v2, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2565 ; GFX10-NEXT:    v_not_b32_e32 v5, v3
2566 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2567 ; GFX10-NEXT:    v_mov_b32_e32 v1, s5
2568 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, s4, v1, vcc_lo
2569 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, s6, s0
2570 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v1, s7, s1
2571 ; GFX10-NEXT:    v_mov_b32_e32 v0, s4
2572 ; GFX10-NEXT:    v_mov_b32_e32 v1, s5
2573 ; GFX10-NEXT:    v_mov_b32_e32 v2, s6
2574 ; GFX10-NEXT:    v_mov_b32_e32 v3, s7
2575 ; GFX10-NEXT:    v_and_or_b32 v7, v7, v5, v4
2576 ; GFX10-NEXT:    v_mov_b32_e32 v4, 0
2577 ; GFX10-NEXT:    v_mov_b32_e32 v5, 0
2578 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v7, s2
2579 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc_lo
2580 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s0
2581 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s1
2582 ; GFX10-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
2583 ; GFX10-NEXT:    s_endpgm
2585 ; GFX11-LABEL: insertelement_s_v8i16_v_v:
2586 ; GFX11:       ; %bb.0:
2587 ; GFX11-NEXT:    s_load_b128 s[4:7], s[2:3], 0x0
2588 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 1, v1
2589 ; GFX11-NEXT:    v_and_b32_e32 v2, 1, v1
2590 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
2591 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
2592 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v6
2593 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v6
2594 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v6
2595 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 0, v6
2596 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2597 ; GFX11-NEXT:    v_dual_mov_b32 v1, s5 :: v_dual_lshlrev_b32 v2, 4, v2
2598 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2599 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, s4, v1, vcc_lo
2600 ; GFX11-NEXT:    v_lshlrev_b32_e64 v3, v2, 0xffff
2601 ; GFX11-NEXT:    v_lshlrev_b32_e32 v4, v2, v0
2602 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
2603 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s6, s0
2604 ; GFX11-NEXT:    v_not_b32_e32 v5, v3
2605 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
2606 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v1, s7, s1
2607 ; GFX11-NEXT:    v_dual_mov_b32 v0, s4 :: v_dual_mov_b32 v1, s5
2608 ; GFX11-NEXT:    v_mov_b32_e32 v3, s7
2609 ; GFX11-NEXT:    v_and_or_b32 v7, v7, v5, v4
2610 ; GFX11-NEXT:    v_mov_b32_e32 v2, s6
2611 ; GFX11-NEXT:    v_mov_b32_e32 v4, 0
2612 ; GFX11-NEXT:    v_mov_b32_e32 v5, 0
2613 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4)
2614 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v7, vcc_lo
2615 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v7, s2
2616 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s0
2617 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s1
2618 ; GFX11-NEXT:    global_store_b128 v[4:5], v[0:3], off
2619 ; GFX11-NEXT:    s_nop 0
2620 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2621 ; GFX11-NEXT:    s_endpgm
2622   %vec = load <8 x i16>, ptr addrspace(4) %ptr
2623   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
2624   store <8 x i16> %insert, ptr addrspace(1) null
2625   ret void
2628 define amdgpu_ps void @insertelement_v_v8i16_s_v(ptr addrspace(1) %ptr, i16 inreg %val, i32 %idx) {
2629 ; GFX9-LABEL: insertelement_v_v8i16_s_v:
2630 ; GFX9:       ; %bb.0:
2631 ; GFX9-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
2632 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
2633 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v2
2634 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
2635 ; GFX9-NEXT:    s_and_b32 s1, s2, 0xffff
2636 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2637 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
2638 ; GFX9-NEXT:    v_lshlrev_b32_e64 v2, v1, s1
2639 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
2640 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
2641 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
2642 ; GFX9-NEXT:    v_not_b32_e32 v1, v1
2643 ; GFX9-NEXT:    v_mov_b32_e32 v7, 0
2644 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v0
2645 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
2646 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2647 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v3, v4, vcc
2648 ; GFX9-NEXT:    v_cndmask_b32_e64 v9, v9, v5, s[0:1]
2649 ; GFX9-NEXT:    v_cndmask_b32_e64 v9, v9, v6, s[2:3]
2650 ; GFX9-NEXT:    v_and_or_b32 v9, v9, v1, v2
2651 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s[4:5]
2652 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc
2653 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s[0:1]
2654 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s[2:3]
2655 ; GFX9-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off
2656 ; GFX9-NEXT:    s_endpgm
2658 ; GFX8-LABEL: insertelement_v_v8i16_s_v:
2659 ; GFX8:       ; %bb.0:
2660 ; GFX8-NEXT:    flat_load_dwordx4 v[3:6], v[0:1]
2661 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
2662 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v2
2663 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
2664 ; GFX8-NEXT:    s_and_b32 s1, s2, 0xffff
2665 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2666 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
2667 ; GFX8-NEXT:    v_lshlrev_b32_e64 v2, v1, s1
2668 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
2669 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
2670 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
2671 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
2672 ; GFX8-NEXT:    v_mov_b32_e32 v7, 0
2673 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v0
2674 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
2675 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2676 ; GFX8-NEXT:    v_cndmask_b32_e32 v9, v3, v4, vcc
2677 ; GFX8-NEXT:    v_cndmask_b32_e64 v9, v9, v5, s[0:1]
2678 ; GFX8-NEXT:    v_cndmask_b32_e64 v9, v9, v6, s[2:3]
2679 ; GFX8-NEXT:    v_and_b32_e32 v1, v9, v1
2680 ; GFX8-NEXT:    v_or_b32_e32 v9, v1, v2
2681 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s[4:5]
2682 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc
2683 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s[0:1]
2684 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s[2:3]
2685 ; GFX8-NEXT:    flat_store_dwordx4 v[7:8], v[0:3]
2686 ; GFX8-NEXT:    s_endpgm
2688 ; GFX7-LABEL: insertelement_v_v8i16_s_v:
2689 ; GFX7:       ; %bb.0:
2690 ; GFX7-NEXT:    s_mov_b32 s10, 0
2691 ; GFX7-NEXT:    s_mov_b32 s11, 0xf000
2692 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
2693 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[0:1], s[8:11], 0 addr64
2694 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
2695 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v2
2696 ; GFX7-NEXT:    s_and_b32 s0, s2, 0xffff
2697 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2698 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
2699 ; GFX7-NEXT:    v_lshl_b32_e32 v2, s0, v1
2700 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
2701 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
2702 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
2703 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
2704 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v0
2705 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
2706 ; GFX7-NEXT:    s_mov_b32 s10, -1
2707 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2708 ; GFX7-NEXT:    v_cndmask_b32_e32 v7, v3, v4, vcc
2709 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, v7, v5, s[0:1]
2710 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, v7, v6, s[2:3]
2711 ; GFX7-NEXT:    v_and_b32_e32 v1, v7, v1
2712 ; GFX7-NEXT:    v_or_b32_e32 v7, v1, v2
2713 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v3, v7, s[4:5]
2714 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v4, v7, vcc
2715 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v5, v7, s[0:1]
2716 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v6, v7, s[2:3]
2717 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
2718 ; GFX7-NEXT:    s_endpgm
2720 ; GFX10-LABEL: insertelement_v_v8i16_s_v:
2721 ; GFX10:       ; %bb.0:
2722 ; GFX10-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
2723 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 1, v2
2724 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v2
2725 ; GFX10-NEXT:    s_and_b32 s1, s2, 0xffff
2726 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
2727 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2728 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v1
2729 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 0, v1
2730 ; GFX10-NEXT:    v_lshlrev_b32_e64 v7, v0, 0xffff
2731 ; GFX10-NEXT:    v_lshlrev_b32_e64 v0, v0, s1
2732 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v1
2733 ; GFX10-NEXT:    v_not_b32_e32 v7, v7
2734 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2735 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
2736 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s0
2737 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s1
2738 ; GFX10-NEXT:    v_and_or_b32 v9, v2, v7, v0
2739 ; GFX10-NEXT:    v_mov_b32_e32 v7, 0
2740 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
2741 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s2
2742 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc_lo
2743 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s0
2744 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s1
2745 ; GFX10-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off
2746 ; GFX10-NEXT:    s_endpgm
2748 ; GFX11-LABEL: insertelement_v_v8i16_s_v:
2749 ; GFX11:       ; %bb.0:
2750 ; GFX11-NEXT:    global_load_b128 v[3:6], v[0:1], off
2751 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 1, v2
2752 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v2
2753 ; GFX11-NEXT:    s_and_b32 s1, s2, 0xffff
2754 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2755 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
2756 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
2757 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v1
2758 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 0, v1
2759 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
2760 ; GFX11-NEXT:    v_lshlrev_b32_e64 v7, v0, 0xffff
2761 ; GFX11-NEXT:    v_lshlrev_b32_e64 v0, v0, s1
2762 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v1
2763 ; GFX11-NEXT:    v_not_b32_e32 v7, v7
2764 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2765 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc_lo
2766 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2767 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s0
2768 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s1
2769 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2770 ; GFX11-NEXT:    v_and_or_b32 v9, v2, v7, v0
2771 ; GFX11-NEXT:    v_mov_b32_e32 v7, 0
2772 ; GFX11-NEXT:    v_dual_mov_b32 v8, 0 :: v_dual_cndmask_b32 v1, v4, v9
2773 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s2
2774 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s0
2775 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s1
2776 ; GFX11-NEXT:    global_store_b128 v[7:8], v[0:3], off
2777 ; GFX11-NEXT:    s_nop 0
2778 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2779 ; GFX11-NEXT:    s_endpgm
2780   %vec = load <8 x i16>, ptr addrspace(1) %ptr
2781   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
2782   store <8 x i16> %insert, ptr addrspace(1) null
2783   ret void
2786 define amdgpu_ps void @insertelement_v_v8i16_v_s(ptr addrspace(1) %ptr, i16 %val, i32 inreg %idx) {
2787 ; GFX9-LABEL: insertelement_v_v8i16_v_s:
2788 ; GFX9:       ; %bb.0:
2789 ; GFX9-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
2790 ; GFX9-NEXT:    s_and_b32 s0, s2, 1
2791 ; GFX9-NEXT:    s_lshr_b32 s4, s2, 1
2792 ; GFX9-NEXT:    s_lshl_b32 s0, s0, 4
2793 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v0, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2794 ; GFX9-NEXT:    s_lshl_b32 s0, 0xffff, s0
2795 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s4, 1
2796 ; GFX9-NEXT:    s_not_b32 s5, s0
2797 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], s4, 2
2798 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], s4, 3
2799 ; GFX9-NEXT:    v_mov_b32_e32 v7, 0
2800 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
2801 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2802 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
2803 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[0:1]
2804 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[2:3]
2805 ; GFX9-NEXT:    v_and_or_b32 v9, v1, s5, v0
2806 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], s4, 0
2807 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s[4:5]
2808 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc
2809 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s[0:1]
2810 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s[2:3]
2811 ; GFX9-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off
2812 ; GFX9-NEXT:    s_endpgm
2814 ; GFX8-LABEL: insertelement_v_v8i16_v_s:
2815 ; GFX8:       ; %bb.0:
2816 ; GFX8-NEXT:    flat_load_dwordx4 v[3:6], v[0:1]
2817 ; GFX8-NEXT:    s_and_b32 s0, s2, 1
2818 ; GFX8-NEXT:    s_lshr_b32 s4, s2, 1
2819 ; GFX8-NEXT:    s_lshl_b32 s0, s0, 4
2820 ; GFX8-NEXT:    v_mov_b32_e32 v0, s0
2821 ; GFX8-NEXT:    s_lshl_b32 s0, 0xffff, s0
2822 ; GFX8-NEXT:    v_cmp_eq_u32_e64 vcc, s4, 1
2823 ; GFX8-NEXT:    s_not_b32 s5, s0
2824 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], s4, 2
2825 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], s4, 3
2826 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2827 ; GFX8-NEXT:    v_mov_b32_e32 v7, 0
2828 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
2829 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2830 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
2831 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[0:1]
2832 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[2:3]
2833 ; GFX8-NEXT:    v_and_b32_e32 v1, s5, v1
2834 ; GFX8-NEXT:    v_or_b32_e32 v9, v1, v0
2835 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], s4, 0
2836 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s[4:5]
2837 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc
2838 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s[0:1]
2839 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s[2:3]
2840 ; GFX8-NEXT:    flat_store_dwordx4 v[7:8], v[0:3]
2841 ; GFX8-NEXT:    s_endpgm
2843 ; GFX7-LABEL: insertelement_v_v8i16_v_s:
2844 ; GFX7:       ; %bb.0:
2845 ; GFX7-NEXT:    s_mov_b32 s10, 0
2846 ; GFX7-NEXT:    s_mov_b32 s11, 0xf000
2847 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
2848 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[0:1], s[8:11], 0 addr64
2849 ; GFX7-NEXT:    s_and_b32 s0, s2, 1
2850 ; GFX7-NEXT:    s_lshr_b32 s4, s2, 1
2851 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v2
2852 ; GFX7-NEXT:    s_lshl_b32 s0, s0, 4
2853 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s0, v0
2854 ; GFX7-NEXT:    s_lshl_b32 s0, 0xffff, s0
2855 ; GFX7-NEXT:    v_cmp_eq_u32_e64 vcc, s4, 1
2856 ; GFX7-NEXT:    s_not_b32 s5, s0
2857 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], s4, 2
2858 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], s4, 3
2859 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
2860 ; GFX7-NEXT:    s_mov_b32 s10, -1
2861 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
2862 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
2863 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[0:1]
2864 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[2:3]
2865 ; GFX7-NEXT:    v_and_b32_e32 v1, s5, v1
2866 ; GFX7-NEXT:    v_or_b32_e32 v7, v1, v0
2867 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], s4, 0
2868 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v3, v7, s[4:5]
2869 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v4, v7, vcc
2870 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v5, v7, s[0:1]
2871 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v6, v7, s[2:3]
2872 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
2873 ; GFX7-NEXT:    s_endpgm
2875 ; GFX10-LABEL: insertelement_v_v8i16_v_s:
2876 ; GFX10:       ; %bb.0:
2877 ; GFX10-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
2878 ; GFX10-NEXT:    s_lshr_b32 s3, s2, 1
2879 ; GFX10-NEXT:    s_and_b32 s1, s2, 1
2880 ; GFX10-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s3, 1
2881 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, s3, 2
2882 ; GFX10-NEXT:    s_lshl_b32 s2, s1, 4
2883 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, s3, 3
2884 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v1, s2, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2885 ; GFX10-NEXT:    s_lshl_b32 s2, 0xffff, s2
2886 ; GFX10-NEXT:    v_mov_b32_e32 v7, 0
2887 ; GFX10-NEXT:    s_not_b32 s2, s2
2888 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
2889 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
2890 ; GFX10-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc_lo
2891 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s0
2892 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s1
2893 ; GFX10-NEXT:    v_and_or_b32 v9, v0, s2, v1
2894 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, s3, 0
2895 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc_lo
2896 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s2
2897 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s0
2898 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s1
2899 ; GFX10-NEXT:    global_store_dwordx4 v[7:8], v[0:3], off
2900 ; GFX10-NEXT:    s_endpgm
2902 ; GFX11-LABEL: insertelement_v_v8i16_v_s:
2903 ; GFX11:       ; %bb.0:
2904 ; GFX11-NEXT:    global_load_b128 v[3:6], v[0:1], off
2905 ; GFX11-NEXT:    s_lshr_b32 s3, s2, 1
2906 ; GFX11-NEXT:    s_and_b32 s1, s2, 1
2907 ; GFX11-NEXT:    v_cmp_eq_u32_e64 vcc_lo, s3, 1
2908 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, s3, 2
2909 ; GFX11-NEXT:    s_lshl_b32 s2, s1, 4
2910 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, s3, 3
2911 ; GFX11-NEXT:    v_mov_b32_e32 v7, 0
2912 ; GFX11-NEXT:    v_dual_mov_b32 v8, 0 :: v_dual_and_b32 v1, 0xffff, v2
2913 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(SALU_CYCLE_1)
2914 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, s2, v1
2915 ; GFX11-NEXT:    s_lshl_b32 s2, 0xffff, s2
2916 ; GFX11-NEXT:    s_not_b32 s2, s2
2917 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
2918 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc_lo
2919 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
2920 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v5, s0
2921 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v6, s1
2922 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
2923 ; GFX11-NEXT:    v_and_or_b32 v9, v0, s2, v1
2924 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, s3, 0
2925 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v4, v9, vcc_lo
2926 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
2927 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v3, v9, s2
2928 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v5, v9, s0
2929 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v6, v9, s1
2930 ; GFX11-NEXT:    global_store_b128 v[7:8], v[0:3], off
2931 ; GFX11-NEXT:    s_nop 0
2932 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2933 ; GFX11-NEXT:    s_endpgm
2934   %vec = load <8 x i16>, ptr addrspace(1) %ptr
2935   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
2936   store <8 x i16> %insert, ptr addrspace(1) null
2937   ret void
2940 define amdgpu_ps void @insertelement_v_v8i16_v_v(ptr addrspace(1) %ptr, i16 %val, i32 %idx) {
2941 ; GFX9-LABEL: insertelement_v_v8i16_v_v:
2942 ; GFX9:       ; %bb.0:
2943 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
2944 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
2945 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v3
2946 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
2947 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2948 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
2949 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2950 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
2951 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
2952 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
2953 ; GFX9-NEXT:    v_not_b32_e32 v1, v1
2954 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
2955 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v0
2956 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
2957 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
2958 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
2959 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[0:1]
2960 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[2:3]
2961 ; GFX9-NEXT:    v_and_or_b32 v3, v3, v1, v2
2962 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v4, v3, s[4:5]
2963 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v3, vcc
2964 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v6, v3, s[0:1]
2965 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[2:3]
2966 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
2967 ; GFX9-NEXT:    s_endpgm
2969 ; GFX8-LABEL: insertelement_v_v8i16_v_v:
2970 ; GFX8:       ; %bb.0:
2971 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
2972 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
2973 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v3
2974 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
2975 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
2976 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
2977 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
2978 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
2979 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
2980 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
2981 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
2982 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
2983 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v0
2984 ; GFX8-NEXT:    v_mov_b32_e32 v9, 0
2985 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
2986 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
2987 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[0:1]
2988 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[2:3]
2989 ; GFX8-NEXT:    v_and_b32_e32 v1, v3, v1
2990 ; GFX8-NEXT:    v_or_b32_e32 v3, v1, v2
2991 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v4, v3, s[4:5]
2992 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v3, vcc
2993 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v6, v3, s[0:1]
2994 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[2:3]
2995 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
2996 ; GFX8-NEXT:    s_endpgm
2998 ; GFX7-LABEL: insertelement_v_v8i16_v_v:
2999 ; GFX7:       ; %bb.0:
3000 ; GFX7-NEXT:    s_mov_b32 s10, 0
3001 ; GFX7-NEXT:    s_mov_b32 s11, 0xf000
3002 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
3003 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[8:11], 0 addr64
3004 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
3005 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v3
3006 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
3007 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
3008 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
3009 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
3010 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, v1, v2
3011 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
3012 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
3013 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
3014 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 0, v0
3015 ; GFX7-NEXT:    s_mov_b64 s[8:9], 0
3016 ; GFX7-NEXT:    s_mov_b32 s10, -1
3017 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3018 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
3019 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[0:1]
3020 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[2:3]
3021 ; GFX7-NEXT:    v_and_b32_e32 v1, v3, v1
3022 ; GFX7-NEXT:    v_or_b32_e32 v3, v1, v2
3023 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v4, v3, s[4:5]
3024 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v5, v3, vcc
3025 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v6, v3, s[0:1]
3026 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s[2:3]
3027 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
3028 ; GFX7-NEXT:    s_endpgm
3030 ; GFX10-LABEL: insertelement_v_v8i16_v_v:
3031 ; GFX10:       ; %bb.0:
3032 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
3033 ; GFX10-NEXT:    v_lshrrev_b32_e32 v1, 1, v3
3034 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v3
3035 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
3036 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
3037 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v1
3038 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v1
3039 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 0, v1
3040 ; GFX10-NEXT:    v_lshlrev_b32_e64 v8, v0, 0xffff
3041 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v0, v0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3042 ; GFX10-NEXT:    v_not_b32_e32 v2, v8
3043 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
3044 ; GFX10-NEXT:    v_mov_b32_e32 v9, 0
3045 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3046 ; GFX10-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc_lo
3047 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s0
3048 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s1
3049 ; GFX10-NEXT:    v_and_or_b32 v3, v3, v2, v0
3050 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v4, v3, s2
3051 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v5, v3, vcc_lo
3052 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v6, v3, s0
3053 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s1
3054 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3055 ; GFX10-NEXT:    s_endpgm
3057 ; GFX11-LABEL: insertelement_v_v8i16_v_v:
3058 ; GFX11:       ; %bb.0:
3059 ; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
3060 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 1, v3
3061 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3062 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v1
3063 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v3
3064 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v1
3065 ; GFX11-NEXT:    v_and_b32_e32 v2, 0xffff, v2
3066 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v1
3067 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 0, v1
3068 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3069 ; GFX11-NEXT:    v_dual_cndmask_b32 v3, v4, v5 :: v_dual_lshlrev_b32 v0, 4, v0
3070 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
3071 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s0
3072 ; GFX11-NEXT:    v_lshlrev_b32_e64 v8, v0, 0xffff
3073 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, v0, v2
3074 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
3075 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s1
3076 ; GFX11-NEXT:    v_not_b32_e32 v2, v8
3077 ; GFX11-NEXT:    v_mov_b32_e32 v8, 0
3078 ; GFX11-NEXT:    v_mov_b32_e32 v9, 0
3079 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
3080 ; GFX11-NEXT:    v_and_or_b32 v3, v3, v2, v0
3081 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v4, v3, s2
3082 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v5, v3, vcc_lo
3083 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v6, v3, s0
3084 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v7, v3, s1
3085 ; GFX11-NEXT:    global_store_b128 v[8:9], v[0:3], off
3086 ; GFX11-NEXT:    s_nop 0
3087 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3088 ; GFX11-NEXT:    s_endpgm
3089   %vec = load <8 x i16>, ptr addrspace(1) %ptr
3090   %insert = insertelement <8 x i16> %vec, i16 %val, i32 %idx
3091   store <8 x i16> %insert, ptr addrspace(1) null
3092   ret void
3095 define amdgpu_ps void @insertelement_s_v16i16_s_s(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 inreg %idx) {
3096 ; GFX9-LABEL: insertelement_s_v16i16_s_s:
3097 ; GFX9:       ; %bb.0:
3098 ; GFX9-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3099 ; GFX9-NEXT:    s_lshr_b32 s7, s5, 1
3100 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 1
3101 ; GFX9-NEXT:    v_mov_b32_e32 v4, 0
3102 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
3103 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
3104 ; GFX9-NEXT:    s_cselect_b32 s0, s9, s8
3105 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 2
3106 ; GFX9-NEXT:    s_cselect_b32 s0, s10, s0
3107 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 3
3108 ; GFX9-NEXT:    s_cselect_b32 s0, s11, s0
3109 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 4
3110 ; GFX9-NEXT:    s_cselect_b32 s0, s12, s0
3111 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 5
3112 ; GFX9-NEXT:    s_cselect_b32 s0, s13, s0
3113 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 6
3114 ; GFX9-NEXT:    s_cselect_b32 s0, s14, s0
3115 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 7
3116 ; GFX9-NEXT:    s_cselect_b32 s0, s15, s0
3117 ; GFX9-NEXT:    s_and_b32 s1, s5, 1
3118 ; GFX9-NEXT:    s_lshl_b32 s1, s1, 4
3119 ; GFX9-NEXT:    s_and_b32 s2, s4, 0xffff
3120 ; GFX9-NEXT:    s_lshl_b32 s2, s2, s1
3121 ; GFX9-NEXT:    s_lshl_b32 s1, 0xffff, s1
3122 ; GFX9-NEXT:    s_andn2_b32 s0, s0, s1
3123 ; GFX9-NEXT:    s_or_b32 s16, s0, s2
3124 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 0
3125 ; GFX9-NEXT:    s_cselect_b32 s0, s16, s8
3126 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 1
3127 ; GFX9-NEXT:    s_cselect_b32 s1, s16, s9
3128 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 2
3129 ; GFX9-NEXT:    s_cselect_b32 s2, s16, s10
3130 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 3
3131 ; GFX9-NEXT:    s_cselect_b32 s3, s16, s11
3132 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 4
3133 ; GFX9-NEXT:    s_cselect_b32 s4, s16, s12
3134 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 5
3135 ; GFX9-NEXT:    s_cselect_b32 s5, s16, s13
3136 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 6
3137 ; GFX9-NEXT:    v_mov_b32_e32 v0, s0
3138 ; GFX9-NEXT:    s_cselect_b32 s6, s16, s14
3139 ; GFX9-NEXT:    s_cmp_eq_u32 s7, 7
3140 ; GFX9-NEXT:    v_mov_b32_e32 v1, s1
3141 ; GFX9-NEXT:    v_mov_b32_e32 v2, s2
3142 ; GFX9-NEXT:    v_mov_b32_e32 v3, s3
3143 ; GFX9-NEXT:    s_cselect_b32 s7, s16, s15
3144 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
3145 ; GFX9-NEXT:    v_mov_b32_e32 v4, 16
3146 ; GFX9-NEXT:    v_mov_b32_e32 v0, s4
3147 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0
3148 ; GFX9-NEXT:    v_mov_b32_e32 v1, s5
3149 ; GFX9-NEXT:    v_mov_b32_e32 v2, s6
3150 ; GFX9-NEXT:    v_mov_b32_e32 v3, s7
3151 ; GFX9-NEXT:    global_store_dwordx4 v[4:5], v[0:3], off
3152 ; GFX9-NEXT:    s_endpgm
3154 ; GFX8-LABEL: insertelement_s_v16i16_s_s:
3155 ; GFX8:       ; %bb.0:
3156 ; GFX8-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3157 ; GFX8-NEXT:    s_and_b32 s1, s5, 1
3158 ; GFX8-NEXT:    s_lshr_b32 m0, s5, 1
3159 ; GFX8-NEXT:    s_lshl_b32 s1, s1, 4
3160 ; GFX8-NEXT:    s_and_b32 s2, s4, 0xffff
3161 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
3162 ; GFX8-NEXT:    s_movrels_b32 s0, s8
3163 ; GFX8-NEXT:    s_lshl_b32 s2, s2, s1
3164 ; GFX8-NEXT:    s_lshl_b32 s1, 0xffff, s1
3165 ; GFX8-NEXT:    s_andn2_b32 s0, s0, s1
3166 ; GFX8-NEXT:    s_or_b32 s0, s0, s2
3167 ; GFX8-NEXT:    s_movreld_b32 s8, s0
3168 ; GFX8-NEXT:    v_mov_b32_e32 v4, 0
3169 ; GFX8-NEXT:    v_mov_b32_e32 v0, s8
3170 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
3171 ; GFX8-NEXT:    v_mov_b32_e32 v1, s9
3172 ; GFX8-NEXT:    v_mov_b32_e32 v2, s10
3173 ; GFX8-NEXT:    v_mov_b32_e32 v3, s11
3174 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3175 ; GFX8-NEXT:    v_mov_b32_e32 v4, 16
3176 ; GFX8-NEXT:    v_mov_b32_e32 v0, s12
3177 ; GFX8-NEXT:    v_mov_b32_e32 v5, 0
3178 ; GFX8-NEXT:    v_mov_b32_e32 v1, s13
3179 ; GFX8-NEXT:    v_mov_b32_e32 v2, s14
3180 ; GFX8-NEXT:    v_mov_b32_e32 v3, s15
3181 ; GFX8-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3182 ; GFX8-NEXT:    s_endpgm
3184 ; GFX7-LABEL: insertelement_s_v16i16_s_s:
3185 ; GFX7:       ; %bb.0:
3186 ; GFX7-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3187 ; GFX7-NEXT:    s_and_b32 s1, s5, 1
3188 ; GFX7-NEXT:    s_lshr_b32 m0, s5, 1
3189 ; GFX7-NEXT:    s_lshl_b32 s1, s1, 4
3190 ; GFX7-NEXT:    s_and_b32 s2, s4, 0xffff
3191 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
3192 ; GFX7-NEXT:    s_movrels_b32 s0, s8
3193 ; GFX7-NEXT:    s_lshl_b32 s2, s2, s1
3194 ; GFX7-NEXT:    s_lshl_b32 s1, 0xffff, s1
3195 ; GFX7-NEXT:    s_andn2_b32 s0, s0, s1
3196 ; GFX7-NEXT:    s_or_b32 s0, s0, s2
3197 ; GFX7-NEXT:    s_movreld_b32 s8, s0
3198 ; GFX7-NEXT:    v_mov_b32_e32 v0, s8
3199 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
3200 ; GFX7-NEXT:    v_mov_b32_e32 v1, s9
3201 ; GFX7-NEXT:    v_mov_b32_e32 v2, s10
3202 ; GFX7-NEXT:    v_mov_b32_e32 v3, s11
3203 ; GFX7-NEXT:    s_mov_b32 s2, -1
3204 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
3205 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
3206 ; GFX7-NEXT:    s_mov_b64 s[0:1], 16
3207 ; GFX7-NEXT:    v_mov_b32_e32 v0, s12
3208 ; GFX7-NEXT:    v_mov_b32_e32 v1, s13
3209 ; GFX7-NEXT:    v_mov_b32_e32 v2, s14
3210 ; GFX7-NEXT:    v_mov_b32_e32 v3, s15
3211 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
3212 ; GFX7-NEXT:    s_endpgm
3214 ; GFX10-LABEL: insertelement_s_v16i16_s_s:
3215 ; GFX10:       ; %bb.0:
3216 ; GFX10-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3217 ; GFX10-NEXT:    s_and_b32 s0, s5, 1
3218 ; GFX10-NEXT:    s_lshr_b32 m0, s5, 1
3219 ; GFX10-NEXT:    s_lshl_b32 s0, s0, 4
3220 ; GFX10-NEXT:    s_and_b32 s1, s4, 0xffff
3221 ; GFX10-NEXT:    s_lshl_b32 s2, 0xffff, s0
3222 ; GFX10-NEXT:    s_lshl_b32 s0, s1, s0
3223 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
3224 ; GFX10-NEXT:    v_mov_b32_e32 v9, 0
3225 ; GFX10-NEXT:    v_mov_b32_e32 v10, 16
3226 ; GFX10-NEXT:    v_mov_b32_e32 v11, 0
3227 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3228 ; GFX10-NEXT:    s_movrels_b32 s3, s8
3229 ; GFX10-NEXT:    s_andn2_b32 s1, s3, s2
3230 ; GFX10-NEXT:    s_or_b32 s0, s1, s0
3231 ; GFX10-NEXT:    s_movreld_b32 s8, s0
3232 ; GFX10-NEXT:    v_mov_b32_e32 v0, s8
3233 ; GFX10-NEXT:    v_mov_b32_e32 v1, s9
3234 ; GFX10-NEXT:    v_mov_b32_e32 v2, s10
3235 ; GFX10-NEXT:    v_mov_b32_e32 v3, s11
3236 ; GFX10-NEXT:    v_mov_b32_e32 v4, s12
3237 ; GFX10-NEXT:    v_mov_b32_e32 v5, s13
3238 ; GFX10-NEXT:    v_mov_b32_e32 v6, s14
3239 ; GFX10-NEXT:    v_mov_b32_e32 v7, s15
3240 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3241 ; GFX10-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
3242 ; GFX10-NEXT:    s_endpgm
3244 ; GFX11-LABEL: insertelement_s_v16i16_s_s:
3245 ; GFX11:       ; %bb.0:
3246 ; GFX11-NEXT:    s_load_b256 s[8:15], s[2:3], 0x0
3247 ; GFX11-NEXT:    s_and_b32 s0, s5, 1
3248 ; GFX11-NEXT:    s_lshr_b32 m0, s5, 1
3249 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
3250 ; GFX11-NEXT:    s_and_b32 s1, s4, 0xffff
3251 ; GFX11-NEXT:    s_lshl_b32 s2, 0xffff, s0
3252 ; GFX11-NEXT:    s_lshl_b32 s0, s1, s0
3253 ; GFX11-NEXT:    v_mov_b32_e32 v8, 0
3254 ; GFX11-NEXT:    v_dual_mov_b32 v9, 0 :: v_dual_mov_b32 v10, 16
3255 ; GFX11-NEXT:    v_mov_b32_e32 v11, 0
3256 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3257 ; GFX11-NEXT:    s_movrels_b32 s3, s8
3258 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(NEXT) | instid1(SALU_CYCLE_1)
3259 ; GFX11-NEXT:    s_and_not1_b32 s1, s3, s2
3260 ; GFX11-NEXT:    s_or_b32 s0, s1, s0
3261 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
3262 ; GFX11-NEXT:    s_movreld_b32 s8, s0
3263 ; GFX11-NEXT:    v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v1, s9
3264 ; GFX11-NEXT:    v_dual_mov_b32 v2, s10 :: v_dual_mov_b32 v3, s11
3265 ; GFX11-NEXT:    v_dual_mov_b32 v4, s12 :: v_dual_mov_b32 v5, s13
3266 ; GFX11-NEXT:    v_dual_mov_b32 v6, s14 :: v_dual_mov_b32 v7, s15
3267 ; GFX11-NEXT:    s_clause 0x1
3268 ; GFX11-NEXT:    global_store_b128 v[8:9], v[0:3], off
3269 ; GFX11-NEXT:    global_store_b128 v[10:11], v[4:7], off
3270 ; GFX11-NEXT:    s_nop 0
3271 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3272 ; GFX11-NEXT:    s_endpgm
3273   %vec = load <16 x i16>, ptr addrspace(4) %ptr
3274   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
3275   store <16 x i16> %insert, ptr addrspace(1) null
3276   ret void
3279 define amdgpu_ps void @insertelement_v_v16i16_s_s(ptr addrspace(1) %ptr, i16 inreg %val, i32 inreg %idx) {
3280 ; GFX9-LABEL: insertelement_v_v16i16_s_s:
3281 ; GFX9:       ; %bb.0:
3282 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
3283 ; GFX9-NEXT:    global_load_dwordx4 v[6:9], v[0:1], off offset:16
3284 ; GFX9-NEXT:    s_and_b32 s0, s3, 1
3285 ; GFX9-NEXT:    s_lshr_b32 s12, s3, 1
3286 ; GFX9-NEXT:    s_and_b32 s1, s2, 0xffff
3287 ; GFX9-NEXT:    s_lshl_b32 s0, s0, 4
3288 ; GFX9-NEXT:    s_lshl_b32 s1, s1, s0
3289 ; GFX9-NEXT:    s_lshl_b32 s0, 0xffff, s0
3290 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s12, 1
3291 ; GFX9-NEXT:    s_not_b32 s13, s0
3292 ; GFX9-NEXT:    v_mov_b32_e32 v0, s1
3293 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], s12, 2
3294 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], s12, 3
3295 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], s12, 4
3296 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], s12, 5
3297 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], s12, 6
3298 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], s12, 7
3299 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
3300 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v2, v3, vcc
3301 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[0:1]
3302 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[2:3]
3303 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
3304 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[4:5]
3305 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s[6:7]
3306 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s[8:9]
3307 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s[10:11]
3308 ; GFX9-NEXT:    v_and_or_b32 v10, v1, s13, v0
3309 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], s12, 0
3310 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v2, v10, s[12:13]
3311 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v10, vcc
3312 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v4, v10, s[0:1]
3313 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v5, v10, s[2:3]
3314 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v6, v10, s[4:5]
3315 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v7, v10, s[6:7]
3316 ; GFX9-NEXT:    v_cndmask_b32_e64 v6, v8, v10, s[8:9]
3317 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v9, v10, s[10:11]
3318 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
3319 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
3320 ; GFX9-NEXT:    v_mov_b32_e32 v10, 16
3321 ; GFX9-NEXT:    v_mov_b32_e32 v11, 0
3322 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3323 ; GFX9-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
3324 ; GFX9-NEXT:    s_endpgm
3326 ; GFX8-LABEL: insertelement_v_v16i16_s_s:
3327 ; GFX8:       ; %bb.0:
3328 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, 16, v0
3329 ; GFX8-NEXT:    v_addc_u32_e32 v5, vcc, 0, v1, vcc
3330 ; GFX8-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
3331 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
3332 ; GFX8-NEXT:    s_and_b32 s0, s3, 1
3333 ; GFX8-NEXT:    s_and_b32 s1, s2, 0xffff
3334 ; GFX8-NEXT:    s_lshl_b32 s0, s0, 4
3335 ; GFX8-NEXT:    s_lshr_b32 m0, s3, 1
3336 ; GFX8-NEXT:    s_lshl_b32 s1, s1, s0
3337 ; GFX8-NEXT:    s_lshl_b32 s0, 0xffff, s0
3338 ; GFX8-NEXT:    s_not_b32 s0, s0
3339 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
3340 ; GFX8-NEXT:    v_mov_b32_e32 v9, 0
3341 ; GFX8-NEXT:    v_mov_b32_e32 v10, 16
3342 ; GFX8-NEXT:    v_mov_b32_e32 v11, 0
3343 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
3344 ; GFX8-NEXT:    v_movrels_b32_e32 v12, v0
3345 ; GFX8-NEXT:    v_and_b32_e32 v12, s0, v12
3346 ; GFX8-NEXT:    v_or_b32_e32 v12, s1, v12
3347 ; GFX8-NEXT:    v_movreld_b32_e32 v0, v12
3348 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
3349 ; GFX8-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
3350 ; GFX8-NEXT:    s_endpgm
3352 ; GFX7-LABEL: insertelement_v_v16i16_s_s:
3353 ; GFX7:       ; %bb.0:
3354 ; GFX7-NEXT:    s_mov_b32 s6, 0
3355 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
3356 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
3357 ; GFX7-NEXT:    buffer_load_dwordx4 v[2:5], v[0:1], s[4:7], 0 addr64
3358 ; GFX7-NEXT:    buffer_load_dwordx4 v[6:9], v[0:1], s[4:7], 0 addr64 offset:16
3359 ; GFX7-NEXT:    s_and_b32 s0, s3, 1
3360 ; GFX7-NEXT:    s_and_b32 s1, s2, 0xffff
3361 ; GFX7-NEXT:    s_lshl_b32 s0, s0, 4
3362 ; GFX7-NEXT:    s_lshr_b32 m0, s3, 1
3363 ; GFX7-NEXT:    s_lshl_b32 s1, s1, s0
3364 ; GFX7-NEXT:    s_lshl_b32 s0, 0xffff, s0
3365 ; GFX7-NEXT:    s_not_b32 s0, s0
3366 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
3367 ; GFX7-NEXT:    s_mov_b32 s6, -1
3368 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
3369 ; GFX7-NEXT:    v_movrels_b32_e32 v0, v2
3370 ; GFX7-NEXT:    v_and_b32_e32 v0, s0, v0
3371 ; GFX7-NEXT:    v_or_b32_e32 v0, s1, v0
3372 ; GFX7-NEXT:    v_movreld_b32_e32 v2, v0
3373 ; GFX7-NEXT:    buffer_store_dwordx4 v[2:5], off, s[4:7], 0
3374 ; GFX7-NEXT:    s_mov_b64 s[4:5], 16
3375 ; GFX7-NEXT:    buffer_store_dwordx4 v[6:9], off, s[4:7], 0
3376 ; GFX7-NEXT:    s_endpgm
3378 ; GFX10-LABEL: insertelement_v_v16i16_s_s:
3379 ; GFX10:       ; %bb.0:
3380 ; GFX10-NEXT:    s_clause 0x1
3381 ; GFX10-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off
3382 ; GFX10-NEXT:    global_load_dwordx4 v[6:9], v[0:1], off offset:16
3383 ; GFX10-NEXT:    s_and_b32 s0, s3, 1
3384 ; GFX10-NEXT:    s_lshr_b32 m0, s3, 1
3385 ; GFX10-NEXT:    s_lshl_b32 s0, s0, 4
3386 ; GFX10-NEXT:    s_and_b32 s1, s2, 0xffff
3387 ; GFX10-NEXT:    s_lshl_b32 s2, 0xffff, s0
3388 ; GFX10-NEXT:    s_lshl_b32 s0, s1, s0
3389 ; GFX10-NEXT:    s_not_b32 s1, s2
3390 ; GFX10-NEXT:    v_mov_b32_e32 v10, 16
3391 ; GFX10-NEXT:    v_mov_b32_e32 v11, 0
3392 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
3393 ; GFX10-NEXT:    v_movrels_b32_e32 v0, v2
3394 ; GFX10-NEXT:    v_and_or_b32 v12, v0, s1, s0
3395 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
3396 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3397 ; GFX10-NEXT:    v_movreld_b32_e32 v2, v12
3398 ; GFX10-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
3399 ; GFX10-NEXT:    global_store_dwordx4 v[10:11], v[6:9], off
3400 ; GFX10-NEXT:    s_endpgm
3402 ; GFX11-LABEL: insertelement_v_v16i16_s_s:
3403 ; GFX11:       ; %bb.0:
3404 ; GFX11-NEXT:    s_clause 0x1
3405 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off
3406 ; GFX11-NEXT:    global_load_b128 v[6:9], v[0:1], off offset:16
3407 ; GFX11-NEXT:    s_and_b32 s0, s3, 1
3408 ; GFX11-NEXT:    s_lshr_b32 m0, s3, 1
3409 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
3410 ; GFX11-NEXT:    s_and_b32 s1, s2, 0xffff
3411 ; GFX11-NEXT:    s_lshl_b32 s2, 0xffff, s0
3412 ; GFX11-NEXT:    s_lshl_b32 s0, s1, s0
3413 ; GFX11-NEXT:    s_not_b32 s1, s2
3414 ; GFX11-NEXT:    v_mov_b32_e32 v10, 16
3415 ; GFX11-NEXT:    v_mov_b32_e32 v11, 0
3416 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
3417 ; GFX11-NEXT:    v_movrels_b32_e32 v0, v2
3418 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
3419 ; GFX11-NEXT:    v_and_or_b32 v12, v0, s1, s0
3420 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
3421 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
3422 ; GFX11-NEXT:    v_movreld_b32_e32 v2, v12
3423 ; GFX11-NEXT:    s_clause 0x1
3424 ; GFX11-NEXT:    global_store_b128 v[0:1], v[2:5], off
3425 ; GFX11-NEXT:    global_store_b128 v[10:11], v[6:9], off
3426 ; GFX11-NEXT:    s_nop 0
3427 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3428 ; GFX11-NEXT:    s_endpgm
3429   %vec = load <16 x i16>, ptr addrspace(1 ) %ptr
3430   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
3431   store <16 x i16> %insert, ptr addrspace(1) null
3432   ret void
3435 define amdgpu_ps void @insertelement_s_v16i16_v_s(ptr addrspace(4) inreg %ptr, i16 %val, i32 inreg %idx) {
3436 ; GFX9-LABEL: insertelement_s_v16i16_v_s:
3437 ; GFX9:       ; %bb.0:
3438 ; GFX9-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3439 ; GFX9-NEXT:    s_lshr_b32 s2, s4, 1
3440 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 1
3441 ; GFX9-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3442 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 0
3443 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
3444 ; GFX9-NEXT:    s_cselect_b32 s0, s9, s8
3445 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 2
3446 ; GFX9-NEXT:    s_cselect_b32 s0, s10, s0
3447 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 3
3448 ; GFX9-NEXT:    s_cselect_b32 s0, s11, s0
3449 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 4
3450 ; GFX9-NEXT:    s_cselect_b32 s0, s12, s0
3451 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 5
3452 ; GFX9-NEXT:    s_cselect_b32 s0, s13, s0
3453 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 6
3454 ; GFX9-NEXT:    s_cselect_b32 s0, s14, s0
3455 ; GFX9-NEXT:    s_cmp_eq_u32 s2, 7
3456 ; GFX9-NEXT:    s_cselect_b32 s0, s15, s0
3457 ; GFX9-NEXT:    s_and_b32 s1, s4, 1
3458 ; GFX9-NEXT:    s_lshl_b32 s1, s1, 4
3459 ; GFX9-NEXT:    s_lshl_b32 s3, 0xffff, s1
3460 ; GFX9-NEXT:    s_andn2_b32 s0, s0, s3
3461 ; GFX9-NEXT:    v_mov_b32_e32 v1, s0
3462 ; GFX9-NEXT:    v_lshl_or_b32 v8, v0, s1, v1
3463 ; GFX9-NEXT:    v_mov_b32_e32 v0, s8
3464 ; GFX9-NEXT:    v_mov_b32_e32 v1, s9
3465 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v8, vcc
3466 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 1
3467 ; GFX9-NEXT:    v_mov_b32_e32 v2, s10
3468 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v8, vcc
3469 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 2
3470 ; GFX9-NEXT:    v_mov_b32_e32 v3, s11
3471 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v8, vcc
3472 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 3
3473 ; GFX9-NEXT:    v_mov_b32_e32 v5, s13
3474 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v3, v8, vcc
3475 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 5
3476 ; GFX9-NEXT:    v_mov_b32_e32 v6, s14
3477 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v5, v8, vcc
3478 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 6
3479 ; GFX9-NEXT:    v_mov_b32_e32 v4, s12
3480 ; GFX9-NEXT:    v_mov_b32_e32 v7, s15
3481 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], s2, 4
3482 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v6, v8, vcc
3483 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s2, 7
3484 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v4, v8, s[0:1]
3485 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v7, v8, vcc
3486 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
3487 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
3488 ; GFX9-NEXT:    v_mov_b32_e32 v10, 16
3489 ; GFX9-NEXT:    v_mov_b32_e32 v11, 0
3490 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3491 ; GFX9-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
3492 ; GFX9-NEXT:    s_endpgm
3494 ; GFX8-LABEL: insertelement_s_v16i16_v_s:
3495 ; GFX8:       ; %bb.0:
3496 ; GFX8-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3497 ; GFX8-NEXT:    s_and_b32 s1, s4, 1
3498 ; GFX8-NEXT:    s_lshr_b32 m0, s4, 1
3499 ; GFX8-NEXT:    s_lshl_b32 s1, s1, 4
3500 ; GFX8-NEXT:    v_mov_b32_e32 v1, s1
3501 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
3502 ; GFX8-NEXT:    s_movrels_b32 s0, s8
3503 ; GFX8-NEXT:    s_lshl_b32 s1, 0xffff, s1
3504 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3505 ; GFX8-NEXT:    s_andn2_b32 s0, s0, s1
3506 ; GFX8-NEXT:    v_or_b32_e32 v8, s0, v0
3507 ; GFX8-NEXT:    v_mov_b32_e32 v0, s8
3508 ; GFX8-NEXT:    v_mov_b32_e32 v1, s9
3509 ; GFX8-NEXT:    v_mov_b32_e32 v2, s10
3510 ; GFX8-NEXT:    v_mov_b32_e32 v3, s11
3511 ; GFX8-NEXT:    v_mov_b32_e32 v4, s12
3512 ; GFX8-NEXT:    v_mov_b32_e32 v5, s13
3513 ; GFX8-NEXT:    v_mov_b32_e32 v6, s14
3514 ; GFX8-NEXT:    v_mov_b32_e32 v7, s15
3515 ; GFX8-NEXT:    v_movreld_b32_e32 v0, v8
3516 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
3517 ; GFX8-NEXT:    v_mov_b32_e32 v9, 0
3518 ; GFX8-NEXT:    v_mov_b32_e32 v10, 16
3519 ; GFX8-NEXT:    v_mov_b32_e32 v11, 0
3520 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
3521 ; GFX8-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
3522 ; GFX8-NEXT:    s_endpgm
3524 ; GFX7-LABEL: insertelement_s_v16i16_v_s:
3525 ; GFX7:       ; %bb.0:
3526 ; GFX7-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3527 ; GFX7-NEXT:    s_and_b32 s1, s4, 1
3528 ; GFX7-NEXT:    s_lshr_b32 m0, s4, 1
3529 ; GFX7-NEXT:    s_lshl_b32 s1, s1, 4
3530 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
3531 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
3532 ; GFX7-NEXT:    s_movrels_b32 s0, s8
3533 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s1, v0
3534 ; GFX7-NEXT:    s_lshl_b32 s1, 0xffff, s1
3535 ; GFX7-NEXT:    s_andn2_b32 s0, s0, s1
3536 ; GFX7-NEXT:    v_or_b32_e32 v8, s0, v0
3537 ; GFX7-NEXT:    v_mov_b32_e32 v0, s8
3538 ; GFX7-NEXT:    v_mov_b32_e32 v1, s9
3539 ; GFX7-NEXT:    v_mov_b32_e32 v2, s10
3540 ; GFX7-NEXT:    v_mov_b32_e32 v3, s11
3541 ; GFX7-NEXT:    v_mov_b32_e32 v4, s12
3542 ; GFX7-NEXT:    v_mov_b32_e32 v5, s13
3543 ; GFX7-NEXT:    v_mov_b32_e32 v6, s14
3544 ; GFX7-NEXT:    v_mov_b32_e32 v7, s15
3545 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
3546 ; GFX7-NEXT:    s_mov_b32 s2, -1
3547 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
3548 ; GFX7-NEXT:    v_movreld_b32_e32 v0, v8
3549 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
3550 ; GFX7-NEXT:    s_mov_b64 s[0:1], 16
3551 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0
3552 ; GFX7-NEXT:    s_endpgm
3554 ; GFX10-LABEL: insertelement_s_v16i16_v_s:
3555 ; GFX10:       ; %bb.0:
3556 ; GFX10-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3557 ; GFX10-NEXT:    s_and_b32 s0, s4, 1
3558 ; GFX10-NEXT:    s_lshr_b32 m0, s4, 1
3559 ; GFX10-NEXT:    s_lshl_b32 s0, s0, 4
3560 ; GFX10-NEXT:    v_and_b32_e32 v8, 0xffff, v0
3561 ; GFX10-NEXT:    s_lshl_b32 s1, 0xffff, s0
3562 ; GFX10-NEXT:    v_mov_b32_e32 v10, 16
3563 ; GFX10-NEXT:    v_mov_b32_e32 v11, 0
3564 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3565 ; GFX10-NEXT:    s_movrels_b32 s2, s8
3566 ; GFX10-NEXT:    v_mov_b32_e32 v0, s8
3567 ; GFX10-NEXT:    s_andn2_b32 s1, s2, s1
3568 ; GFX10-NEXT:    v_mov_b32_e32 v1, s9
3569 ; GFX10-NEXT:    v_lshl_or_b32 v12, v8, s0, s1
3570 ; GFX10-NEXT:    v_mov_b32_e32 v2, s10
3571 ; GFX10-NEXT:    v_mov_b32_e32 v3, s11
3572 ; GFX10-NEXT:    v_mov_b32_e32 v4, s12
3573 ; GFX10-NEXT:    v_mov_b32_e32 v5, s13
3574 ; GFX10-NEXT:    v_mov_b32_e32 v6, s14
3575 ; GFX10-NEXT:    v_mov_b32_e32 v7, s15
3576 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
3577 ; GFX10-NEXT:    v_mov_b32_e32 v9, 0
3578 ; GFX10-NEXT:    v_movreld_b32_e32 v0, v12
3579 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3580 ; GFX10-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
3581 ; GFX10-NEXT:    s_endpgm
3583 ; GFX11-LABEL: insertelement_s_v16i16_v_s:
3584 ; GFX11:       ; %bb.0:
3585 ; GFX11-NEXT:    s_load_b256 s[8:15], s[2:3], 0x0
3586 ; GFX11-NEXT:    s_and_b32 s0, s4, 1
3587 ; GFX11-NEXT:    s_lshr_b32 m0, s4, 1
3588 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
3589 ; GFX11-NEXT:    v_and_b32_e32 v8, 0xffff, v0
3590 ; GFX11-NEXT:    s_lshl_b32 s1, 0xffff, s0
3591 ; GFX11-NEXT:    v_mov_b32_e32 v10, 16
3592 ; GFX11-NEXT:    v_mov_b32_e32 v11, 0
3593 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3594 ; GFX11-NEXT:    s_movrels_b32 s2, s8
3595 ; GFX11-NEXT:    v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v3, s11
3596 ; GFX11-NEXT:    s_and_not1_b32 s1, s2, s1
3597 ; GFX11-NEXT:    v_mov_b32_e32 v1, s9
3598 ; GFX11-NEXT:    v_lshl_or_b32 v12, v8, s0, s1
3599 ; GFX11-NEXT:    v_dual_mov_b32 v2, s10 :: v_dual_mov_b32 v5, s13
3600 ; GFX11-NEXT:    v_dual_mov_b32 v4, s12 :: v_dual_mov_b32 v7, s15
3601 ; GFX11-NEXT:    v_mov_b32_e32 v6, s14
3602 ; GFX11-NEXT:    v_mov_b32_e32 v8, 0
3603 ; GFX11-NEXT:    v_mov_b32_e32 v9, 0
3604 ; GFX11-NEXT:    v_movreld_b32_e32 v0, v12
3605 ; GFX11-NEXT:    s_clause 0x1
3606 ; GFX11-NEXT:    global_store_b128 v[8:9], v[0:3], off
3607 ; GFX11-NEXT:    global_store_b128 v[10:11], v[4:7], off
3608 ; GFX11-NEXT:    s_nop 0
3609 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3610 ; GFX11-NEXT:    s_endpgm
3611   %vec = load <16 x i16>, ptr addrspace(4) %ptr
3612   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
3613   store <16 x i16> %insert, ptr addrspace(1) null
3614   ret void
3617 define amdgpu_ps void @insertelement_s_v16i16_s_v(ptr addrspace(4) inreg %ptr, i16 inreg %val, i32 %idx) {
3618 ; GFX9-LABEL: insertelement_s_v16i16_s_v:
3619 ; GFX9:       ; %bb.0:
3620 ; GFX9-NEXT:    s_load_dwordx8 s[16:23], s[2:3], 0x0
3621 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 1, v0
3622 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
3623 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v8
3624 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v8
3625 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
3626 ; GFX9-NEXT:    v_mov_b32_e32 v1, s16
3627 ; GFX9-NEXT:    v_mov_b32_e32 v2, s17
3628 ; GFX9-NEXT:    v_mov_b32_e32 v3, s18
3629 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3630 ; GFX9-NEXT:    v_mov_b32_e32 v4, s19
3631 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
3632 ; GFX9-NEXT:    v_mov_b32_e32 v5, s20
3633 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[2:3]
3634 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[14:15], 4, v8
3635 ; GFX9-NEXT:    v_mov_b32_e32 v6, s21
3636 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[14:15]
3637 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v8
3638 ; GFX9-NEXT:    v_and_b32_e32 v0, 1, v0
3639 ; GFX9-NEXT:    v_mov_b32_e32 v7, s22
3640 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[6:7]
3641 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v8
3642 ; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
3643 ; GFX9-NEXT:    s_mov_b32 s5, 0xffff
3644 ; GFX9-NEXT:    s_and_b32 s4, s4, 0xffff
3645 ; GFX9-NEXT:    v_mov_b32_e32 v9, s23
3646 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s[8:9]
3647 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v8
3648 ; GFX9-NEXT:    v_lshlrev_b32_e64 v2, v0, s4
3649 ; GFX9-NEXT:    v_lshlrev_b32_e64 v0, v0, s5
3650 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s[10:11]
3651 ; GFX9-NEXT:    v_not_b32_e32 v0, v0
3652 ; GFX9-NEXT:    v_and_or_b32 v9, v1, v0, v2
3653 ; GFX9-NEXT:    v_mov_b32_e32 v0, s16
3654 ; GFX9-NEXT:    v_mov_b32_e32 v1, s17
3655 ; GFX9-NEXT:    v_mov_b32_e32 v2, s18
3656 ; GFX9-NEXT:    v_mov_b32_e32 v3, s19
3657 ; GFX9-NEXT:    v_mov_b32_e32 v4, s20
3658 ; GFX9-NEXT:    v_mov_b32_e32 v5, s21
3659 ; GFX9-NEXT:    v_mov_b32_e32 v6, s22
3660 ; GFX9-NEXT:    v_mov_b32_e32 v7, s23
3661 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v8
3662 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v9, s[12:13]
3663 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v9, vcc
3664 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[0:1]
3665 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[2:3]
3666 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v4, v9, s[14:15]
3667 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v5, v9, s[6:7]
3668 ; GFX9-NEXT:    v_cndmask_b32_e64 v6, v6, v9, s[8:9]
3669 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v7, v9, s[10:11]
3670 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
3671 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
3672 ; GFX9-NEXT:    v_mov_b32_e32 v10, 16
3673 ; GFX9-NEXT:    v_mov_b32_e32 v11, 0
3674 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3675 ; GFX9-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
3676 ; GFX9-NEXT:    s_endpgm
3678 ; GFX8-LABEL: insertelement_s_v16i16_s_v:
3679 ; GFX8:       ; %bb.0:
3680 ; GFX8-NEXT:    s_load_dwordx8 s[16:23], s[2:3], 0x0
3681 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 1, v0
3682 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
3683 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v8
3684 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v8
3685 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
3686 ; GFX8-NEXT:    v_mov_b32_e32 v1, s16
3687 ; GFX8-NEXT:    v_mov_b32_e32 v2, s17
3688 ; GFX8-NEXT:    v_mov_b32_e32 v3, s18
3689 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3690 ; GFX8-NEXT:    v_mov_b32_e32 v4, s19
3691 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
3692 ; GFX8-NEXT:    v_mov_b32_e32 v5, s20
3693 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[2:3]
3694 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[14:15], 4, v8
3695 ; GFX8-NEXT:    v_mov_b32_e32 v6, s21
3696 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[14:15]
3697 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v8
3698 ; GFX8-NEXT:    v_and_b32_e32 v0, 1, v0
3699 ; GFX8-NEXT:    v_mov_b32_e32 v7, s22
3700 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[6:7]
3701 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v8
3702 ; GFX8-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
3703 ; GFX8-NEXT:    s_mov_b32 s5, 0xffff
3704 ; GFX8-NEXT:    s_and_b32 s4, s4, 0xffff
3705 ; GFX8-NEXT:    v_mov_b32_e32 v9, s23
3706 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s[8:9]
3707 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v8
3708 ; GFX8-NEXT:    v_lshlrev_b32_e64 v2, v0, s4
3709 ; GFX8-NEXT:    v_lshlrev_b32_e64 v0, v0, s5
3710 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s[10:11]
3711 ; GFX8-NEXT:    v_not_b32_e32 v0, v0
3712 ; GFX8-NEXT:    v_and_b32_e32 v0, v1, v0
3713 ; GFX8-NEXT:    v_or_b32_e32 v9, v0, v2
3714 ; GFX8-NEXT:    v_mov_b32_e32 v0, s16
3715 ; GFX8-NEXT:    v_mov_b32_e32 v1, s17
3716 ; GFX8-NEXT:    v_mov_b32_e32 v2, s18
3717 ; GFX8-NEXT:    v_mov_b32_e32 v3, s19
3718 ; GFX8-NEXT:    v_mov_b32_e32 v4, s20
3719 ; GFX8-NEXT:    v_mov_b32_e32 v5, s21
3720 ; GFX8-NEXT:    v_mov_b32_e32 v6, s22
3721 ; GFX8-NEXT:    v_mov_b32_e32 v7, s23
3722 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v8
3723 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v9, s[12:13]
3724 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v9, vcc
3725 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[0:1]
3726 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[2:3]
3727 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, v4, v9, s[14:15]
3728 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, v5, v9, s[6:7]
3729 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v6, v9, s[8:9]
3730 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, v7, v9, s[10:11]
3731 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
3732 ; GFX8-NEXT:    v_mov_b32_e32 v9, 0
3733 ; GFX8-NEXT:    v_mov_b32_e32 v10, 16
3734 ; GFX8-NEXT:    v_mov_b32_e32 v11, 0
3735 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
3736 ; GFX8-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
3737 ; GFX8-NEXT:    s_endpgm
3739 ; GFX7-LABEL: insertelement_s_v16i16_s_v:
3740 ; GFX7:       ; %bb.0:
3741 ; GFX7-NEXT:    s_load_dwordx8 s[16:23], s[2:3], 0x0
3742 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 1, v0
3743 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
3744 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v8
3745 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v8
3746 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
3747 ; GFX7-NEXT:    v_mov_b32_e32 v1, s16
3748 ; GFX7-NEXT:    v_mov_b32_e32 v2, s17
3749 ; GFX7-NEXT:    v_mov_b32_e32 v3, s18
3750 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v2, vcc
3751 ; GFX7-NEXT:    v_mov_b32_e32 v4, s19
3752 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v3, s[0:1]
3753 ; GFX7-NEXT:    v_mov_b32_e32 v5, s20
3754 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v4, s[2:3]
3755 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[14:15], 4, v8
3756 ; GFX7-NEXT:    v_mov_b32_e32 v6, s21
3757 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[14:15]
3758 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v8
3759 ; GFX7-NEXT:    v_and_b32_e32 v0, 1, v0
3760 ; GFX7-NEXT:    v_mov_b32_e32 v7, s22
3761 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[6:7]
3762 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v8
3763 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
3764 ; GFX7-NEXT:    s_and_b32 s4, s4, 0xffff
3765 ; GFX7-NEXT:    v_mov_b32_e32 v9, s23
3766 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s[8:9]
3767 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v8
3768 ; GFX7-NEXT:    v_lshl_b32_e32 v2, s4, v0
3769 ; GFX7-NEXT:    v_lshl_b32_e32 v0, 0xffff, v0
3770 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s[10:11]
3771 ; GFX7-NEXT:    v_not_b32_e32 v0, v0
3772 ; GFX7-NEXT:    v_and_b32_e32 v0, v1, v0
3773 ; GFX7-NEXT:    v_or_b32_e32 v9, v0, v2
3774 ; GFX7-NEXT:    v_mov_b32_e32 v0, s16
3775 ; GFX7-NEXT:    v_mov_b32_e32 v1, s17
3776 ; GFX7-NEXT:    v_mov_b32_e32 v2, s18
3777 ; GFX7-NEXT:    v_mov_b32_e32 v3, s19
3778 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v8
3779 ; GFX7-NEXT:    v_mov_b32_e32 v4, s20
3780 ; GFX7-NEXT:    v_mov_b32_e32 v5, s21
3781 ; GFX7-NEXT:    v_mov_b32_e32 v6, s22
3782 ; GFX7-NEXT:    v_mov_b32_e32 v7, s23
3783 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v9, s[12:13]
3784 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v9, vcc
3785 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[0:1]
3786 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[2:3]
3787 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
3788 ; GFX7-NEXT:    s_mov_b32 s2, -1
3789 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
3790 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, v4, v9, s[14:15]
3791 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, v5, v9, s[6:7]
3792 ; GFX7-NEXT:    v_cndmask_b32_e64 v6, v6, v9, s[8:9]
3793 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, v7, v9, s[10:11]
3794 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
3795 ; GFX7-NEXT:    s_mov_b64 s[0:1], 16
3796 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0
3797 ; GFX7-NEXT:    s_endpgm
3799 ; GFX10-LABEL: insertelement_s_v16i16_s_v:
3800 ; GFX10:       ; %bb.0:
3801 ; GFX10-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
3802 ; GFX10-NEXT:    v_lshrrev_b32_e32 v12, 1, v0
3803 ; GFX10-NEXT:    v_and_b32_e32 v0, 1, v0
3804 ; GFX10-NEXT:    s_and_b32 s5, s4, 0xffff
3805 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v12
3806 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v12
3807 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v12
3808 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 4, v12
3809 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s3, 5, v12
3810 ; GFX10-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
3811 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 6, v12
3812 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s6, 0, v12
3813 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v0, 0xffff
3814 ; GFX10-NEXT:    v_lshlrev_b32_e64 v8, v0, s5
3815 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s5, 7, v12
3816 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3817 ; GFX10-NEXT:    v_mov_b32_e32 v1, s9
3818 ; GFX10-NEXT:    v_not_b32_e32 v9, v2
3819 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, s8, v1, vcc_lo
3820 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, s10, s0
3821 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, s11, s1
3822 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, s12, s2
3823 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, s13, s3
3824 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, s14, s4
3825 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, v1, s15, s5
3826 ; GFX10-NEXT:    v_mov_b32_e32 v0, s8
3827 ; GFX10-NEXT:    v_mov_b32_e32 v1, s9
3828 ; GFX10-NEXT:    v_mov_b32_e32 v2, s10
3829 ; GFX10-NEXT:    v_mov_b32_e32 v3, s11
3830 ; GFX10-NEXT:    v_and_or_b32 v13, v10, v9, v8
3831 ; GFX10-NEXT:    v_mov_b32_e32 v4, s12
3832 ; GFX10-NEXT:    v_mov_b32_e32 v5, s13
3833 ; GFX10-NEXT:    v_mov_b32_e32 v6, s14
3834 ; GFX10-NEXT:    v_mov_b32_e32 v7, s15
3835 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
3836 ; GFX10-NEXT:    v_mov_b32_e32 v9, 0
3837 ; GFX10-NEXT:    v_mov_b32_e32 v10, 16
3838 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v13, s6
3839 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v13, vcc_lo
3840 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, v13, s0
3841 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v13, s1
3842 ; GFX10-NEXT:    v_mov_b32_e32 v11, 0
3843 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v13, s2
3844 ; GFX10-NEXT:    v_cndmask_b32_e64 v5, v5, v13, s3
3845 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v6, v13, s4
3846 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v7, v13, s5
3847 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3848 ; GFX10-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
3849 ; GFX10-NEXT:    s_endpgm
3851 ; GFX11-LABEL: insertelement_s_v16i16_s_v:
3852 ; GFX11:       ; %bb.0:
3853 ; GFX11-NEXT:    s_load_b256 s[8:15], s[2:3], 0x0
3854 ; GFX11-NEXT:    v_lshrrev_b32_e32 v12, 1, v0
3855 ; GFX11-NEXT:    s_and_b32 s5, s4, 0xffff
3856 ; GFX11-NEXT:    v_and_b32_e32 v0, 1, v0
3857 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3858 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v12
3859 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v12
3860 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v12
3861 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 4, v12
3862 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s3, 5, v12
3863 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s4, 6, v12
3864 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s6, 0, v12
3865 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, 4, v0
3866 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3867 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v0, 0xffff
3868 ; GFX11-NEXT:    v_lshlrev_b32_e64 v8, v0, s5
3869 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3870 ; GFX11-NEXT:    v_mov_b32_e32 v1, s9
3871 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s5, 7, v12
3872 ; GFX11-NEXT:    v_not_b32_e32 v9, v2
3873 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
3874 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, s8, v1, vcc_lo
3875 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s10, s0
3876 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3877 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s11, s1
3878 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s12, s2
3879 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
3880 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s13, s3
3881 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, s14, s4
3882 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
3883 ; GFX11-NEXT:    v_cndmask_b32_e64 v10, v1, s15, s5
3884 ; GFX11-NEXT:    v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v1, s9
3885 ; GFX11-NEXT:    v_dual_mov_b32 v2, s10 :: v_dual_mov_b32 v3, s11
3886 ; GFX11-NEXT:    v_and_or_b32 v13, v10, v9, v8
3887 ; GFX11-NEXT:    v_dual_mov_b32 v4, s12 :: v_dual_mov_b32 v5, s13
3888 ; GFX11-NEXT:    v_dual_mov_b32 v6, s14 :: v_dual_mov_b32 v7, s15
3889 ; GFX11-NEXT:    v_mov_b32_e32 v8, 0
3890 ; GFX11-NEXT:    v_dual_mov_b32 v9, 0 :: v_dual_mov_b32 v10, 16
3891 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v13, s6
3892 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v1, v13, vcc_lo
3893 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, v13, s0
3894 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, v13, s1
3895 ; GFX11-NEXT:    v_mov_b32_e32 v11, 0
3896 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, v4, v13, s2
3897 ; GFX11-NEXT:    v_cndmask_b32_e64 v5, v5, v13, s3
3898 ; GFX11-NEXT:    v_cndmask_b32_e64 v6, v6, v13, s4
3899 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v7, v13, s5
3900 ; GFX11-NEXT:    s_clause 0x1
3901 ; GFX11-NEXT:    global_store_b128 v[8:9], v[0:3], off
3902 ; GFX11-NEXT:    global_store_b128 v[10:11], v[4:7], off
3903 ; GFX11-NEXT:    s_nop 0
3904 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3905 ; GFX11-NEXT:    s_endpgm
3906   %vec = load <16 x i16>, ptr addrspace(4) %ptr
3907   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
3908   store <16 x i16> %insert, ptr addrspace(1) null
3909   ret void
3912 define amdgpu_ps void @insertelement_s_v16i16_v_v(ptr addrspace(4) inreg %ptr, i16 %val, i32 %idx) {
3913 ; GFX9-LABEL: insertelement_s_v16i16_v_v:
3914 ; GFX9:       ; %bb.0:
3915 ; GFX9-NEXT:    s_load_dwordx8 s[12:19], s[2:3], 0x0
3916 ; GFX9-NEXT:    v_lshrrev_b32_e32 v8, 1, v1
3917 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
3918 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v8
3919 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v8
3920 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
3921 ; GFX9-NEXT:    v_mov_b32_e32 v2, s12
3922 ; GFX9-NEXT:    v_mov_b32_e32 v3, s13
3923 ; GFX9-NEXT:    v_mov_b32_e32 v4, s14
3924 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
3925 ; GFX9-NEXT:    v_mov_b32_e32 v5, s15
3926 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[0:1]
3927 ; GFX9-NEXT:    v_mov_b32_e32 v6, s16
3928 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[2:3]
3929 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v8
3930 ; GFX9-NEXT:    v_mov_b32_e32 v7, s17
3931 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
3932 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v8
3933 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v1
3934 ; GFX9-NEXT:    v_mov_b32_e32 v9, s18
3935 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s[6:7]
3936 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v8
3937 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
3938 ; GFX9-NEXT:    s_mov_b32 s20, 0xffff
3939 ; GFX9-NEXT:    v_mov_b32_e32 v10, s19
3940 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[8:9]
3941 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v8
3942 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
3943 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s20
3944 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v10, s[10:11]
3945 ; GFX9-NEXT:    v_not_b32_e32 v1, v1
3946 ; GFX9-NEXT:    v_and_or_b32 v9, v2, v1, v0
3947 ; GFX9-NEXT:    v_mov_b32_e32 v0, s12
3948 ; GFX9-NEXT:    v_mov_b32_e32 v1, s13
3949 ; GFX9-NEXT:    v_mov_b32_e32 v2, s14
3950 ; GFX9-NEXT:    v_mov_b32_e32 v3, s15
3951 ; GFX9-NEXT:    v_mov_b32_e32 v4, s16
3952 ; GFX9-NEXT:    v_mov_b32_e32 v5, s17
3953 ; GFX9-NEXT:    v_mov_b32_e32 v6, s18
3954 ; GFX9-NEXT:    v_mov_b32_e32 v7, s19
3955 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v8
3956 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v0, v9, s[12:13]
3957 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v1, v9, vcc
3958 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[0:1]
3959 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[2:3]
3960 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v4, v9, s[4:5]
3961 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v5, v9, s[6:7]
3962 ; GFX9-NEXT:    v_cndmask_b32_e64 v6, v6, v9, s[8:9]
3963 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v7, v9, s[10:11]
3964 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
3965 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
3966 ; GFX9-NEXT:    v_mov_b32_e32 v10, 16
3967 ; GFX9-NEXT:    v_mov_b32_e32 v11, 0
3968 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
3969 ; GFX9-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
3970 ; GFX9-NEXT:    s_endpgm
3972 ; GFX8-LABEL: insertelement_s_v16i16_v_v:
3973 ; GFX8:       ; %bb.0:
3974 ; GFX8-NEXT:    s_load_dwordx8 s[12:19], s[2:3], 0x0
3975 ; GFX8-NEXT:    v_lshrrev_b32_e32 v8, 1, v1
3976 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
3977 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v8
3978 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v8
3979 ; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
3980 ; GFX8-NEXT:    v_mov_b32_e32 v2, s12
3981 ; GFX8-NEXT:    v_mov_b32_e32 v3, s13
3982 ; GFX8-NEXT:    v_mov_b32_e32 v4, s14
3983 ; GFX8-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
3984 ; GFX8-NEXT:    v_mov_b32_e32 v5, s15
3985 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[0:1]
3986 ; GFX8-NEXT:    v_mov_b32_e32 v6, s16
3987 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[2:3]
3988 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v8
3989 ; GFX8-NEXT:    v_mov_b32_e32 v7, s17
3990 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
3991 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v8
3992 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v1
3993 ; GFX8-NEXT:    v_mov_b32_e32 v9, s18
3994 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s[6:7]
3995 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v8
3996 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
3997 ; GFX8-NEXT:    s_mov_b32 s20, 0xffff
3998 ; GFX8-NEXT:    v_mov_b32_e32 v10, s19
3999 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[8:9]
4000 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v8
4001 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v0, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4002 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s20
4003 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v10, s[10:11]
4004 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
4005 ; GFX8-NEXT:    v_and_b32_e32 v1, v2, v1
4006 ; GFX8-NEXT:    v_or_b32_e32 v9, v1, v0
4007 ; GFX8-NEXT:    v_mov_b32_e32 v0, s12
4008 ; GFX8-NEXT:    v_mov_b32_e32 v1, s13
4009 ; GFX8-NEXT:    v_mov_b32_e32 v2, s14
4010 ; GFX8-NEXT:    v_mov_b32_e32 v3, s15
4011 ; GFX8-NEXT:    v_mov_b32_e32 v4, s16
4012 ; GFX8-NEXT:    v_mov_b32_e32 v5, s17
4013 ; GFX8-NEXT:    v_mov_b32_e32 v6, s18
4014 ; GFX8-NEXT:    v_mov_b32_e32 v7, s19
4015 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v8
4016 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v0, v9, s[12:13]
4017 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v1, v9, vcc
4018 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[0:1]
4019 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[2:3]
4020 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, v4, v9, s[4:5]
4021 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, v5, v9, s[6:7]
4022 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v6, v9, s[8:9]
4023 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, v7, v9, s[10:11]
4024 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
4025 ; GFX8-NEXT:    v_mov_b32_e32 v9, 0
4026 ; GFX8-NEXT:    v_mov_b32_e32 v10, 16
4027 ; GFX8-NEXT:    v_mov_b32_e32 v11, 0
4028 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
4029 ; GFX8-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
4030 ; GFX8-NEXT:    s_endpgm
4032 ; GFX7-LABEL: insertelement_s_v16i16_v_v:
4033 ; GFX7:       ; %bb.0:
4034 ; GFX7-NEXT:    s_load_dwordx8 s[12:19], s[2:3], 0x0
4035 ; GFX7-NEXT:    v_lshrrev_b32_e32 v8, 1, v1
4036 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v8
4037 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v8
4038 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v8
4039 ; GFX7-NEXT:    s_waitcnt lgkmcnt(0)
4040 ; GFX7-NEXT:    v_mov_b32_e32 v2, s12
4041 ; GFX7-NEXT:    v_mov_b32_e32 v3, s13
4042 ; GFX7-NEXT:    v_mov_b32_e32 v4, s14
4043 ; GFX7-NEXT:    v_cndmask_b32_e32 v2, v2, v3, vcc
4044 ; GFX7-NEXT:    v_mov_b32_e32 v5, s15
4045 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v4, s[0:1]
4046 ; GFX7-NEXT:    v_mov_b32_e32 v6, s16
4047 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v5, s[2:3]
4048 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v8
4049 ; GFX7-NEXT:    v_mov_b32_e32 v7, s17
4050 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v6, s[4:5]
4051 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v8
4052 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v1
4053 ; GFX7-NEXT:    v_mov_b32_e32 v9, s18
4054 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v7, s[6:7]
4055 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v8
4056 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4057 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
4058 ; GFX7-NEXT:    v_mov_b32_e32 v10, s19
4059 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[8:9]
4060 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v8
4061 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, v1, v0
4062 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
4063 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v10, s[10:11]
4064 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
4065 ; GFX7-NEXT:    v_and_b32_e32 v1, v2, v1
4066 ; GFX7-NEXT:    v_or_b32_e32 v9, v1, v0
4067 ; GFX7-NEXT:    v_mov_b32_e32 v0, s12
4068 ; GFX7-NEXT:    v_mov_b32_e32 v1, s13
4069 ; GFX7-NEXT:    v_mov_b32_e32 v2, s14
4070 ; GFX7-NEXT:    v_mov_b32_e32 v3, s15
4071 ; GFX7-NEXT:    v_mov_b32_e32 v4, s16
4072 ; GFX7-NEXT:    v_mov_b32_e32 v5, s17
4073 ; GFX7-NEXT:    v_mov_b32_e32 v6, s18
4074 ; GFX7-NEXT:    v_mov_b32_e32 v7, s19
4075 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v8
4076 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v0, v9, s[12:13]
4077 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v1, v9, vcc
4078 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v2, v9, s[0:1]
4079 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[2:3]
4080 ; GFX7-NEXT:    s_mov_b64 s[0:1], 0
4081 ; GFX7-NEXT:    s_mov_b32 s2, -1
4082 ; GFX7-NEXT:    s_mov_b32 s3, 0xf000
4083 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, v4, v9, s[4:5]
4084 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, v5, v9, s[6:7]
4085 ; GFX7-NEXT:    v_cndmask_b32_e64 v6, v6, v9, s[8:9]
4086 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, v7, v9, s[10:11]
4087 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
4088 ; GFX7-NEXT:    s_mov_b64 s[0:1], 16
4089 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0
4090 ; GFX7-NEXT:    s_endpgm
4092 ; GFX10-LABEL: insertelement_s_v16i16_v_v:
4093 ; GFX10:       ; %bb.0:
4094 ; GFX10-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
4095 ; GFX10-NEXT:    v_lshrrev_b32_e32 v12, 1, v1
4096 ; GFX10-NEXT:    v_and_b32_e32 v1, 1, v1
4097 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v12
4098 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v12
4099 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v12
4100 ; GFX10-NEXT:    s_mov_b32 null, 0
4101 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 4, v12
4102 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s3, 5, v12
4103 ; GFX10-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4104 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 6, v12
4105 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s5, 7, v12
4106 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s6, 0, v12
4107 ; GFX10-NEXT:    v_lshlrev_b32_e64 v3, v1, 0xffff
4108 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v8, v1, v0 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4109 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4110 ; GFX10-NEXT:    v_mov_b32_e32 v2, s9
4111 ; GFX10-NEXT:    v_not_b32_e32 v9, v3
4112 ; GFX10-NEXT:    v_cndmask_b32_e32 v2, s8, v2, vcc_lo
4113 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s10, s0
4114 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s11, s1
4115 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s12, s2
4116 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s13, s3
4117 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, s14, s4
4118 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, v2, s15, s5
4119 ; GFX10-NEXT:    v_mov_b32_e32 v0, s8
4120 ; GFX10-NEXT:    v_mov_b32_e32 v1, s9
4121 ; GFX10-NEXT:    v_mov_b32_e32 v2, s10
4122 ; GFX10-NEXT:    v_mov_b32_e32 v3, s11
4123 ; GFX10-NEXT:    v_and_or_b32 v13, v10, v9, v8
4124 ; GFX10-NEXT:    v_mov_b32_e32 v4, s12
4125 ; GFX10-NEXT:    v_mov_b32_e32 v5, s13
4126 ; GFX10-NEXT:    v_mov_b32_e32 v6, s14
4127 ; GFX10-NEXT:    v_mov_b32_e32 v7, s15
4128 ; GFX10-NEXT:    v_mov_b32_e32 v8, 0
4129 ; GFX10-NEXT:    v_mov_b32_e32 v9, 0
4130 ; GFX10-NEXT:    v_mov_b32_e32 v10, 16
4131 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v0, v13, s6
4132 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v1, v13, vcc_lo
4133 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v2, v13, s0
4134 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v3, v13, s1
4135 ; GFX10-NEXT:    v_mov_b32_e32 v11, 0
4136 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v4, v13, s2
4137 ; GFX10-NEXT:    v_cndmask_b32_e64 v5, v5, v13, s3
4138 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v6, v13, s4
4139 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v7, v13, s5
4140 ; GFX10-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
4141 ; GFX10-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
4142 ; GFX10-NEXT:    s_endpgm
4144 ; GFX11-LABEL: insertelement_s_v16i16_v_v:
4145 ; GFX11:       ; %bb.0:
4146 ; GFX11-NEXT:    s_load_b256 s[8:15], s[2:3], 0x0
4147 ; GFX11-NEXT:    v_lshrrev_b32_e32 v12, 1, v1
4148 ; GFX11-NEXT:    v_and_b32_e32 v0, 0xffff, v0
4149 ; GFX11-NEXT:    v_and_b32_e32 v1, 1, v1
4150 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
4151 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v12
4152 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v12
4153 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v12
4154 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 4, v12
4155 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s3, 5, v12
4156 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s4, 6, v12
4157 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s5, 7, v12
4158 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s6, 0, v12
4159 ; GFX11-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4160 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_3) | instid1(VALU_DEP_3)
4161 ; GFX11-NEXT:    v_lshlrev_b32_e64 v3, v1, 0xffff
4162 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4163 ; GFX11-NEXT:    v_mov_b32_e32 v2, s9
4164 ; GFX11-NEXT:    v_lshlrev_b32_e32 v8, v1, v0
4165 ; GFX11-NEXT:    v_not_b32_e32 v9, v3
4166 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_1)
4167 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, s8, v2, vcc_lo
4168 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, s10, s0
4169 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4170 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, s11, s1
4171 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, s12, s2
4172 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4173 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, s13, s3
4174 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, s14, s4
4175 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4176 ; GFX11-NEXT:    v_cndmask_b32_e64 v10, v2, s15, s5
4177 ; GFX11-NEXT:    v_dual_mov_b32 v0, s8 :: v_dual_mov_b32 v5, s13
4178 ; GFX11-NEXT:    v_dual_mov_b32 v1, s9 :: v_dual_mov_b32 v2, s10
4179 ; GFX11-NEXT:    v_mov_b32_e32 v7, s15
4180 ; GFX11-NEXT:    v_mov_b32_e32 v3, s11
4181 ; GFX11-NEXT:    v_and_or_b32 v13, v10, v9, v8
4182 ; GFX11-NEXT:    v_mov_b32_e32 v4, s12
4183 ; GFX11-NEXT:    v_mov_b32_e32 v6, s14
4184 ; GFX11-NEXT:    v_mov_b32_e32 v8, 0
4185 ; GFX11-NEXT:    v_mov_b32_e32 v9, 0
4186 ; GFX11-NEXT:    v_dual_cndmask_b32 v1, v1, v13 :: v_dual_mov_b32 v10, 16
4187 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v0, v13, s6
4188 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v2, v13, s0
4189 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v3, v13, s1
4190 ; GFX11-NEXT:    v_mov_b32_e32 v11, 0
4191 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, v4, v13, s2
4192 ; GFX11-NEXT:    v_cndmask_b32_e64 v5, v5, v13, s3
4193 ; GFX11-NEXT:    v_cndmask_b32_e64 v6, v6, v13, s4
4194 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v7, v13, s5
4195 ; GFX11-NEXT:    s_clause 0x1
4196 ; GFX11-NEXT:    global_store_b128 v[8:9], v[0:3], off
4197 ; GFX11-NEXT:    global_store_b128 v[10:11], v[4:7], off
4198 ; GFX11-NEXT:    s_nop 0
4199 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
4200 ; GFX11-NEXT:    s_endpgm
4201   %vec = load <16 x i16>, ptr addrspace(4) %ptr
4202   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
4203   store <16 x i16> %insert, ptr addrspace(1) null
4204   ret void
4207 define amdgpu_ps void @insertelement_v_v16i16_s_v(ptr addrspace(1) %ptr, i16 inreg %val, i32 %idx) {
4208 ; GFX9-LABEL: insertelement_v_v16i16_s_v:
4209 ; GFX9:       ; %bb.0:
4210 ; GFX9-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
4211 ; GFX9-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off offset:16
4212 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
4213 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v2
4214 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
4215 ; GFX9-NEXT:    s_and_b32 s1, s2, 0xffff
4216 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4217 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
4218 ; GFX9-NEXT:    v_lshlrev_b32_e64 v2, v1, s1
4219 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
4220 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
4221 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
4222 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v0
4223 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v0
4224 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v0
4225 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v0
4226 ; GFX9-NEXT:    v_not_b32_e32 v1, v1
4227 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v0
4228 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
4229 ; GFX9-NEXT:    v_cndmask_b32_e32 v11, v3, v4, vcc
4230 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v11, v5, s[0:1]
4231 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v11, v6, s[2:3]
4232 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4233 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v11, v7, s[4:5]
4234 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v11, v8, s[6:7]
4235 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v11, v9, s[8:9]
4236 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, v11, v10, s[10:11]
4237 ; GFX9-NEXT:    v_and_or_b32 v11, v11, v1, v2
4238 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v3, v11, s[12:13]
4239 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v5, v11, s[0:1]
4240 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v6, v11, s[2:3]
4241 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v8, v11, s[6:7]
4242 ; GFX9-NEXT:    v_cndmask_b32_e64 v6, v9, v11, s[8:9]
4243 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
4244 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v11, vcc
4245 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v7, v11, s[4:5]
4246 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v10, v11, s[10:11]
4247 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
4248 ; GFX9-NEXT:    v_mov_b32_e32 v10, 16
4249 ; GFX9-NEXT:    v_mov_b32_e32 v11, 0
4250 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
4251 ; GFX9-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
4252 ; GFX9-NEXT:    s_endpgm
4254 ; GFX8-LABEL: insertelement_v_v16i16_s_v:
4255 ; GFX8:       ; %bb.0:
4256 ; GFX8-NEXT:    flat_load_dwordx4 v[3:6], v[0:1]
4257 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v0
4258 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
4259 ; GFX8-NEXT:    flat_load_dwordx4 v[7:10], v[0:1]
4260 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
4261 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v2
4262 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
4263 ; GFX8-NEXT:    s_and_b32 s1, s2, 0xffff
4264 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4265 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
4266 ; GFX8-NEXT:    v_lshlrev_b32_e64 v2, v1, s1
4267 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
4268 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
4269 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
4270 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v0
4271 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v0
4272 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v0
4273 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v0
4274 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
4275 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v0
4276 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
4277 ; GFX8-NEXT:    v_cndmask_b32_e32 v11, v3, v4, vcc
4278 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v11, v5, s[0:1]
4279 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v11, v6, s[2:3]
4280 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4281 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v11, v7, s[4:5]
4282 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v11, v8, s[6:7]
4283 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v11, v9, s[8:9]
4284 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, v11, v10, s[10:11]
4285 ; GFX8-NEXT:    v_and_b32_e32 v1, v11, v1
4286 ; GFX8-NEXT:    v_or_b32_e32 v11, v1, v2
4287 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v3, v11, s[12:13]
4288 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v5, v11, s[0:1]
4289 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v6, v11, s[2:3]
4290 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, v8, v11, s[6:7]
4291 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v9, v11, s[8:9]
4292 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
4293 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v4, v11, vcc
4294 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, v7, v11, s[4:5]
4295 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, v10, v11, s[10:11]
4296 ; GFX8-NEXT:    v_mov_b32_e32 v9, 0
4297 ; GFX8-NEXT:    v_mov_b32_e32 v10, 16
4298 ; GFX8-NEXT:    v_mov_b32_e32 v11, 0
4299 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
4300 ; GFX8-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
4301 ; GFX8-NEXT:    s_endpgm
4303 ; GFX7-LABEL: insertelement_v_v16i16_s_v:
4304 ; GFX7:       ; %bb.0:
4305 ; GFX7-NEXT:    s_mov_b32 s14, 0
4306 ; GFX7-NEXT:    s_mov_b32 s15, 0xf000
4307 ; GFX7-NEXT:    s_mov_b64 s[12:13], 0
4308 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[0:1], s[12:15], 0 addr64
4309 ; GFX7-NEXT:    buffer_load_dwordx4 v[7:10], v[0:1], s[12:15], 0 addr64 offset:16
4310 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
4311 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v2
4312 ; GFX7-NEXT:    s_and_b32 s0, s2, 0xffff
4313 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4314 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
4315 ; GFX7-NEXT:    v_lshl_b32_e32 v2, s0, v1
4316 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
4317 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
4318 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v0
4319 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v0
4320 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v0
4321 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
4322 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v0
4323 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
4324 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v0
4325 ; GFX7-NEXT:    s_mov_b32 s14, -1
4326 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
4327 ; GFX7-NEXT:    v_cndmask_b32_e32 v11, v3, v4, vcc
4328 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, v11, v5, s[0:1]
4329 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, v11, v6, s[2:3]
4330 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4331 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, v11, v7, s[4:5]
4332 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, v11, v8, s[6:7]
4333 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, v11, v9, s[8:9]
4334 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, v11, v10, s[10:11]
4335 ; GFX7-NEXT:    v_and_b32_e32 v1, v11, v1
4336 ; GFX7-NEXT:    v_or_b32_e32 v11, v1, v2
4337 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v3, v11, s[12:13]
4338 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v4, v11, vcc
4339 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v5, v11, s[0:1]
4340 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v6, v11, s[2:3]
4341 ; GFX7-NEXT:    s_mov_b64 s[12:13], 0
4342 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, v7, v11, s[4:5]
4343 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, v8, v11, s[6:7]
4344 ; GFX7-NEXT:    v_cndmask_b32_e64 v6, v9, v11, s[8:9]
4345 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, v10, v11, s[10:11]
4346 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[12:15], 0
4347 ; GFX7-NEXT:    s_mov_b64 s[12:13], 16
4348 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], off, s[12:15], 0
4349 ; GFX7-NEXT:    s_endpgm
4351 ; GFX10-LABEL: insertelement_v_v16i16_s_v:
4352 ; GFX10:       ; %bb.0:
4353 ; GFX10-NEXT:    s_clause 0x1
4354 ; GFX10-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
4355 ; GFX10-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off offset:16
4356 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
4357 ; GFX10-NEXT:    v_and_b32_e32 v2, 1, v2
4358 ; GFX10-NEXT:    s_and_b32 s5, s2, 0xffff
4359 ; GFX10-NEXT:    v_mov_b32_e32 v13, 16
4360 ; GFX10-NEXT:    v_mov_b32_e32 v14, 0
4361 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
4362 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v0
4363 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v0
4364 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s3, 4, v0
4365 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 5, v0
4366 ; GFX10-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
4367 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 6, v0
4368 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s6, 0, v0
4369 ; GFX10-NEXT:    v_lshlrev_b32_e64 v11, v2, 0xffff
4370 ; GFX10-NEXT:    v_lshlrev_b32_e64 v2, v2, s5
4371 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s5, 7, v0
4372 ; GFX10-NEXT:    v_not_b32_e32 v11, v11
4373 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
4374 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc_lo
4375 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s0
4376 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s1
4377 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4378 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s3
4379 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s4
4380 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s2
4381 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v10, s5
4382 ; GFX10-NEXT:    v_and_or_b32 v15, v1, v11, v2
4383 ; GFX10-NEXT:    v_mov_b32_e32 v11, 0
4384 ; GFX10-NEXT:    v_mov_b32_e32 v12, 0
4385 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v3, v15, s6
4386 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v15, vcc_lo
4387 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v5, v15, s0
4388 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v6, v15, s1
4389 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v7, v15, s3
4390 ; GFX10-NEXT:    v_cndmask_b32_e64 v5, v8, v15, s4
4391 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v9, v15, s2
4392 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v10, v15, s5
4393 ; GFX10-NEXT:    global_store_dwordx4 v[11:12], v[0:3], off
4394 ; GFX10-NEXT:    global_store_dwordx4 v[13:14], v[4:7], off
4395 ; GFX10-NEXT:    s_endpgm
4397 ; GFX11-LABEL: insertelement_v_v16i16_s_v:
4398 ; GFX11:       ; %bb.0:
4399 ; GFX11-NEXT:    s_clause 0x1
4400 ; GFX11-NEXT:    global_load_b128 v[3:6], v[0:1], off
4401 ; GFX11-NEXT:    global_load_b128 v[7:10], v[0:1], off offset:16
4402 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 1, v2
4403 ; GFX11-NEXT:    s_and_b32 s5, s2, 0xffff
4404 ; GFX11-NEXT:    v_dual_mov_b32 v13, 16 :: v_dual_and_b32 v2, 1, v2
4405 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4406 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
4407 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v0
4408 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v0
4409 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s3, 4, v0
4410 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s4, 5, v0
4411 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, 4, v2
4412 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 6, v0
4413 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s6, 0, v0
4414 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(SKIP_2) | instid1(VALU_DEP_3)
4415 ; GFX11-NEXT:    v_lshlrev_b32_e64 v11, v2, 0xffff
4416 ; GFX11-NEXT:    v_lshlrev_b32_e64 v2, v2, s5
4417 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s5, 7, v0
4418 ; GFX11-NEXT:    v_not_b32_e32 v11, v11
4419 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
4420 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc_lo
4421 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4422 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s0
4423 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s1
4424 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4425 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4426 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s3
4427 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s4
4428 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4429 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s2
4430 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v10, s5
4431 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_3)
4432 ; GFX11-NEXT:    v_and_or_b32 v15, v1, v11, v2
4433 ; GFX11-NEXT:    v_mov_b32_e32 v11, 0
4434 ; GFX11-NEXT:    v_mov_b32_e32 v12, 0
4435 ; GFX11-NEXT:    v_dual_mov_b32 v14, 0 :: v_dual_cndmask_b32 v1, v4, v15
4436 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v3, v15, s6
4437 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v5, v15, s0
4438 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v6, v15, s1
4439 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, v7, v15, s3
4440 ; GFX11-NEXT:    v_cndmask_b32_e64 v5, v8, v15, s4
4441 ; GFX11-NEXT:    v_cndmask_b32_e64 v6, v9, v15, s2
4442 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v10, v15, s5
4443 ; GFX11-NEXT:    s_clause 0x1
4444 ; GFX11-NEXT:    global_store_b128 v[11:12], v[0:3], off
4445 ; GFX11-NEXT:    global_store_b128 v[13:14], v[4:7], off
4446 ; GFX11-NEXT:    s_nop 0
4447 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
4448 ; GFX11-NEXT:    s_endpgm
4449   %vec = load <16 x i16>, ptr addrspace(1) %ptr
4450   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
4451   store <16 x i16> %insert, ptr addrspace(1) null
4452   ret void
4455 define amdgpu_ps void @insertelement_v_v16i16_v_s(ptr addrspace(1) %ptr, i16 %val, i32 inreg %idx) {
4456 ; GFX9-LABEL: insertelement_v_v16i16_v_s:
4457 ; GFX9:       ; %bb.0:
4458 ; GFX9-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
4459 ; GFX9-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off offset:16
4460 ; GFX9-NEXT:    s_and_b32 s0, s2, 1
4461 ; GFX9-NEXT:    s_lshr_b32 s12, s2, 1
4462 ; GFX9-NEXT:    s_lshl_b32 s0, s0, 4
4463 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v0, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4464 ; GFX9-NEXT:    s_lshl_b32 s0, 0xffff, s0
4465 ; GFX9-NEXT:    v_cmp_eq_u32_e64 vcc, s12, 1
4466 ; GFX9-NEXT:    s_not_b32 s13, s0
4467 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], s12, 2
4468 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], s12, 3
4469 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], s12, 4
4470 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], s12, 5
4471 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], s12, 6
4472 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], s12, 7
4473 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
4474 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
4475 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v5, s[0:1]
4476 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s[2:3]
4477 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4478 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s[4:5]
4479 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s[6:7]
4480 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s[8:9]
4481 ; GFX9-NEXT:    v_cndmask_b32_e64 v1, v1, v10, s[10:11]
4482 ; GFX9-NEXT:    v_and_or_b32 v11, v1, s13, v0
4483 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], s12, 0
4484 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v3, v11, s[12:13]
4485 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v5, v11, s[0:1]
4486 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v6, v11, s[2:3]
4487 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v8, v11, s[6:7]
4488 ; GFX9-NEXT:    v_cndmask_b32_e64 v6, v9, v11, s[8:9]
4489 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
4490 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v4, v11, vcc
4491 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v7, v11, s[4:5]
4492 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v10, v11, s[10:11]
4493 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
4494 ; GFX9-NEXT:    v_mov_b32_e32 v10, 16
4495 ; GFX9-NEXT:    v_mov_b32_e32 v11, 0
4496 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
4497 ; GFX9-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
4498 ; GFX9-NEXT:    s_endpgm
4500 ; GFX8-LABEL: insertelement_v_v16i16_v_s:
4501 ; GFX8:       ; %bb.0:
4502 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, 16, v0
4503 ; GFX8-NEXT:    v_addc_u32_e32 v8, vcc, 0, v1, vcc
4504 ; GFX8-NEXT:    flat_load_dwordx4 v[3:6], v[0:1]
4505 ; GFX8-NEXT:    flat_load_dwordx4 v[7:10], v[7:8]
4506 ; GFX8-NEXT:    s_and_b32 s0, s2, 1
4507 ; GFX8-NEXT:    s_lshl_b32 s0, s0, 4
4508 ; GFX8-NEXT:    s_lshr_b32 m0, s2, 1
4509 ; GFX8-NEXT:    v_mov_b32_e32 v13, s0
4510 ; GFX8-NEXT:    s_lshl_b32 s0, 0xffff, s0
4511 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v13, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4512 ; GFX8-NEXT:    s_not_b32 s0, s0
4513 ; GFX8-NEXT:    v_mov_b32_e32 v0, 0
4514 ; GFX8-NEXT:    v_mov_b32_e32 v1, 0
4515 ; GFX8-NEXT:    v_mov_b32_e32 v11, 16
4516 ; GFX8-NEXT:    v_mov_b32_e32 v12, 0
4517 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4518 ; GFX8-NEXT:    v_movrels_b32_e32 v13, v3
4519 ; GFX8-NEXT:    v_and_b32_e32 v13, s0, v13
4520 ; GFX8-NEXT:    v_or_b32_e32 v2, v13, v2
4521 ; GFX8-NEXT:    v_movreld_b32_e32 v3, v2
4522 ; GFX8-NEXT:    flat_store_dwordx4 v[0:1], v[3:6]
4523 ; GFX8-NEXT:    flat_store_dwordx4 v[11:12], v[7:10]
4524 ; GFX8-NEXT:    s_endpgm
4526 ; GFX7-LABEL: insertelement_v_v16i16_v_s:
4527 ; GFX7:       ; %bb.0:
4528 ; GFX7-NEXT:    s_mov_b32 s6, 0
4529 ; GFX7-NEXT:    s_mov_b32 s7, 0xf000
4530 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
4531 ; GFX7-NEXT:    buffer_load_dwordx4 v[3:6], v[0:1], s[4:7], 0 addr64
4532 ; GFX7-NEXT:    buffer_load_dwordx4 v[7:10], v[0:1], s[4:7], 0 addr64 offset:16
4533 ; GFX7-NEXT:    s_and_b32 s0, s2, 1
4534 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v2
4535 ; GFX7-NEXT:    s_lshl_b32 s0, s0, 4
4536 ; GFX7-NEXT:    s_lshr_b32 m0, s2, 1
4537 ; GFX7-NEXT:    v_lshlrev_b32_e32 v0, s0, v0
4538 ; GFX7-NEXT:    s_lshl_b32 s0, 0xffff, s0
4539 ; GFX7-NEXT:    s_not_b32 s0, s0
4540 ; GFX7-NEXT:    s_mov_b64 s[4:5], 0
4541 ; GFX7-NEXT:    s_mov_b32 s6, -1
4542 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4543 ; GFX7-NEXT:    v_movrels_b32_e32 v1, v3
4544 ; GFX7-NEXT:    v_and_b32_e32 v1, s0, v1
4545 ; GFX7-NEXT:    v_or_b32_e32 v0, v1, v0
4546 ; GFX7-NEXT:    v_movreld_b32_e32 v3, v0
4547 ; GFX7-NEXT:    buffer_store_dwordx4 v[3:6], off, s[4:7], 0
4548 ; GFX7-NEXT:    s_mov_b64 s[4:5], 16
4549 ; GFX7-NEXT:    buffer_store_dwordx4 v[7:10], off, s[4:7], 0
4550 ; GFX7-NEXT:    s_endpgm
4552 ; GFX10-LABEL: insertelement_v_v16i16_v_s:
4553 ; GFX10:       ; %bb.0:
4554 ; GFX10-NEXT:    s_clause 0x1
4555 ; GFX10-NEXT:    global_load_dwordx4 v[3:6], v[0:1], off
4556 ; GFX10-NEXT:    global_load_dwordx4 v[7:10], v[0:1], off offset:16
4557 ; GFX10-NEXT:    s_and_b32 s0, s2, 1
4558 ; GFX10-NEXT:    s_lshr_b32 m0, s2, 1
4559 ; GFX10-NEXT:    s_lshl_b32 s0, s0, 4
4560 ; GFX10-NEXT:    v_mov_b32_e32 v11, 16
4561 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v0, s0, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4562 ; GFX10-NEXT:    s_lshl_b32 s0, 0xffff, s0
4563 ; GFX10-NEXT:    v_mov_b32_e32 v12, 0
4564 ; GFX10-NEXT:    s_not_b32 s0, s0
4565 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4566 ; GFX10-NEXT:    v_movrels_b32_e32 v1, v3
4567 ; GFX10-NEXT:    v_and_or_b32 v2, v1, s0, v0
4568 ; GFX10-NEXT:    v_mov_b32_e32 v0, 0
4569 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4570 ; GFX10-NEXT:    v_movreld_b32_e32 v3, v2
4571 ; GFX10-NEXT:    global_store_dwordx4 v[0:1], v[3:6], off
4572 ; GFX10-NEXT:    global_store_dwordx4 v[11:12], v[7:10], off
4573 ; GFX10-NEXT:    s_endpgm
4575 ; GFX11-LABEL: insertelement_v_v16i16_v_s:
4576 ; GFX11:       ; %bb.0:
4577 ; GFX11-NEXT:    s_clause 0x1
4578 ; GFX11-NEXT:    global_load_b128 v[3:6], v[0:1], off
4579 ; GFX11-NEXT:    global_load_b128 v[7:10], v[0:1], off offset:16
4580 ; GFX11-NEXT:    v_dual_mov_b32 v11, 16 :: v_dual_and_b32 v0, 0xffff, v2
4581 ; GFX11-NEXT:    s_and_b32 s0, s2, 1
4582 ; GFX11-NEXT:    s_lshr_b32 m0, s2, 1
4583 ; GFX11-NEXT:    s_lshl_b32 s0, s0, 4
4584 ; GFX11-NEXT:    v_mov_b32_e32 v12, 0
4585 ; GFX11-NEXT:    v_lshlrev_b32_e32 v0, s0, v0
4586 ; GFX11-NEXT:    s_lshl_b32 s0, 0xffff, s0
4587 ; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4588 ; GFX11-NEXT:    s_not_b32 s0, s0
4589 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4590 ; GFX11-NEXT:    v_movrels_b32_e32 v1, v3
4591 ; GFX11-NEXT:    v_and_or_b32 v2, v1, s0, v0
4592 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0
4593 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0
4594 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
4595 ; GFX11-NEXT:    v_movreld_b32_e32 v3, v2
4596 ; GFX11-NEXT:    s_clause 0x1
4597 ; GFX11-NEXT:    global_store_b128 v[0:1], v[3:6], off
4598 ; GFX11-NEXT:    global_store_b128 v[11:12], v[7:10], off
4599 ; GFX11-NEXT:    s_nop 0
4600 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
4601 ; GFX11-NEXT:    s_endpgm
4602   %vec = load <16 x i16>, ptr addrspace(1) %ptr
4603   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
4604   store <16 x i16> %insert, ptr addrspace(1) null
4605   ret void
4608 define amdgpu_ps void @insertelement_v_v16i16_v_v(ptr addrspace(1) %ptr, i16 %val, i32 %idx) {
4609 ; GFX9-LABEL: insertelement_v_v16i16_v_v:
4610 ; GFX9:       ; %bb.0:
4611 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
4612 ; GFX9-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
4613 ; GFX9-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
4614 ; GFX9-NEXT:    v_and_b32_e32 v1, 1, v3
4615 ; GFX9-NEXT:    s_mov_b32 s0, 0xffff
4616 ; GFX9-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4617 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
4618 ; GFX9-NEXT:    v_lshlrev_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4619 ; GFX9-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
4620 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
4621 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
4622 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v0
4623 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v0
4624 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v0
4625 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v0
4626 ; GFX9-NEXT:    v_not_b32_e32 v1, v1
4627 ; GFX9-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v0
4628 ; GFX9-NEXT:    s_waitcnt vmcnt(1)
4629 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
4630 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[0:1]
4631 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[2:3]
4632 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
4633 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v8, s[4:5]
4634 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[6:7]
4635 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v10, s[8:9]
4636 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v3, v11, s[10:11]
4637 ; GFX9-NEXT:    v_and_or_b32 v12, v3, v1, v2
4638 ; GFX9-NEXT:    v_cndmask_b32_e64 v0, v4, v12, s[12:13]
4639 ; GFX9-NEXT:    v_cndmask_b32_e32 v1, v5, v12, vcc
4640 ; GFX9-NEXT:    v_cndmask_b32_e64 v4, v8, v12, s[4:5]
4641 ; GFX9-NEXT:    v_cndmask_b32_e64 v5, v9, v12, s[6:7]
4642 ; GFX9-NEXT:    v_mov_b32_e32 v8, 0
4643 ; GFX9-NEXT:    v_cndmask_b32_e64 v2, v6, v12, s[0:1]
4644 ; GFX9-NEXT:    v_cndmask_b32_e64 v3, v7, v12, s[2:3]
4645 ; GFX9-NEXT:    v_cndmask_b32_e64 v6, v10, v12, s[8:9]
4646 ; GFX9-NEXT:    v_cndmask_b32_e64 v7, v11, v12, s[10:11]
4647 ; GFX9-NEXT:    v_mov_b32_e32 v9, 0
4648 ; GFX9-NEXT:    v_mov_b32_e32 v10, 16
4649 ; GFX9-NEXT:    v_mov_b32_e32 v11, 0
4650 ; GFX9-NEXT:    global_store_dwordx4 v[8:9], v[0:3], off
4651 ; GFX9-NEXT:    global_store_dwordx4 v[10:11], v[4:7], off
4652 ; GFX9-NEXT:    s_endpgm
4654 ; GFX8-LABEL: insertelement_v_v16i16_v_v:
4655 ; GFX8:       ; %bb.0:
4656 ; GFX8-NEXT:    flat_load_dwordx4 v[4:7], v[0:1]
4657 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, 16, v0
4658 ; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
4659 ; GFX8-NEXT:    flat_load_dwordx4 v[8:11], v[0:1]
4660 ; GFX8-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
4661 ; GFX8-NEXT:    v_and_b32_e32 v1, 1, v3
4662 ; GFX8-NEXT:    s_mov_b32 s0, 0xffff
4663 ; GFX8-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4664 ; GFX8-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
4665 ; GFX8-NEXT:    v_lshlrev_b32_sdwa v2, v1, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4666 ; GFX8-NEXT:    v_lshlrev_b32_e64 v1, v1, s0
4667 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
4668 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
4669 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v0
4670 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v0
4671 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v0
4672 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v0
4673 ; GFX8-NEXT:    v_not_b32_e32 v1, v1
4674 ; GFX8-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v0
4675 ; GFX8-NEXT:    s_waitcnt vmcnt(1)
4676 ; GFX8-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
4677 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[0:1]
4678 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[2:3]
4679 ; GFX8-NEXT:    s_waitcnt vmcnt(0)
4680 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v8, s[4:5]
4681 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[6:7]
4682 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v10, s[8:9]
4683 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v3, v11, s[10:11]
4684 ; GFX8-NEXT:    v_and_b32_e32 v1, v3, v1
4685 ; GFX8-NEXT:    v_or_b32_e32 v12, v1, v2
4686 ; GFX8-NEXT:    v_cndmask_b32_e64 v0, v4, v12, s[12:13]
4687 ; GFX8-NEXT:    v_cndmask_b32_e32 v1, v5, v12, vcc
4688 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, v8, v12, s[4:5]
4689 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, v9, v12, s[6:7]
4690 ; GFX8-NEXT:    v_mov_b32_e32 v8, 0
4691 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, v6, v12, s[0:1]
4692 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, v7, v12, s[2:3]
4693 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, v10, v12, s[8:9]
4694 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, v11, v12, s[10:11]
4695 ; GFX8-NEXT:    v_mov_b32_e32 v9, 0
4696 ; GFX8-NEXT:    v_mov_b32_e32 v10, 16
4697 ; GFX8-NEXT:    v_mov_b32_e32 v11, 0
4698 ; GFX8-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
4699 ; GFX8-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
4700 ; GFX8-NEXT:    s_endpgm
4702 ; GFX7-LABEL: insertelement_v_v16i16_v_v:
4703 ; GFX7:       ; %bb.0:
4704 ; GFX7-NEXT:    s_mov_b32 s14, 0
4705 ; GFX7-NEXT:    s_mov_b32 s15, 0xf000
4706 ; GFX7-NEXT:    s_mov_b64 s[12:13], 0
4707 ; GFX7-NEXT:    buffer_load_dwordx4 v[4:7], v[0:1], s[12:15], 0 addr64
4708 ; GFX7-NEXT:    buffer_load_dwordx4 v[8:11], v[0:1], s[12:15], 0 addr64 offset:16
4709 ; GFX7-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
4710 ; GFX7-NEXT:    v_cmp_eq_u32_e32 vcc, 1, v0
4711 ; GFX7-NEXT:    v_and_b32_e32 v1, 1, v3
4712 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[0:1], 2, v0
4713 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[2:3], 3, v0
4714 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[4:5], 4, v0
4715 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[6:7], 5, v0
4716 ; GFX7-NEXT:    v_and_b32_e32 v2, 0xffff, v2
4717 ; GFX7-NEXT:    v_lshlrev_b32_e32 v1, 4, v1
4718 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[8:9], 6, v0
4719 ; GFX7-NEXT:    v_lshlrev_b32_e32 v2, v1, v2
4720 ; GFX7-NEXT:    v_lshl_b32_e32 v1, 0xffff, v1
4721 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[10:11], 7, v0
4722 ; GFX7-NEXT:    v_not_b32_e32 v1, v1
4723 ; GFX7-NEXT:    v_cmp_eq_u32_e64 s[12:13], 0, v0
4724 ; GFX7-NEXT:    s_mov_b32 s14, -1
4725 ; GFX7-NEXT:    s_waitcnt vmcnt(1)
4726 ; GFX7-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
4727 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v6, s[0:1]
4728 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v7, s[2:3]
4729 ; GFX7-NEXT:    s_waitcnt vmcnt(0)
4730 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v8, s[4:5]
4731 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v9, s[6:7]
4732 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v10, s[8:9]
4733 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v3, v11, s[10:11]
4734 ; GFX7-NEXT:    v_and_b32_e32 v1, v3, v1
4735 ; GFX7-NEXT:    v_or_b32_e32 v12, v1, v2
4736 ; GFX7-NEXT:    v_cndmask_b32_e64 v0, v4, v12, s[12:13]
4737 ; GFX7-NEXT:    v_cndmask_b32_e32 v1, v5, v12, vcc
4738 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, v6, v12, s[0:1]
4739 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, v7, v12, s[2:3]
4740 ; GFX7-NEXT:    s_mov_b64 s[12:13], 0
4741 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, v8, v12, s[4:5]
4742 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, v9, v12, s[6:7]
4743 ; GFX7-NEXT:    v_cndmask_b32_e64 v6, v10, v12, s[8:9]
4744 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, v11, v12, s[10:11]
4745 ; GFX7-NEXT:    buffer_store_dwordx4 v[0:3], off, s[12:15], 0
4746 ; GFX7-NEXT:    s_mov_b64 s[12:13], 16
4747 ; GFX7-NEXT:    buffer_store_dwordx4 v[4:7], off, s[12:15], 0
4748 ; GFX7-NEXT:    s_endpgm
4750 ; GFX10-LABEL: insertelement_v_v16i16_v_v:
4751 ; GFX10:       ; %bb.0:
4752 ; GFX10-NEXT:    s_clause 0x1
4753 ; GFX10-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off
4754 ; GFX10-NEXT:    global_load_dwordx4 v[8:11], v[0:1], off offset:16
4755 ; GFX10-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
4756 ; GFX10-NEXT:    v_and_b32_e32 v3, 1, v3
4757 ; GFX10-NEXT:    v_mov_b32_e32 v14, 16
4758 ; GFX10-NEXT:    v_mov_b32_e32 v15, 0
4759 ; GFX10-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
4760 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s0, 2, v0
4761 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s1, 3, v0
4762 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s2, 4, v0
4763 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s3, 5, v0
4764 ; GFX10-NEXT:    v_lshlrev_b32_e32 v3, 4, v3
4765 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s4, 6, v0
4766 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s5, 7, v0
4767 ; GFX10-NEXT:    v_cmp_eq_u32_e64 s6, 0, v0
4768 ; GFX10-NEXT:    v_lshlrev_b32_e64 v12, v3, 0xffff
4769 ; GFX10-NEXT:    v_lshlrev_b32_sdwa v2, v3, v2 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_0
4770 ; GFX10-NEXT:    v_not_b32_e32 v3, v12
4771 ; GFX10-NEXT:    v_mov_b32_e32 v12, 0
4772 ; GFX10-NEXT:    v_mov_b32_e32 v13, 0
4773 ; GFX10-NEXT:    s_waitcnt vmcnt(1)
4774 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v4, v5, vcc_lo
4775 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s0
4776 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s1
4777 ; GFX10-NEXT:    s_waitcnt vmcnt(0)
4778 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s2
4779 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s3
4780 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v10, s4
4781 ; GFX10-NEXT:    v_cndmask_b32_e64 v1, v1, v11, s5
4782 ; GFX10-NEXT:    v_and_or_b32 v16, v1, v3, v2
4783 ; GFX10-NEXT:    v_cndmask_b32_e64 v0, v4, v16, s6
4784 ; GFX10-NEXT:    v_cndmask_b32_e32 v1, v5, v16, vcc_lo
4785 ; GFX10-NEXT:    v_cndmask_b32_e64 v2, v6, v16, s0
4786 ; GFX10-NEXT:    v_cndmask_b32_e64 v3, v7, v16, s1
4787 ; GFX10-NEXT:    v_cndmask_b32_e64 v4, v8, v16, s2
4788 ; GFX10-NEXT:    v_cndmask_b32_e64 v5, v9, v16, s3
4789 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, v10, v16, s4
4790 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, v11, v16, s5
4791 ; GFX10-NEXT:    global_store_dwordx4 v[12:13], v[0:3], off
4792 ; GFX10-NEXT:    global_store_dwordx4 v[14:15], v[4:7], off
4793 ; GFX10-NEXT:    s_endpgm
4795 ; GFX11-LABEL: insertelement_v_v16i16_v_v:
4796 ; GFX11:       ; %bb.0:
4797 ; GFX11-NEXT:    s_clause 0x1
4798 ; GFX11-NEXT:    global_load_b128 v[4:7], v[0:1], off
4799 ; GFX11-NEXT:    global_load_b128 v[8:11], v[0:1], off offset:16
4800 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 1, v3
4801 ; GFX11-NEXT:    v_dual_mov_b32 v14, 16 :: v_dual_and_b32 v3, 1, v3
4802 ; GFX11-NEXT:    v_dual_mov_b32 v15, 0 :: v_dual_and_b32 v2, 0xffff, v2
4803 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3)
4804 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 1, v0
4805 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s0, 2, v0
4806 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s1, 3, v0
4807 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s2, 4, v0
4808 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s3, 5, v0
4809 ; GFX11-NEXT:    v_lshlrev_b32_e32 v3, 4, v3
4810 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s4, 6, v0
4811 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s5, 7, v0
4812 ; GFX11-NEXT:    v_cmp_eq_u32_e64 s6, 0, v0
4813 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4814 ; GFX11-NEXT:    v_lshlrev_b32_e64 v12, v3, 0xffff
4815 ; GFX11-NEXT:    v_lshlrev_b32_e32 v2, v3, v2
4816 ; GFX11-NEXT:    v_not_b32_e32 v3, v12
4817 ; GFX11-NEXT:    v_mov_b32_e32 v12, 0
4818 ; GFX11-NEXT:    v_mov_b32_e32 v13, 0
4819 ; GFX11-NEXT:    s_waitcnt vmcnt(1)
4820 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v4, v5, vcc_lo
4821 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4822 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v6, s0
4823 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v7, s1
4824 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
4825 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4826 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v8, s2
4827 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v9, s3
4828 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4829 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v10, s4
4830 ; GFX11-NEXT:    v_cndmask_b32_e64 v1, v1, v11, s5
4831 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
4832 ; GFX11-NEXT:    v_and_or_b32 v16, v1, v3, v2
4833 ; GFX11-NEXT:    v_cndmask_b32_e64 v0, v4, v16, s6
4834 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, v5, v16, vcc_lo
4835 ; GFX11-NEXT:    v_cndmask_b32_e64 v2, v6, v16, s0
4836 ; GFX11-NEXT:    v_cndmask_b32_e64 v3, v7, v16, s1
4837 ; GFX11-NEXT:    v_cndmask_b32_e64 v4, v8, v16, s2
4838 ; GFX11-NEXT:    v_cndmask_b32_e64 v5, v9, v16, s3
4839 ; GFX11-NEXT:    v_cndmask_b32_e64 v6, v10, v16, s4
4840 ; GFX11-NEXT:    v_cndmask_b32_e64 v7, v11, v16, s5
4841 ; GFX11-NEXT:    s_clause 0x1
4842 ; GFX11-NEXT:    global_store_b128 v[12:13], v[0:3], off
4843 ; GFX11-NEXT:    global_store_b128 v[14:15], v[4:7], off
4844 ; GFX11-NEXT:    s_nop 0
4845 ; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
4846 ; GFX11-NEXT:    s_endpgm
4847   %vec = load <16 x i16>, ptr addrspace(1) %ptr
4848   %insert = insertelement <16 x i16> %vec, i16 %val, i32 %idx
4849   store <16 x i16> %insert, ptr addrspace(1) null
4850   ret void