1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=hawaii -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=CIVI,HAWAII %s
3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=fiji -verify-machineinstrs < %s | FileCheck -enable-var-scope -check-prefixes=CIVI,FIJI %s
4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -enable-var-scope --check-prefix=GFX9 %s
5; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -enable-var-scope --check-prefix=GFX10 %s
6; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -enable-var-scope --check-prefix=GFX11 %s
7
8define void @local_store_i56(i56 addrspace(3)* %ptr, i56 %arg) #0 {
9; CIVI-LABEL: local_store_i56:
10; CIVI:       ; %bb.0:
11; CIVI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
12; CIVI-NEXT:    s_mov_b32 m0, -1
13; CIVI-NEXT:    ds_write_b16 v0, v2 offset:4
14; CIVI-NEXT:    ds_write_b32 v0, v1
15; CIVI-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
16; CIVI-NEXT:    ds_write_b8 v0, v1 offset:6
17; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
18; CIVI-NEXT:    s_setpc_b64 s[30:31]
19;
20; GFX9-LABEL: local_store_i56:
21; GFX9:       ; %bb.0:
22; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23; GFX9-NEXT:    ds_write_b8_d16_hi v0, v2 offset:6
24; GFX9-NEXT:    ds_write_b16 v0, v2 offset:4
25; GFX9-NEXT:    ds_write_b32 v0, v1
26; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
27; GFX9-NEXT:    s_setpc_b64 s[30:31]
28;
29; GFX10-LABEL: local_store_i56:
30; GFX10:       ; %bb.0:
31; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
32; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
33; GFX10-NEXT:    ds_write_b8_d16_hi v0, v2 offset:6
34; GFX10-NEXT:    ds_write_b16 v0, v2 offset:4
35; GFX10-NEXT:    ds_write_b32 v0, v1
36; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
37; GFX10-NEXT:    s_setpc_b64 s[30:31]
38;
39; GFX11-LABEL: local_store_i56:
40; GFX11:       ; %bb.0:
41; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
42; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
43; GFX11-NEXT:    ds_store_b8_d16_hi v0, v2 offset:6
44; GFX11-NEXT:    ds_store_b16 v0, v2 offset:4
45; GFX11-NEXT:    ds_store_b32 v0, v1
46; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
47; GFX11-NEXT:    s_setpc_b64 s[30:31]
48  store i56 %arg, i56 addrspace(3)* %ptr, align 8
49  ret void
50}
51
52define amdgpu_kernel void @local_store_i55(i55 addrspace(3)* %ptr, i55 %arg) #0 {
53; HAWAII-LABEL: local_store_i55:
54; HAWAII:       ; %bb.0:
55; HAWAII-NEXT:    s_or_b32 s0, s4, 14
56; HAWAII-NEXT:    v_mov_b32_e32 v0, s0
57; HAWAII-NEXT:    v_mov_b32_e32 v1, s5
58; HAWAII-NEXT:    flat_load_ubyte v0, v[0:1]
59; HAWAII-NEXT:    s_load_dword s0, s[4:5], 0x0
60; HAWAII-NEXT:    s_load_dword s1, s[4:5], 0x2
61; HAWAII-NEXT:    s_load_dword s2, s[4:5], 0x3
62; HAWAII-NEXT:    s_mov_b32 m0, -1
63; HAWAII-NEXT:    s_waitcnt lgkmcnt(0)
64; HAWAII-NEXT:    v_mov_b32_e32 v1, s0
65; HAWAII-NEXT:    v_mov_b32_e32 v2, s1
66; HAWAII-NEXT:    v_mov_b32_e32 v3, s2
67; HAWAII-NEXT:    ds_write_b16 v1, v3 offset:4
68; HAWAII-NEXT:    s_waitcnt vmcnt(0)
69; HAWAII-NEXT:    v_and_b32_e32 v0, 0x7f, v0
70; HAWAII-NEXT:    ds_write_b8 v1, v0 offset:6
71; HAWAII-NEXT:    ds_write_b32 v1, v2
72; HAWAII-NEXT:    s_endpgm
73;
74; FIJI-LABEL: local_store_i55:
75; FIJI:       ; %bb.0:
76; FIJI-NEXT:    s_or_b32 s0, s4, 14
77; FIJI-NEXT:    v_mov_b32_e32 v0, s0
78; FIJI-NEXT:    v_mov_b32_e32 v1, s5
79; FIJI-NEXT:    flat_load_ubyte v0, v[0:1]
80; FIJI-NEXT:    s_load_dword s0, s[4:5], 0xc
81; FIJI-NEXT:    s_load_dword s1, s[4:5], 0x0
82; FIJI-NEXT:    s_load_dword s2, s[4:5], 0x8
83; FIJI-NEXT:    s_mov_b32 m0, -1
84; FIJI-NEXT:    s_waitcnt lgkmcnt(0)
85; FIJI-NEXT:    s_and_b32 s3, s0, 0xffff
86; FIJI-NEXT:    v_mov_b32_e32 v1, s1
87; FIJI-NEXT:    v_mov_b32_e32 v2, s0
88; FIJI-NEXT:    v_mov_b32_e32 v3, s2
89; FIJI-NEXT:    ds_write_b16 v1, v2 offset:4
90; FIJI-NEXT:    s_waitcnt vmcnt(0)
91; FIJI-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
92; FIJI-NEXT:    v_or_b32_e32 v0, s3, v0
93; FIJI-NEXT:    v_bfe_u32 v0, v0, 16, 7
94; FIJI-NEXT:    ds_write_b8 v1, v0 offset:6
95; FIJI-NEXT:    ds_write_b32 v1, v3
96; FIJI-NEXT:    s_endpgm
97;
98; GFX9-LABEL: local_store_i55:
99; GFX9:       ; %bb.0:
100; GFX9-NEXT:    v_mov_b32_e32 v0, 0
101; GFX9-NEXT:    global_load_ubyte_d16_hi v0, v0, s[4:5] offset:14
102; GFX9-NEXT:    s_load_dword s0, s[4:5], 0xc
103; GFX9-NEXT:    s_load_dword s1, s[4:5], 0x0
104; GFX9-NEXT:    s_load_dword s2, s[4:5], 0x8
105; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
106; GFX9-NEXT:    s_and_b32 s3, s0, 0xffff
107; GFX9-NEXT:    v_mov_b32_e32 v1, s1
108; GFX9-NEXT:    v_mov_b32_e32 v2, s0
109; GFX9-NEXT:    v_mov_b32_e32 v3, s2
110; GFX9-NEXT:    ds_write_b16 v1, v2 offset:4
111; GFX9-NEXT:    s_waitcnt vmcnt(0)
112; GFX9-NEXT:    v_or_b32_e32 v0, s3, v0
113; GFX9-NEXT:    v_and_b32_e32 v0, 0x7fffff, v0
114; GFX9-NEXT:    ds_write_b8_d16_hi v1, v0 offset:6
115; GFX9-NEXT:    ds_write_b32 v1, v3
116; GFX9-NEXT:    s_endpgm
117;
118; GFX10-LABEL: local_store_i55:
119; GFX10:       ; %bb.0:
120; GFX10-NEXT:    v_mov_b32_e32 v0, 0
121; GFX10-NEXT:    s_clause 0x2
122; GFX10-NEXT:    s_load_dword s0, s[4:5], 0xc
123; GFX10-NEXT:    s_load_dword s1, s[4:5], 0x0
124; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x8
125; GFX10-NEXT:    global_load_ubyte_d16_hi v0, v0, s[4:5] offset:14
126; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
127; GFX10-NEXT:    s_and_b32 s3, s0, 0xffff
128; GFX10-NEXT:    v_mov_b32_e32 v1, s1
129; GFX10-NEXT:    v_mov_b32_e32 v2, s0
130; GFX10-NEXT:    v_mov_b32_e32 v3, s2
131; GFX10-NEXT:    s_waitcnt vmcnt(0)
132; GFX10-NEXT:    v_or_b32_e32 v0, s3, v0
133; GFX10-NEXT:    v_and_b32_e32 v0, 0x7fffff, v0
134; GFX10-NEXT:    ds_write_b16 v1, v2 offset:4
135; GFX10-NEXT:    ds_write_b8_d16_hi v1, v0 offset:6
136; GFX10-NEXT:    ds_write_b32 v1, v3
137; GFX10-NEXT:    s_endpgm
138;
139; GFX11-LABEL: local_store_i55:
140; GFX11:       ; %bb.0:
141; GFX11-NEXT:    v_mov_b32_e32 v0, 0
142; GFX11-NEXT:    global_load_d16_hi_u8 v0, v0, s[0:1] offset:14
143; GFX11-NEXT:    s_clause 0x2
144; GFX11-NEXT:    s_load_b32 s2, s[0:1], 0xc
145; GFX11-NEXT:    s_load_b32 s3, s[0:1], 0x0
146; GFX11-NEXT:    s_load_b32 s0, s[0:1], 0x8
147; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
148; GFX11-NEXT:    s_and_b32 s1, s2, 0xffff
149; GFX11-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v2, s2
150; GFX11-NEXT:    v_mov_b32_e32 v3, s0
151; GFX11-NEXT:    s_waitcnt vmcnt(0)
152; GFX11-NEXT:    v_or_b32_e32 v0, s1, v0
153; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
154; GFX11-NEXT:    v_and_b32_e32 v0, 0x7fffff, v0
155; GFX11-NEXT:    ds_store_b8_d16_hi v1, v0 offset:6
156; GFX11-NEXT:    ds_store_b16 v1, v2 offset:4
157; GFX11-NEXT:    ds_store_b32 v1, v3
158; GFX11-NEXT:    s_endpgm
159  store i55 %arg, i55 addrspace(3)* %ptr, align 8
160  ret void
161}
162
163define amdgpu_kernel void @local_store_i48(i48 addrspace(3)* %ptr, i48 %arg) #0 {
164; HAWAII-LABEL: local_store_i48:
165; HAWAII:       ; %bb.0:
166; HAWAII-NEXT:    s_load_dword s0, s[4:5], 0x0
167; HAWAII-NEXT:    s_load_dword s1, s[4:5], 0x3
168; HAWAII-NEXT:    s_load_dword s2, s[4:5], 0x2
169; HAWAII-NEXT:    s_mov_b32 m0, -1
170; HAWAII-NEXT:    s_waitcnt lgkmcnt(0)
171; HAWAII-NEXT:    v_mov_b32_e32 v0, s0
172; HAWAII-NEXT:    v_mov_b32_e32 v1, s1
173; HAWAII-NEXT:    ds_write_b16 v0, v1 offset:4
174; HAWAII-NEXT:    v_mov_b32_e32 v1, s2
175; HAWAII-NEXT:    ds_write_b32 v0, v1
176; HAWAII-NEXT:    s_endpgm
177;
178; FIJI-LABEL: local_store_i48:
179; FIJI:       ; %bb.0:
180; FIJI-NEXT:    s_load_dword s0, s[4:5], 0x0
181; FIJI-NEXT:    s_load_dword s1, s[4:5], 0xc
182; FIJI-NEXT:    s_load_dword s2, s[4:5], 0x8
183; FIJI-NEXT:    s_mov_b32 m0, -1
184; FIJI-NEXT:    s_waitcnt lgkmcnt(0)
185; FIJI-NEXT:    v_mov_b32_e32 v0, s0
186; FIJI-NEXT:    v_mov_b32_e32 v1, s1
187; FIJI-NEXT:    ds_write_b16 v0, v1 offset:4
188; FIJI-NEXT:    v_mov_b32_e32 v1, s2
189; FIJI-NEXT:    ds_write_b32 v0, v1
190; FIJI-NEXT:    s_endpgm
191;
192; GFX9-LABEL: local_store_i48:
193; GFX9:       ; %bb.0:
194; GFX9-NEXT:    s_load_dword s0, s[4:5], 0x0
195; GFX9-NEXT:    s_load_dword s1, s[4:5], 0xc
196; GFX9-NEXT:    s_load_dword s2, s[4:5], 0x8
197; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
198; GFX9-NEXT:    v_mov_b32_e32 v0, s0
199; GFX9-NEXT:    v_mov_b32_e32 v1, s1
200; GFX9-NEXT:    v_mov_b32_e32 v2, s2
201; GFX9-NEXT:    ds_write_b16 v0, v1 offset:4
202; GFX9-NEXT:    ds_write_b32 v0, v2
203; GFX9-NEXT:    s_endpgm
204;
205; GFX10-LABEL: local_store_i48:
206; GFX10:       ; %bb.0:
207; GFX10-NEXT:    s_clause 0x2
208; GFX10-NEXT:    s_load_dword s0, s[4:5], 0x0
209; GFX10-NEXT:    s_load_dword s1, s[4:5], 0xc
210; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x8
211; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
212; GFX10-NEXT:    v_mov_b32_e32 v0, s0
213; GFX10-NEXT:    v_mov_b32_e32 v1, s1
214; GFX10-NEXT:    v_mov_b32_e32 v2, s2
215; GFX10-NEXT:    ds_write_b16 v0, v1 offset:4
216; GFX10-NEXT:    ds_write_b32 v0, v2
217; GFX10-NEXT:    s_endpgm
218;
219; GFX11-LABEL: local_store_i48:
220; GFX11:       ; %bb.0:
221; GFX11-NEXT:    s_clause 0x2
222; GFX11-NEXT:    s_load_b32 s2, s[0:1], 0x0
223; GFX11-NEXT:    s_load_b32 s3, s[0:1], 0xc
224; GFX11-NEXT:    s_load_b32 s0, s[0:1], 0x8
225; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
226; GFX11-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
227; GFX11-NEXT:    v_mov_b32_e32 v2, s0
228; GFX11-NEXT:    ds_store_b16 v0, v1 offset:4
229; GFX11-NEXT:    ds_store_b32 v0, v2
230; GFX11-NEXT:    s_endpgm
231  store i48 %arg, i48 addrspace(3)* %ptr, align 8
232  ret void
233}
234
235define amdgpu_kernel void @local_store_i65(i65 addrspace(3)* %ptr, i65 %arg) #0 {
236; HAWAII-LABEL: local_store_i65:
237; HAWAII:       ; %bb.0:
238; HAWAII-NEXT:    s_load_dword s2, s[4:5], 0x4
239; HAWAII-NEXT:    s_load_dword s3, s[4:5], 0x0
240; HAWAII-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x2
241; HAWAII-NEXT:    s_mov_b32 m0, -1
242; HAWAII-NEXT:    s_waitcnt lgkmcnt(0)
243; HAWAII-NEXT:    s_and_b32 s2, s2, 1
244; HAWAII-NEXT:    v_mov_b32_e32 v2, s3
245; HAWAII-NEXT:    v_mov_b32_e32 v0, s2
246; HAWAII-NEXT:    ds_write_b8 v2, v0 offset:8
247; HAWAII-NEXT:    v_mov_b32_e32 v0, s0
248; HAWAII-NEXT:    v_mov_b32_e32 v1, s1
249; HAWAII-NEXT:    ds_write_b64 v2, v[0:1]
250; HAWAII-NEXT:    s_endpgm
251;
252; FIJI-LABEL: local_store_i65:
253; FIJI:       ; %bb.0:
254; FIJI-NEXT:    s_load_dword s2, s[4:5], 0x10
255; FIJI-NEXT:    s_load_dword s3, s[4:5], 0x0
256; FIJI-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
257; FIJI-NEXT:    s_mov_b32 m0, -1
258; FIJI-NEXT:    s_waitcnt lgkmcnt(0)
259; FIJI-NEXT:    s_and_b32 s2, s2, 1
260; FIJI-NEXT:    v_mov_b32_e32 v2, s3
261; FIJI-NEXT:    v_mov_b32_e32 v0, s2
262; FIJI-NEXT:    ds_write_b8 v2, v0 offset:8
263; FIJI-NEXT:    v_mov_b32_e32 v0, s0
264; FIJI-NEXT:    v_mov_b32_e32 v1, s1
265; FIJI-NEXT:    ds_write_b64 v2, v[0:1]
266; FIJI-NEXT:    s_endpgm
267;
268; GFX9-LABEL: local_store_i65:
269; GFX9:       ; %bb.0:
270; GFX9-NEXT:    s_load_dword s2, s[4:5], 0x10
271; GFX9-NEXT:    s_load_dword s3, s[4:5], 0x0
272; GFX9-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
273; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
274; GFX9-NEXT:    s_and_b32 s2, s2, 1
275; GFX9-NEXT:    v_mov_b32_e32 v2, s3
276; GFX9-NEXT:    v_mov_b32_e32 v0, s0
277; GFX9-NEXT:    v_mov_b32_e32 v3, s2
278; GFX9-NEXT:    v_mov_b32_e32 v1, s1
279; GFX9-NEXT:    ds_write_b8 v2, v3 offset:8
280; GFX9-NEXT:    ds_write_b64 v2, v[0:1]
281; GFX9-NEXT:    s_endpgm
282;
283; GFX10-LABEL: local_store_i65:
284; GFX10:       ; %bb.0:
285; GFX10-NEXT:    s_clause 0x2
286; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x10
287; GFX10-NEXT:    s_load_dword s3, s[4:5], 0x0
288; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x8
289; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
290; GFX10-NEXT:    s_and_b32 s2, s2, 1
291; GFX10-NEXT:    v_mov_b32_e32 v2, s3
292; GFX10-NEXT:    v_mov_b32_e32 v3, s2
293; GFX10-NEXT:    v_mov_b32_e32 v0, s0
294; GFX10-NEXT:    v_mov_b32_e32 v1, s1
295; GFX10-NEXT:    ds_write_b8 v2, v3 offset:8
296; GFX10-NEXT:    ds_write_b64 v2, v[0:1]
297; GFX10-NEXT:    s_endpgm
298;
299; GFX11-LABEL: local_store_i65:
300; GFX11:       ; %bb.0:
301; GFX11-NEXT:    s_clause 0x2
302; GFX11-NEXT:    s_load_b32 s2, s[0:1], 0x10
303; GFX11-NEXT:    s_load_b32 s3, s[0:1], 0x0
304; GFX11-NEXT:    s_load_b64 s[0:1], s[0:1], 0x8
305; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
306; GFX11-NEXT:    s_and_b32 s2, s2, 1
307; GFX11-NEXT:    s_delay_alu instid0(SALU_CYCLE_1)
308; GFX11-NEXT:    v_dual_mov_b32 v2, s3 :: v_dual_mov_b32 v3, s2
309; GFX11-NEXT:    v_dual_mov_b32 v0, s0 :: v_dual_mov_b32 v1, s1
310; GFX11-NEXT:    ds_store_b8 v2, v3 offset:8
311; GFX11-NEXT:    ds_store_b64 v2, v[0:1]
312; GFX11-NEXT:    s_endpgm
313  store i65 %arg, i65 addrspace(3)* %ptr, align 8
314  ret void
315}
316
317define void @local_store_i13(i13 addrspace(3)* %ptr, i13 %arg) #0 {
318; CIVI-LABEL: local_store_i13:
319; CIVI:       ; %bb.0:
320; CIVI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
321; CIVI-NEXT:    v_and_b32_e32 v1, 0x1fff, v1
322; CIVI-NEXT:    s_mov_b32 m0, -1
323; CIVI-NEXT:    ds_write_b16 v0, v1
324; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
325; CIVI-NEXT:    s_setpc_b64 s[30:31]
326;
327; GFX9-LABEL: local_store_i13:
328; GFX9:       ; %bb.0:
329; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
330; GFX9-NEXT:    v_and_b32_e32 v1, 0x1fff, v1
331; GFX9-NEXT:    ds_write_b16 v0, v1
332; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
333; GFX9-NEXT:    s_setpc_b64 s[30:31]
334;
335; GFX10-LABEL: local_store_i13:
336; GFX10:       ; %bb.0:
337; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
338; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
339; GFX10-NEXT:    v_and_b32_e32 v1, 0x1fff, v1
340; GFX10-NEXT:    ds_write_b16 v0, v1
341; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
342; GFX10-NEXT:    s_setpc_b64 s[30:31]
343;
344; GFX11-LABEL: local_store_i13:
345; GFX11:       ; %bb.0:
346; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
347; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
348; GFX11-NEXT:    v_and_b32_e32 v1, 0x1fff, v1
349; GFX11-NEXT:    ds_store_b16 v0, v1
350; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
351; GFX11-NEXT:    s_setpc_b64 s[30:31]
352  store i13 %arg, i13 addrspace(3)* %ptr, align 8
353  ret void
354}
355
356define void @local_store_i17(i17 addrspace(3)* %ptr, i17 %arg) #0 {
357; CIVI-LABEL: local_store_i17:
358; CIVI:       ; %bb.0:
359; CIVI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
360; CIVI-NEXT:    s_mov_b32 m0, -1
361; CIVI-NEXT:    ds_write_b16 v0, v1
362; CIVI-NEXT:    v_bfe_u32 v1, v1, 16, 1
363; CIVI-NEXT:    ds_write_b8 v0, v1 offset:2
364; CIVI-NEXT:    s_waitcnt lgkmcnt(0)
365; CIVI-NEXT:    s_setpc_b64 s[30:31]
366;
367; GFX9-LABEL: local_store_i17:
368; GFX9:       ; %bb.0:
369; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
370; GFX9-NEXT:    ds_write_b16 v0, v1
371; GFX9-NEXT:    v_and_b32_e32 v1, 0x1ffff, v1
372; GFX9-NEXT:    ds_write_b8_d16_hi v0, v1 offset:2
373; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
374; GFX9-NEXT:    s_setpc_b64 s[30:31]
375;
376; GFX10-LABEL: local_store_i17:
377; GFX10:       ; %bb.0:
378; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
379; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
380; GFX10-NEXT:    v_and_b32_e32 v2, 0x1ffff, v1
381; GFX10-NEXT:    ds_write_b16 v0, v1
382; GFX10-NEXT:    ds_write_b8_d16_hi v0, v2 offset:2
383; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
384; GFX10-NEXT:    s_setpc_b64 s[30:31]
385;
386; GFX11-LABEL: local_store_i17:
387; GFX11:       ; %bb.0:
388; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
389; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
390; GFX11-NEXT:    v_and_b32_e32 v2, 0x1ffff, v1
391; GFX11-NEXT:    ds_store_b16 v0, v1
392; GFX11-NEXT:    ds_store_b8_d16_hi v0, v2 offset:2
393; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
394; GFX11-NEXT:    s_setpc_b64 s[30:31]
395  store i17 %arg, i17 addrspace(3)* %ptr, align 8
396  ret void
397}
398
399attributes #0 = { nounwind }
400