1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck --check-prefix=GCN-NOHSA-SI %s
3; RUN: llc -mtriple=amdgcn--amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck --check-prefix=GCN-HSA %s
4; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck --check-prefix=GCN-NOHSA-VI %s
5; RUN: llc -march=r600 -mcpu=redwood -verify-machineinstrs < %s | FileCheck --check-prefix=EG %s
6
7define amdgpu_kernel void @constant_load_i16(i16 addrspace(1)* %out, i16 addrspace(4)* %in) {
8; GCN-NOHSA-SI-LABEL: constant_load_i16:
9; GCN-NOHSA-SI:       ; %bb.0: ; %entry
10; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
11; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
12; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
13; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
14; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
15; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
16; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
17; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
18; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0
19; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
20; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
21; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
22; GCN-NOHSA-SI-NEXT:    buffer_store_short v0, off, s[4:7], 0
23; GCN-NOHSA-SI-NEXT:    s_endpgm
24;
25; GCN-HSA-LABEL: constant_load_i16:
26; GCN-HSA:       ; %bb.0: ; %entry
27; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
28; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
29; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
30; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
31; GCN-HSA-NEXT:    flat_load_ushort v2, v[2:3]
32; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
33; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
34; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
35; GCN-HSA-NEXT:    flat_store_short v[0:1], v2
36; GCN-HSA-NEXT:    s_endpgm
37;
38; GCN-NOHSA-VI-LABEL: constant_load_i16:
39; GCN-NOHSA-VI:       ; %bb.0: ; %entry
40; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
41; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
42; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
43; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
44; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
45; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
46; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s6
47; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s7
48; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s2
49; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, s3
50; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0
51; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
52; GCN-NOHSA-VI-NEXT:    buffer_store_short v0, off, s[0:3], 0
53; GCN-NOHSA-VI-NEXT:    s_endpgm
54;
55; EG-LABEL: constant_load_i16:
56; EG:       ; %bb.0: ; %entry
57; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
58; EG-NEXT:    TEX 0 @6
59; EG-NEXT:    ALU 11, @9, KC0[CB0:0-32], KC1[]
60; EG-NEXT:    MEM_RAT MSKOR T0.XW, T1.X
61; EG-NEXT:    CF_END
62; EG-NEXT:    PAD
63; EG-NEXT:    Fetch clause starting at 6:
64; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
65; EG-NEXT:    ALU clause starting at 8:
66; EG-NEXT:     MOV * T0.X, KC0[2].Z,
67; EG-NEXT:    ALU clause starting at 9:
68; EG-NEXT:     AND_INT T0.W, KC0[2].Y, literal.x,
69; EG-NEXT:     AND_INT * T1.W, T0.X, literal.y,
70; EG-NEXT:    3(4.203895e-45), 65535(9.183409e-41)
71; EG-NEXT:     LSHL * T0.W, PV.W, literal.x,
72; EG-NEXT:    3(4.203895e-45), 0(0.000000e+00)
73; EG-NEXT:     LSHL T0.X, T1.W, PV.W,
74; EG-NEXT:     LSHL * T0.W, literal.x, PV.W,
75; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
76; EG-NEXT:     MOV T0.Y, 0.0,
77; EG-NEXT:     MOV * T0.Z, 0.0,
78; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
79; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
80entry:
81  %ld = load i16, i16 addrspace(4)* %in
82  store i16 %ld, i16 addrspace(1)* %out
83  ret void
84}
85
86define amdgpu_kernel void @constant_load_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(4)* %in) {
87; GCN-NOHSA-SI-LABEL: constant_load_v2i16:
88; GCN-NOHSA-SI:       ; %bb.0: ; %entry
89; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
90; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
91; GCN-NOHSA-SI-NEXT:    s_load_dword s4, s[2:3], 0x0
92; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
93; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
94; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
95; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
96; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
97; GCN-NOHSA-SI-NEXT:    s_endpgm
98;
99; GCN-HSA-LABEL: constant_load_v2i16:
100; GCN-HSA:       ; %bb.0: ; %entry
101; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
102; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
103; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
104; GCN-HSA-NEXT:    s_load_dword s0, s[2:3], 0x0
105; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
106; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
107; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s0
108; GCN-HSA-NEXT:    flat_store_dword v[0:1], v2
109; GCN-HSA-NEXT:    s_endpgm
110;
111; GCN-NOHSA-VI-LABEL: constant_load_v2i16:
112; GCN-NOHSA-VI:       ; %bb.0: ; %entry
113; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
114; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, 0xf000
115; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, -1
116; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
117; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s0
118; GCN-NOHSA-VI-NEXT:    s_load_dword s0, s[2:3], 0x0
119; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s1
120; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
121; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s0
122; GCN-NOHSA-VI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
123; GCN-NOHSA-VI-NEXT:    s_endpgm
124;
125; EG-LABEL: constant_load_v2i16:
126; EG:       ; %bb.0: ; %entry
127; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
128; EG-NEXT:    TEX 0 @6
129; EG-NEXT:    ALU 1, @9, KC0[CB0:0-32], KC1[]
130; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1
131; EG-NEXT:    CF_END
132; EG-NEXT:    PAD
133; EG-NEXT:    Fetch clause starting at 6:
134; EG-NEXT:     VTX_READ_32 T0.X, T0.X, 0, #1
135; EG-NEXT:    ALU clause starting at 8:
136; EG-NEXT:     MOV * T0.X, KC0[2].Z,
137; EG-NEXT:    ALU clause starting at 9:
138; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
139; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
140entry:
141  %ld = load <2 x i16>, <2 x i16> addrspace(4)* %in
142  store <2 x i16> %ld, <2 x i16> addrspace(1)* %out
143  ret void
144}
145
146define amdgpu_kernel void @constant_load_v3i16(<3 x i16> addrspace(1)* %out, <3 x i16> addrspace(4)* %in) {
147; GCN-NOHSA-SI-LABEL: constant_load_v3i16:
148; GCN-NOHSA-SI:       ; %bb.0: ; %entry
149; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
150; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
151; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x0
152; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
153; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
154; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
155; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
156; GCN-NOHSA-SI-NEXT:    buffer_store_short v0, off, s[0:3], 0 offset:4
157; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
158; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
159; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
160; GCN-NOHSA-SI-NEXT:    s_endpgm
161;
162; GCN-HSA-LABEL: constant_load_v3i16:
163; GCN-HSA:       ; %bb.0: ; %entry
164; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
165; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
166; GCN-HSA-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0
167; GCN-HSA-NEXT:    s_add_u32 s4, s0, 4
168; GCN-HSA-NEXT:    s_addc_u32 s5, s1, 0
169; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s4
170; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
171; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s5
172; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
173; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s3
174; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
175; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s2
176; GCN-HSA-NEXT:    flat_store_short v[2:3], v4
177; GCN-HSA-NEXT:    flat_store_dword v[0:1], v5
178; GCN-HSA-NEXT:    s_endpgm
179;
180; GCN-NOHSA-VI-LABEL: constant_load_v3i16:
181; GCN-NOHSA-VI:       ; %bb.0: ; %entry
182; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
183; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, 0xf000
184; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, -1
185; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
186; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0
187; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s0
188; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s1
189; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
190; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s3
191; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s2
192; GCN-NOHSA-VI-NEXT:    buffer_store_short v0, off, s[4:7], 0 offset:4
193; GCN-NOHSA-VI-NEXT:    buffer_store_dword v1, off, s[4:7], 0
194; GCN-NOHSA-VI-NEXT:    s_endpgm
195;
196; EG-LABEL: constant_load_v3i16:
197; EG:       ; %bb.0: ; %entry
198; EG-NEXT:    ALU 0, @12, KC0[CB0:0-32], KC1[]
199; EG-NEXT:    TEX 2 @6
200; EG-NEXT:    ALU 19, @13, KC0[CB0:0-32], KC1[]
201; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T6.X, T7.X, 0
202; EG-NEXT:    MEM_RAT MSKOR T5.XW, T8.X
203; EG-NEXT:    CF_END
204; EG-NEXT:    Fetch clause starting at 6:
205; EG-NEXT:     VTX_READ_16 T6.X, T5.X, 0, #1
206; EG-NEXT:     VTX_READ_16 T7.X, T5.X, 2, #1
207; EG-NEXT:     VTX_READ_16 T5.X, T5.X, 4, #1
208; EG-NEXT:    ALU clause starting at 12:
209; EG-NEXT:     MOV * T5.X, KC0[2].Z,
210; EG-NEXT:    ALU clause starting at 13:
211; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
212; EG-NEXT:    4(5.605194e-45), 0(0.000000e+00)
213; EG-NEXT:     AND_INT T1.W, PV.W, literal.x,
214; EG-NEXT:     AND_INT * T2.W, T5.X, literal.y,
215; EG-NEXT:    3(4.203895e-45), 65535(9.183409e-41)
216; EG-NEXT:     LSHL * T1.W, PV.W, literal.x,
217; EG-NEXT:    3(4.203895e-45), 0(0.000000e+00)
218; EG-NEXT:     LSHL T5.X, T2.W, PV.W,
219; EG-NEXT:     LSHL * T5.W, literal.x, PV.W,
220; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
221; EG-NEXT:     MOV T5.Y, 0.0,
222; EG-NEXT:     MOV * T5.Z, 0.0,
223; EG-NEXT:     LSHR T8.X, T0.W, literal.x,
224; EG-NEXT:     LSHL T0.W, T7.X, literal.y,
225; EG-NEXT:     AND_INT * T1.W, T6.X, literal.z,
226; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
227; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
228; EG-NEXT:     OR_INT T6.X, PV.W, PS,
229; EG-NEXT:     LSHR * T7.X, KC0[2].Y, literal.x,
230; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
231entry:
232  %ld = load <3 x i16>, <3 x i16> addrspace(4)* %in
233  store <3 x i16> %ld, <3 x i16> addrspace(1)* %out
234  ret void
235}
236
237define amdgpu_kernel void @constant_load_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> addrspace(4)* %in) {
238; GCN-NOHSA-SI-LABEL: constant_load_v4i16:
239; GCN-NOHSA-SI:       ; %bb.0: ; %entry
240; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
241; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
242; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x0
243; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
244; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
245; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
246; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
247; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s5
248; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
249; GCN-NOHSA-SI-NEXT:    s_endpgm
250;
251; GCN-HSA-LABEL: constant_load_v4i16:
252; GCN-HSA:       ; %bb.0: ; %entry
253; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
254; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
255; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
256; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
257; GCN-HSA-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
258; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
259; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s1
260; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s0
261; GCN-HSA-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
262; GCN-HSA-NEXT:    s_endpgm
263;
264; GCN-NOHSA-VI-LABEL: constant_load_v4i16:
265; GCN-NOHSA-VI:       ; %bb.0: ; %entry
266; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
267; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, 0xf000
268; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, -1
269; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
270; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s0
271; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s1
272; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
273; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
274; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s0
275; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s1
276; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
277; GCN-NOHSA-VI-NEXT:    s_endpgm
278;
279; EG-LABEL: constant_load_v4i16:
280; EG:       ; %bb.0: ; %entry
281; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
282; EG-NEXT:    TEX 0 @6
283; EG-NEXT:    ALU 1, @9, KC0[CB0:0-32], KC1[]
284; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1
285; EG-NEXT:    CF_END
286; EG-NEXT:    PAD
287; EG-NEXT:    Fetch clause starting at 6:
288; EG-NEXT:     VTX_READ_64 T0.XY, T0.X, 0, #1
289; EG-NEXT:    ALU clause starting at 8:
290; EG-NEXT:     MOV * T0.X, KC0[2].Z,
291; EG-NEXT:    ALU clause starting at 9:
292; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
293; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
294entry:
295  %ld = load <4 x i16>, <4 x i16> addrspace(4)* %in
296  store <4 x i16> %ld, <4 x i16> addrspace(1)* %out
297  ret void
298}
299
300define amdgpu_kernel void @constant_load_v8i16(<8 x i16> addrspace(1)* %out, <8 x i16> addrspace(4)* %in) {
301; GCN-NOHSA-SI-LABEL: constant_load_v8i16:
302; GCN-NOHSA-SI:       ; %bb.0: ; %entry
303; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
304; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
305; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
306; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
307; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
308; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
309; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
310; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s5
311; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s6
312; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s7
313; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
314; GCN-NOHSA-SI-NEXT:    s_endpgm
315;
316; GCN-HSA-LABEL: constant_load_v8i16:
317; GCN-HSA:       ; %bb.0: ; %entry
318; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
319; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
320; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
321; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
322; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
323; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
324; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
325; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
326; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
327; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
328; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
329; GCN-HSA-NEXT:    s_endpgm
330;
331; GCN-NOHSA-VI-LABEL: constant_load_v8i16:
332; GCN-NOHSA-VI:       ; %bb.0: ; %entry
333; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
334; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, 0xf000
335; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, -1
336; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
337; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s0
338; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s1
339; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[2:3], 0x0
340; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
341; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s0
342; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s1
343; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s2
344; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s3
345; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
346; GCN-NOHSA-VI-NEXT:    s_endpgm
347;
348; EG-LABEL: constant_load_v8i16:
349; EG:       ; %bb.0: ; %entry
350; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
351; EG-NEXT:    TEX 0 @6
352; EG-NEXT:    ALU 1, @9, KC0[CB0:0-32], KC1[]
353; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XYZW, T1.X, 1
354; EG-NEXT:    CF_END
355; EG-NEXT:    PAD
356; EG-NEXT:    Fetch clause starting at 6:
357; EG-NEXT:     VTX_READ_128 T0.XYZW, T0.X, 0, #1
358; EG-NEXT:    ALU clause starting at 8:
359; EG-NEXT:     MOV * T0.X, KC0[2].Z,
360; EG-NEXT:    ALU clause starting at 9:
361; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
362; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
363entry:
364  %ld = load <8 x i16>, <8 x i16> addrspace(4)* %in
365  store <8 x i16> %ld, <8 x i16> addrspace(1)* %out
366  ret void
367}
368
369define amdgpu_kernel void @constant_load_v16i16(<16 x i16> addrspace(1)* %out, <16 x i16> addrspace(4)* %in) {
370; GCN-NOHSA-SI-LABEL: constant_load_v16i16:
371; GCN-NOHSA-SI:       ; %bb.0: ; %entry
372; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[8:11], s[0:1], 0x9
373; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
374; GCN-NOHSA-SI-NEXT:    s_load_dwordx8 s[0:7], s[10:11], 0x0
375; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, 0xf000
376; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, -1
377; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
378; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
379; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s5
380; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s6
381; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s7
382; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:16
383; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
384; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s0
385; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s1
386; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s2
387; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s3
388; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
389; GCN-NOHSA-SI-NEXT:    s_endpgm
390;
391; GCN-HSA-LABEL: constant_load_v16i16:
392; GCN-HSA:       ; %bb.0: ; %entry
393; GCN-HSA-NEXT:    s_load_dwordx4 s[8:11], s[4:5], 0x0
394; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
395; GCN-HSA-NEXT:    s_load_dwordx8 s[0:7], s[10:11], 0x0
396; GCN-HSA-NEXT:    s_add_u32 s10, s8, 16
397; GCN-HSA-NEXT:    s_addc_u32 s11, s9, 0
398; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s10
399; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s11
400; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
401; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
402; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s5
403; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s6
404; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s7
405; GCN-HSA-NEXT:    flat_store_dwordx4 v[6:7], v[0:3]
406; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
407; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
408; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
409; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s2
410; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s3
411; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s9
412; GCN-HSA-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
413; GCN-HSA-NEXT:    s_endpgm
414;
415; GCN-NOHSA-VI-LABEL: constant_load_v16i16:
416; GCN-NOHSA-VI:       ; %bb.0: ; %entry
417; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
418; GCN-NOHSA-VI-NEXT:    s_mov_b32 s11, 0xf000
419; GCN-NOHSA-VI-NEXT:    s_mov_b32 s10, -1
420; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
421; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, s0
422; GCN-NOHSA-VI-NEXT:    s_mov_b32 s9, s1
423; GCN-NOHSA-VI-NEXT:    s_load_dwordx8 s[0:7], s[2:3], 0x0
424; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
425; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
426; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s5
427; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s6
428; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s7
429; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v4, s0
430; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v5, s1
431; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v6, s2
432; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v7, s3
433; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:16
434; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[8:11], 0
435; GCN-NOHSA-VI-NEXT:    s_endpgm
436;
437; EG-LABEL: constant_load_v16i16:
438; EG:       ; %bb.0: ; %entry
439; EG-NEXT:    ALU 0, @12, KC0[CB0:0-32], KC1[]
440; EG-NEXT:    TEX 0 @8
441; EG-NEXT:    ALU 3, @13, KC0[CB0:0-32], KC1[]
442; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T1.XYZW, T2.X, 0
443; EG-NEXT:    ALU 1, @17, KC0[CB0:0-32], KC1[]
444; EG-NEXT:    TEX 0 @10
445; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XYZW, T1.X, 1
446; EG-NEXT:    CF_END
447; EG-NEXT:    Fetch clause starting at 8:
448; EG-NEXT:     VTX_READ_128 T1.XYZW, T0.X, 16, #1
449; EG-NEXT:    Fetch clause starting at 10:
450; EG-NEXT:     VTX_READ_128 T0.XYZW, T0.X, 0, #1
451; EG-NEXT:    ALU clause starting at 12:
452; EG-NEXT:     MOV * T0.X, KC0[2].Z,
453; EG-NEXT:    ALU clause starting at 13:
454; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
455; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
456; EG-NEXT:     LSHR * T2.X, PV.W, literal.x,
457; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
458; EG-NEXT:    ALU clause starting at 17:
459; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
460; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
461entry:
462  %ld = load <16 x i16>, <16 x i16> addrspace(4)* %in
463  store <16 x i16> %ld, <16 x i16> addrspace(1)* %out
464  ret void
465}
466
467define amdgpu_kernel void @constant_load_v16i16_align2(<16 x i16> addrspace(4)* %ptr0) #0 {
468; GCN-NOHSA-SI-LABEL: constant_load_v16i16_align2:
469; GCN-NOHSA-SI:       ; %bb.0: ; %entry
470; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x9
471; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
472; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
473; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
474; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0
475; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v1, off, s[0:3], 0 offset:2
476; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v4, off, s[0:3], 0 offset:4
477; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v2, off, s[0:3], 0 offset:6
478; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v5, off, s[0:3], 0 offset:8
479; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v3, off, s[0:3], 0 offset:10
480; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v6, off, s[0:3], 0 offset:12
481; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v7, off, s[0:3], 0 offset:14
482; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v8, off, s[0:3], 0 offset:16
483; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v9, off, s[0:3], 0 offset:18
484; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v10, off, s[0:3], 0 offset:20
485; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v11, off, s[0:3], 0 offset:22
486; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v12, off, s[0:3], 0 offset:24
487; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v13, off, s[0:3], 0 offset:26
488; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v14, off, s[0:3], 0 offset:28
489; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v15, off, s[0:3], 0 offset:30
490; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(8)
491; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
492; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v16, 16, v3
493; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
494; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v18, 16, v1
495; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
496; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v15, 16, v15
497; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
498; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
499; GCN-NOHSA-SI-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
500; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v3, v7, v6
501; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v2, v16, v5
502; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v1, v17, v4
503; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v0, v18, v0
504; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v7, v15, v14
505; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v6, v13, v12
506; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v5, v11, v10
507; GCN-NOHSA-SI-NEXT:    v_or_b32_e32 v4, v9, v8
508; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0
509; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
510; GCN-NOHSA-SI-NEXT:    s_endpgm
511;
512; GCN-HSA-LABEL: constant_load_v16i16_align2:
513; GCN-HSA:       ; %bb.0: ; %entry
514; GCN-HSA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x0
515; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
516; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
517; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
518; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
519; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s2
520; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
521; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
522; GCN-HSA-NEXT:    flat_load_dwordx4 v[0:3], v[0:1]
523; GCN-HSA-NEXT:    flat_load_dwordx4 v[4:7], v[4:5]
524; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
525; GCN-HSA-NEXT:    flat_store_dwordx4 v[0:1], v[4:7]
526; GCN-HSA-NEXT:    flat_store_dwordx4 v[0:1], v[0:3]
527; GCN-HSA-NEXT:    s_endpgm
528;
529; GCN-NOHSA-VI-LABEL: constant_load_v16i16_align2:
530; GCN-NOHSA-VI:       ; %bb.0: ; %entry
531; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[0:1], s[0:1], 0x24
532; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
533; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
534; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
535; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[0:3], 0
536; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v1, off, s[0:3], 0 offset:2
537; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v4, off, s[0:3], 0 offset:4
538; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v2, off, s[0:3], 0 offset:6
539; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v5, off, s[0:3], 0 offset:8
540; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v3, off, s[0:3], 0 offset:10
541; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v6, off, s[0:3], 0 offset:12
542; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v7, off, s[0:3], 0 offset:14
543; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v8, off, s[0:3], 0 offset:16
544; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v9, off, s[0:3], 0 offset:18
545; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v10, off, s[0:3], 0 offset:20
546; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v11, off, s[0:3], 0 offset:22
547; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v12, off, s[0:3], 0 offset:24
548; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v13, off, s[0:3], 0 offset:26
549; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v14, off, s[0:3], 0 offset:28
550; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v15, off, s[0:3], 0 offset:30
551; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(14)
552; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v18, 16, v1
553; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v0, v18, v0
554; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(12)
555; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v17, 16, v2
556; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v1, v17, v4
557; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(10)
558; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v16, 16, v3
559; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v2, v16, v5
560; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(8)
561; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v7, 16, v7
562; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v3, v7, v6
563; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(6)
564; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v9, 16, v9
565; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v4, v9, v8
566; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(4)
567; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v11, 16, v11
568; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v5, v11, v10
569; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(2)
570; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v13, 16, v13
571; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v6, v13, v12
572; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
573; GCN-NOHSA-VI-NEXT:    v_lshlrev_b32_e32 v15, 16, v15
574; GCN-NOHSA-VI-NEXT:    v_or_b32_e32 v7, v15, v14
575; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0
576; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
577; GCN-NOHSA-VI-NEXT:    s_endpgm
578;
579; EG-LABEL: constant_load_v16i16_align2:
580; EG:       ; %bb.0: ; %entry
581; EG-NEXT:    ALU 0, @12, KC0[CB0:0-32], KC1[]
582; EG-NEXT:    TEX 0 @8
583; EG-NEXT:    ALU 1, @13, KC0[], KC1[]
584; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T1.XYZW, T2.X, 0
585; EG-NEXT:    TEX 0 @10
586; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XYZW, T2.X, 1
587; EG-NEXT:    CF_END
588; EG-NEXT:    PAD
589; EG-NEXT:    Fetch clause starting at 8:
590; EG-NEXT:     VTX_READ_128 T1.XYZW, T0.X, 16, #1
591; EG-NEXT:    Fetch clause starting at 10:
592; EG-NEXT:     VTX_READ_128 T0.XYZW, T0.X, 0, #1
593; EG-NEXT:    ALU clause starting at 12:
594; EG-NEXT:     MOV * T0.X, KC0[2].Y,
595; EG-NEXT:    ALU clause starting at 13:
596; EG-NEXT:     MOV * T2.X, literal.x,
597; EG-NEXT:    0(0.000000e+00), 0(0.000000e+00)
598entry:
599  %ld =  load <16 x i16>, <16 x i16> addrspace(4)* %ptr0, align 2
600  store <16 x i16> %ld, <16 x i16> addrspace(1)* undef, align 32
601  ret void
602}
603
604define amdgpu_kernel void @constant_zextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(4)* %in) #0 {
605; GCN-NOHSA-SI-LABEL: constant_zextload_i16_to_i32:
606; GCN-NOHSA-SI:       ; %bb.0:
607; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
608; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
609; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
610; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
611; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
612; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
613; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
614; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
615; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0
616; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
617; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
618; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
619; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
620; GCN-NOHSA-SI-NEXT:    s_endpgm
621;
622; GCN-HSA-LABEL: constant_zextload_i16_to_i32:
623; GCN-HSA:       ; %bb.0:
624; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
625; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
626; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
627; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
628; GCN-HSA-NEXT:    flat_load_ushort v2, v[2:3]
629; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
630; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
631; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
632; GCN-HSA-NEXT:    flat_store_dword v[0:1], v2
633; GCN-HSA-NEXT:    s_endpgm
634;
635; GCN-NOHSA-VI-LABEL: constant_zextload_i16_to_i32:
636; GCN-NOHSA-VI:       ; %bb.0:
637; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
638; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
639; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
640; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
641; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
642; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
643; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s6
644; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s7
645; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s2
646; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, s3
647; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0
648; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
649; GCN-NOHSA-VI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
650; GCN-NOHSA-VI-NEXT:    s_endpgm
651;
652; EG-LABEL: constant_zextload_i16_to_i32:
653; EG:       ; %bb.0:
654; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
655; EG-NEXT:    TEX 0 @6
656; EG-NEXT:    ALU 1, @9, KC0[CB0:0-32], KC1[]
657; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1
658; EG-NEXT:    CF_END
659; EG-NEXT:    PAD
660; EG-NEXT:    Fetch clause starting at 6:
661; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
662; EG-NEXT:    ALU clause starting at 8:
663; EG-NEXT:     MOV * T0.X, KC0[2].Z,
664; EG-NEXT:    ALU clause starting at 9:
665; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
666; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
667  %a = load i16, i16 addrspace(4)* %in
668  %ext = zext i16 %a to i32
669  store i32 %ext, i32 addrspace(1)* %out
670  ret void
671}
672
673define amdgpu_kernel void @constant_sextload_i16_to_i32(i32 addrspace(1)* %out, i16 addrspace(4)* %in) #0 {
674; GCN-NOHSA-SI-LABEL: constant_sextload_i16_to_i32:
675; GCN-NOHSA-SI:       ; %bb.0:
676; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
677; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
678; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
679; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
680; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
681; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
682; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
683; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
684; GCN-NOHSA-SI-NEXT:    buffer_load_sshort v0, off, s[8:11], 0
685; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
686; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
687; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
688; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
689; GCN-NOHSA-SI-NEXT:    s_endpgm
690;
691; GCN-HSA-LABEL: constant_sextload_i16_to_i32:
692; GCN-HSA:       ; %bb.0:
693; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
694; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
695; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
696; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
697; GCN-HSA-NEXT:    flat_load_sshort v2, v[2:3]
698; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
699; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
700; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
701; GCN-HSA-NEXT:    flat_store_dword v[0:1], v2
702; GCN-HSA-NEXT:    s_endpgm
703;
704; GCN-NOHSA-VI-LABEL: constant_sextload_i16_to_i32:
705; GCN-NOHSA-VI:       ; %bb.0:
706; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
707; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
708; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
709; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
710; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
711; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
712; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s6
713; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s7
714; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s2
715; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, s3
716; GCN-NOHSA-VI-NEXT:    buffer_load_sshort v0, off, s[4:7], 0
717; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
718; GCN-NOHSA-VI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
719; GCN-NOHSA-VI-NEXT:    s_endpgm
720;
721; EG-LABEL: constant_sextload_i16_to_i32:
722; EG:       ; %bb.0:
723; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
724; EG-NEXT:    TEX 0 @6
725; EG-NEXT:    ALU 2, @9, KC0[CB0:0-32], KC1[]
726; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1
727; EG-NEXT:    CF_END
728; EG-NEXT:    PAD
729; EG-NEXT:    Fetch clause starting at 6:
730; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
731; EG-NEXT:    ALU clause starting at 8:
732; EG-NEXT:     MOV * T0.X, KC0[2].Z,
733; EG-NEXT:    ALU clause starting at 9:
734; EG-NEXT:     BFE_INT T0.X, T0.X, 0.0, literal.x,
735; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.y,
736; EG-NEXT:    16(2.242078e-44), 2(2.802597e-45)
737  %a = load i16, i16 addrspace(4)* %in
738  %ext = sext i16 %a to i32
739  store i32 %ext, i32 addrspace(1)* %out
740  ret void
741}
742
743define amdgpu_kernel void @constant_zextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(4)* %in) #0 {
744; GCN-NOHSA-SI-LABEL: constant_zextload_v1i16_to_v1i32:
745; GCN-NOHSA-SI:       ; %bb.0:
746; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
747; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
748; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
749; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
750; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
751; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
752; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
753; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
754; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0
755; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
756; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
757; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
758; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
759; GCN-NOHSA-SI-NEXT:    s_endpgm
760;
761; GCN-HSA-LABEL: constant_zextload_v1i16_to_v1i32:
762; GCN-HSA:       ; %bb.0:
763; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
764; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
765; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
766; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
767; GCN-HSA-NEXT:    flat_load_ushort v2, v[2:3]
768; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
769; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
770; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
771; GCN-HSA-NEXT:    flat_store_dword v[0:1], v2
772; GCN-HSA-NEXT:    s_endpgm
773;
774; GCN-NOHSA-VI-LABEL: constant_zextload_v1i16_to_v1i32:
775; GCN-NOHSA-VI:       ; %bb.0:
776; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
777; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
778; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
779; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
780; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
781; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
782; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s6
783; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s7
784; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s2
785; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, s3
786; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0
787; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
788; GCN-NOHSA-VI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
789; GCN-NOHSA-VI-NEXT:    s_endpgm
790;
791; EG-LABEL: constant_zextload_v1i16_to_v1i32:
792; EG:       ; %bb.0:
793; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
794; EG-NEXT:    TEX 0 @6
795; EG-NEXT:    ALU 1, @9, KC0[CB0:0-32], KC1[]
796; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1
797; EG-NEXT:    CF_END
798; EG-NEXT:    PAD
799; EG-NEXT:    Fetch clause starting at 6:
800; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
801; EG-NEXT:    ALU clause starting at 8:
802; EG-NEXT:     MOV * T0.X, KC0[2].Z,
803; EG-NEXT:    ALU clause starting at 9:
804; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
805; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
806  %load = load <1 x i16>, <1 x i16> addrspace(4)* %in
807  %ext = zext <1 x i16> %load to <1 x i32>
808  store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
809  ret void
810}
811
812define amdgpu_kernel void @constant_sextload_v1i16_to_v1i32(<1 x i32> addrspace(1)* %out, <1 x i16> addrspace(4)* %in) #0 {
813; GCN-NOHSA-SI-LABEL: constant_sextload_v1i16_to_v1i32:
814; GCN-NOHSA-SI:       ; %bb.0:
815; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
816; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
817; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
818; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
819; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
820; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
821; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
822; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
823; GCN-NOHSA-SI-NEXT:    buffer_load_sshort v0, off, s[8:11], 0
824; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
825; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
826; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
827; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[4:7], 0
828; GCN-NOHSA-SI-NEXT:    s_endpgm
829;
830; GCN-HSA-LABEL: constant_sextload_v1i16_to_v1i32:
831; GCN-HSA:       ; %bb.0:
832; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
833; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
834; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
835; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
836; GCN-HSA-NEXT:    flat_load_sshort v2, v[2:3]
837; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
838; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
839; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
840; GCN-HSA-NEXT:    flat_store_dword v[0:1], v2
841; GCN-HSA-NEXT:    s_endpgm
842;
843; GCN-NOHSA-VI-LABEL: constant_sextload_v1i16_to_v1i32:
844; GCN-NOHSA-VI:       ; %bb.0:
845; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
846; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
847; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
848; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
849; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
850; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
851; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s6
852; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s7
853; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s2
854; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, s3
855; GCN-NOHSA-VI-NEXT:    buffer_load_sshort v0, off, s[4:7], 0
856; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
857; GCN-NOHSA-VI-NEXT:    buffer_store_dword v0, off, s[0:3], 0
858; GCN-NOHSA-VI-NEXT:    s_endpgm
859;
860; EG-LABEL: constant_sextload_v1i16_to_v1i32:
861; EG:       ; %bb.0:
862; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
863; EG-NEXT:    TEX 0 @6
864; EG-NEXT:    ALU 2, @9, KC0[CB0:0-32], KC1[]
865; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.X, T1.X, 1
866; EG-NEXT:    CF_END
867; EG-NEXT:    PAD
868; EG-NEXT:    Fetch clause starting at 6:
869; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
870; EG-NEXT:    ALU clause starting at 8:
871; EG-NEXT:     MOV * T0.X, KC0[2].Z,
872; EG-NEXT:    ALU clause starting at 9:
873; EG-NEXT:     BFE_INT T0.X, T0.X, 0.0, literal.x,
874; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.y,
875; EG-NEXT:    16(2.242078e-44), 2(2.802597e-45)
876  %load = load <1 x i16>, <1 x i16> addrspace(4)* %in
877  %ext = sext <1 x i16> %load to <1 x i32>
878  store <1 x i32> %ext, <1 x i32> addrspace(1)* %out
879  ret void
880}
881
882define amdgpu_kernel void @constant_zextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(4)* %in) #0 {
883; GCN-NOHSA-SI-LABEL: constant_zextload_v2i16_to_v2i32:
884; GCN-NOHSA-SI:       ; %bb.0:
885; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
886; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
887; GCN-NOHSA-SI-NEXT:    s_load_dword s2, s[2:3], 0x0
888; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
889; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
890; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s4, s2, 16
891; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s2, 0xffff
892; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
893; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
894; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s4
895; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
896; GCN-NOHSA-SI-NEXT:    s_endpgm
897;
898; GCN-HSA-LABEL: constant_zextload_v2i16_to_v2i32:
899; GCN-HSA:       ; %bb.0:
900; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
901; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
902; GCN-HSA-NEXT:    s_load_dword s2, s[2:3], 0x0
903; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
904; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
905; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
906; GCN-HSA-NEXT:    s_lshr_b32 s0, s2, 16
907; GCN-HSA-NEXT:    s_and_b32 s1, s2, 0xffff
908; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
909; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s0
910; GCN-HSA-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
911; GCN-HSA-NEXT:    s_endpgm
912;
913; GCN-NOHSA-VI-LABEL: constant_zextload_v2i16_to_v2i32:
914; GCN-NOHSA-VI:       ; %bb.0:
915; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
916; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, 0xf000
917; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, -1
918; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
919; GCN-NOHSA-VI-NEXT:    s_load_dword s2, s[2:3], 0x0
920; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s0
921; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s1
922; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
923; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s0, s2, 16
924; GCN-NOHSA-VI-NEXT:    s_and_b32 s1, s2, 0xffff
925; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s1
926; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s0
927; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
928; GCN-NOHSA-VI-NEXT:    s_endpgm
929;
930; EG-LABEL: constant_zextload_v2i16_to_v2i32:
931; EG:       ; %bb.0:
932; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
933; EG-NEXT:    TEX 0 @6
934; EG-NEXT:    ALU 4, @9, KC0[CB0:0-32], KC1[]
935; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T4.XY, T5.X, 1
936; EG-NEXT:    CF_END
937; EG-NEXT:    PAD
938; EG-NEXT:    Fetch clause starting at 6:
939; EG-NEXT:     VTX_READ_32 T4.X, T4.X, 0, #1
940; EG-NEXT:    ALU clause starting at 8:
941; EG-NEXT:     MOV * T4.X, KC0[2].Z,
942; EG-NEXT:    ALU clause starting at 9:
943; EG-NEXT:     LSHR * T4.Y, T4.X, literal.x,
944; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
945; EG-NEXT:     AND_INT T4.X, T4.X, literal.x,
946; EG-NEXT:     LSHR * T5.X, KC0[2].Y, literal.y,
947; EG-NEXT:    65535(9.183409e-41), 2(2.802597e-45)
948  %load = load <2 x i16>, <2 x i16> addrspace(4)* %in
949  %ext = zext <2 x i16> %load to <2 x i32>
950  store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
951  ret void
952}
953
954; TODO: We should use ASHR instead of LSHR + BFE
955define amdgpu_kernel void @constant_sextload_v2i16_to_v2i32(<2 x i32> addrspace(1)* %out, <2 x i16> addrspace(4)* %in) #0 {
956; GCN-NOHSA-SI-LABEL: constant_sextload_v2i16_to_v2i32:
957; GCN-NOHSA-SI:       ; %bb.0:
958; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
959; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
960; GCN-NOHSA-SI-NEXT:    s_load_dword s2, s[2:3], 0x0
961; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
962; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
963; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s4, s2, 16
964; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s5, s2
965; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
966; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
967; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s4
968; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
969; GCN-NOHSA-SI-NEXT:    s_endpgm
970;
971; GCN-HSA-LABEL: constant_sextload_v2i16_to_v2i32:
972; GCN-HSA:       ; %bb.0:
973; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
974; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
975; GCN-HSA-NEXT:    s_load_dword s2, s[2:3], 0x0
976; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
977; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
978; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
979; GCN-HSA-NEXT:    s_ashr_i32 s0, s2, 16
980; GCN-HSA-NEXT:    s_sext_i32_i16 s1, s2
981; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
982; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s0
983; GCN-HSA-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
984; GCN-HSA-NEXT:    s_endpgm
985;
986; GCN-NOHSA-VI-LABEL: constant_sextload_v2i16_to_v2i32:
987; GCN-NOHSA-VI:       ; %bb.0:
988; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
989; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, 0xf000
990; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, -1
991; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
992; GCN-NOHSA-VI-NEXT:    s_load_dword s2, s[2:3], 0x0
993; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s0
994; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s1
995; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
996; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s0, s2, 16
997; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s1, s2
998; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s1
999; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s0
1000; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
1001; GCN-NOHSA-VI-NEXT:    s_endpgm
1002;
1003; EG-LABEL: constant_sextload_v2i16_to_v2i32:
1004; EG:       ; %bb.0:
1005; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
1006; EG-NEXT:    TEX 0 @6
1007; EG-NEXT:    ALU 5, @9, KC0[CB0:0-32], KC1[]
1008; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T5.XY, T4.X, 1
1009; EG-NEXT:    CF_END
1010; EG-NEXT:    PAD
1011; EG-NEXT:    Fetch clause starting at 6:
1012; EG-NEXT:     VTX_READ_32 T4.X, T4.X, 0, #1
1013; EG-NEXT:    ALU clause starting at 8:
1014; EG-NEXT:     MOV * T4.X, KC0[2].Z,
1015; EG-NEXT:    ALU clause starting at 9:
1016; EG-NEXT:     BFE_INT T5.X, T4.X, 0.0, literal.x,
1017; EG-NEXT:     LSHR T0.W, T4.X, literal.x,
1018; EG-NEXT:     LSHR * T4.X, KC0[2].Y, literal.y,
1019; EG-NEXT:    16(2.242078e-44), 2(2.802597e-45)
1020; EG-NEXT:     BFE_INT * T5.Y, PV.W, 0.0, literal.x,
1021; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1022  %load = load <2 x i16>, <2 x i16> addrspace(4)* %in
1023  %ext = sext <2 x i16> %load to <2 x i32>
1024  store <2 x i32> %ext, <2 x i32> addrspace(1)* %out
1025  ret void
1026}
1027
1028define amdgpu_kernel void @constant_zextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(4)* %in) {
1029; GCN-NOHSA-SI-LABEL: constant_zextload_v3i16_to_v3i32:
1030; GCN-NOHSA-SI:       ; %bb.0: ; %entry
1031; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1032; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1033; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x0
1034; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1035; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1036; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, 0xffff
1037; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1038; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s7, s4, 16
1039; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s6
1040; GCN-NOHSA-SI-NEXT:    s_and_b32 s4, s4, s6
1041; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
1042; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0 offset:8
1043; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1044; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1045; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s7
1046; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
1047; GCN-NOHSA-SI-NEXT:    s_endpgm
1048;
1049; GCN-HSA-LABEL: constant_zextload_v3i16_to_v3i32:
1050; GCN-HSA:       ; %bb.0: ; %entry
1051; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1052; GCN-HSA-NEXT:    s_mov_b32 s6, 0xffff
1053; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1054; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s0
1055; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s1
1056; GCN-HSA-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1057; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1058; GCN-HSA-NEXT:    s_lshr_b32 s2, s0, 16
1059; GCN-HSA-NEXT:    s_and_b32 s1, s1, s6
1060; GCN-HSA-NEXT:    s_and_b32 s0, s0, s6
1061; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
1062; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s2
1063; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
1064; GCN-HSA-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]
1065; GCN-HSA-NEXT:    s_endpgm
1066;
1067; GCN-NOHSA-VI-LABEL: constant_zextload_v3i16_to_v3i32:
1068; GCN-NOHSA-VI:       ; %bb.0: ; %entry
1069; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1070; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, 0xffff
1071; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
1072; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
1073; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1074; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
1075; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
1076; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x0
1077; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1078; GCN-NOHSA-VI-NEXT:    s_and_b32 s5, s5, s8
1079; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s4, 16
1080; GCN-NOHSA-VI-NEXT:    s_and_b32 s4, s4, s8
1081; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
1082; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s6
1083; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
1084; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx3 v[0:2], off, s[0:3], 0
1085; GCN-NOHSA-VI-NEXT:    s_endpgm
1086;
1087; EG-LABEL: constant_zextload_v3i16_to_v3i32:
1088; EG:       ; %bb.0: ; %entry
1089; EG-NEXT:    ALU 4, @12, KC0[CB0:0-32], KC1[]
1090; EG-NEXT:    TEX 2 @6
1091; EG-NEXT:    ALU 2, @17, KC0[], KC1[]
1092; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T2.X, T4.X, 0
1093; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T3.XY, T0.X, 1
1094; EG-NEXT:    CF_END
1095; EG-NEXT:    Fetch clause starting at 6:
1096; EG-NEXT:     VTX_READ_16 T2.X, T1.X, 4, #1
1097; EG-NEXT:     VTX_READ_16 T3.X, T1.X, 0, #1
1098; EG-NEXT:     VTX_READ_16 T1.X, T1.X, 2, #1
1099; EG-NEXT:    ALU clause starting at 12:
1100; EG-NEXT:     LSHR T0.X, KC0[2].Y, literal.x,
1101; EG-NEXT:     MOV * T1.X, KC0[2].Z,
1102; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1103; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
1104; EG-NEXT:    8(1.121039e-44), 0(0.000000e+00)
1105; EG-NEXT:    ALU clause starting at 17:
1106; EG-NEXT:     LSHR T4.X, T0.W, literal.x,
1107; EG-NEXT:     MOV * T3.Y, T1.X,
1108; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1109entry:
1110  %ld = load <3 x i16>, <3 x i16> addrspace(4)* %in
1111  %ext = zext <3 x i16> %ld to <3 x i32>
1112  store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
1113  ret void
1114}
1115
1116define amdgpu_kernel void @constant_sextload_v3i16_to_v3i32(<3 x i32> addrspace(1)* %out, <3 x i16> addrspace(4)* %in) {
1117; GCN-NOHSA-SI-LABEL: constant_sextload_v3i16_to_v3i32:
1118; GCN-NOHSA-SI:       ; %bb.0: ; %entry
1119; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1120; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1121; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x0
1122; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1123; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1124; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1125; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s6, s4, 16
1126; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s5, s5
1127; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s4, s4
1128; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
1129; GCN-NOHSA-SI-NEXT:    buffer_store_dword v0, off, s[0:3], 0 offset:8
1130; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1131; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1132; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s6
1133; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
1134; GCN-NOHSA-SI-NEXT:    s_endpgm
1135;
1136; GCN-HSA-LABEL: constant_sextload_v3i16_to_v3i32:
1137; GCN-HSA:       ; %bb.0: ; %entry
1138; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1139; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1140; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s0
1141; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s1
1142; GCN-HSA-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1143; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1144; GCN-HSA-NEXT:    s_ashr_i32 s2, s0, 16
1145; GCN-HSA-NEXT:    s_sext_i32_i16 s1, s1
1146; GCN-HSA-NEXT:    s_sext_i32_i16 s0, s0
1147; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
1148; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s2
1149; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
1150; GCN-HSA-NEXT:    flat_store_dwordx3 v[3:4], v[0:2]
1151; GCN-HSA-NEXT:    s_endpgm
1152;
1153; GCN-NOHSA-VI-LABEL: constant_sextload_v3i16_to_v3i32:
1154; GCN-NOHSA-VI:       ; %bb.0: ; %entry
1155; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1156; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
1157; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
1158; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1159; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
1160; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
1161; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x0
1162; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1163; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s6, s4, 16
1164; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s5, s5
1165; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s4, s4
1166; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
1167; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s6
1168; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
1169; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx3 v[0:2], off, s[0:3], 0
1170; GCN-NOHSA-VI-NEXT:    s_endpgm
1171;
1172; EG-LABEL: constant_sextload_v3i16_to_v3i32:
1173; EG:       ; %bb.0: ; %entry
1174; EG-NEXT:    ALU 0, @12, KC0[CB0:0-32], KC1[]
1175; EG-NEXT:    TEX 2 @6
1176; EG-NEXT:    ALU 9, @13, KC0[CB0:0-32], KC1[]
1177; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T2.X, T3.X, 0
1178; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1
1179; EG-NEXT:    CF_END
1180; EG-NEXT:    Fetch clause starting at 6:
1181; EG-NEXT:     VTX_READ_16 T1.X, T0.X, 2, #1
1182; EG-NEXT:     VTX_READ_16 T2.X, T0.X, 4, #1
1183; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
1184; EG-NEXT:    ALU clause starting at 12:
1185; EG-NEXT:     MOV * T0.X, KC0[2].Z,
1186; EG-NEXT:    ALU clause starting at 13:
1187; EG-NEXT:     BFE_INT * T0.Y, T1.X, 0.0, literal.x,
1188; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1189; EG-NEXT:     BFE_INT T0.X, T0.X, 0.0, literal.x,
1190; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.y,
1191; EG-NEXT:    16(2.242078e-44), 2(2.802597e-45)
1192; EG-NEXT:     BFE_INT T2.X, T2.X, 0.0, literal.x,
1193; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
1194; EG-NEXT:    16(2.242078e-44), 8(1.121039e-44)
1195; EG-NEXT:     LSHR * T3.X, PV.W, literal.x,
1196; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1197entry:
1198  %ld = load <3 x i16>, <3 x i16> addrspace(4)* %in
1199  %ext = sext <3 x i16> %ld to <3 x i32>
1200  store <3 x i32> %ext, <3 x i32> addrspace(1)* %out
1201  ret void
1202}
1203
1204; v4i16 is naturally 8 byte aligned
1205; TODO: This should use LD, but for some there are redundant MOVs
1206define amdgpu_kernel void @constant_zextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(4)* %in) #0 {
1207; GCN-NOHSA-SI-LABEL: constant_zextload_v4i16_to_v4i32:
1208; GCN-NOHSA-SI:       ; %bb.0:
1209; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1210; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1211; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x0
1212; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1213; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, 0xffff
1214; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1215; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s6, s5, 16
1216; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s7, s4, 16
1217; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s2
1218; GCN-NOHSA-SI-NEXT:    s_and_b32 s4, s4, s2
1219; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1220; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1221; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s7
1222; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
1223; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s6
1224; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1225; GCN-NOHSA-SI-NEXT:    s_endpgm
1226;
1227; GCN-HSA-LABEL: constant_zextload_v4i16_to_v4i32:
1228; GCN-HSA:       ; %bb.0:
1229; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1230; GCN-HSA-NEXT:    s_mov_b32 s6, 0xffff
1231; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1232; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
1233; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
1234; GCN-HSA-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1235; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1236; GCN-HSA-NEXT:    s_lshr_b32 s2, s1, 16
1237; GCN-HSA-NEXT:    s_lshr_b32 s3, s0, 16
1238; GCN-HSA-NEXT:    s_and_b32 s1, s1, s6
1239; GCN-HSA-NEXT:    s_and_b32 s0, s0, s6
1240; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
1241; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
1242; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
1243; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s2
1244; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1245; GCN-HSA-NEXT:    s_endpgm
1246;
1247; GCN-NOHSA-VI-LABEL: constant_zextload_v4i16_to_v4i32:
1248; GCN-NOHSA-VI:       ; %bb.0:
1249; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1250; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, 0xffff
1251; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
1252; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
1253; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1254; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
1255; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
1256; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x0
1257; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1258; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s5, 16
1259; GCN-NOHSA-VI-NEXT:    s_and_b32 s5, s5, s8
1260; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s7, s4, 16
1261; GCN-NOHSA-VI-NEXT:    s_and_b32 s4, s4, s8
1262; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
1263; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s7
1264; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
1265; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s6
1266; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1267; GCN-NOHSA-VI-NEXT:    s_endpgm
1268;
1269; EG-LABEL: constant_zextload_v4i16_to_v4i32:
1270; EG:       ; %bb.0:
1271; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
1272; EG-NEXT:    TEX 0 @6
1273; EG-NEXT:    ALU 12, @9, KC0[CB0:0-32], KC1[]
1274; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T5.XYZW, T6.X, 1
1275; EG-NEXT:    CF_END
1276; EG-NEXT:    PAD
1277; EG-NEXT:    Fetch clause starting at 6:
1278; EG-NEXT:     VTX_READ_64 T5.XY, T5.X, 0, #1
1279; EG-NEXT:    ALU clause starting at 8:
1280; EG-NEXT:     MOV * T5.X, KC0[2].Z,
1281; EG-NEXT:    ALU clause starting at 9:
1282; EG-NEXT:     MOV T2.X, T5.X,
1283; EG-NEXT:     MOV * T3.X, T5.Y,
1284; EG-NEXT:     MOV T0.Y, PV.X,
1285; EG-NEXT:     MOV * T0.Z, PS,
1286; EG-NEXT:     LSHR * T5.W, PV.Z, literal.x,
1287; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1288; EG-NEXT:     AND_INT * T5.Z, T0.Z, literal.x,
1289; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
1290; EG-NEXT:     LSHR * T5.Y, T0.Y, literal.x,
1291; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1292; EG-NEXT:     AND_INT T5.X, T0.Y, literal.x,
1293; EG-NEXT:     LSHR * T6.X, KC0[2].Y, literal.y,
1294; EG-NEXT:    65535(9.183409e-41), 2(2.802597e-45)
1295  %load = load <4 x i16>, <4 x i16> addrspace(4)* %in
1296  %ext = zext <4 x i16> %load to <4 x i32>
1297  store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
1298  ret void
1299}
1300
1301; v4i16 is naturally 8 byte aligned
1302; TODO: This should use LD, but for some there are redundant MOVs
1303; TODO: We should use ASHR instead of LSHR + BFE
1304define amdgpu_kernel void @constant_sextload_v4i16_to_v4i32(<4 x i32> addrspace(1)* %out, <4 x i16> addrspace(4)* %in) #0 {
1305; GCN-NOHSA-SI-LABEL: constant_sextload_v4i16_to_v4i32:
1306; GCN-NOHSA-SI:       ; %bb.0:
1307; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1308; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1309; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x0
1310; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1311; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1312; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s8, s4, 16
1313; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[6:7], s[4:5], 48
1314; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s5, s5
1315; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s4, s4
1316; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1317; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1318; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s8
1319; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
1320; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s6
1321; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1322; GCN-NOHSA-SI-NEXT:    s_endpgm
1323;
1324; GCN-HSA-LABEL: constant_sextload_v4i16_to_v4i32:
1325; GCN-HSA:       ; %bb.0:
1326; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1327; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1328; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
1329; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
1330; GCN-HSA-NEXT:    s_load_dwordx2 s[0:1], s[2:3], 0x0
1331; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1332; GCN-HSA-NEXT:    s_ashr_i32 s4, s0, 16
1333; GCN-HSA-NEXT:    s_ashr_i64 s[2:3], s[0:1], 48
1334; GCN-HSA-NEXT:    s_sext_i32_i16 s1, s1
1335; GCN-HSA-NEXT:    s_sext_i32_i16 s0, s0
1336; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
1337; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s4
1338; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
1339; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s2
1340; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1341; GCN-HSA-NEXT:    s_endpgm
1342;
1343; GCN-NOHSA-VI-LABEL: constant_sextload_v4i16_to_v4i32:
1344; GCN-NOHSA-VI:       ; %bb.0:
1345; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1346; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
1347; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
1348; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1349; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
1350; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
1351; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x0
1352; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1353; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s6, s5, 16
1354; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s7, s4, 16
1355; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s5, s5
1356; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s4, s4
1357; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
1358; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s7
1359; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
1360; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s6
1361; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1362; GCN-NOHSA-VI-NEXT:    s_endpgm
1363;
1364; EG-LABEL: constant_sextload_v4i16_to_v4i32:
1365; EG:       ; %bb.0:
1366; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
1367; EG-NEXT:    TEX 0 @6
1368; EG-NEXT:    ALU 14, @9, KC0[CB0:0-32], KC1[]
1369; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T5.XYZW, T6.X, 1
1370; EG-NEXT:    CF_END
1371; EG-NEXT:    PAD
1372; EG-NEXT:    Fetch clause starting at 6:
1373; EG-NEXT:     VTX_READ_64 T5.XY, T5.X, 0, #1
1374; EG-NEXT:    ALU clause starting at 8:
1375; EG-NEXT:     MOV * T5.X, KC0[2].Z,
1376; EG-NEXT:    ALU clause starting at 9:
1377; EG-NEXT:     MOV T2.X, T5.X,
1378; EG-NEXT:     MOV * T3.X, T5.Y,
1379; EG-NEXT:     MOV T0.Y, PV.X,
1380; EG-NEXT:     MOV * T0.Z, PS,
1381; EG-NEXT:     BFE_INT * T5.Z, PV.Z, 0.0, literal.x,
1382; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1383; EG-NEXT:     BFE_INT T5.X, T0.Y, 0.0, literal.x,
1384; EG-NEXT:     LSHR * T0.W, T0.Z, literal.x,
1385; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1386; EG-NEXT:     BFE_INT T5.W, PV.W, 0.0, literal.x,
1387; EG-NEXT:     LSHR * T0.W, T0.Y, literal.x,
1388; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1389; EG-NEXT:     LSHR T6.X, KC0[2].Y, literal.x,
1390; EG-NEXT:     BFE_INT * T5.Y, PS, 0.0, literal.y,
1391; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
1392  %load = load <4 x i16>, <4 x i16> addrspace(4)* %in
1393  %ext = sext <4 x i16> %load to <4 x i32>
1394  store <4 x i32> %ext, <4 x i32> addrspace(1)* %out
1395  ret void
1396}
1397
1398; v8i16 is naturally 16 byte aligned
1399; TODO: These should use LSHR instead of BFE_UINT
1400; TODO: This should use DST, but for some there are redundant MOVs
1401define amdgpu_kernel void @constant_zextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(4)* %in) #0 {
1402; GCN-NOHSA-SI-LABEL: constant_zextload_v8i16_to_v8i32:
1403; GCN-NOHSA-SI:       ; %bb.0:
1404; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1405; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1406; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
1407; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1408; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1409; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, 0xffff
1410; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1411; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s9, s5, 16
1412; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s10, s4, 16
1413; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s11, s7, 16
1414; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s12, s6, 16
1415; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s8
1416; GCN-NOHSA-SI-NEXT:    s_and_b32 s7, s7, s8
1417; GCN-NOHSA-SI-NEXT:    s_and_b32 s6, s6, s8
1418; GCN-NOHSA-SI-NEXT:    s_and_b32 s4, s4, s8
1419; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
1420; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s12
1421; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
1422; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s11
1423; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
1424; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1425; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1426; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s10
1427; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
1428; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s9
1429; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1430; GCN-NOHSA-SI-NEXT:    s_endpgm
1431;
1432; GCN-HSA-LABEL: constant_zextload_v8i16_to_v8i32:
1433; GCN-HSA:       ; %bb.0:
1434; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1435; GCN-HSA-NEXT:    s_mov_b32 s8, 0xffff
1436; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1437; GCN-HSA-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
1438; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1439; GCN-HSA-NEXT:    s_lshr_b32 s9, s5, 16
1440; GCN-HSA-NEXT:    s_lshr_b32 s10, s4, 16
1441; GCN-HSA-NEXT:    s_lshr_b32 s2, s7, 16
1442; GCN-HSA-NEXT:    s_lshr_b32 s3, s6, 16
1443; GCN-HSA-NEXT:    s_and_b32 s5, s5, s8
1444; GCN-HSA-NEXT:    s_and_b32 s4, s4, s8
1445; GCN-HSA-NEXT:    s_and_b32 s7, s7, s8
1446; GCN-HSA-NEXT:    s_and_b32 s6, s6, s8
1447; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s2
1448; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
1449; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
1450; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1451; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1452; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
1453; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s7
1454; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1455; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1456; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
1457; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
1458; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s10
1459; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
1460; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s9
1461; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
1462; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1463; GCN-HSA-NEXT:    s_endpgm
1464;
1465; GCN-NOHSA-VI-LABEL: constant_zextload_v8i16_to_v8i32:
1466; GCN-NOHSA-VI:       ; %bb.0:
1467; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1468; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, 0xffff
1469; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
1470; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
1471; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1472; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
1473; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
1474; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[6:7], 0x0
1475; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1476; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s11, s7, 16
1477; GCN-NOHSA-VI-NEXT:    s_and_b32 s7, s7, s8
1478; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s12, s6, 16
1479; GCN-NOHSA-VI-NEXT:    s_and_b32 s6, s6, s8
1480; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s9, s5, 16
1481; GCN-NOHSA-VI-NEXT:    s_and_b32 s5, s5, s8
1482; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s10, s4, 16
1483; GCN-NOHSA-VI-NEXT:    s_and_b32 s4, s4, s8
1484; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
1485; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s12
1486; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
1487; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s11
1488; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
1489; GCN-NOHSA-VI-NEXT:    s_nop 0
1490; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
1491; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s10
1492; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
1493; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s9
1494; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1495; GCN-NOHSA-VI-NEXT:    s_endpgm
1496;
1497; EG-LABEL: constant_zextload_v8i16_to_v8i32:
1498; EG:       ; %bb.0:
1499; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
1500; EG-NEXT:    TEX 0 @6
1501; EG-NEXT:    ALU 17, @9, KC0[CB0:0-32], KC1[]
1502; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T9.XYZW, T10.X, 0
1503; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T8.XYZW, T7.X, 1
1504; EG-NEXT:    CF_END
1505; EG-NEXT:    Fetch clause starting at 6:
1506; EG-NEXT:     VTX_READ_128 T7.XYZW, T7.X, 0, #1
1507; EG-NEXT:    ALU clause starting at 8:
1508; EG-NEXT:     MOV * T7.X, KC0[2].Z,
1509; EG-NEXT:    ALU clause starting at 9:
1510; EG-NEXT:     LSHR * T8.W, T7.Y, literal.x,
1511; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1512; EG-NEXT:     AND_INT * T8.Z, T7.Y, literal.x,
1513; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
1514; EG-NEXT:     LSHR T8.Y, T7.X, literal.x,
1515; EG-NEXT:     LSHR * T9.W, T7.W, literal.x,
1516; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1517; EG-NEXT:     AND_INT T8.X, T7.X, literal.x,
1518; EG-NEXT:     AND_INT T9.Z, T7.W, literal.x,
1519; EG-NEXT:     LSHR * T7.X, KC0[2].Y, literal.y,
1520; EG-NEXT:    65535(9.183409e-41), 2(2.802597e-45)
1521; EG-NEXT:     LSHR * T9.Y, T7.Z, literal.x,
1522; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1523; EG-NEXT:     AND_INT T9.X, T7.Z, literal.x,
1524; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
1525; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
1526; EG-NEXT:     LSHR * T10.X, PV.W, literal.x,
1527; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1528  %load = load <8 x i16>, <8 x i16> addrspace(4)* %in
1529  %ext = zext <8 x i16> %load to <8 x i32>
1530  store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
1531  ret void
1532}
1533
1534; v8i16 is naturally 16 byte aligned
1535; TODO: 4 of these should use ASHR instead of LSHR + BFE_INT
1536; TODO: This should use DST, but for some there are redundant MOVs
1537define amdgpu_kernel void @constant_sextload_v8i16_to_v8i32(<8 x i32> addrspace(1)* %out, <8 x i16> addrspace(4)* %in) #0 {
1538; GCN-NOHSA-SI-LABEL: constant_sextload_v8i16_to_v8i32:
1539; GCN-NOHSA-SI:       ; %bb.0:
1540; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1541; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1542; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
1543; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1544; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1545; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1546; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s8, s5, 16
1547; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s9, s4, 16
1548; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s5, s5
1549; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s10, s7, 16
1550; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s11, s6, 16
1551; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s7, s7
1552; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s6, s6
1553; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s4, s4
1554; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
1555; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s11
1556; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
1557; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s10
1558; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
1559; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1560; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1561; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s9
1562; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
1563; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s8
1564; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1565; GCN-NOHSA-SI-NEXT:    s_endpgm
1566;
1567; GCN-HSA-LABEL: constant_sextload_v8i16_to_v8i32:
1568; GCN-HSA:       ; %bb.0:
1569; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1570; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1571; GCN-HSA-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
1572; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1573; GCN-HSA-NEXT:    s_ashr_i32 s8, s5, 16
1574; GCN-HSA-NEXT:    s_ashr_i32 s9, s4, 16
1575; GCN-HSA-NEXT:    s_ashr_i32 s2, s7, 16
1576; GCN-HSA-NEXT:    s_ashr_i32 s3, s6, 16
1577; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s2
1578; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
1579; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
1580; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1581; GCN-HSA-NEXT:    s_sext_i32_i16 s7, s7
1582; GCN-HSA-NEXT:    s_sext_i32_i16 s6, s6
1583; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1584; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
1585; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s7
1586; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1587; GCN-HSA-NEXT:    s_sext_i32_i16 s5, s5
1588; GCN-HSA-NEXT:    s_sext_i32_i16 s4, s4
1589; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1590; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
1591; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
1592; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s9
1593; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
1594; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s8
1595; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
1596; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1597; GCN-HSA-NEXT:    s_endpgm
1598;
1599; GCN-NOHSA-VI-LABEL: constant_sextload_v8i16_to_v8i32:
1600; GCN-NOHSA-VI:       ; %bb.0:
1601; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1602; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
1603; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
1604; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1605; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
1606; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
1607; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[6:7], 0x0
1608; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1609; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s10, s7, 16
1610; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s11, s6, 16
1611; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s7, s7
1612; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s6, s6
1613; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s8, s5, 16
1614; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s9, s4, 16
1615; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s5, s5
1616; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s4, s4
1617; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
1618; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s11
1619; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
1620; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s10
1621; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
1622; GCN-NOHSA-VI-NEXT:    s_nop 0
1623; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
1624; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s9
1625; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
1626; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s8
1627; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1628; GCN-NOHSA-VI-NEXT:    s_endpgm
1629;
1630; EG-LABEL: constant_sextload_v8i16_to_v8i32:
1631; EG:       ; %bb.0:
1632; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
1633; EG-NEXT:    TEX 0 @6
1634; EG-NEXT:    ALU 19, @9, KC0[CB0:0-32], KC1[]
1635; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T9.XYZW, T10.X, 0
1636; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T8.XYZW, T7.X, 1
1637; EG-NEXT:    CF_END
1638; EG-NEXT:    Fetch clause starting at 6:
1639; EG-NEXT:     VTX_READ_128 T7.XYZW, T7.X, 0, #1
1640; EG-NEXT:    ALU clause starting at 8:
1641; EG-NEXT:     MOV * T7.X, KC0[2].Z,
1642; EG-NEXT:    ALU clause starting at 9:
1643; EG-NEXT:     BFE_INT * T8.Z, T7.Y, 0.0, literal.x,
1644; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1645; EG-NEXT:     BFE_INT T8.X, T7.X, 0.0, literal.x,
1646; EG-NEXT:     BFE_INT T9.Z, T7.W, 0.0, literal.x,
1647; EG-NEXT:     LSHR * T0.W, T7.Y, literal.x,
1648; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1649; EG-NEXT:     BFE_INT T9.X, T7.Z, 0.0, literal.x,
1650; EG-NEXT:     LSHR T0.Z, T7.W, literal.x,
1651; EG-NEXT:     BFE_INT T8.W, PV.W, 0.0, literal.x,
1652; EG-NEXT:     LSHR * T0.W, T7.X, literal.x,
1653; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1654; EG-NEXT:     LSHR T7.X, KC0[2].Y, literal.x,
1655; EG-NEXT:     BFE_INT T8.Y, PS, 0.0, literal.y,
1656; EG-NEXT:     LSHR T1.Z, T7.Z, literal.y,
1657; EG-NEXT:     BFE_INT T9.W, PV.Z, 0.0, literal.y,
1658; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
1659; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
1660; EG-NEXT:     LSHR T10.X, PS, literal.x,
1661; EG-NEXT:     BFE_INT * T9.Y, PV.Z, 0.0, literal.y,
1662; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
1663  %load = load <8 x i16>, <8 x i16> addrspace(4)* %in
1664  %ext = sext <8 x i16> %load to <8 x i32>
1665  store <8 x i32> %ext, <8 x i32> addrspace(1)* %out
1666  ret void
1667}
1668
1669define amdgpu_kernel void @constant_zextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(4)* %in) #0 {
1670; GCN-NOHSA-SI-LABEL: constant_zextload_v16i16_to_v16i32:
1671; GCN-NOHSA-SI:       ; %bb.0:
1672; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1673; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1674; GCN-NOHSA-SI-NEXT:    s_load_dwordx8 s[4:11], s[2:3], 0x0
1675; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1676; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1677; GCN-NOHSA-SI-NEXT:    s_mov_b32 s12, 0xffff
1678; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1679; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s13, s5, 16
1680; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s14, s4, 16
1681; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s15, s7, 16
1682; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s16, s6, 16
1683; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s17, s9, 16
1684; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s18, s8, 16
1685; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s19, s11, 16
1686; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s20, s10, 16
1687; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s12
1688; GCN-NOHSA-SI-NEXT:    s_and_b32 s4, s4, s12
1689; GCN-NOHSA-SI-NEXT:    s_and_b32 s7, s7, s12
1690; GCN-NOHSA-SI-NEXT:    s_and_b32 s6, s6, s12
1691; GCN-NOHSA-SI-NEXT:    s_and_b32 s9, s9, s12
1692; GCN-NOHSA-SI-NEXT:    s_and_b32 s11, s11, s12
1693; GCN-NOHSA-SI-NEXT:    s_and_b32 s10, s10, s12
1694; GCN-NOHSA-SI-NEXT:    s_and_b32 s8, s8, s12
1695; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
1696; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s20
1697; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s11
1698; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s19
1699; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
1700; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1701; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
1702; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s18
1703; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s9
1704; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s17
1705; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
1706; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1707; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
1708; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s16
1709; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
1710; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s15
1711; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
1712; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1713; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1714; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s14
1715; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
1716; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s13
1717; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1718; GCN-NOHSA-SI-NEXT:    s_endpgm
1719;
1720; GCN-HSA-LABEL: constant_zextload_v16i16_to_v16i32:
1721; GCN-HSA:       ; %bb.0:
1722; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1723; GCN-HSA-NEXT:    s_mov_b32 s12, 0xffff
1724; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1725; GCN-HSA-NEXT:    s_load_dwordx8 s[4:11], s[2:3], 0x0
1726; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1727; GCN-HSA-NEXT:    s_lshr_b32 s13, s5, 16
1728; GCN-HSA-NEXT:    s_lshr_b32 s14, s4, 16
1729; GCN-HSA-NEXT:    s_lshr_b32 s15, s7, 16
1730; GCN-HSA-NEXT:    s_lshr_b32 s16, s6, 16
1731; GCN-HSA-NEXT:    s_lshr_b32 s17, s9, 16
1732; GCN-HSA-NEXT:    s_lshr_b32 s18, s8, 16
1733; GCN-HSA-NEXT:    s_lshr_b32 s2, s11, 16
1734; GCN-HSA-NEXT:    s_lshr_b32 s3, s10, 16
1735; GCN-HSA-NEXT:    s_and_b32 s5, s5, s12
1736; GCN-HSA-NEXT:    s_and_b32 s4, s4, s12
1737; GCN-HSA-NEXT:    s_and_b32 s7, s7, s12
1738; GCN-HSA-NEXT:    s_and_b32 s6, s6, s12
1739; GCN-HSA-NEXT:    s_and_b32 s9, s9, s12
1740; GCN-HSA-NEXT:    s_and_b32 s8, s8, s12
1741; GCN-HSA-NEXT:    s_and_b32 s11, s11, s12
1742; GCN-HSA-NEXT:    s_and_b32 s10, s10, s12
1743; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s2
1744; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
1745; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
1746; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1747; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1748; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1749; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
1750; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s10
1751; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s11
1752; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1753; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1754; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1755; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1756; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
1757; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
1758; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s18
1759; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s9
1760; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s17
1761; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1762; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1763; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1764; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
1765; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s16
1766; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s7
1767; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s15
1768; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1769; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1770; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
1771; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
1772; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s14
1773; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
1774; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s13
1775; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
1776; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1777; GCN-HSA-NEXT:    s_endpgm
1778;
1779; GCN-NOHSA-VI-LABEL: constant_zextload_v16i16_to_v16i32:
1780; GCN-NOHSA-VI:       ; %bb.0:
1781; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1782; GCN-NOHSA-VI-NEXT:    s_mov_b32 s12, 0xffff
1783; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
1784; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
1785; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1786; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
1787; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
1788; GCN-NOHSA-VI-NEXT:    s_load_dwordx8 s[4:11], s[6:7], 0x0
1789; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
1790; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s19, s11, 16
1791; GCN-NOHSA-VI-NEXT:    s_and_b32 s11, s11, s12
1792; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s20, s10, 16
1793; GCN-NOHSA-VI-NEXT:    s_and_b32 s10, s10, s12
1794; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s17, s9, 16
1795; GCN-NOHSA-VI-NEXT:    s_and_b32 s9, s9, s12
1796; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s18, s8, 16
1797; GCN-NOHSA-VI-NEXT:    s_and_b32 s8, s8, s12
1798; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s10
1799; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s20
1800; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s11
1801; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s19
1802; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s15, s7, 16
1803; GCN-NOHSA-VI-NEXT:    s_and_b32 s7, s7, s12
1804; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s16, s6, 16
1805; GCN-NOHSA-VI-NEXT:    s_and_b32 s6, s6, s12
1806; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
1807; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s13, s5, 16
1808; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
1809; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s18
1810; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s9
1811; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s17
1812; GCN-NOHSA-VI-NEXT:    s_and_b32 s5, s5, s12
1813; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s14, s4, 16
1814; GCN-NOHSA-VI-NEXT:    s_and_b32 s4, s4, s12
1815; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
1816; GCN-NOHSA-VI-NEXT:    s_nop 0
1817; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
1818; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s16
1819; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
1820; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s15
1821; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
1822; GCN-NOHSA-VI-NEXT:    s_nop 0
1823; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
1824; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s14
1825; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
1826; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s13
1827; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1828; GCN-NOHSA-VI-NEXT:    s_endpgm
1829;
1830; EG-LABEL: constant_zextload_v16i16_to_v16i32:
1831; EG:       ; %bb.0:
1832; EG-NEXT:    ALU 0, @12, KC0[CB0:0-32], KC1[]
1833; EG-NEXT:    TEX 1 @8
1834; EG-NEXT:    ALU 35, @13, KC0[CB0:0-32], KC1[]
1835; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T17.XYZW, T18.X, 0
1836; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T15.XYZW, T11.X, 0
1837; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T14.XYZW, T16.X, 0
1838; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T13.XYZW, T12.X, 1
1839; EG-NEXT:    CF_END
1840; EG-NEXT:    Fetch clause starting at 8:
1841; EG-NEXT:     VTX_READ_128 T12.XYZW, T11.X, 0, #1
1842; EG-NEXT:     VTX_READ_128 T11.XYZW, T11.X, 16, #1
1843; EG-NEXT:    ALU clause starting at 12:
1844; EG-NEXT:     MOV * T11.X, KC0[2].Z,
1845; EG-NEXT:    ALU clause starting at 13:
1846; EG-NEXT:     LSHR * T13.W, T12.Y, literal.x,
1847; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1848; EG-NEXT:     AND_INT * T13.Z, T12.Y, literal.x,
1849; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
1850; EG-NEXT:     LSHR T13.Y, T12.X, literal.x,
1851; EG-NEXT:     LSHR * T14.W, T12.W, literal.x,
1852; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1853; EG-NEXT:     AND_INT T13.X, T12.X, literal.x,
1854; EG-NEXT:     AND_INT T14.Z, T12.W, literal.x,
1855; EG-NEXT:     LSHR * T12.X, KC0[2].Y, literal.y,
1856; EG-NEXT:    65535(9.183409e-41), 2(2.802597e-45)
1857; EG-NEXT:     LSHR T14.Y, T12.Z, literal.x,
1858; EG-NEXT:     LSHR * T15.W, T11.Y, literal.x,
1859; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
1860; EG-NEXT:     AND_INT T14.X, T12.Z, literal.x,
1861; EG-NEXT:     AND_INT T15.Z, T11.Y, literal.x,
1862; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
1863; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
1864; EG-NEXT:     LSHR T16.X, PV.W, literal.x,
1865; EG-NEXT:     LSHR T15.Y, T11.X, literal.y,
1866; EG-NEXT:     LSHR T17.W, T11.W, literal.y,
1867; EG-NEXT:     AND_INT * T15.X, T11.X, literal.z,
1868; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
1869; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
1870; EG-NEXT:     AND_INT T17.Z, T11.W, literal.x,
1871; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
1872; EG-NEXT:    65535(9.183409e-41), 32(4.484155e-44)
1873; EG-NEXT:     LSHR T11.X, PV.W, literal.x,
1874; EG-NEXT:     LSHR T17.Y, T11.Z, literal.y,
1875; EG-NEXT:     AND_INT * T17.X, T11.Z, literal.z,
1876; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
1877; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
1878; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
1879; EG-NEXT:    48(6.726233e-44), 0(0.000000e+00)
1880; EG-NEXT:     LSHR * T18.X, PV.W, literal.x,
1881; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
1882  %load = load <16 x i16>, <16 x i16> addrspace(4)* %in
1883  %ext = zext <16 x i16> %load to <16 x i32>
1884  store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
1885  ret void
1886}
1887
1888define amdgpu_kernel void @constant_sextload_v16i16_to_v16i32(<16 x i32> addrspace(1)* %out, <16 x i16> addrspace(4)* %in) #0 {
1889; GCN-NOHSA-SI-LABEL: constant_sextload_v16i16_to_v16i32:
1890; GCN-NOHSA-SI:       ; %bb.0:
1891; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
1892; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1893; GCN-NOHSA-SI-NEXT:    s_load_dwordx8 s[4:11], s[2:3], 0x0
1894; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
1895; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
1896; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
1897; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s12, s5, 16
1898; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s13, s4, 16
1899; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s5, s5
1900; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s4, s4
1901; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s14, s7, 16
1902; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s15, s6, 16
1903; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s7, s7
1904; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s6, s6
1905; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s16, s9, 16
1906; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s17, s8, 16
1907; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s9, s9
1908; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s18, s11, 16
1909; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s19, s10, 16
1910; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s11, s11
1911; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s10, s10
1912; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s8, s8
1913; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
1914; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s19
1915; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s11
1916; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s18
1917; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
1918; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1919; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
1920; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s17
1921; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s9
1922; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s16
1923; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
1924; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1925; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
1926; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s15
1927; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
1928; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s14
1929; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
1930; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
1931; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
1932; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s13
1933; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
1934; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s12
1935; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
1936; GCN-NOHSA-SI-NEXT:    s_endpgm
1937;
1938; GCN-HSA-LABEL: constant_sextload_v16i16_to_v16i32:
1939; GCN-HSA:       ; %bb.0:
1940; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
1941; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1942; GCN-HSA-NEXT:    s_load_dwordx8 s[4:11], s[2:3], 0x0
1943; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
1944; GCN-HSA-NEXT:    s_ashr_i32 s12, s5, 16
1945; GCN-HSA-NEXT:    s_ashr_i32 s13, s4, 16
1946; GCN-HSA-NEXT:    s_ashr_i32 s14, s7, 16
1947; GCN-HSA-NEXT:    s_ashr_i32 s15, s6, 16
1948; GCN-HSA-NEXT:    s_ashr_i32 s16, s9, 16
1949; GCN-HSA-NEXT:    s_ashr_i32 s17, s8, 16
1950; GCN-HSA-NEXT:    s_ashr_i32 s2, s11, 16
1951; GCN-HSA-NEXT:    s_ashr_i32 s3, s10, 16
1952; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s2
1953; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
1954; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
1955; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1956; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1957; GCN-HSA-NEXT:    s_sext_i32_i16 s11, s11
1958; GCN-HSA-NEXT:    s_sext_i32_i16 s10, s10
1959; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1960; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
1961; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s10
1962; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s11
1963; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1964; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1965; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1966; GCN-HSA-NEXT:    s_sext_i32_i16 s9, s9
1967; GCN-HSA-NEXT:    s_sext_i32_i16 s8, s8
1968; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1969; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
1970; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
1971; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s17
1972; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s9
1973; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s16
1974; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
1975; GCN-HSA-NEXT:    s_sext_i32_i16 s7, s7
1976; GCN-HSA-NEXT:    s_sext_i32_i16 s6, s6
1977; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1978; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
1979; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
1980; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s15
1981; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s7
1982; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s14
1983; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
1984; GCN-HSA-NEXT:    s_sext_i32_i16 s5, s5
1985; GCN-HSA-NEXT:    s_sext_i32_i16 s4, s4
1986; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1987; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
1988; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
1989; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s13
1990; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
1991; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s12
1992; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
1993; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
1994; GCN-HSA-NEXT:    s_endpgm
1995;
1996; GCN-NOHSA-VI-LABEL: constant_sextload_v16i16_to_v16i32:
1997; GCN-NOHSA-VI:       ; %bb.0:
1998; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
1999; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
2000; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
2001; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
2002; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
2003; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
2004; GCN-NOHSA-VI-NEXT:    s_load_dwordx8 s[4:11], s[6:7], 0x0
2005; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
2006; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s18, s11, 16
2007; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s19, s10, 16
2008; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s11, s11
2009; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s10, s10
2010; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s16, s9, 16
2011; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s17, s8, 16
2012; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s9, s9
2013; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s8, s8
2014; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s10
2015; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s19
2016; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s11
2017; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s18
2018; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s14, s7, 16
2019; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s15, s6, 16
2020; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s7, s7
2021; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s6, s6
2022; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
2023; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s12, s5, 16
2024; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
2025; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s17
2026; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s9
2027; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s16
2028; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s13, s4, 16
2029; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s5, s5
2030; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s4, s4
2031; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
2032; GCN-NOHSA-VI-NEXT:    s_nop 0
2033; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
2034; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s15
2035; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
2036; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s14
2037; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
2038; GCN-NOHSA-VI-NEXT:    s_nop 0
2039; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
2040; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s13
2041; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
2042; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s12
2043; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
2044; GCN-NOHSA-VI-NEXT:    s_endpgm
2045;
2046; EG-LABEL: constant_sextload_v16i16_to_v16i32:
2047; EG:       ; %bb.0:
2048; EG-NEXT:    ALU 0, @12, KC0[CB0:0-32], KC1[]
2049; EG-NEXT:    TEX 1 @8
2050; EG-NEXT:    ALU 39, @13, KC0[CB0:0-32], KC1[]
2051; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T18.XYZW, T12.X, 0
2052; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T17.XYZW, T11.X, 0
2053; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T16.XYZW, T14.X, 0
2054; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T15.XYZW, T13.X, 1
2055; EG-NEXT:    CF_END
2056; EG-NEXT:    Fetch clause starting at 8:
2057; EG-NEXT:     VTX_READ_128 T12.XYZW, T11.X, 16, #1
2058; EG-NEXT:     VTX_READ_128 T11.XYZW, T11.X, 0, #1
2059; EG-NEXT:    ALU clause starting at 12:
2060; EG-NEXT:     MOV * T11.X, KC0[2].Z,
2061; EG-NEXT:    ALU clause starting at 13:
2062; EG-NEXT:     LSHR T13.X, KC0[2].Y, literal.x,
2063; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2064; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2065; EG-NEXT:     LSHR T14.X, PV.W, literal.x,
2066; EG-NEXT:     BFE_INT * T15.Z, T11.Y, 0.0, literal.y,
2067; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2068; EG-NEXT:     BFE_INT T15.X, T11.X, 0.0, literal.x,
2069; EG-NEXT:     LSHR T0.Y, T12.W, literal.x,
2070; EG-NEXT:     BFE_INT T16.Z, T11.W, 0.0, literal.x, BS:VEC_120/SCL_212
2071; EG-NEXT:     LSHR T0.W, T12.Y, literal.x,
2072; EG-NEXT:     LSHR * T1.W, T11.Y, literal.x,
2073; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2074; EG-NEXT:     BFE_INT T16.X, T11.Z, 0.0, literal.x,
2075; EG-NEXT:     LSHR T1.Y, T11.W, literal.x,
2076; EG-NEXT:     BFE_INT T17.Z, T12.Y, 0.0, literal.x,
2077; EG-NEXT:     BFE_INT T15.W, PS, 0.0, literal.x,
2078; EG-NEXT:     LSHR * T1.W, T11.X, literal.x,
2079; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2080; EG-NEXT:     BFE_INT T17.X, T12.X, 0.0, literal.x,
2081; EG-NEXT:     BFE_INT T15.Y, PS, 0.0, literal.x,
2082; EG-NEXT:     BFE_INT T18.Z, T12.W, 0.0, literal.x,
2083; EG-NEXT:     BFE_INT T16.W, PV.Y, 0.0, literal.x,
2084; EG-NEXT:     LSHR * T1.W, T11.Z, literal.x,
2085; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2086; EG-NEXT:     BFE_INT T18.X, T12.Z, 0.0, literal.x,
2087; EG-NEXT:     BFE_INT T16.Y, PS, 0.0, literal.x,
2088; EG-NEXT:     LSHR T0.Z, T12.X, literal.x,
2089; EG-NEXT:     BFE_INT T17.W, T0.W, 0.0, literal.x,
2090; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2091; EG-NEXT:    16(2.242078e-44), 32(4.484155e-44)
2092; EG-NEXT:     LSHR T11.X, PS, literal.x,
2093; EG-NEXT:     BFE_INT T17.Y, PV.Z, 0.0, literal.y,
2094; EG-NEXT:     LSHR T0.Z, T12.Z, literal.y,
2095; EG-NEXT:     BFE_INT T18.W, T0.Y, 0.0, literal.y,
2096; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.z,
2097; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2098; EG-NEXT:    48(6.726233e-44), 0(0.000000e+00)
2099; EG-NEXT:     LSHR T12.X, PS, literal.x,
2100; EG-NEXT:     BFE_INT * T18.Y, PV.Z, 0.0, literal.y,
2101; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2102  %load = load <16 x i16>, <16 x i16> addrspace(4)* %in
2103  %ext = sext <16 x i16> %load to <16 x i32>
2104  store <16 x i32> %ext, <16 x i32> addrspace(1)* %out
2105  ret void
2106}
2107
2108define amdgpu_kernel void @constant_zextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(4)* %in) #0 {
2109; GCN-NOHSA-SI-LABEL: constant_zextload_v32i16_to_v32i32:
2110; GCN-NOHSA-SI:       ; %bb.0:
2111; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[16:19], s[0:1], 0x9
2112; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
2113; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
2114; GCN-NOHSA-SI-NEXT:    s_mov_b32 s18, 0xffff
2115; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
2116; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s19, s1, 16
2117; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s20, s0, 16
2118; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s21, s3, 16
2119; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s22, s2, 16
2120; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s23, s5, 16
2121; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s24, s4, 16
2122; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s25, s7, 16
2123; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s26, s6, 16
2124; GCN-NOHSA-SI-NEXT:    s_and_b32 s27, s1, s18
2125; GCN-NOHSA-SI-NEXT:    s_and_b32 s28, s0, s18
2126; GCN-NOHSA-SI-NEXT:    s_and_b32 s29, s3, s18
2127; GCN-NOHSA-SI-NEXT:    s_and_b32 s30, s2, s18
2128; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s18
2129; GCN-NOHSA-SI-NEXT:    s_and_b32 s4, s4, s18
2130; GCN-NOHSA-SI-NEXT:    s_and_b32 s7, s7, s18
2131; GCN-NOHSA-SI-NEXT:    s_and_b32 s6, s6, s18
2132; GCN-NOHSA-SI-NEXT:    s_and_b32 s31, s9, s18
2133; GCN-NOHSA-SI-NEXT:    s_and_b32 s33, s8, s18
2134; GCN-NOHSA-SI-NEXT:    s_and_b32 s34, s11, s18
2135; GCN-NOHSA-SI-NEXT:    s_and_b32 s35, s10, s18
2136; GCN-NOHSA-SI-NEXT:    s_and_b32 s36, s13, s18
2137; GCN-NOHSA-SI-NEXT:    s_and_b32 s37, s12, s18
2138; GCN-NOHSA-SI-NEXT:    s_and_b32 s38, s15, s18
2139; GCN-NOHSA-SI-NEXT:    s_and_b32 s18, s14, s18
2140; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s9, s9, 16
2141; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s8, s8, 16
2142; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s11, s11, 16
2143; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s10, s10, 16
2144; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s13, s13, 16
2145; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s12, s12, 16
2146; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s15, s15, 16
2147; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s14, s14, 16
2148; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
2149; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
2150; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s16
2151; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s17
2152; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s18
2153; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s14
2154; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s38
2155; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s15
2156; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
2157; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2158; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s37
2159; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s12
2160; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s36
2161; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s13
2162; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
2163; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2164; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s35
2165; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s10
2166; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s34
2167; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s11
2168; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
2169; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2170; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s33
2171; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s8
2172; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s31
2173; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s9
2174; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
2175; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2176; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
2177; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s26
2178; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
2179; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s25
2180; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
2181; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2182; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
2183; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s24
2184; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
2185; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s23
2186; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
2187; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2188; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s30
2189; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s22
2190; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s29
2191; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s21
2192; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
2193; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2194; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s28
2195; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s20
2196; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s27
2197; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s19
2198; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
2199; GCN-NOHSA-SI-NEXT:    s_endpgm
2200;
2201; GCN-HSA-LABEL: constant_zextload_v32i16_to_v32i32:
2202; GCN-HSA:       ; %bb.0:
2203; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
2204; GCN-HSA-NEXT:    s_mov_b32 s20, 0xffff
2205; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
2206; GCN-HSA-NEXT:    s_load_dwordx16 s[4:19], s[2:3], 0x0
2207; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
2208; GCN-HSA-NEXT:    s_and_b32 s21, s5, s20
2209; GCN-HSA-NEXT:    s_and_b32 s22, s4, s20
2210; GCN-HSA-NEXT:    s_and_b32 s23, s7, s20
2211; GCN-HSA-NEXT:    s_and_b32 s24, s6, s20
2212; GCN-HSA-NEXT:    s_and_b32 s25, s9, s20
2213; GCN-HSA-NEXT:    s_and_b32 s26, s8, s20
2214; GCN-HSA-NEXT:    s_and_b32 s27, s11, s20
2215; GCN-HSA-NEXT:    s_and_b32 s28, s10, s20
2216; GCN-HSA-NEXT:    s_and_b32 s29, s13, s20
2217; GCN-HSA-NEXT:    s_and_b32 s30, s12, s20
2218; GCN-HSA-NEXT:    s_and_b32 s31, s15, s20
2219; GCN-HSA-NEXT:    s_and_b32 s33, s14, s20
2220; GCN-HSA-NEXT:    s_and_b32 s34, s17, s20
2221; GCN-HSA-NEXT:    s_and_b32 s35, s16, s20
2222; GCN-HSA-NEXT:    s_and_b32 s36, s19, s20
2223; GCN-HSA-NEXT:    s_and_b32 s20, s18, s20
2224; GCN-HSA-NEXT:    s_lshr_b32 s5, s5, 16
2225; GCN-HSA-NEXT:    s_lshr_b32 s4, s4, 16
2226; GCN-HSA-NEXT:    s_lshr_b32 s7, s7, 16
2227; GCN-HSA-NEXT:    s_lshr_b32 s6, s6, 16
2228; GCN-HSA-NEXT:    s_lshr_b32 s9, s9, 16
2229; GCN-HSA-NEXT:    s_lshr_b32 s8, s8, 16
2230; GCN-HSA-NEXT:    s_lshr_b32 s11, s11, 16
2231; GCN-HSA-NEXT:    s_lshr_b32 s10, s10, 16
2232; GCN-HSA-NEXT:    s_lshr_b32 s13, s13, 16
2233; GCN-HSA-NEXT:    s_lshr_b32 s12, s12, 16
2234; GCN-HSA-NEXT:    s_lshr_b32 s15, s15, 16
2235; GCN-HSA-NEXT:    s_lshr_b32 s14, s14, 16
2236; GCN-HSA-NEXT:    s_lshr_b32 s17, s17, 16
2237; GCN-HSA-NEXT:    s_lshr_b32 s16, s16, 16
2238; GCN-HSA-NEXT:    s_lshr_b32 s19, s19, 16
2239; GCN-HSA-NEXT:    s_lshr_b32 s18, s18, 16
2240; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x70
2241; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2242; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s3
2243; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s2
2244; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x60
2245; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2246; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s3
2247; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s2
2248; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x50
2249; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s20
2250; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s18
2251; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s36
2252; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s19
2253; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s35
2254; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s16
2255; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2256; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s34
2257; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s17
2258; GCN-HSA-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
2259; GCN-HSA-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
2260; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s33
2261; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2262; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2263; GCN-HSA-NEXT:    s_add_u32 s2, s0, 64
2264; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s14
2265; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s31
2266; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s15
2267; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2268; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2269; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2270; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2271; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
2272; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s30
2273; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s12
2274; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s29
2275; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s13
2276; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2277; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2278; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2279; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2280; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
2281; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s28
2282; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s10
2283; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s27
2284; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s11
2285; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2286; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2287; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2288; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2289; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
2290; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s26
2291; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s8
2292; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s25
2293; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s9
2294; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2295; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2296; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2297; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s24
2298; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s6
2299; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s23
2300; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s7
2301; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2302; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2303; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
2304; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s22
2305; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s4
2306; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s21
2307; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s5
2308; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
2309; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2310; GCN-HSA-NEXT:    s_endpgm
2311;
2312; GCN-NOHSA-VI-LABEL: constant_zextload_v32i16_to_v32i32:
2313; GCN-NOHSA-VI:       ; %bb.0:
2314; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
2315; GCN-NOHSA-VI-NEXT:    s_mov_b32 s20, 0xffff
2316; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
2317; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
2318; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
2319; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
2320; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
2321; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[4:19], s[6:7], 0x0
2322; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
2323; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s36, s19, 16
2324; GCN-NOHSA-VI-NEXT:    s_and_b32 s19, s19, s20
2325; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s37, s18, 16
2326; GCN-NOHSA-VI-NEXT:    s_and_b32 s18, s18, s20
2327; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s34, s17, 16
2328; GCN-NOHSA-VI-NEXT:    s_and_b32 s17, s17, s20
2329; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s35, s16, 16
2330; GCN-NOHSA-VI-NEXT:    s_and_b32 s16, s16, s20
2331; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s18
2332; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s37
2333; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s19
2334; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s36
2335; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s31, s15, 16
2336; GCN-NOHSA-VI-NEXT:    s_and_b32 s15, s15, s20
2337; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s33, s14, 16
2338; GCN-NOHSA-VI-NEXT:    s_and_b32 s14, s14, s20
2339; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
2340; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s29, s13, 16
2341; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s16
2342; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s35
2343; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s17
2344; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s34
2345; GCN-NOHSA-VI-NEXT:    s_and_b32 s13, s13, s20
2346; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s30, s12, 16
2347; GCN-NOHSA-VI-NEXT:    s_and_b32 s12, s12, s20
2348; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
2349; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s27, s11, 16
2350; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s14
2351; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s33
2352; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s15
2353; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s31
2354; GCN-NOHSA-VI-NEXT:    s_and_b32 s11, s11, s20
2355; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s28, s10, 16
2356; GCN-NOHSA-VI-NEXT:    s_and_b32 s10, s10, s20
2357; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
2358; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s25, s9, 16
2359; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s12
2360; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s30
2361; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s13
2362; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s29
2363; GCN-NOHSA-VI-NEXT:    s_and_b32 s9, s9, s20
2364; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s26, s8, 16
2365; GCN-NOHSA-VI-NEXT:    s_and_b32 s8, s8, s20
2366; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
2367; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s23, s7, 16
2368; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s10
2369; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s28
2370; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s11
2371; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s27
2372; GCN-NOHSA-VI-NEXT:    s_and_b32 s7, s7, s20
2373; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s24, s6, 16
2374; GCN-NOHSA-VI-NEXT:    s_and_b32 s6, s6, s20
2375; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
2376; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s21, s5, 16
2377; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
2378; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s26
2379; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s9
2380; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s25
2381; GCN-NOHSA-VI-NEXT:    s_and_b32 s5, s5, s20
2382; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s22, s4, 16
2383; GCN-NOHSA-VI-NEXT:    s_and_b32 s4, s4, s20
2384; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
2385; GCN-NOHSA-VI-NEXT:    s_nop 0
2386; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
2387; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s24
2388; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
2389; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s23
2390; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
2391; GCN-NOHSA-VI-NEXT:    s_nop 0
2392; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
2393; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s22
2394; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
2395; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s21
2396; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
2397; GCN-NOHSA-VI-NEXT:    s_endpgm
2398;
2399; EG-LABEL: constant_zextload_v32i16_to_v32i32:
2400; EG:       ; %bb.0:
2401; EG-NEXT:    ALU 0, @20, KC0[CB0:0-32], KC1[]
2402; EG-NEXT:    TEX 3 @12
2403; EG-NEXT:    ALU 71, @21, KC0[CB0:0-32], KC1[]
2404; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T33.XYZW, T34.X, 0
2405; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T31.XYZW, T21.X, 0
2406; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T30.XYZW, T32.X, 0
2407; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T28.XYZW, T22.X, 0
2408; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T27.XYZW, T29.X, 0
2409; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T25.XYZW, T19.X, 0
2410; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T24.XYZW, T26.X, 0
2411; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T23.XYZW, T20.X, 1
2412; EG-NEXT:    CF_END
2413; EG-NEXT:    Fetch clause starting at 12:
2414; EG-NEXT:     VTX_READ_128 T20.XYZW, T19.X, 0, #1
2415; EG-NEXT:     VTX_READ_128 T21.XYZW, T19.X, 48, #1
2416; EG-NEXT:     VTX_READ_128 T22.XYZW, T19.X, 32, #1
2417; EG-NEXT:     VTX_READ_128 T19.XYZW, T19.X, 16, #1
2418; EG-NEXT:    ALU clause starting at 20:
2419; EG-NEXT:     MOV * T19.X, KC0[2].Z,
2420; EG-NEXT:    ALU clause starting at 21:
2421; EG-NEXT:     LSHR * T23.W, T20.Y, literal.x,
2422; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2423; EG-NEXT:     AND_INT * T23.Z, T20.Y, literal.x,
2424; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
2425; EG-NEXT:     LSHR T23.Y, T20.X, literal.x,
2426; EG-NEXT:     LSHR * T24.W, T20.W, literal.x,
2427; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2428; EG-NEXT:     AND_INT T23.X, T20.X, literal.x,
2429; EG-NEXT:     AND_INT T24.Z, T20.W, literal.x,
2430; EG-NEXT:     LSHR * T20.X, KC0[2].Y, literal.y,
2431; EG-NEXT:    65535(9.183409e-41), 2(2.802597e-45)
2432; EG-NEXT:     LSHR T24.Y, T20.Z, literal.x,
2433; EG-NEXT:     LSHR * T25.W, T19.Y, literal.x,
2434; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2435; EG-NEXT:     AND_INT T24.X, T20.Z, literal.x,
2436; EG-NEXT:     AND_INT T25.Z, T19.Y, literal.x,
2437; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2438; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
2439; EG-NEXT:     LSHR T26.X, PV.W, literal.x,
2440; EG-NEXT:     LSHR T25.Y, T19.X, literal.y,
2441; EG-NEXT:     LSHR T27.W, T19.W, literal.y,
2442; EG-NEXT:     AND_INT * T25.X, T19.X, literal.z,
2443; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2444; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
2445; EG-NEXT:     AND_INT T27.Z, T19.W, literal.x,
2446; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2447; EG-NEXT:    65535(9.183409e-41), 32(4.484155e-44)
2448; EG-NEXT:     LSHR T19.X, PV.W, literal.x,
2449; EG-NEXT:     LSHR T27.Y, T19.Z, literal.y,
2450; EG-NEXT:     LSHR T28.W, T22.Y, literal.y,
2451; EG-NEXT:     AND_INT * T27.X, T19.Z, literal.z,
2452; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2453; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
2454; EG-NEXT:     AND_INT T28.Z, T22.Y, literal.x,
2455; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2456; EG-NEXT:    65535(9.183409e-41), 48(6.726233e-44)
2457; EG-NEXT:     LSHR T29.X, PV.W, literal.x,
2458; EG-NEXT:     LSHR T28.Y, T22.X, literal.y,
2459; EG-NEXT:     LSHR T30.W, T22.W, literal.y,
2460; EG-NEXT:     AND_INT * T28.X, T22.X, literal.z,
2461; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2462; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
2463; EG-NEXT:     AND_INT T30.Z, T22.W, literal.x,
2464; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2465; EG-NEXT:    65535(9.183409e-41), 64(8.968310e-44)
2466; EG-NEXT:     LSHR T22.X, PV.W, literal.x,
2467; EG-NEXT:     LSHR T30.Y, T22.Z, literal.y,
2468; EG-NEXT:     LSHR T31.W, T21.Y, literal.y,
2469; EG-NEXT:     AND_INT * T30.X, T22.Z, literal.z,
2470; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2471; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
2472; EG-NEXT:     AND_INT T31.Z, T21.Y, literal.x,
2473; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2474; EG-NEXT:    65535(9.183409e-41), 80(1.121039e-43)
2475; EG-NEXT:     LSHR T32.X, PV.W, literal.x,
2476; EG-NEXT:     LSHR T31.Y, T21.X, literal.y,
2477; EG-NEXT:     LSHR T33.W, T21.W, literal.y,
2478; EG-NEXT:     AND_INT * T31.X, T21.X, literal.z,
2479; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2480; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
2481; EG-NEXT:     AND_INT T33.Z, T21.W, literal.x,
2482; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2483; EG-NEXT:    65535(9.183409e-41), 96(1.345247e-43)
2484; EG-NEXT:     LSHR T21.X, PV.W, literal.x,
2485; EG-NEXT:     LSHR T33.Y, T21.Z, literal.y,
2486; EG-NEXT:     AND_INT * T33.X, T21.Z, literal.z,
2487; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2488; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
2489; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
2490; EG-NEXT:    112(1.569454e-43), 0(0.000000e+00)
2491; EG-NEXT:     LSHR * T34.X, PV.W, literal.x,
2492; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
2493  %load = load <32 x i16>, <32 x i16> addrspace(4)* %in
2494  %ext = zext <32 x i16> %load to <32 x i32>
2495  store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
2496  ret void
2497}
2498
2499define amdgpu_kernel void @constant_sextload_v32i16_to_v32i32(<32 x i32> addrspace(1)* %out, <32 x i16> addrspace(4)* %in) #0 {
2500; GCN-NOHSA-SI-LABEL: constant_sextload_v32i16_to_v32i32:
2501; GCN-NOHSA-SI:       ; %bb.0:
2502; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[16:19], s[0:1], 0x9
2503; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
2504; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
2505; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
2506; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s18, s1, 16
2507; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s19, s0, 16
2508; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s20, s1
2509; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s21, s0
2510; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s22, s3, 16
2511; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s23, s2, 16
2512; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s24, s3
2513; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s25, s2
2514; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s26, s5, 16
2515; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s27, s4, 16
2516; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s5, s5
2517; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s4, s4
2518; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s28, s7, 16
2519; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s29, s6, 16
2520; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s7, s7
2521; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s6, s6
2522; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s30, s9, 16
2523; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s31, s8, 16
2524; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s9, s9
2525; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s8, s8
2526; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s33, s11, 16
2527; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s34, s10, 16
2528; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s11, s11
2529; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s10, s10
2530; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s35, s13, 16
2531; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s36, s12, 16
2532; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s13, s13
2533; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s12, s12
2534; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s37, s15, 16
2535; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s38, s14, 16
2536; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s15, s15
2537; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s14, s14
2538; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
2539; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
2540; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s16
2541; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s17
2542; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s14
2543; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s38
2544; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s15
2545; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s37
2546; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
2547; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2548; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s12
2549; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s36
2550; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s13
2551; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s35
2552; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
2553; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2554; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
2555; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s34
2556; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s11
2557; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s33
2558; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
2559; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2560; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
2561; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s31
2562; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s9
2563; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s30
2564; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
2565; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2566; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
2567; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s29
2568; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
2569; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s28
2570; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
2571; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2572; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
2573; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s27
2574; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
2575; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s26
2576; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
2577; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2578; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s25
2579; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s23
2580; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s24
2581; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s22
2582; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
2583; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
2584; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s21
2585; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s19
2586; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s20
2587; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s18
2588; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
2589; GCN-NOHSA-SI-NEXT:    s_endpgm
2590;
2591; GCN-HSA-LABEL: constant_sextload_v32i16_to_v32i32:
2592; GCN-HSA:       ; %bb.0:
2593; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
2594; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
2595; GCN-HSA-NEXT:    s_load_dwordx16 s[4:19], s[2:3], 0x0
2596; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
2597; GCN-HSA-NEXT:    s_ashr_i32 s20, s5, 16
2598; GCN-HSA-NEXT:    s_ashr_i32 s21, s4, 16
2599; GCN-HSA-NEXT:    s_ashr_i32 s22, s7, 16
2600; GCN-HSA-NEXT:    s_ashr_i32 s23, s6, 16
2601; GCN-HSA-NEXT:    s_ashr_i32 s24, s9, 16
2602; GCN-HSA-NEXT:    s_ashr_i32 s25, s8, 16
2603; GCN-HSA-NEXT:    s_ashr_i32 s26, s11, 16
2604; GCN-HSA-NEXT:    s_ashr_i32 s27, s10, 16
2605; GCN-HSA-NEXT:    s_ashr_i32 s28, s13, 16
2606; GCN-HSA-NEXT:    s_ashr_i32 s29, s12, 16
2607; GCN-HSA-NEXT:    s_ashr_i32 s30, s15, 16
2608; GCN-HSA-NEXT:    s_ashr_i32 s31, s14, 16
2609; GCN-HSA-NEXT:    s_ashr_i32 s33, s17, 16
2610; GCN-HSA-NEXT:    s_ashr_i32 s34, s16, 16
2611; GCN-HSA-NEXT:    s_ashr_i32 s35, s19, 16
2612; GCN-HSA-NEXT:    s_ashr_i32 s36, s18, 16
2613; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x70
2614; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2615; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s3
2616; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s2
2617; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x60
2618; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2619; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s3
2620; GCN-HSA-NEXT:    s_sext_i32_i16 s16, s16
2621; GCN-HSA-NEXT:    s_sext_i32_i16 s19, s19
2622; GCN-HSA-NEXT:    s_sext_i32_i16 s18, s18
2623; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s2
2624; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x50
2625; GCN-HSA-NEXT:    s_sext_i32_i16 s17, s17
2626; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s18
2627; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s36
2628; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s19
2629; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s35
2630; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s16
2631; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s34
2632; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2633; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s17
2634; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s33
2635; GCN-HSA-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
2636; GCN-HSA-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
2637; GCN-HSA-NEXT:    s_sext_i32_i16 s15, s15
2638; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2639; GCN-HSA-NEXT:    s_sext_i32_i16 s14, s14
2640; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2641; GCN-HSA-NEXT:    s_add_u32 s2, s0, 64
2642; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s14
2643; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s31
2644; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s15
2645; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s30
2646; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2647; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2648; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2649; GCN-HSA-NEXT:    s_sext_i32_i16 s13, s13
2650; GCN-HSA-NEXT:    s_sext_i32_i16 s12, s12
2651; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2652; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
2653; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s12
2654; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s29
2655; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s13
2656; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s28
2657; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2658; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2659; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2660; GCN-HSA-NEXT:    s_sext_i32_i16 s11, s11
2661; GCN-HSA-NEXT:    s_sext_i32_i16 s10, s10
2662; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2663; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
2664; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s10
2665; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s27
2666; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s11
2667; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s26
2668; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2669; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2670; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2671; GCN-HSA-NEXT:    s_sext_i32_i16 s9, s9
2672; GCN-HSA-NEXT:    s_sext_i32_i16 s8, s8
2673; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2674; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
2675; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
2676; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s25
2677; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s9
2678; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s24
2679; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
2680; GCN-HSA-NEXT:    s_sext_i32_i16 s7, s7
2681; GCN-HSA-NEXT:    s_sext_i32_i16 s6, s6
2682; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2683; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
2684; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
2685; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s23
2686; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s7
2687; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s22
2688; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
2689; GCN-HSA-NEXT:    s_sext_i32_i16 s5, s5
2690; GCN-HSA-NEXT:    s_sext_i32_i16 s4, s4
2691; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2692; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
2693; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
2694; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s21
2695; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
2696; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s20
2697; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
2698; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
2699; GCN-HSA-NEXT:    s_endpgm
2700;
2701; GCN-NOHSA-VI-LABEL: constant_sextload_v32i16_to_v32i32:
2702; GCN-NOHSA-VI:       ; %bb.0:
2703; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
2704; GCN-NOHSA-VI-NEXT:    s_mov_b32 s19, 0xf000
2705; GCN-NOHSA-VI-NEXT:    s_mov_b32 s18, -1
2706; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
2707; GCN-NOHSA-VI-NEXT:    s_mov_b32 s16, s0
2708; GCN-NOHSA-VI-NEXT:    s_mov_b32 s17, s1
2709; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[0:15], s[2:3], 0x0
2710; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
2711; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s35, s15, 16
2712; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s36, s14, 16
2713; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s15, s15
2714; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s14, s14
2715; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s33, s13, 16
2716; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s34, s12, 16
2717; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s13, s13
2718; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s12, s12
2719; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s14
2720; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s36
2721; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s15
2722; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s35
2723; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s30, s11, 16
2724; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s31, s10, 16
2725; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s11, s11
2726; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s10, s10
2727; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0 offset:112
2728; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s28, s9, 16
2729; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s12
2730; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s34
2731; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s13
2732; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s33
2733; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s29, s8, 16
2734; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s9, s9
2735; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s8, s8
2736; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0 offset:96
2737; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s26, s7, 16
2738; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s10
2739; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s31
2740; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s11
2741; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s30
2742; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s27, s6, 16
2743; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s7, s7
2744; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s6, s6
2745; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0 offset:80
2746; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s24, s5, 16
2747; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
2748; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s29
2749; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s9
2750; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s28
2751; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s25, s4, 16
2752; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s5, s5
2753; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s4, s4
2754; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0 offset:64
2755; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s22, s3, 16
2756; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
2757; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s27
2758; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
2759; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s26
2760; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s23, s2, 16
2761; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s3, s3
2762; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s2, s2
2763; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0 offset:48
2764; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s20, s1, 16
2765; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
2766; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s25
2767; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
2768; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s24
2769; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s21, s0, 16
2770; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s1, s1
2771; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s0, s0
2772; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0 offset:32
2773; GCN-NOHSA-VI-NEXT:    s_nop 0
2774; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s2
2775; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s23
2776; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s3
2777; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s22
2778; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0 offset:16
2779; GCN-NOHSA-VI-NEXT:    s_nop 0
2780; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s0
2781; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s21
2782; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s1
2783; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s20
2784; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[16:19], 0
2785; GCN-NOHSA-VI-NEXT:    s_endpgm
2786;
2787; EG-LABEL: constant_sextload_v32i16_to_v32i32:
2788; EG:       ; %bb.0:
2789; EG-NEXT:    ALU 8, @20, KC0[CB0:0-32], KC1[]
2790; EG-NEXT:    TEX 3 @12
2791; EG-NEXT:    ALU 73, @29, KC0[CB0:0-32], KC1[]
2792; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T34.XYZW, T24.X, 0
2793; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T23.XYZW, T22.X, 0
2794; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T33.XYZW, T28.X, 0
2795; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T25.XYZW, T27.X, 0
2796; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T32.XYZW, T26.X, 0
2797; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T31.XYZW, T21.X, 0
2798; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T30.XYZW, T20.X, 0
2799; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T29.XYZW, T19.X, 1
2800; EG-NEXT:    CF_END
2801; EG-NEXT:    Fetch clause starting at 12:
2802; EG-NEXT:     VTX_READ_128 T23.XYZW, T22.X, 16, #1
2803; EG-NEXT:     VTX_READ_128 T24.XYZW, T22.X, 32, #1
2804; EG-NEXT:     VTX_READ_128 T25.XYZW, T22.X, 0, #1
2805; EG-NEXT:     VTX_READ_128 T22.XYZW, T22.X, 48, #1
2806; EG-NEXT:    ALU clause starting at 20:
2807; EG-NEXT:     LSHR T19.X, KC0[2].Y, literal.x,
2808; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2809; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2810; EG-NEXT:     LSHR T20.X, PV.W, literal.x,
2811; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2812; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
2813; EG-NEXT:     LSHR T21.X, PV.W, literal.x,
2814; EG-NEXT:     MOV * T22.X, KC0[2].Z,
2815; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
2816; EG-NEXT:    ALU clause starting at 29:
2817; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
2818; EG-NEXT:    48(6.726233e-44), 0(0.000000e+00)
2819; EG-NEXT:     LSHR T26.X, PV.W, literal.x,
2820; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
2821; EG-NEXT:    2(2.802597e-45), 64(8.968310e-44)
2822; EG-NEXT:     LSHR T27.X, PV.W, literal.x,
2823; EG-NEXT:     LSHR T0.W, T22.W, literal.y,
2824; EG-NEXT:     ADD_INT * T1.W, KC0[2].Y, literal.z,
2825; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2826; EG-NEXT:    80(1.121039e-43), 0(0.000000e+00)
2827; EG-NEXT:     LSHR T28.X, PS, literal.x,
2828; EG-NEXT:     LSHR T0.Y, T22.Y, literal.y,
2829; EG-NEXT:     BFE_INT T29.Z, T25.Y, 0.0, literal.y, BS:VEC_120/SCL_212
2830; EG-NEXT:     LSHR T1.W, T24.W, literal.y,
2831; EG-NEXT:     LSHR * T2.W, T24.Y, literal.y,
2832; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2833; EG-NEXT:     BFE_INT T29.X, T25.X, 0.0, literal.x,
2834; EG-NEXT:     LSHR T1.Y, T23.W, literal.x,
2835; EG-NEXT:     BFE_INT T30.Z, T25.W, 0.0, literal.x, BS:VEC_120/SCL_212
2836; EG-NEXT:     LSHR T3.W, T23.Y, literal.x,
2837; EG-NEXT:     LSHR * T4.W, T25.Y, literal.x,
2838; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2839; EG-NEXT:     BFE_INT T30.X, T25.Z, 0.0, literal.x,
2840; EG-NEXT:     LSHR T2.Y, T25.W, literal.x,
2841; EG-NEXT:     BFE_INT T31.Z, T23.Y, 0.0, literal.x,
2842; EG-NEXT:     BFE_INT T29.W, PS, 0.0, literal.x,
2843; EG-NEXT:     LSHR * T4.W, T25.X, literal.x,
2844; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2845; EG-NEXT:     BFE_INT T31.X, T23.X, 0.0, literal.x,
2846; EG-NEXT:     BFE_INT T29.Y, PS, 0.0, literal.x,
2847; EG-NEXT:     BFE_INT T32.Z, T23.W, 0.0, literal.x,
2848; EG-NEXT:     BFE_INT T30.W, PV.Y, 0.0, literal.x,
2849; EG-NEXT:     LSHR * T4.W, T25.Z, literal.x,
2850; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2851; EG-NEXT:     BFE_INT T32.X, T23.Z, 0.0, literal.x,
2852; EG-NEXT:     BFE_INT T30.Y, PS, 0.0, literal.x,
2853; EG-NEXT:     BFE_INT T25.Z, T24.Y, 0.0, literal.x,
2854; EG-NEXT:     BFE_INT T31.W, T3.W, 0.0, literal.x,
2855; EG-NEXT:     LSHR * T3.W, T23.X, literal.x,
2856; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2857; EG-NEXT:     BFE_INT T25.X, T24.X, 0.0, literal.x,
2858; EG-NEXT:     BFE_INT T31.Y, PS, 0.0, literal.x,
2859; EG-NEXT:     BFE_INT T33.Z, T24.W, 0.0, literal.x,
2860; EG-NEXT:     BFE_INT T32.W, T1.Y, 0.0, literal.x,
2861; EG-NEXT:     LSHR * T3.W, T23.Z, literal.x,
2862; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2863; EG-NEXT:     BFE_INT T33.X, T24.Z, 0.0, literal.x,
2864; EG-NEXT:     BFE_INT T32.Y, PS, 0.0, literal.x,
2865; EG-NEXT:     BFE_INT T23.Z, T22.Y, 0.0, literal.x,
2866; EG-NEXT:     BFE_INT T25.W, T2.W, 0.0, literal.x,
2867; EG-NEXT:     LSHR * T2.W, T24.X, literal.x,
2868; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2869; EG-NEXT:     BFE_INT T23.X, T22.X, 0.0, literal.x,
2870; EG-NEXT:     BFE_INT T25.Y, PS, 0.0, literal.x,
2871; EG-NEXT:     BFE_INT T34.Z, T22.W, 0.0, literal.x,
2872; EG-NEXT:     BFE_INT T33.W, T1.W, 0.0, literal.x, BS:VEC_120/SCL_212
2873; EG-NEXT:     LSHR * T1.W, T24.Z, literal.x,
2874; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
2875; EG-NEXT:     BFE_INT T34.X, T22.Z, 0.0, literal.x,
2876; EG-NEXT:     BFE_INT T33.Y, PS, 0.0, literal.x,
2877; EG-NEXT:     LSHR T0.Z, T22.X, literal.x,
2878; EG-NEXT:     BFE_INT T23.W, T0.Y, 0.0, literal.x,
2879; EG-NEXT:     ADD_INT * T1.W, KC0[2].Y, literal.y,
2880; EG-NEXT:    16(2.242078e-44), 96(1.345247e-43)
2881; EG-NEXT:     LSHR T22.X, PS, literal.x,
2882; EG-NEXT:     BFE_INT T23.Y, PV.Z, 0.0, literal.y,
2883; EG-NEXT:     LSHR T0.Z, T22.Z, literal.y,
2884; EG-NEXT:     BFE_INT T34.W, T0.W, 0.0, literal.y,
2885; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.z,
2886; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2887; EG-NEXT:    112(1.569454e-43), 0(0.000000e+00)
2888; EG-NEXT:     LSHR T24.X, PS, literal.x,
2889; EG-NEXT:     BFE_INT * T34.Y, PV.Z, 0.0, literal.y,
2890; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
2891  %load = load <32 x i16>, <32 x i16> addrspace(4)* %in
2892  %ext = sext <32 x i16> %load to <32 x i32>
2893  store <32 x i32> %ext, <32 x i32> addrspace(1)* %out
2894  ret void
2895}
2896
2897define amdgpu_kernel void @constant_zextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(4)* %in) #0 {
2898; GCN-NOHSA-SI-LABEL: constant_zextload_v64i16_to_v64i32:
2899; GCN-NOHSA-SI:       ; %bb.0:
2900; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[16:19], s[0:1], 0x9
2901; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
2902; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
2903; GCN-NOHSA-SI-NEXT:    s_mov_b32 s20, 0xffff
2904; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[36:51], s[18:19], 0x10
2905; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
2906; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s18, s1, 16
2907; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s19, s0, 16
2908; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s21, s3, 16
2909; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s22, s2, 16
2910; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s23, s5, 16
2911; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s24, s4, 16
2912; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s25, s7, 16
2913; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s26, s6, 16
2914; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s27, s9, 16
2915; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s28, s8, 16
2916; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s29, s11, 16
2917; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s30, s10, 16
2918; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s31, s13, 16
2919; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s33, s12, 16
2920; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s34, s15, 16
2921; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s35, s14, 16
2922; GCN-NOHSA-SI-NEXT:    s_and_b32 s52, s1, s20
2923; GCN-NOHSA-SI-NEXT:    s_and_b32 s53, s0, s20
2924; GCN-NOHSA-SI-NEXT:    s_and_b32 s54, s3, s20
2925; GCN-NOHSA-SI-NEXT:    s_and_b32 s55, s2, s20
2926; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s20
2927; GCN-NOHSA-SI-NEXT:    s_and_b32 s4, s4, s20
2928; GCN-NOHSA-SI-NEXT:    s_and_b32 s7, s7, s20
2929; GCN-NOHSA-SI-NEXT:    s_and_b32 s6, s6, s20
2930; GCN-NOHSA-SI-NEXT:    s_and_b32 s9, s9, s20
2931; GCN-NOHSA-SI-NEXT:    s_and_b32 s8, s8, s20
2932; GCN-NOHSA-SI-NEXT:    s_and_b32 s11, s11, s20
2933; GCN-NOHSA-SI-NEXT:    s_and_b32 s10, s10, s20
2934; GCN-NOHSA-SI-NEXT:    s_and_b32 s13, s13, s20
2935; GCN-NOHSA-SI-NEXT:    s_and_b32 s12, s12, s20
2936; GCN-NOHSA-SI-NEXT:    s_and_b32 s15, s15, s20
2937; GCN-NOHSA-SI-NEXT:    s_and_b32 s14, s14, s20
2938; GCN-NOHSA-SI-NEXT:    s_and_b32 s56, s37, s20
2939; GCN-NOHSA-SI-NEXT:    s_and_b32 s57, s36, s20
2940; GCN-NOHSA-SI-NEXT:    s_and_b32 s58, s39, s20
2941; GCN-NOHSA-SI-NEXT:    s_and_b32 s59, s38, s20
2942; GCN-NOHSA-SI-NEXT:    s_and_b32 s60, s41, s20
2943; GCN-NOHSA-SI-NEXT:    s_and_b32 s61, s40, s20
2944; GCN-NOHSA-SI-NEXT:    s_and_b32 s62, s43, s20
2945; GCN-NOHSA-SI-NEXT:    s_and_b32 s63, s42, s20
2946; GCN-NOHSA-SI-NEXT:    s_and_b32 s64, s45, s20
2947; GCN-NOHSA-SI-NEXT:    s_and_b32 s65, s44, s20
2948; GCN-NOHSA-SI-NEXT:    s_and_b32 s66, s47, s20
2949; GCN-NOHSA-SI-NEXT:    s_and_b32 s67, s46, s20
2950; GCN-NOHSA-SI-NEXT:    s_and_b32 s68, s49, s20
2951; GCN-NOHSA-SI-NEXT:    s_and_b32 s69, s48, s20
2952; GCN-NOHSA-SI-NEXT:    s_and_b32 s70, s51, s20
2953; GCN-NOHSA-SI-NEXT:    s_and_b32 s20, s50, s20
2954; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s37, s37, 16
2955; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s36, s36, 16
2956; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s39, s39, 16
2957; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s38, s38, 16
2958; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s41, s41, 16
2959; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s40, s40, 16
2960; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s42, s42, 16
2961; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s45, s45, 16
2962; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s44, s44, 16
2963; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s47, s47, 16
2964; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s46, s46, 16
2965; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s49, s49, 16
2966; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s48, s48, 16
2967; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s51, s51, 16
2968; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s50, s50, 16
2969; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s43, s43, 16
2970; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s16
2971; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s17
2972; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
2973; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
2974; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s20
2975; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s50
2976; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s70
2977; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s51
2978; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v4, s69
2979; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v5, s48
2980; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v6, s68
2981; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v7, s49
2982; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v8, s67
2983; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v9, s46
2984; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v10, s66
2985; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v11, s47
2986; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v12, s65
2987; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v13, s44
2988; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v14, s64
2989; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v15, s45
2990; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v16, s63
2991; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v17, s42
2992; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v18, s62
2993; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v20, s61
2994; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v19, s43
2995; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v21, s40
2996; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v22, s60
2997; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v23, s41
2998; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
2999; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0 offset:224
3000; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[8:11], off, s[0:3], 0 offset:208
3001; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[12:15], off, s[0:3], 0 offset:192
3002; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[16:19], off, s[0:3], 0 offset:176
3003; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[20:23], off, s[0:3], 0 offset:160
3004; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(5)
3005; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s59
3006; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s38
3007; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s58
3008; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s39
3009; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:144
3010; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3011; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s57
3012; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s36
3013; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s56
3014; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s37
3015; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:128
3016; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3017; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s14
3018; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s35
3019; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s15
3020; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s34
3021; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
3022; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3023; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s12
3024; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s33
3025; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s13
3026; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s31
3027; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
3028; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3029; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
3030; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s30
3031; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s11
3032; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s29
3033; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
3034; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3035; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
3036; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s28
3037; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s9
3038; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s27
3039; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
3040; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3041; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
3042; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s26
3043; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
3044; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s25
3045; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
3046; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3047; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
3048; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s24
3049; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
3050; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s23
3051; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
3052; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3053; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s55
3054; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s22
3055; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s54
3056; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s21
3057; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
3058; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3059; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s53
3060; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s19
3061; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s52
3062; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s18
3063; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
3064; GCN-NOHSA-SI-NEXT:    s_endpgm
3065;
3066; GCN-HSA-LABEL: constant_zextload_v64i16_to_v64i32:
3067; GCN-HSA:       ; %bb.0:
3068; GCN-HSA-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x0
3069; GCN-HSA-NEXT:    s_mov_b32 s53, 0xffff
3070; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
3071; GCN-HSA-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
3072; GCN-HSA-NEXT:    s_load_dwordx16 s[36:51], s[18:19], 0x10
3073; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
3074; GCN-HSA-NEXT:    s_lshr_b32 s20, s1, 16
3075; GCN-HSA-NEXT:    s_lshr_b32 s21, s0, 16
3076; GCN-HSA-NEXT:    s_lshr_b32 s22, s3, 16
3077; GCN-HSA-NEXT:    s_lshr_b32 s23, s2, 16
3078; GCN-HSA-NEXT:    s_lshr_b32 s24, s5, 16
3079; GCN-HSA-NEXT:    s_lshr_b32 s25, s4, 16
3080; GCN-HSA-NEXT:    s_lshr_b32 s26, s7, 16
3081; GCN-HSA-NEXT:    s_lshr_b32 s27, s6, 16
3082; GCN-HSA-NEXT:    s_lshr_b32 s28, s9, 16
3083; GCN-HSA-NEXT:    s_lshr_b32 s29, s8, 16
3084; GCN-HSA-NEXT:    s_lshr_b32 s30, s11, 16
3085; GCN-HSA-NEXT:    s_lshr_b32 s31, s10, 16
3086; GCN-HSA-NEXT:    s_lshr_b32 s33, s13, 16
3087; GCN-HSA-NEXT:    s_lshr_b32 s34, s12, 16
3088; GCN-HSA-NEXT:    s_lshr_b32 s35, s15, 16
3089; GCN-HSA-NEXT:    s_lshr_b32 s52, s14, 16
3090; GCN-HSA-NEXT:    s_and_b32 s1, s1, s53
3091; GCN-HSA-NEXT:    s_and_b32 s0, s0, s53
3092; GCN-HSA-NEXT:    s_and_b32 s3, s3, s53
3093; GCN-HSA-NEXT:    s_and_b32 s2, s2, s53
3094; GCN-HSA-NEXT:    s_and_b32 s5, s5, s53
3095; GCN-HSA-NEXT:    s_and_b32 s4, s4, s53
3096; GCN-HSA-NEXT:    s_and_b32 s54, s7, s53
3097; GCN-HSA-NEXT:    s_and_b32 s55, s6, s53
3098; GCN-HSA-NEXT:    s_and_b32 s9, s9, s53
3099; GCN-HSA-NEXT:    s_and_b32 s8, s8, s53
3100; GCN-HSA-NEXT:    s_and_b32 s11, s11, s53
3101; GCN-HSA-NEXT:    s_and_b32 s10, s10, s53
3102; GCN-HSA-NEXT:    s_and_b32 s13, s13, s53
3103; GCN-HSA-NEXT:    s_and_b32 s12, s12, s53
3104; GCN-HSA-NEXT:    s_and_b32 s15, s15, s53
3105; GCN-HSA-NEXT:    s_and_b32 s14, s14, s53
3106; GCN-HSA-NEXT:    s_and_b32 s18, s37, s53
3107; GCN-HSA-NEXT:    s_and_b32 s19, s36, s53
3108; GCN-HSA-NEXT:    s_and_b32 s56, s39, s53
3109; GCN-HSA-NEXT:    s_and_b32 s57, s38, s53
3110; GCN-HSA-NEXT:    s_and_b32 s58, s41, s53
3111; GCN-HSA-NEXT:    s_and_b32 s59, s40, s53
3112; GCN-HSA-NEXT:    s_and_b32 s60, s43, s53
3113; GCN-HSA-NEXT:    s_and_b32 s61, s42, s53
3114; GCN-HSA-NEXT:    s_and_b32 s62, s45, s53
3115; GCN-HSA-NEXT:    s_and_b32 s63, s44, s53
3116; GCN-HSA-NEXT:    s_and_b32 s64, s47, s53
3117; GCN-HSA-NEXT:    s_and_b32 s65, s46, s53
3118; GCN-HSA-NEXT:    s_and_b32 s66, s49, s53
3119; GCN-HSA-NEXT:    s_and_b32 s67, s48, s53
3120; GCN-HSA-NEXT:    s_and_b32 s68, s51, s53
3121; GCN-HSA-NEXT:    s_and_b32 s53, s50, s53
3122; GCN-HSA-NEXT:    s_lshr_b32 s37, s37, 16
3123; GCN-HSA-NEXT:    s_lshr_b32 s36, s36, 16
3124; GCN-HSA-NEXT:    s_lshr_b32 s39, s39, 16
3125; GCN-HSA-NEXT:    s_lshr_b32 s38, s38, 16
3126; GCN-HSA-NEXT:    s_lshr_b32 s41, s41, 16
3127; GCN-HSA-NEXT:    s_lshr_b32 s40, s40, 16
3128; GCN-HSA-NEXT:    s_lshr_b32 s43, s43, 16
3129; GCN-HSA-NEXT:    s_lshr_b32 s42, s42, 16
3130; GCN-HSA-NEXT:    s_lshr_b32 s45, s45, 16
3131; GCN-HSA-NEXT:    s_lshr_b32 s44, s44, 16
3132; GCN-HSA-NEXT:    s_lshr_b32 s47, s47, 16
3133; GCN-HSA-NEXT:    s_lshr_b32 s46, s46, 16
3134; GCN-HSA-NEXT:    s_lshr_b32 s49, s49, 16
3135; GCN-HSA-NEXT:    s_lshr_b32 s48, s48, 16
3136; GCN-HSA-NEXT:    s_lshr_b32 s51, s51, 16
3137; GCN-HSA-NEXT:    s_lshr_b32 s50, s50, 16
3138; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0xf0
3139; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3140; GCN-HSA-NEXT:    v_mov_b32_e32 v22, s7
3141; GCN-HSA-NEXT:    v_mov_b32_e32 v21, s6
3142; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0xe0
3143; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3144; GCN-HSA-NEXT:    v_mov_b32_e32 v25, s7
3145; GCN-HSA-NEXT:    v_mov_b32_e32 v24, s6
3146; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0xd0
3147; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3148; GCN-HSA-NEXT:    v_mov_b32_e32 v27, s7
3149; GCN-HSA-NEXT:    v_mov_b32_e32 v26, s6
3150; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0xc0
3151; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3152; GCN-HSA-NEXT:    v_mov_b32_e32 v29, s7
3153; GCN-HSA-NEXT:    v_mov_b32_e32 v28, s6
3154; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0xb0
3155; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3156; GCN-HSA-NEXT:    v_mov_b32_e32 v31, s7
3157; GCN-HSA-NEXT:    v_mov_b32_e32 v30, s6
3158; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0xa0
3159; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3160; GCN-HSA-NEXT:    v_mov_b32_e32 v33, s7
3161; GCN-HSA-NEXT:    v_mov_b32_e32 v32, s6
3162; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0x90
3163; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s67
3164; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s48
3165; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s66
3166; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s49
3167; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3168; GCN-HSA-NEXT:    flat_store_dwordx4 v[24:25], v[4:7]
3169; GCN-HSA-NEXT:    v_mov_b32_e32 v25, s7
3170; GCN-HSA-NEXT:    v_mov_b32_e32 v24, s6
3171; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0x80
3172; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3173; GCN-HSA-NEXT:    v_mov_b32_e32 v35, s7
3174; GCN-HSA-NEXT:    v_mov_b32_e32 v34, s6
3175; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0x70
3176; GCN-HSA-NEXT:    v_mov_b32_e32 v16, s61
3177; GCN-HSA-NEXT:    v_mov_b32_e32 v17, s42
3178; GCN-HSA-NEXT:    v_mov_b32_e32 v18, s60
3179; GCN-HSA-NEXT:    v_mov_b32_e32 v19, s43
3180; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3181; GCN-HSA-NEXT:    flat_store_dwordx4 v[30:31], v[16:19]
3182; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s53
3183; GCN-HSA-NEXT:    v_mov_b32_e32 v17, s7
3184; GCN-HSA-NEXT:    v_mov_b32_e32 v16, s6
3185; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0x60
3186; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3187; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s50
3188; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s68
3189; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s51
3190; GCN-HSA-NEXT:    v_mov_b32_e32 v19, s7
3191; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s65
3192; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s46
3193; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s64
3194; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s47
3195; GCN-HSA-NEXT:    v_mov_b32_e32 v12, s63
3196; GCN-HSA-NEXT:    v_mov_b32_e32 v13, s44
3197; GCN-HSA-NEXT:    v_mov_b32_e32 v14, s62
3198; GCN-HSA-NEXT:    v_mov_b32_e32 v15, s45
3199; GCN-HSA-NEXT:    v_mov_b32_e32 v20, s59
3200; GCN-HSA-NEXT:    flat_store_dwordx4 v[21:22], v[0:3]
3201; GCN-HSA-NEXT:    v_mov_b32_e32 v21, s40
3202; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s57
3203; GCN-HSA-NEXT:    v_mov_b32_e32 v22, s58
3204; GCN-HSA-NEXT:    v_mov_b32_e32 v23, s41
3205; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s38
3206; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s56
3207; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s19
3208; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s39
3209; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s36
3210; GCN-HSA-NEXT:    v_mov_b32_e32 v18, s6
3211; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0x50
3212; GCN-HSA-NEXT:    flat_store_dwordx4 v[26:27], v[8:11]
3213; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s18
3214; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s14
3215; GCN-HSA-NEXT:    flat_store_dwordx4 v[28:29], v[12:15]
3216; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s37
3217; GCN-HSA-NEXT:    v_mov_b32_e32 v12, s12
3218; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s52
3219; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s15
3220; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s35
3221; GCN-HSA-NEXT:    v_mov_b32_e32 v13, s34
3222; GCN-HSA-NEXT:    flat_store_dwordx4 v[32:33], v[20:23]
3223; GCN-HSA-NEXT:    v_mov_b32_e32 v14, s13
3224; GCN-HSA-NEXT:    v_mov_b32_e32 v15, s33
3225; GCN-HSA-NEXT:    flat_store_dwordx4 v[24:25], v[0:3]
3226; GCN-HSA-NEXT:    flat_store_dwordx4 v[34:35], v[4:7]
3227; GCN-HSA-NEXT:    flat_store_dwordx4 v[16:17], v[8:11]
3228; GCN-HSA-NEXT:    flat_store_dwordx4 v[18:19], v[12:15]
3229; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3230; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s6
3231; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s10
3232; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s31
3233; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s11
3234; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s30
3235; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s7
3236; GCN-HSA-NEXT:    s_add_u32 s6, s16, 64
3237; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3238; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3239; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s6
3240; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
3241; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s29
3242; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s9
3243; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s28
3244; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s7
3245; GCN-HSA-NEXT:    s_add_u32 s6, s16, 48
3246; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3247; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
3248; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s6
3249; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s55
3250; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s27
3251; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s54
3252; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s26
3253; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s7
3254; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3255; GCN-HSA-NEXT:    s_nop 0
3256; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
3257; GCN-HSA-NEXT:    s_add_u32 s4, s16, 32
3258; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
3259; GCN-HSA-NEXT:    s_addc_u32 s5, s17, 0
3260; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s4
3261; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s25
3262; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s24
3263; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s5
3264; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3265; GCN-HSA-NEXT:    s_nop 0
3266; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s2
3267; GCN-HSA-NEXT:    s_add_u32 s2, s16, 16
3268; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s3
3269; GCN-HSA-NEXT:    s_addc_u32 s3, s17, 0
3270; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
3271; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s23
3272; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s22
3273; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
3274; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3275; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s16
3276; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
3277; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s21
3278; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
3279; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s20
3280; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s17
3281; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3282; GCN-HSA-NEXT:    s_endpgm
3283;
3284; GCN-NOHSA-VI-LABEL: constant_zextload_v64i16_to_v64i32:
3285; GCN-NOHSA-VI:       ; %bb.0:
3286; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[16:19], s[0:1], 0x24
3287; GCN-NOHSA-VI-NEXT:    s_mov_b32 s26, 0xffff
3288; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
3289; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x40
3290; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[36:51], s[18:19], 0x0
3291; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
3292; GCN-NOHSA-VI-NEXT:    s_and_b32 s53, s1, s26
3293; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s18, s37, 16
3294; GCN-NOHSA-VI-NEXT:    s_and_b32 s19, s37, s26
3295; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s20, s36, 16
3296; GCN-NOHSA-VI-NEXT:    s_and_b32 s21, s36, s26
3297; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s22, s39, 16
3298; GCN-NOHSA-VI-NEXT:    s_and_b32 s23, s39, s26
3299; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s24, s38, 16
3300; GCN-NOHSA-VI-NEXT:    s_and_b32 s25, s38, s26
3301; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s27, s41, 16
3302; GCN-NOHSA-VI-NEXT:    s_and_b32 s28, s41, s26
3303; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s29, s40, 16
3304; GCN-NOHSA-VI-NEXT:    s_and_b32 s30, s40, s26
3305; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s31, s43, 16
3306; GCN-NOHSA-VI-NEXT:    s_and_b32 s33, s43, s26
3307; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s34, s42, 16
3308; GCN-NOHSA-VI-NEXT:    s_and_b32 s35, s42, s26
3309; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s36, s45, 16
3310; GCN-NOHSA-VI-NEXT:    s_and_b32 s37, s45, s26
3311; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s38, s44, 16
3312; GCN-NOHSA-VI-NEXT:    s_and_b32 s39, s44, s26
3313; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s40, s47, 16
3314; GCN-NOHSA-VI-NEXT:    s_and_b32 s41, s47, s26
3315; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s42, s46, 16
3316; GCN-NOHSA-VI-NEXT:    s_and_b32 s43, s46, s26
3317; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s44, s49, 16
3318; GCN-NOHSA-VI-NEXT:    s_and_b32 s45, s49, s26
3319; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s46, s48, 16
3320; GCN-NOHSA-VI-NEXT:    s_and_b32 s47, s48, s26
3321; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s48, s51, 16
3322; GCN-NOHSA-VI-NEXT:    s_and_b32 s49, s51, s26
3323; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s51, s50, 16
3324; GCN-NOHSA-VI-NEXT:    s_and_b32 s50, s50, s26
3325; GCN-NOHSA-VI-NEXT:    s_and_b32 s55, s0, s26
3326; GCN-NOHSA-VI-NEXT:    s_and_b32 s57, s3, s26
3327; GCN-NOHSA-VI-NEXT:    s_and_b32 s59, s2, s26
3328; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s60, s5, 16
3329; GCN-NOHSA-VI-NEXT:    s_and_b32 s5, s5, s26
3330; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s61, s4, 16
3331; GCN-NOHSA-VI-NEXT:    s_and_b32 s4, s4, s26
3332; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s62, s7, 16
3333; GCN-NOHSA-VI-NEXT:    s_and_b32 s7, s7, s26
3334; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s63, s6, 16
3335; GCN-NOHSA-VI-NEXT:    s_and_b32 s6, s6, s26
3336; GCN-NOHSA-VI-NEXT:    s_and_b32 s64, s9, s26
3337; GCN-NOHSA-VI-NEXT:    s_and_b32 s65, s8, s26
3338; GCN-NOHSA-VI-NEXT:    s_and_b32 s66, s11, s26
3339; GCN-NOHSA-VI-NEXT:    s_and_b32 s67, s10, s26
3340; GCN-NOHSA-VI-NEXT:    s_and_b32 s68, s13, s26
3341; GCN-NOHSA-VI-NEXT:    s_and_b32 s69, s12, s26
3342; GCN-NOHSA-VI-NEXT:    s_and_b32 s70, s15, s26
3343; GCN-NOHSA-VI-NEXT:    s_and_b32 s26, s14, s26
3344; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s15, s15, 16
3345; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s14, s14, 16
3346; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s52, s1, 16
3347; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s54, s0, 16
3348; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s56, s3, 16
3349; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s58, s2, 16
3350; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s13, s13, 16
3351; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s12, s12, 16
3352; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
3353; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
3354; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s16
3355; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s17
3356; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s26
3357; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s14
3358; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s70
3359; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s15
3360; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s11, s11, 16
3361; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s10, s10, 16
3362; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
3363; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s9, s9, 16
3364; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s69
3365; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s12
3366; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s68
3367; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s13
3368; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s8, s8, 16
3369; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:224
3370; GCN-NOHSA-VI-NEXT:    s_nop 0
3371; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s67
3372; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s10
3373; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s66
3374; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s11
3375; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:208
3376; GCN-NOHSA-VI-NEXT:    s_nop 0
3377; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s65
3378; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s8
3379; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s64
3380; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s9
3381; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:192
3382; GCN-NOHSA-VI-NEXT:    s_nop 0
3383; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
3384; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s63
3385; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
3386; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s62
3387; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:176
3388; GCN-NOHSA-VI-NEXT:    s_nop 0
3389; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
3390; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s61
3391; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
3392; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s60
3393; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:160
3394; GCN-NOHSA-VI-NEXT:    s_nop 0
3395; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s59
3396; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s58
3397; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s57
3398; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s56
3399; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:144
3400; GCN-NOHSA-VI-NEXT:    s_nop 0
3401; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s55
3402; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s54
3403; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s53
3404; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s52
3405; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:128
3406; GCN-NOHSA-VI-NEXT:    s_nop 0
3407; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s50
3408; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s51
3409; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s49
3410; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s48
3411; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
3412; GCN-NOHSA-VI-NEXT:    s_nop 0
3413; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s47
3414; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s46
3415; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s45
3416; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s44
3417; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
3418; GCN-NOHSA-VI-NEXT:    s_nop 0
3419; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s43
3420; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s42
3421; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s41
3422; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s40
3423; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
3424; GCN-NOHSA-VI-NEXT:    s_nop 0
3425; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s39
3426; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s38
3427; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s37
3428; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s36
3429; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
3430; GCN-NOHSA-VI-NEXT:    s_nop 0
3431; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s35
3432; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s34
3433; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s33
3434; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s31
3435; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
3436; GCN-NOHSA-VI-NEXT:    s_nop 0
3437; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s30
3438; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s29
3439; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s28
3440; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s27
3441; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
3442; GCN-NOHSA-VI-NEXT:    s_nop 0
3443; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s25
3444; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s24
3445; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s23
3446; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s22
3447; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
3448; GCN-NOHSA-VI-NEXT:    s_nop 0
3449; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s21
3450; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s20
3451; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s19
3452; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s18
3453; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
3454; GCN-NOHSA-VI-NEXT:    s_endpgm
3455;
3456; EG-LABEL: constant_zextload_v64i16_to_v64i32:
3457; EG:       ; %bb.0:
3458; EG-NEXT:    ALU 0, @38, KC0[CB0:0-32], KC1[]
3459; EG-NEXT:    TEX 3 @22
3460; EG-NEXT:    ALU 55, @39, KC0[CB0:0-32], KC1[]
3461; EG-NEXT:    TEX 3 @30
3462; EG-NEXT:    ALU 87, @95, KC0[CB0:0-32], KC1[]
3463; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T65.XYZW, T66.X, 0
3464; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T63.XYZW, T49.X, 0
3465; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T62.XYZW, T64.X, 0
3466; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T60.XYZW, T50.X, 0
3467; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T59.XYZW, T61.X, 0
3468; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T57.XYZW, T51.X, 0
3469; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T56.XYZW, T58.X, 0
3470; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T54.XYZW, T52.X, 0
3471; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T53.XYZW, T55.X, 0
3472; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T35.XYZW, T39.X, 0
3473; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T47.XYZW, T48.X, 0
3474; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T45.XYZW, T40.X, 0
3475; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T44.XYZW, T46.X, 0
3476; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T42.XYZW, T41.X, 0
3477; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T38.XYZW, T43.X, 0
3478; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T37.XYZW, T36.X, 1
3479; EG-NEXT:    CF_END
3480; EG-NEXT:    Fetch clause starting at 22:
3481; EG-NEXT:     VTX_READ_128 T36.XYZW, T35.X, 0, #1
3482; EG-NEXT:     VTX_READ_128 T39.XYZW, T35.X, 48, #1
3483; EG-NEXT:     VTX_READ_128 T40.XYZW, T35.X, 32, #1
3484; EG-NEXT:     VTX_READ_128 T41.XYZW, T35.X, 16, #1
3485; EG-NEXT:    Fetch clause starting at 30:
3486; EG-NEXT:     VTX_READ_128 T49.XYZW, T35.X, 112, #1
3487; EG-NEXT:     VTX_READ_128 T50.XYZW, T35.X, 96, #1
3488; EG-NEXT:     VTX_READ_128 T51.XYZW, T35.X, 80, #1
3489; EG-NEXT:     VTX_READ_128 T52.XYZW, T35.X, 64, #1
3490; EG-NEXT:    ALU clause starting at 38:
3491; EG-NEXT:     MOV * T35.X, KC0[2].Z,
3492; EG-NEXT:    ALU clause starting at 39:
3493; EG-NEXT:     LSHR * T37.W, T36.Y, literal.x,
3494; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
3495; EG-NEXT:     AND_INT * T37.Z, T36.Y, literal.x,
3496; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3497; EG-NEXT:     LSHR T37.Y, T36.X, literal.x,
3498; EG-NEXT:     LSHR * T38.W, T36.W, literal.x,
3499; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
3500; EG-NEXT:     AND_INT T37.X, T36.X, literal.x,
3501; EG-NEXT:     AND_INT T38.Z, T36.W, literal.x,
3502; EG-NEXT:     LSHR * T36.X, KC0[2].Y, literal.y,
3503; EG-NEXT:    65535(9.183409e-41), 2(2.802597e-45)
3504; EG-NEXT:     LSHR T38.Y, T36.Z, literal.x,
3505; EG-NEXT:     LSHR * T42.W, T41.Y, literal.x,
3506; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
3507; EG-NEXT:     AND_INT T38.X, T36.Z, literal.x,
3508; EG-NEXT:     AND_INT T42.Z, T41.Y, literal.x,
3509; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3510; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
3511; EG-NEXT:     LSHR T43.X, PV.W, literal.x,
3512; EG-NEXT:     LSHR T42.Y, T41.X, literal.y,
3513; EG-NEXT:     LSHR T44.W, T41.W, literal.y,
3514; EG-NEXT:     AND_INT * T42.X, T41.X, literal.z,
3515; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3516; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3517; EG-NEXT:     AND_INT T44.Z, T41.W, literal.x,
3518; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3519; EG-NEXT:    65535(9.183409e-41), 32(4.484155e-44)
3520; EG-NEXT:     LSHR T41.X, PV.W, literal.x,
3521; EG-NEXT:     LSHR T44.Y, T41.Z, literal.y,
3522; EG-NEXT:     LSHR T45.W, T40.Y, literal.y,
3523; EG-NEXT:     AND_INT * T44.X, T41.Z, literal.z,
3524; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3525; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3526; EG-NEXT:     AND_INT T45.Z, T40.Y, literal.x,
3527; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3528; EG-NEXT:    65535(9.183409e-41), 48(6.726233e-44)
3529; EG-NEXT:     LSHR T46.X, PV.W, literal.x,
3530; EG-NEXT:     LSHR T45.Y, T40.X, literal.y,
3531; EG-NEXT:     LSHR T47.W, T40.W, literal.y,
3532; EG-NEXT:     AND_INT * T45.X, T40.X, literal.z,
3533; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3534; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3535; EG-NEXT:     AND_INT T47.Z, T40.W, literal.x,
3536; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3537; EG-NEXT:    65535(9.183409e-41), 64(8.968310e-44)
3538; EG-NEXT:     LSHR T40.X, PV.W, literal.x,
3539; EG-NEXT:     LSHR T47.Y, T40.Z, literal.y,
3540; EG-NEXT:     AND_INT * T47.X, T40.Z, literal.z,
3541; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3542; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3543; EG-NEXT:     ADD_INT T0.W, KC0[2].Y, literal.x,
3544; EG-NEXT:     LSHR * T35.W, T39.Y, literal.y,
3545; EG-NEXT:    80(1.121039e-43), 16(2.242078e-44)
3546; EG-NEXT:     LSHR T48.X, PV.W, literal.x,
3547; EG-NEXT:     AND_INT * T35.Z, T39.Y, literal.y,
3548; EG-NEXT:    2(2.802597e-45), 65535(9.183409e-41)
3549; EG-NEXT:    ALU clause starting at 95:
3550; EG-NEXT:     LSHR T35.Y, T39.X, literal.x,
3551; EG-NEXT:     LSHR * T53.W, T39.W, literal.x,
3552; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
3553; EG-NEXT:     AND_INT T35.X, T39.X, literal.x,
3554; EG-NEXT:     AND_INT T53.Z, T39.W, literal.x,
3555; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3556; EG-NEXT:    65535(9.183409e-41), 96(1.345247e-43)
3557; EG-NEXT:     LSHR T39.X, PV.W, literal.x,
3558; EG-NEXT:     LSHR T53.Y, T39.Z, literal.y,
3559; EG-NEXT:     LSHR T54.W, T52.Y, literal.y,
3560; EG-NEXT:     AND_INT * T53.X, T39.Z, literal.z,
3561; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3562; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3563; EG-NEXT:     AND_INT T54.Z, T52.Y, literal.x,
3564; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3565; EG-NEXT:    65535(9.183409e-41), 112(1.569454e-43)
3566; EG-NEXT:     LSHR T55.X, PV.W, literal.x,
3567; EG-NEXT:     LSHR T54.Y, T52.X, literal.y,
3568; EG-NEXT:     LSHR T56.W, T52.W, literal.y,
3569; EG-NEXT:     AND_INT * T54.X, T52.X, literal.z,
3570; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3571; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3572; EG-NEXT:     AND_INT T56.Z, T52.W, literal.x,
3573; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3574; EG-NEXT:    65535(9.183409e-41), 128(1.793662e-43)
3575; EG-NEXT:     LSHR T52.X, PV.W, literal.x,
3576; EG-NEXT:     LSHR T56.Y, T52.Z, literal.y,
3577; EG-NEXT:     LSHR T57.W, T51.Y, literal.y,
3578; EG-NEXT:     AND_INT * T56.X, T52.Z, literal.z,
3579; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3580; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3581; EG-NEXT:     AND_INT T57.Z, T51.Y, literal.x,
3582; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3583; EG-NEXT:    65535(9.183409e-41), 144(2.017870e-43)
3584; EG-NEXT:     LSHR T58.X, PV.W, literal.x,
3585; EG-NEXT:     LSHR T57.Y, T51.X, literal.y,
3586; EG-NEXT:     LSHR T59.W, T51.W, literal.y,
3587; EG-NEXT:     AND_INT * T57.X, T51.X, literal.z,
3588; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3589; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3590; EG-NEXT:     AND_INT T59.Z, T51.W, literal.x,
3591; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3592; EG-NEXT:    65535(9.183409e-41), 160(2.242078e-43)
3593; EG-NEXT:     LSHR T51.X, PV.W, literal.x,
3594; EG-NEXT:     LSHR T59.Y, T51.Z, literal.y,
3595; EG-NEXT:     LSHR T60.W, T50.Y, literal.y,
3596; EG-NEXT:     AND_INT * T59.X, T51.Z, literal.z,
3597; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3598; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3599; EG-NEXT:     AND_INT T60.Z, T50.Y, literal.x,
3600; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3601; EG-NEXT:    65535(9.183409e-41), 176(2.466285e-43)
3602; EG-NEXT:     LSHR T61.X, PV.W, literal.x,
3603; EG-NEXT:     LSHR T60.Y, T50.X, literal.y,
3604; EG-NEXT:     LSHR T62.W, T50.W, literal.y,
3605; EG-NEXT:     AND_INT * T60.X, T50.X, literal.z,
3606; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3607; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3608; EG-NEXT:     AND_INT T62.Z, T50.W, literal.x,
3609; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3610; EG-NEXT:    65535(9.183409e-41), 192(2.690493e-43)
3611; EG-NEXT:     LSHR T50.X, PV.W, literal.x,
3612; EG-NEXT:     LSHR T62.Y, T50.Z, literal.y,
3613; EG-NEXT:     LSHR T63.W, T49.Y, literal.y,
3614; EG-NEXT:     AND_INT * T62.X, T50.Z, literal.z,
3615; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3616; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3617; EG-NEXT:     AND_INT T63.Z, T49.Y, literal.x,
3618; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3619; EG-NEXT:    65535(9.183409e-41), 208(2.914701e-43)
3620; EG-NEXT:     LSHR T64.X, PV.W, literal.x,
3621; EG-NEXT:     LSHR T63.Y, T49.X, literal.y,
3622; EG-NEXT:     LSHR T65.W, T49.W, literal.y,
3623; EG-NEXT:     AND_INT * T63.X, T49.X, literal.z,
3624; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3625; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3626; EG-NEXT:     AND_INT T65.Z, T49.W, literal.x,
3627; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
3628; EG-NEXT:    65535(9.183409e-41), 224(3.138909e-43)
3629; EG-NEXT:     LSHR T49.X, PV.W, literal.x,
3630; EG-NEXT:     LSHR T65.Y, T49.Z, literal.y,
3631; EG-NEXT:     AND_INT * T65.X, T49.Z, literal.z,
3632; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
3633; EG-NEXT:    65535(9.183409e-41), 0(0.000000e+00)
3634; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
3635; EG-NEXT:    240(3.363116e-43), 0(0.000000e+00)
3636; EG-NEXT:     LSHR * T66.X, PV.W, literal.x,
3637; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
3638  %load = load <64 x i16>, <64 x i16> addrspace(4)* %in
3639  %ext = zext <64 x i16> %load to <64 x i32>
3640  store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
3641  ret void
3642}
3643
3644define amdgpu_kernel void @constant_sextload_v64i16_to_v64i32(<64 x i32> addrspace(1)* %out, <64 x i16> addrspace(4)* %in) #0 {
3645; GCN-NOHSA-SI-LABEL: constant_sextload_v64i16_to_v64i32:
3646; GCN-NOHSA-SI:       ; %bb.0:
3647; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[36:39], s[0:1], 0x9
3648; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
3649; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[0:15], s[38:39], 0x0
3650; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[16:31], s[38:39], 0x10
3651; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
3652; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s33, s1, 16
3653; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s34, s0, 16
3654; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s35, s1
3655; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s38, s0
3656; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s39, s3, 16
3657; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s40, s2, 16
3658; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s41, s3
3659; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s42, s2
3660; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s43, s5, 16
3661; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s44, s4, 16
3662; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s5, s5
3663; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s4, s4
3664; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s45, s7, 16
3665; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s46, s6, 16
3666; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s7, s7
3667; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s6, s6
3668; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s47, s9, 16
3669; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s48, s8, 16
3670; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s9, s9
3671; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s8, s8
3672; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s49, s11, 16
3673; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s50, s10, 16
3674; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s11, s11
3675; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s10, s10
3676; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s51, s13, 16
3677; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s52, s12, 16
3678; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s13, s13
3679; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s12, s12
3680; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s53, s15, 16
3681; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s54, s14, 16
3682; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s15, s15
3683; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s14, s14
3684; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s55, s17, 16
3685; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s56, s16, 16
3686; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s17, s17
3687; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s16, s16
3688; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s57, s19, 16
3689; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s58, s18, 16
3690; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s19, s19
3691; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s18, s18
3692; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s59, s21, 16
3693; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s60, s20, 16
3694; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s21, s21
3695; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s20, s20
3696; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s61, s22, 16
3697; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s62, s23
3698; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s22, s22
3699; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s63, s25, 16
3700; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s64, s24, 16
3701; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s25, s25
3702; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s24, s24
3703; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s65, s27, 16
3704; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s66, s26, 16
3705; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s27, s27
3706; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s26, s26
3707; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s67, s29, 16
3708; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s68, s28, 16
3709; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s29, s29
3710; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s28, s28
3711; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s69, s31, 16
3712; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s70, s30, 16
3713; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s31, s31
3714; GCN-NOHSA-SI-NEXT:    s_sext_i32_i16 s30, s30
3715; GCN-NOHSA-SI-NEXT:    s_ashr_i32 s23, s23, 16
3716; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s36
3717; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s37
3718; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
3719; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
3720; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s30
3721; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s70
3722; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s31
3723; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s69
3724; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v4, s28
3725; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v5, s68
3726; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v6, s29
3727; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v7, s67
3728; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v8, s26
3729; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v9, s66
3730; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v10, s27
3731; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v11, s65
3732; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v12, s24
3733; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v13, s64
3734; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v14, s25
3735; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v15, s63
3736; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v16, s22
3737; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v17, s61
3738; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v18, s62
3739; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v20, s20
3740; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v19, s23
3741; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v21, s60
3742; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v22, s21
3743; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v23, s59
3744; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
3745; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0 offset:224
3746; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[8:11], off, s[0:3], 0 offset:208
3747; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[12:15], off, s[0:3], 0 offset:192
3748; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[16:19], off, s[0:3], 0 offset:176
3749; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[20:23], off, s[0:3], 0 offset:160
3750; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(5)
3751; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s18
3752; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s58
3753; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s19
3754; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s57
3755; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:144
3756; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3757; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s16
3758; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s56
3759; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s17
3760; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s55
3761; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:128
3762; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3763; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s14
3764; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s54
3765; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s15
3766; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s53
3767; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
3768; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3769; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s12
3770; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s52
3771; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s13
3772; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s51
3773; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
3774; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3775; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
3776; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s50
3777; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s11
3778; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s49
3779; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
3780; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3781; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
3782; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s48
3783; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s9
3784; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s47
3785; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
3786; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3787; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
3788; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s46
3789; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
3790; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s45
3791; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
3792; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3793; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
3794; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s44
3795; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
3796; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s43
3797; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
3798; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3799; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s42
3800; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s40
3801; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s41
3802; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s39
3803; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
3804; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
3805; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s38
3806; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s34
3807; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s35
3808; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s33
3809; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
3810; GCN-NOHSA-SI-NEXT:    s_endpgm
3811;
3812; GCN-HSA-LABEL: constant_sextload_v64i16_to_v64i32:
3813; GCN-HSA:       ; %bb.0:
3814; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
3815; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
3816; GCN-HSA-NEXT:    s_load_dwordx16 s[16:31], s[2:3], 0x0
3817; GCN-HSA-NEXT:    s_load_dwordx16 s[36:51], s[2:3], 0x10
3818; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
3819; GCN-HSA-NEXT:    s_ashr_i32 s4, s17, 16
3820; GCN-HSA-NEXT:    s_ashr_i32 s5, s16, 16
3821; GCN-HSA-NEXT:    s_sext_i32_i16 s6, s17
3822; GCN-HSA-NEXT:    s_sext_i32_i16 s7, s16
3823; GCN-HSA-NEXT:    s_ashr_i32 s8, s19, 16
3824; GCN-HSA-NEXT:    s_ashr_i32 s9, s18, 16
3825; GCN-HSA-NEXT:    s_sext_i32_i16 s10, s19
3826; GCN-HSA-NEXT:    s_sext_i32_i16 s11, s18
3827; GCN-HSA-NEXT:    s_ashr_i32 s12, s21, 16
3828; GCN-HSA-NEXT:    s_ashr_i32 s13, s20, 16
3829; GCN-HSA-NEXT:    s_sext_i32_i16 s14, s21
3830; GCN-HSA-NEXT:    s_sext_i32_i16 s15, s20
3831; GCN-HSA-NEXT:    s_ashr_i32 s16, s23, 16
3832; GCN-HSA-NEXT:    s_ashr_i32 s17, s22, 16
3833; GCN-HSA-NEXT:    s_sext_i32_i16 s18, s23
3834; GCN-HSA-NEXT:    s_sext_i32_i16 s19, s22
3835; GCN-HSA-NEXT:    s_ashr_i32 s20, s25, 16
3836; GCN-HSA-NEXT:    s_ashr_i32 s21, s24, 16
3837; GCN-HSA-NEXT:    s_sext_i32_i16 s22, s25
3838; GCN-HSA-NEXT:    s_sext_i32_i16 s23, s24
3839; GCN-HSA-NEXT:    s_ashr_i32 s24, s27, 16
3840; GCN-HSA-NEXT:    s_ashr_i32 s25, s26, 16
3841; GCN-HSA-NEXT:    s_ashr_i32 s33, s29, 16
3842; GCN-HSA-NEXT:    s_ashr_i32 s34, s28, 16
3843; GCN-HSA-NEXT:    s_ashr_i32 s35, s31, 16
3844; GCN-HSA-NEXT:    s_ashr_i32 s52, s30, 16
3845; GCN-HSA-NEXT:    s_ashr_i32 s53, s37, 16
3846; GCN-HSA-NEXT:    s_ashr_i32 s54, s36, 16
3847; GCN-HSA-NEXT:    s_ashr_i32 s55, s39, 16
3848; GCN-HSA-NEXT:    s_ashr_i32 s56, s38, 16
3849; GCN-HSA-NEXT:    s_ashr_i32 s57, s41, 16
3850; GCN-HSA-NEXT:    s_ashr_i32 s58, s40, 16
3851; GCN-HSA-NEXT:    s_ashr_i32 s59, s43, 16
3852; GCN-HSA-NEXT:    s_ashr_i32 s60, s42, 16
3853; GCN-HSA-NEXT:    s_ashr_i32 s61, s45, 16
3854; GCN-HSA-NEXT:    s_ashr_i32 s62, s44, 16
3855; GCN-HSA-NEXT:    s_ashr_i32 s63, s47, 16
3856; GCN-HSA-NEXT:    s_ashr_i32 s64, s46, 16
3857; GCN-HSA-NEXT:    s_ashr_i32 s65, s49, 16
3858; GCN-HSA-NEXT:    s_ashr_i32 s66, s48, 16
3859; GCN-HSA-NEXT:    s_ashr_i32 s67, s51, 16
3860; GCN-HSA-NEXT:    s_ashr_i32 s68, s50, 16
3861; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xf0
3862; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3863; GCN-HSA-NEXT:    v_mov_b32_e32 v22, s3
3864; GCN-HSA-NEXT:    v_mov_b32_e32 v21, s2
3865; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xe0
3866; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3867; GCN-HSA-NEXT:    v_mov_b32_e32 v25, s3
3868; GCN-HSA-NEXT:    v_mov_b32_e32 v24, s2
3869; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xd0
3870; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3871; GCN-HSA-NEXT:    v_mov_b32_e32 v27, s3
3872; GCN-HSA-NEXT:    v_mov_b32_e32 v26, s2
3873; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xc0
3874; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3875; GCN-HSA-NEXT:    v_mov_b32_e32 v29, s3
3876; GCN-HSA-NEXT:    v_mov_b32_e32 v28, s2
3877; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xb0
3878; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3879; GCN-HSA-NEXT:    v_mov_b32_e32 v31, s3
3880; GCN-HSA-NEXT:    v_mov_b32_e32 v30, s2
3881; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xa0
3882; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3883; GCN-HSA-NEXT:    v_mov_b32_e32 v33, s3
3884; GCN-HSA-NEXT:    s_sext_i32_i16 s49, s49
3885; GCN-HSA-NEXT:    s_sext_i32_i16 s48, s48
3886; GCN-HSA-NEXT:    v_mov_b32_e32 v32, s2
3887; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x90
3888; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s48
3889; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s66
3890; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s49
3891; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s65
3892; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3893; GCN-HSA-NEXT:    flat_store_dwordx4 v[24:25], v[4:7]
3894; GCN-HSA-NEXT:    v_mov_b32_e32 v25, s3
3895; GCN-HSA-NEXT:    v_mov_b32_e32 v24, s2
3896; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x80
3897; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3898; GCN-HSA-NEXT:    v_mov_b32_e32 v35, s3
3899; GCN-HSA-NEXT:    s_sext_i32_i16 s43, s43
3900; GCN-HSA-NEXT:    s_sext_i32_i16 s42, s42
3901; GCN-HSA-NEXT:    v_mov_b32_e32 v34, s2
3902; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x70
3903; GCN-HSA-NEXT:    v_mov_b32_e32 v16, s42
3904; GCN-HSA-NEXT:    v_mov_b32_e32 v17, s60
3905; GCN-HSA-NEXT:    v_mov_b32_e32 v18, s43
3906; GCN-HSA-NEXT:    v_mov_b32_e32 v19, s59
3907; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3908; GCN-HSA-NEXT:    flat_store_dwordx4 v[30:31], v[16:19]
3909; GCN-HSA-NEXT:    s_sext_i32_i16 s51, s51
3910; GCN-HSA-NEXT:    v_mov_b32_e32 v17, s3
3911; GCN-HSA-NEXT:    v_mov_b32_e32 v16, s2
3912; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x60
3913; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3914; GCN-HSA-NEXT:    s_sext_i32_i16 s50, s50
3915; GCN-HSA-NEXT:    v_mov_b32_e32 v19, s3
3916; GCN-HSA-NEXT:    s_sext_i32_i16 s36, s36
3917; GCN-HSA-NEXT:    s_sext_i32_i16 s39, s39
3918; GCN-HSA-NEXT:    s_sext_i32_i16 s38, s38
3919; GCN-HSA-NEXT:    s_sext_i32_i16 s41, s41
3920; GCN-HSA-NEXT:    s_sext_i32_i16 s40, s40
3921; GCN-HSA-NEXT:    s_sext_i32_i16 s45, s45
3922; GCN-HSA-NEXT:    s_sext_i32_i16 s44, s44
3923; GCN-HSA-NEXT:    s_sext_i32_i16 s47, s47
3924; GCN-HSA-NEXT:    s_sext_i32_i16 s46, s46
3925; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s50
3926; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s68
3927; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s51
3928; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s67
3929; GCN-HSA-NEXT:    v_mov_b32_e32 v18, s2
3930; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x50
3931; GCN-HSA-NEXT:    s_sext_i32_i16 s29, s29
3932; GCN-HSA-NEXT:    s_sext_i32_i16 s28, s28
3933; GCN-HSA-NEXT:    s_sext_i32_i16 s31, s31
3934; GCN-HSA-NEXT:    s_sext_i32_i16 s30, s30
3935; GCN-HSA-NEXT:    s_sext_i32_i16 s37, s37
3936; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s46
3937; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s64
3938; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s47
3939; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s63
3940; GCN-HSA-NEXT:    v_mov_b32_e32 v12, s44
3941; GCN-HSA-NEXT:    v_mov_b32_e32 v13, s62
3942; GCN-HSA-NEXT:    v_mov_b32_e32 v14, s45
3943; GCN-HSA-NEXT:    v_mov_b32_e32 v15, s61
3944; GCN-HSA-NEXT:    v_mov_b32_e32 v20, s40
3945; GCN-HSA-NEXT:    flat_store_dwordx4 v[21:22], v[0:3]
3946; GCN-HSA-NEXT:    v_mov_b32_e32 v21, s58
3947; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s38
3948; GCN-HSA-NEXT:    v_mov_b32_e32 v22, s41
3949; GCN-HSA-NEXT:    v_mov_b32_e32 v23, s57
3950; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s56
3951; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s39
3952; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s36
3953; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s55
3954; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s54
3955; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3956; GCN-HSA-NEXT:    flat_store_dwordx4 v[26:27], v[8:11]
3957; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s37
3958; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s30
3959; GCN-HSA-NEXT:    flat_store_dwordx4 v[28:29], v[12:15]
3960; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s53
3961; GCN-HSA-NEXT:    v_mov_b32_e32 v12, s28
3962; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s52
3963; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s31
3964; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s35
3965; GCN-HSA-NEXT:    v_mov_b32_e32 v13, s34
3966; GCN-HSA-NEXT:    flat_store_dwordx4 v[32:33], v[20:23]
3967; GCN-HSA-NEXT:    v_mov_b32_e32 v14, s29
3968; GCN-HSA-NEXT:    v_mov_b32_e32 v15, s33
3969; GCN-HSA-NEXT:    flat_store_dwordx4 v[24:25], v[0:3]
3970; GCN-HSA-NEXT:    flat_store_dwordx4 v[34:35], v[4:7]
3971; GCN-HSA-NEXT:    flat_store_dwordx4 v[16:17], v[8:11]
3972; GCN-HSA-NEXT:    flat_store_dwordx4 v[18:19], v[12:15]
3973; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
3974; GCN-HSA-NEXT:    s_sext_i32_i16 s27, s27
3975; GCN-HSA-NEXT:    s_sext_i32_i16 s26, s26
3976; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
3977; GCN-HSA-NEXT:    s_add_u32 s2, s0, 64
3978; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s26
3979; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s25
3980; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s27
3981; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s24
3982; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3983; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3984; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
3985; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
3986; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
3987; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s23
3988; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s21
3989; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s22
3990; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s20
3991; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
3992; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
3993; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
3994; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
3995; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
3996; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s19
3997; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s17
3998; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s18
3999; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s16
4000; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
4001; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4002; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
4003; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
4004; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
4005; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s15
4006; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s13
4007; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s14
4008; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s12
4009; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
4010; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4011; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
4012; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s11
4013; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s9
4014; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s10
4015; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s8
4016; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
4017; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4018; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
4019; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s7
4020; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s5
4021; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s6
4022; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s4
4023; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
4024; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4025; GCN-HSA-NEXT:    s_endpgm
4026;
4027; GCN-NOHSA-VI-LABEL: constant_sextload_v64i16_to_v64i32:
4028; GCN-NOHSA-VI:       ; %bb.0:
4029; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[36:39], s[0:1], 0x24
4030; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4031; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[0:15], s[38:39], 0x40
4032; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[16:31], s[38:39], 0x0
4033; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4034; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s69, s15, 16
4035; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s70, s14, 16
4036; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s15, s15
4037; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s14, s14
4038; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s51, s1, 16
4039; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s52, s0, 16
4040; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s53, s1
4041; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s54, s0
4042; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s55, s3, 16
4043; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s56, s2, 16
4044; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s57, s3
4045; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s58, s2
4046; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s67, s13, 16
4047; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s68, s12, 16
4048; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s13, s13
4049; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s12, s12
4050; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4051; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4052; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s36
4053; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s37
4054; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s14
4055; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s70
4056; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s15
4057; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s69
4058; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s65, s11, 16
4059; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s66, s10, 16
4060; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s11, s11
4061; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s10, s10
4062; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
4063; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s63, s9, 16
4064; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s12
4065; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s68
4066; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s13
4067; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s67
4068; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s64, s8, 16
4069; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s9, s9
4070; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s8, s8
4071; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:224
4072; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s61, s7, 16
4073; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s10
4074; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s66
4075; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s11
4076; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s65
4077; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s62, s6, 16
4078; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s7, s7
4079; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s6, s6
4080; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:208
4081; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s59, s5, 16
4082; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
4083; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s64
4084; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s9
4085; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s63
4086; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s60, s4, 16
4087; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s5, s5
4088; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s4, s4
4089; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:192
4090; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s49, s31, 16
4091; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
4092; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s62
4093; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
4094; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s61
4095; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:176
4096; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s50, s30, 16
4097; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s4
4098; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s60
4099; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
4100; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s59
4101; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:160
4102; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s31, s31
4103; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s58
4104; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s56
4105; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s57
4106; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s55
4107; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s30, s30
4108; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:144
4109; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s47, s29, 16
4110; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s54
4111; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s52
4112; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s53
4113; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s51
4114; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s48, s28, 16
4115; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s29, s29
4116; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s28, s28
4117; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:128
4118; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s45, s27, 16
4119; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s30
4120; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s50
4121; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s31
4122; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s49
4123; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s46, s26, 16
4124; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s27, s27
4125; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s26, s26
4126; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
4127; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s43, s25, 16
4128; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s28
4129; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s48
4130; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s29
4131; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s47
4132; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s44, s24, 16
4133; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s25, s25
4134; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s24, s24
4135; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
4136; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s41, s23, 16
4137; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s26
4138; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s46
4139; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s27
4140; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s45
4141; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s42, s22, 16
4142; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s23, s23
4143; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s22, s22
4144; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
4145; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s39, s21, 16
4146; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s24
4147; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s44
4148; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s25
4149; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s43
4150; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s40, s20, 16
4151; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s21, s21
4152; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s20, s20
4153; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
4154; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s35, s19, 16
4155; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s22
4156; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s42
4157; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s23
4158; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s41
4159; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s38, s18, 16
4160; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s19, s19
4161; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s18, s18
4162; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
4163; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s33, s17, 16
4164; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s20
4165; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s40
4166; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s21
4167; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s39
4168; GCN-NOHSA-VI-NEXT:    s_ashr_i32 s34, s16, 16
4169; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s17, s17
4170; GCN-NOHSA-VI-NEXT:    s_sext_i32_i16 s16, s16
4171; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
4172; GCN-NOHSA-VI-NEXT:    s_nop 0
4173; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s18
4174; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s38
4175; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s19
4176; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s35
4177; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
4178; GCN-NOHSA-VI-NEXT:    s_nop 0
4179; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s16
4180; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s34
4181; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s17
4182; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s33
4183; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
4184; GCN-NOHSA-VI-NEXT:    s_endpgm
4185;
4186; EG-LABEL: constant_sextload_v64i16_to_v64i32:
4187; EG:       ; %bb.0:
4188; EG-NEXT:    ALU 17, @38, KC0[CB0:0-32], KC1[]
4189; EG-NEXT:    TEX 7 @22
4190; EG-NEXT:    ALU 75, @56, KC0[CB0:0-32], KC1[]
4191; EG-NEXT:    ALU 71, @132, KC0[CB0:0-32], KC1[]
4192; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T66.XYZW, T48.X, 0
4193; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T47.XYZW, T41.X, 0
4194; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T65.XYZW, T56.X, 0
4195; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T46.XYZW, T55.X, 0
4196; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T64.XYZW, T54.X, 0
4197; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T45.XYZW, T53.X, 0
4198; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T63.XYZW, T52.X, 0
4199; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T43.XYZW, T51.X, 0
4200; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T62.XYZW, T50.X, 0
4201; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T42.XYZW, T49.X, 0
4202; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T61.XYZW, T40.X, 0
4203; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T44.XYZW, T39.X, 0
4204; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T60.XYZW, T38.X, 0
4205; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T59.XYZW, T37.X, 0
4206; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T58.XYZW, T36.X, 0
4207; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T57.XYZW, T35.X, 1
4208; EG-NEXT:    CF_END
4209; EG-NEXT:    PAD
4210; EG-NEXT:    Fetch clause starting at 22:
4211; EG-NEXT:     VTX_READ_128 T42.XYZW, T41.X, 16, #1
4212; EG-NEXT:     VTX_READ_128 T43.XYZW, T41.X, 32, #1
4213; EG-NEXT:     VTX_READ_128 T44.XYZW, T41.X, 0, #1
4214; EG-NEXT:     VTX_READ_128 T45.XYZW, T41.X, 48, #1
4215; EG-NEXT:     VTX_READ_128 T46.XYZW, T41.X, 64, #1
4216; EG-NEXT:     VTX_READ_128 T47.XYZW, T41.X, 80, #1
4217; EG-NEXT:     VTX_READ_128 T48.XYZW, T41.X, 96, #1
4218; EG-NEXT:     VTX_READ_128 T41.XYZW, T41.X, 112, #1
4219; EG-NEXT:    ALU clause starting at 38:
4220; EG-NEXT:     LSHR T35.X, KC0[2].Y, literal.x,
4221; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4222; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4223; EG-NEXT:     LSHR T36.X, PV.W, literal.x,
4224; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4225; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
4226; EG-NEXT:     LSHR T37.X, PV.W, literal.x,
4227; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4228; EG-NEXT:    2(2.802597e-45), 48(6.726233e-44)
4229; EG-NEXT:     LSHR T38.X, PV.W, literal.x,
4230; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4231; EG-NEXT:    2(2.802597e-45), 64(8.968310e-44)
4232; EG-NEXT:     LSHR T39.X, PV.W, literal.x,
4233; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4234; EG-NEXT:    2(2.802597e-45), 80(1.121039e-43)
4235; EG-NEXT:     LSHR T40.X, PV.W, literal.x,
4236; EG-NEXT:     MOV * T41.X, KC0[2].Z,
4237; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
4238; EG-NEXT:    ALU clause starting at 56:
4239; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
4240; EG-NEXT:    96(1.345247e-43), 0(0.000000e+00)
4241; EG-NEXT:     LSHR T49.X, PV.W, literal.x,
4242; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4243; EG-NEXT:    2(2.802597e-45), 112(1.569454e-43)
4244; EG-NEXT:     LSHR T50.X, PV.W, literal.x,
4245; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4246; EG-NEXT:    2(2.802597e-45), 128(1.793662e-43)
4247; EG-NEXT:     LSHR T51.X, PV.W, literal.x,
4248; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4249; EG-NEXT:    2(2.802597e-45), 144(2.017870e-43)
4250; EG-NEXT:     LSHR T52.X, PV.W, literal.x,
4251; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4252; EG-NEXT:    2(2.802597e-45), 160(2.242078e-43)
4253; EG-NEXT:     LSHR T53.X, PV.W, literal.x,
4254; EG-NEXT:     LSHR T0.Y, T41.W, literal.y,
4255; EG-NEXT:     LSHR T0.Z, T41.Y, literal.y,
4256; EG-NEXT:     LSHR T0.W, T48.W, literal.y, BS:VEC_120/SCL_212
4257; EG-NEXT:     ADD_INT * T1.W, KC0[2].Y, literal.z,
4258; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4259; EG-NEXT:    176(2.466285e-43), 0(0.000000e+00)
4260; EG-NEXT:     LSHR T54.X, PS, literal.x,
4261; EG-NEXT:     LSHR T1.Y, T48.Y, literal.y,
4262; EG-NEXT:     LSHR T1.Z, T47.W, literal.y,
4263; EG-NEXT:     LSHR T1.W, T47.Y, literal.y, BS:VEC_120/SCL_212
4264; EG-NEXT:     ADD_INT * T2.W, KC0[2].Y, literal.z,
4265; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4266; EG-NEXT:    192(2.690493e-43), 0(0.000000e+00)
4267; EG-NEXT:     LSHR T55.X, PS, literal.x,
4268; EG-NEXT:     LSHR T2.Y, T46.W, literal.y,
4269; EG-NEXT:     LSHR T2.Z, T46.Y, literal.y,
4270; EG-NEXT:     LSHR T2.W, T45.W, literal.y, BS:VEC_120/SCL_212
4271; EG-NEXT:     ADD_INT * T3.W, KC0[2].Y, literal.z,
4272; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4273; EG-NEXT:    208(2.914701e-43), 0(0.000000e+00)
4274; EG-NEXT:     LSHR T56.X, PS, literal.x,
4275; EG-NEXT:     LSHR T3.Y, T45.Y, literal.y,
4276; EG-NEXT:     BFE_INT T57.Z, T44.Y, 0.0, literal.y, BS:VEC_120/SCL_212
4277; EG-NEXT:     LSHR T3.W, T43.W, literal.y,
4278; EG-NEXT:     LSHR * T4.W, T43.Y, literal.y,
4279; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4280; EG-NEXT:     BFE_INT T57.X, T44.X, 0.0, literal.x,
4281; EG-NEXT:     LSHR T4.Y, T42.W, literal.x,
4282; EG-NEXT:     BFE_INT T58.Z, T44.W, 0.0, literal.x, BS:VEC_120/SCL_212
4283; EG-NEXT:     LSHR T5.W, T42.Y, literal.x,
4284; EG-NEXT:     LSHR * T6.W, T44.Y, literal.x,
4285; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4286; EG-NEXT:     BFE_INT T58.X, T44.Z, 0.0, literal.x,
4287; EG-NEXT:     LSHR T5.Y, T44.W, literal.x,
4288; EG-NEXT:     BFE_INT T59.Z, T42.Y, 0.0, literal.x,
4289; EG-NEXT:     BFE_INT T57.W, PS, 0.0, literal.x,
4290; EG-NEXT:     LSHR * T6.W, T44.X, literal.x,
4291; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4292; EG-NEXT:     BFE_INT T59.X, T42.X, 0.0, literal.x,
4293; EG-NEXT:     BFE_INT T57.Y, PS, 0.0, literal.x,
4294; EG-NEXT:     BFE_INT T60.Z, T42.W, 0.0, literal.x,
4295; EG-NEXT:     BFE_INT T58.W, PV.Y, 0.0, literal.x,
4296; EG-NEXT:     LSHR * T6.W, T44.Z, literal.x,
4297; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4298; EG-NEXT:     BFE_INT T60.X, T42.Z, 0.0, literal.x,
4299; EG-NEXT:     BFE_INT T58.Y, PS, 0.0, literal.x,
4300; EG-NEXT:     BFE_INT T44.Z, T43.Y, 0.0, literal.x,
4301; EG-NEXT:     BFE_INT T59.W, T5.W, 0.0, literal.x,
4302; EG-NEXT:     LSHR * T5.W, T42.X, literal.x,
4303; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4304; EG-NEXT:     BFE_INT T44.X, T43.X, 0.0, literal.x,
4305; EG-NEXT:     BFE_INT T59.Y, PS, 0.0, literal.x,
4306; EG-NEXT:     BFE_INT T61.Z, T43.W, 0.0, literal.x,
4307; EG-NEXT:     BFE_INT T60.W, T4.Y, 0.0, literal.x,
4308; EG-NEXT:     LSHR * T5.W, T42.Z, literal.x,
4309; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4310; EG-NEXT:     BFE_INT T61.X, T43.Z, 0.0, literal.x,
4311; EG-NEXT:     BFE_INT T60.Y, PS, 0.0, literal.x,
4312; EG-NEXT:     BFE_INT T42.Z, T45.Y, 0.0, literal.x,
4313; EG-NEXT:     BFE_INT * T44.W, T4.W, 0.0, literal.x,
4314; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4315; EG-NEXT:    ALU clause starting at 132:
4316; EG-NEXT:     LSHR * T4.W, T43.X, literal.x,
4317; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4318; EG-NEXT:     BFE_INT T42.X, T45.X, 0.0, literal.x,
4319; EG-NEXT:     BFE_INT T44.Y, PV.W, 0.0, literal.x,
4320; EG-NEXT:     BFE_INT T62.Z, T45.W, 0.0, literal.x,
4321; EG-NEXT:     BFE_INT T61.W, T3.W, 0.0, literal.x, BS:VEC_120/SCL_212
4322; EG-NEXT:     LSHR * T3.W, T43.Z, literal.x,
4323; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4324; EG-NEXT:     BFE_INT T62.X, T45.Z, 0.0, literal.x,
4325; EG-NEXT:     BFE_INT T61.Y, PS, 0.0, literal.x,
4326; EG-NEXT:     BFE_INT T43.Z, T46.Y, 0.0, literal.x,
4327; EG-NEXT:     BFE_INT T42.W, T3.Y, 0.0, literal.x, BS:VEC_120/SCL_212
4328; EG-NEXT:     LSHR * T3.W, T45.X, literal.x,
4329; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4330; EG-NEXT:     BFE_INT T43.X, T46.X, 0.0, literal.x,
4331; EG-NEXT:     BFE_INT T42.Y, PS, 0.0, literal.x,
4332; EG-NEXT:     BFE_INT T63.Z, T46.W, 0.0, literal.x,
4333; EG-NEXT:     BFE_INT T62.W, T2.W, 0.0, literal.x, BS:VEC_120/SCL_212
4334; EG-NEXT:     LSHR * T2.W, T45.Z, literal.x,
4335; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4336; EG-NEXT:     BFE_INT T63.X, T46.Z, 0.0, literal.x,
4337; EG-NEXT:     BFE_INT T62.Y, PS, 0.0, literal.x,
4338; EG-NEXT:     BFE_INT T45.Z, T47.Y, 0.0, literal.x,
4339; EG-NEXT:     BFE_INT T43.W, T2.Z, 0.0, literal.x, BS:VEC_120/SCL_212
4340; EG-NEXT:     LSHR * T2.W, T46.X, literal.x,
4341; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4342; EG-NEXT:     BFE_INT T45.X, T47.X, 0.0, literal.x,
4343; EG-NEXT:     BFE_INT T43.Y, PS, 0.0, literal.x,
4344; EG-NEXT:     BFE_INT T64.Z, T47.W, 0.0, literal.x,
4345; EG-NEXT:     BFE_INT T63.W, T2.Y, 0.0, literal.x,
4346; EG-NEXT:     LSHR * T2.W, T46.Z, literal.x,
4347; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4348; EG-NEXT:     BFE_INT T64.X, T47.Z, 0.0, literal.x,
4349; EG-NEXT:     BFE_INT T63.Y, PS, 0.0, literal.x,
4350; EG-NEXT:     BFE_INT T46.Z, T48.Y, 0.0, literal.x,
4351; EG-NEXT:     BFE_INT T45.W, T1.W, 0.0, literal.x,
4352; EG-NEXT:     LSHR * T1.W, T47.X, literal.x,
4353; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4354; EG-NEXT:     BFE_INT T46.X, T48.X, 0.0, literal.x,
4355; EG-NEXT:     BFE_INT T45.Y, PS, 0.0, literal.x,
4356; EG-NEXT:     BFE_INT T65.Z, T48.W, 0.0, literal.x,
4357; EG-NEXT:     BFE_INT T64.W, T1.Z, 0.0, literal.x,
4358; EG-NEXT:     LSHR * T1.W, T47.Z, literal.x,
4359; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4360; EG-NEXT:     BFE_INT T65.X, T48.Z, 0.0, literal.x,
4361; EG-NEXT:     BFE_INT T64.Y, PS, 0.0, literal.x,
4362; EG-NEXT:     BFE_INT T47.Z, T41.Y, 0.0, literal.x,
4363; EG-NEXT:     BFE_INT T46.W, T1.Y, 0.0, literal.x, BS:VEC_120/SCL_212
4364; EG-NEXT:     LSHR * T1.W, T48.X, literal.x,
4365; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4366; EG-NEXT:     BFE_INT T47.X, T41.X, 0.0, literal.x,
4367; EG-NEXT:     BFE_INT T46.Y, PS, 0.0, literal.x,
4368; EG-NEXT:     BFE_INT T66.Z, T41.W, 0.0, literal.x,
4369; EG-NEXT:     BFE_INT T65.W, T0.W, 0.0, literal.x, BS:VEC_120/SCL_212
4370; EG-NEXT:     LSHR * T0.W, T48.Z, literal.x,
4371; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4372; EG-NEXT:     BFE_INT T66.X, T41.Z, 0.0, literal.x,
4373; EG-NEXT:     BFE_INT T65.Y, PS, 0.0, literal.x,
4374; EG-NEXT:     LSHR T1.Z, T41.X, literal.x,
4375; EG-NEXT:     BFE_INT T47.W, T0.Z, 0.0, literal.x, BS:VEC_120/SCL_212
4376; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4377; EG-NEXT:    16(2.242078e-44), 224(3.138909e-43)
4378; EG-NEXT:     LSHR T41.X, PS, literal.x,
4379; EG-NEXT:     BFE_INT T47.Y, PV.Z, 0.0, literal.y,
4380; EG-NEXT:     LSHR T0.Z, T41.Z, literal.y,
4381; EG-NEXT:     BFE_INT T66.W, T0.Y, 0.0, literal.y,
4382; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.z,
4383; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4384; EG-NEXT:    240(3.363116e-43), 0(0.000000e+00)
4385; EG-NEXT:     LSHR T48.X, PS, literal.x,
4386; EG-NEXT:     BFE_INT * T66.Y, PV.Z, 0.0, literal.y,
4387; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4388  %load = load <64 x i16>, <64 x i16> addrspace(4)* %in
4389  %ext = sext <64 x i16> %load to <64 x i32>
4390  store <64 x i32> %ext, <64 x i32> addrspace(1)* %out
4391  ret void
4392}
4393
4394define amdgpu_kernel void @constant_zextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(4)* %in) #0 {
4395; GCN-NOHSA-SI-LABEL: constant_zextload_i16_to_i64:
4396; GCN-NOHSA-SI:       ; %bb.0:
4397; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4398; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
4399; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
4400; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
4401; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
4402; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4403; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
4404; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
4405; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0
4406; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
4407; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
4408; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, 0
4409; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
4410; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4411; GCN-NOHSA-SI-NEXT:    s_endpgm
4412;
4413; GCN-HSA-LABEL: constant_zextload_i16_to_i64:
4414; GCN-HSA:       ; %bb.0:
4415; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
4416; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4417; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
4418; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
4419; GCN-HSA-NEXT:    flat_load_ushort v2, v[2:3]
4420; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
4421; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
4422; GCN-HSA-NEXT:    v_mov_b32_e32 v3, 0
4423; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
4424; GCN-HSA-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
4425; GCN-HSA-NEXT:    s_endpgm
4426;
4427; GCN-NOHSA-VI-LABEL: constant_zextload_i16_to_i64:
4428; GCN-NOHSA-VI:       ; %bb.0:
4429; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
4430; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4431; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4432; GCN-NOHSA-VI-NEXT:    s_mov_b32 s10, s2
4433; GCN-NOHSA-VI-NEXT:    s_mov_b32 s11, s3
4434; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4435; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, s6
4436; GCN-NOHSA-VI-NEXT:    s_mov_b32 s9, s7
4437; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0
4438; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
4439; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
4440; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, 0
4441; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
4442; GCN-NOHSA-VI-NEXT:    v_and_b32_e32 v0, 0xffff, v0
4443; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
4444; GCN-NOHSA-VI-NEXT:    s_endpgm
4445;
4446; EG-LABEL: constant_zextload_i16_to_i64:
4447; EG:       ; %bb.0:
4448; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
4449; EG-NEXT:    TEX 0 @6
4450; EG-NEXT:    ALU 2, @9, KC0[CB0:0-32], KC1[]
4451; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1
4452; EG-NEXT:    CF_END
4453; EG-NEXT:    PAD
4454; EG-NEXT:    Fetch clause starting at 6:
4455; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
4456; EG-NEXT:    ALU clause starting at 8:
4457; EG-NEXT:     MOV * T0.X, KC0[2].Z,
4458; EG-NEXT:    ALU clause starting at 9:
4459; EG-NEXT:     MOV * T0.Y, 0.0,
4460; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
4461; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
4462  %a = load i16, i16 addrspace(4)* %in
4463  %ext = zext i16 %a to i64
4464  store i64 %ext, i64 addrspace(1)* %out
4465  ret void
4466}
4467
4468; FIXME: Need to optimize this sequence to avoid extra bfe:
4469;  t28: i32,ch = load<LD2[%in(addrspace=1)], anyext from i16> t12, t27, undef:i64
4470;          t31: i64 = any_extend t28
4471;        t33: i64 = sign_extend_inreg t31, ValueType:ch:i16
4472; TODO: These could be expanded earlier using ASHR 15
4473define amdgpu_kernel void @constant_sextload_i16_to_i64(i64 addrspace(1)* %out, i16 addrspace(4)* %in) #0 {
4474; GCN-NOHSA-SI-LABEL: constant_sextload_i16_to_i64:
4475; GCN-NOHSA-SI:       ; %bb.0:
4476; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4477; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
4478; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
4479; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
4480; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
4481; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4482; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
4483; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
4484; GCN-NOHSA-SI-NEXT:    buffer_load_sshort v0, off, s[8:11], 0
4485; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
4486; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
4487; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
4488; GCN-NOHSA-SI-NEXT:    v_ashrrev_i32_e32 v1, 31, v0
4489; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4490; GCN-NOHSA-SI-NEXT:    s_endpgm
4491;
4492; GCN-HSA-LABEL: constant_sextload_i16_to_i64:
4493; GCN-HSA:       ; %bb.0:
4494; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
4495; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4496; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
4497; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
4498; GCN-HSA-NEXT:    flat_load_sshort v2, v[2:3]
4499; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
4500; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
4501; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
4502; GCN-HSA-NEXT:    v_ashrrev_i32_e32 v3, 31, v2
4503; GCN-HSA-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
4504; GCN-HSA-NEXT:    s_endpgm
4505;
4506; GCN-NOHSA-VI-LABEL: constant_sextload_i16_to_i64:
4507; GCN-NOHSA-VI:       ; %bb.0:
4508; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
4509; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4510; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4511; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4512; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
4513; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
4514; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s6
4515; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s7
4516; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s2
4517; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, s3
4518; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0
4519; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
4520; GCN-NOHSA-VI-NEXT:    v_bfe_i32 v0, v0, 0, 16
4521; GCN-NOHSA-VI-NEXT:    v_ashrrev_i32_e32 v1, 31, v0
4522; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
4523; GCN-NOHSA-VI-NEXT:    s_endpgm
4524;
4525; EG-LABEL: constant_sextload_i16_to_i64:
4526; EG:       ; %bb.0:
4527; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
4528; EG-NEXT:    TEX 0 @6
4529; EG-NEXT:    ALU 4, @9, KC0[CB0:0-32], KC1[]
4530; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1
4531; EG-NEXT:    CF_END
4532; EG-NEXT:    PAD
4533; EG-NEXT:    Fetch clause starting at 6:
4534; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
4535; EG-NEXT:    ALU clause starting at 8:
4536; EG-NEXT:     MOV * T0.X, KC0[2].Z,
4537; EG-NEXT:    ALU clause starting at 9:
4538; EG-NEXT:     BFE_INT T0.X, T0.X, 0.0, literal.x,
4539; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.y,
4540; EG-NEXT:    16(2.242078e-44), 2(2.802597e-45)
4541; EG-NEXT:     ASHR * T0.Y, PV.X, literal.x,
4542; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
4543  %a = load i16, i16 addrspace(4)* %in
4544  %ext = sext i16 %a to i64
4545  store i64 %ext, i64 addrspace(1)* %out
4546  ret void
4547}
4548
4549define amdgpu_kernel void @constant_zextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(4)* %in) #0 {
4550; GCN-NOHSA-SI-LABEL: constant_zextload_v1i16_to_v1i64:
4551; GCN-NOHSA-SI:       ; %bb.0:
4552; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4553; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
4554; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
4555; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
4556; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
4557; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4558; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
4559; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
4560; GCN-NOHSA-SI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0
4561; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
4562; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
4563; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, 0
4564; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
4565; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4566; GCN-NOHSA-SI-NEXT:    s_endpgm
4567;
4568; GCN-HSA-LABEL: constant_zextload_v1i16_to_v1i64:
4569; GCN-HSA:       ; %bb.0:
4570; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
4571; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4572; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
4573; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
4574; GCN-HSA-NEXT:    flat_load_ushort v2, v[2:3]
4575; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
4576; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
4577; GCN-HSA-NEXT:    v_mov_b32_e32 v3, 0
4578; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
4579; GCN-HSA-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
4580; GCN-HSA-NEXT:    s_endpgm
4581;
4582; GCN-NOHSA-VI-LABEL: constant_zextload_v1i16_to_v1i64:
4583; GCN-NOHSA-VI:       ; %bb.0:
4584; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
4585; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4586; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4587; GCN-NOHSA-VI-NEXT:    s_mov_b32 s10, s2
4588; GCN-NOHSA-VI-NEXT:    s_mov_b32 s11, s3
4589; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4590; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, s6
4591; GCN-NOHSA-VI-NEXT:    s_mov_b32 s9, s7
4592; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[8:11], 0
4593; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
4594; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
4595; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, 0
4596; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
4597; GCN-NOHSA-VI-NEXT:    v_and_b32_e32 v0, 0xffff, v0
4598; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
4599; GCN-NOHSA-VI-NEXT:    s_endpgm
4600;
4601; EG-LABEL: constant_zextload_v1i16_to_v1i64:
4602; EG:       ; %bb.0:
4603; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
4604; EG-NEXT:    TEX 0 @6
4605; EG-NEXT:    ALU 2, @9, KC0[CB0:0-32], KC1[]
4606; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1
4607; EG-NEXT:    CF_END
4608; EG-NEXT:    PAD
4609; EG-NEXT:    Fetch clause starting at 6:
4610; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
4611; EG-NEXT:    ALU clause starting at 8:
4612; EG-NEXT:     MOV * T0.X, KC0[2].Z,
4613; EG-NEXT:    ALU clause starting at 9:
4614; EG-NEXT:     MOV * T0.Y, 0.0,
4615; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.x,
4616; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
4617  %load = load <1 x i16>, <1 x i16> addrspace(4)* %in
4618  %ext = zext <1 x i16> %load to <1 x i64>
4619  store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
4620  ret void
4621}
4622
4623define amdgpu_kernel void @constant_sextload_v1i16_to_v1i64(<1 x i64> addrspace(1)* %out, <1 x i16> addrspace(4)* %in) #0 {
4624; GCN-NOHSA-SI-LABEL: constant_sextload_v1i16_to_v1i64:
4625; GCN-NOHSA-SI:       ; %bb.0:
4626; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4627; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
4628; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
4629; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s6
4630; GCN-NOHSA-SI-NEXT:    s_mov_b32 s11, s7
4631; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4632; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s2
4633; GCN-NOHSA-SI-NEXT:    s_mov_b32 s9, s3
4634; GCN-NOHSA-SI-NEXT:    buffer_load_sshort v0, off, s[8:11], 0
4635; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
4636; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
4637; GCN-NOHSA-SI-NEXT:    s_waitcnt vmcnt(0)
4638; GCN-NOHSA-SI-NEXT:    v_ashrrev_i32_e32 v1, 31, v0
4639; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[4:7], 0
4640; GCN-NOHSA-SI-NEXT:    s_endpgm
4641;
4642; GCN-HSA-LABEL: constant_sextload_v1i16_to_v1i64:
4643; GCN-HSA:       ; %bb.0:
4644; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
4645; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4646; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
4647; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
4648; GCN-HSA-NEXT:    flat_load_sshort v2, v[2:3]
4649; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
4650; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
4651; GCN-HSA-NEXT:    s_waitcnt vmcnt(0)
4652; GCN-HSA-NEXT:    v_ashrrev_i32_e32 v3, 31, v2
4653; GCN-HSA-NEXT:    flat_store_dwordx2 v[0:1], v[2:3]
4654; GCN-HSA-NEXT:    s_endpgm
4655;
4656; GCN-NOHSA-VI-LABEL: constant_sextload_v1i16_to_v1i64:
4657; GCN-NOHSA-VI:       ; %bb.0:
4658; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
4659; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4660; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4661; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4662; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
4663; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
4664; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s6
4665; GCN-NOHSA-VI-NEXT:    s_mov_b32 s5, s7
4666; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s2
4667; GCN-NOHSA-VI-NEXT:    s_mov_b32 s7, s3
4668; GCN-NOHSA-VI-NEXT:    buffer_load_ushort v0, off, s[4:7], 0
4669; GCN-NOHSA-VI-NEXT:    s_waitcnt vmcnt(0)
4670; GCN-NOHSA-VI-NEXT:    v_bfe_i32 v0, v0, 0, 16
4671; GCN-NOHSA-VI-NEXT:    v_ashrrev_i32_e32 v1, 31, v0
4672; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx2 v[0:1], off, s[0:3], 0
4673; GCN-NOHSA-VI-NEXT:    s_endpgm
4674;
4675; EG-LABEL: constant_sextload_v1i16_to_v1i64:
4676; EG:       ; %bb.0:
4677; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
4678; EG-NEXT:    TEX 0 @6
4679; EG-NEXT:    ALU 4, @9, KC0[CB0:0-32], KC1[]
4680; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T0.XY, T1.X, 1
4681; EG-NEXT:    CF_END
4682; EG-NEXT:    PAD
4683; EG-NEXT:    Fetch clause starting at 6:
4684; EG-NEXT:     VTX_READ_16 T0.X, T0.X, 0, #1
4685; EG-NEXT:    ALU clause starting at 8:
4686; EG-NEXT:     MOV * T0.X, KC0[2].Z,
4687; EG-NEXT:    ALU clause starting at 9:
4688; EG-NEXT:     BFE_INT T0.X, T0.X, 0.0, literal.x,
4689; EG-NEXT:     LSHR * T1.X, KC0[2].Y, literal.y,
4690; EG-NEXT:    16(2.242078e-44), 2(2.802597e-45)
4691; EG-NEXT:     ASHR * T0.Y, PV.X, literal.x,
4692; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
4693  %load = load <1 x i16>, <1 x i16> addrspace(4)* %in
4694  %ext = sext <1 x i16> %load to <1 x i64>
4695  store <1 x i64> %ext, <1 x i64> addrspace(1)* %out
4696  ret void
4697}
4698
4699define amdgpu_kernel void @constant_zextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(4)* %in) #0 {
4700; GCN-NOHSA-SI-LABEL: constant_zextload_v2i16_to_v2i64:
4701; GCN-NOHSA-SI:       ; %bb.0:
4702; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4703; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4704; GCN-NOHSA-SI-NEXT:    s_load_dword s2, s[2:3], 0x0
4705; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
4706; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, 0
4707; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4708; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s4, s2, 16
4709; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s2, 0xffff
4710; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
4711; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, v1
4712; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
4713; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
4714; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
4715; GCN-NOHSA-SI-NEXT:    s_endpgm
4716;
4717; GCN-HSA-LABEL: constant_zextload_v2i16_to_v2i64:
4718; GCN-HSA:       ; %bb.0:
4719; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
4720; GCN-HSA-NEXT:    v_mov_b32_e32 v1, 0
4721; GCN-HSA-NEXT:    v_mov_b32_e32 v3, v1
4722; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4723; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
4724; GCN-HSA-NEXT:    s_load_dword s0, s[2:3], 0x0
4725; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
4726; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4727; GCN-HSA-NEXT:    s_lshr_b32 s1, s0, 16
4728; GCN-HSA-NEXT:    s_and_b32 s0, s0, 0xffff
4729; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
4730; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s1
4731; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4732; GCN-HSA-NEXT:    s_endpgm
4733;
4734; GCN-NOHSA-VI-LABEL: constant_zextload_v2i16_to_v2i64:
4735; GCN-NOHSA-VI:       ; %bb.0:
4736; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
4737; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, 0
4738; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4739; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4740; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, v1
4741; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4742; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
4743; GCN-NOHSA-VI-NEXT:    s_load_dword s4, s[6:7], 0x0
4744; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
4745; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4746; GCN-NOHSA-VI-NEXT:    s_and_b32 s5, s4, 0xffff
4747; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
4748; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s5
4749; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
4750; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
4751; GCN-NOHSA-VI-NEXT:    s_endpgm
4752;
4753; EG-LABEL: constant_zextload_v2i16_to_v2i64:
4754; EG:       ; %bb.0:
4755; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
4756; EG-NEXT:    TEX 0 @6
4757; EG-NEXT:    ALU 6, @9, KC0[CB0:0-32], KC1[]
4758; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T4.XYZW, T5.X, 1
4759; EG-NEXT:    CF_END
4760; EG-NEXT:    PAD
4761; EG-NEXT:    Fetch clause starting at 6:
4762; EG-NEXT:     VTX_READ_32 T4.X, T4.X, 0, #1
4763; EG-NEXT:    ALU clause starting at 8:
4764; EG-NEXT:     MOV * T4.X, KC0[2].Z,
4765; EG-NEXT:    ALU clause starting at 9:
4766; EG-NEXT:     LSHR * T4.Z, T4.X, literal.x,
4767; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4768; EG-NEXT:     AND_INT T4.X, T4.X, literal.x,
4769; EG-NEXT:     MOV T4.Y, 0.0,
4770; EG-NEXT:     MOV T4.W, 0.0,
4771; EG-NEXT:     LSHR * T5.X, KC0[2].Y, literal.y,
4772; EG-NEXT:    65535(9.183409e-41), 2(2.802597e-45)
4773  %load = load <2 x i16>, <2 x i16> addrspace(4)* %in
4774  %ext = zext <2 x i16> %load to <2 x i64>
4775  store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
4776  ret void
4777}
4778
4779define amdgpu_kernel void @constant_sextload_v2i16_to_v2i64(<2 x i64> addrspace(1)* %out, <2 x i16> addrspace(4)* %in) #0 {
4780; GCN-NOHSA-SI-LABEL: constant_sextload_v2i16_to_v2i64:
4781; GCN-NOHSA-SI:       ; %bb.0:
4782; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4783; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4784; GCN-NOHSA-SI-NEXT:    s_load_dword s2, s[2:3], 0x0
4785; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
4786; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4787; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s4, s2, 16
4788; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[6:7], s[2:3], 0x100000
4789; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[4:5], s[4:5], 0x100000
4790; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
4791; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
4792; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s7
4793; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
4794; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s5
4795; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
4796; GCN-NOHSA-SI-NEXT:    s_endpgm
4797;
4798; GCN-HSA-LABEL: constant_sextload_v2i16_to_v2i64:
4799; GCN-HSA:       ; %bb.0:
4800; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
4801; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4802; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
4803; GCN-HSA-NEXT:    s_load_dword s0, s[2:3], 0x0
4804; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
4805; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4806; GCN-HSA-NEXT:    s_lshr_b32 s2, s0, 16
4807; GCN-HSA-NEXT:    s_bfe_i64 s[0:1], s[0:1], 0x100000
4808; GCN-HSA-NEXT:    s_bfe_i64 s[2:3], s[2:3], 0x100000
4809; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s0
4810; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s1
4811; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
4812; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
4813; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4814; GCN-HSA-NEXT:    s_endpgm
4815;
4816; GCN-NOHSA-VI-LABEL: constant_sextload_v2i16_to_v2i64:
4817; GCN-NOHSA-VI:       ; %bb.0:
4818; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
4819; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4820; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4821; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4822; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
4823; GCN-NOHSA-VI-NEXT:    s_load_dword s4, s[6:7], 0x0
4824; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
4825; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4826; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[6:7], s[4:5], 0x100000
4827; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
4828; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[4:5], s[4:5], 0x100000
4829; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
4830; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s7
4831; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
4832; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s5
4833; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
4834; GCN-NOHSA-VI-NEXT:    s_endpgm
4835;
4836; EG-LABEL: constant_sextload_v2i16_to_v2i64:
4837; EG:       ; %bb.0:
4838; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
4839; EG-NEXT:    TEX 0 @6
4840; EG-NEXT:    ALU 8, @9, KC0[CB0:0-32], KC1[]
4841; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T4.XYZW, T5.X, 1
4842; EG-NEXT:    CF_END
4843; EG-NEXT:    PAD
4844; EG-NEXT:    Fetch clause starting at 6:
4845; EG-NEXT:     VTX_READ_32 T4.X, T4.X, 0, #1
4846; EG-NEXT:    ALU clause starting at 8:
4847; EG-NEXT:     MOV * T4.X, KC0[2].Z,
4848; EG-NEXT:    ALU clause starting at 9:
4849; EG-NEXT:     ASHR * T4.W, T4.X, literal.x,
4850; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
4851; EG-NEXT:     ASHR * T4.Z, T4.X, literal.x,
4852; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4853; EG-NEXT:     BFE_INT T4.X, T4.X, 0.0, literal.x,
4854; EG-NEXT:     LSHR * T5.X, KC0[2].Y, literal.y,
4855; EG-NEXT:    16(2.242078e-44), 2(2.802597e-45)
4856; EG-NEXT:     ASHR * T4.Y, PV.X, literal.x,
4857; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
4858  %load = load <2 x i16>, <2 x i16> addrspace(4)* %in
4859  %ext = sext <2 x i16> %load to <2 x i64>
4860  store <2 x i64> %ext, <2 x i64> addrspace(1)* %out
4861  ret void
4862}
4863
4864define amdgpu_kernel void @constant_zextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(4)* %in) #0 {
4865; GCN-NOHSA-SI-LABEL: constant_zextload_v4i16_to_v4i64:
4866; GCN-NOHSA-SI:       ; %bb.0:
4867; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4868; GCN-NOHSA-SI-NEXT:    s_mov_b32 s7, 0xf000
4869; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4870; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0
4871; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, -1
4872; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, 0
4873; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, 0xffff
4874; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, v1
4875; GCN-NOHSA-SI-NEXT:    s_mov_b32 s4, s0
4876; GCN-NOHSA-SI-NEXT:    s_mov_b32 s5, s1
4877; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4878; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s0, s3, 16
4879; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s1, s2, 16
4880; GCN-NOHSA-SI-NEXT:    s_and_b32 s3, s3, s8
4881; GCN-NOHSA-SI-NEXT:    s_and_b32 s2, s2, s8
4882; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s3
4883; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s0
4884; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0 offset:16
4885; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
4886; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s2
4887; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s1
4888; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[4:7], 0
4889; GCN-NOHSA-SI-NEXT:    s_endpgm
4890;
4891; GCN-HSA-LABEL: constant_zextload_v4i16_to_v4i64:
4892; GCN-HSA:       ; %bb.0:
4893; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
4894; GCN-HSA-NEXT:    s_mov_b32 s6, 0xffff
4895; GCN-HSA-NEXT:    v_mov_b32_e32 v1, 0
4896; GCN-HSA-NEXT:    v_mov_b32_e32 v3, v1
4897; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4898; GCN-HSA-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0
4899; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
4900; GCN-HSA-NEXT:    s_lshr_b32 s4, s3, 16
4901; GCN-HSA-NEXT:    s_lshr_b32 s5, s2, 16
4902; GCN-HSA-NEXT:    s_and_b32 s7, s2, s6
4903; GCN-HSA-NEXT:    s_and_b32 s2, s3, s6
4904; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s2
4905; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
4906; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
4907; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
4908; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s4
4909; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
4910; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4911; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
4912; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s7
4913; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
4914; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
4915; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
4916; GCN-HSA-NEXT:    s_endpgm
4917;
4918; GCN-NOHSA-VI-LABEL: constant_zextload_v4i16_to_v4i64:
4919; GCN-NOHSA-VI:       ; %bb.0:
4920; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
4921; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, 0xffff
4922; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, 0
4923; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
4924; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
4925; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4926; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
4927; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
4928; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x0
4929; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, v1
4930; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
4931; GCN-NOHSA-VI-NEXT:    s_and_b32 s7, s5, s8
4932; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s5, s5, 16
4933; GCN-NOHSA-VI-NEXT:    s_and_b32 s6, s4, s8
4934; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
4935; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s7
4936; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
4937; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
4938; GCN-NOHSA-VI-NEXT:    s_nop 0
4939; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
4940; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
4941; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
4942; GCN-NOHSA-VI-NEXT:    s_endpgm
4943;
4944; EG-LABEL: constant_zextload_v4i16_to_v4i64:
4945; EG:       ; %bb.0:
4946; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
4947; EG-NEXT:    TEX 0 @6
4948; EG-NEXT:    ALU 18, @9, KC0[CB0:0-32], KC1[]
4949; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T5.XYZW, T8.X, 0
4950; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T6.XYZW, T7.X, 1
4951; EG-NEXT:    CF_END
4952; EG-NEXT:    Fetch clause starting at 6:
4953; EG-NEXT:     VTX_READ_64 T5.XY, T5.X, 0, #1
4954; EG-NEXT:    ALU clause starting at 8:
4955; EG-NEXT:     MOV * T5.X, KC0[2].Z,
4956; EG-NEXT:    ALU clause starting at 9:
4957; EG-NEXT:     MOV T2.X, T5.X,
4958; EG-NEXT:     MOV * T3.X, T5.Y,
4959; EG-NEXT:     MOV T0.Y, PV.X,
4960; EG-NEXT:     MOV * T0.Z, PS,
4961; EG-NEXT:     LSHR * T5.Z, PV.Z, literal.x,
4962; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
4963; EG-NEXT:     AND_INT T5.X, T0.Z, literal.x,
4964; EG-NEXT:     MOV T5.Y, 0.0,
4965; EG-NEXT:     LSHR T6.Z, T0.Y, literal.y,
4966; EG-NEXT:     AND_INT * T6.X, T0.Y, literal.x,
4967; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
4968; EG-NEXT:     MOV T6.Y, 0.0,
4969; EG-NEXT:     MOV T5.W, 0.0,
4970; EG-NEXT:     MOV * T6.W, 0.0,
4971; EG-NEXT:     LSHR T7.X, KC0[2].Y, literal.x,
4972; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
4973; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
4974; EG-NEXT:     LSHR * T8.X, PV.W, literal.x,
4975; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
4976  %load = load <4 x i16>, <4 x i16> addrspace(4)* %in
4977  %ext = zext <4 x i16> %load to <4 x i64>
4978  store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
4979  ret void
4980}
4981
4982define amdgpu_kernel void @constant_sextload_v4i16_to_v4i64(<4 x i64> addrspace(1)* %out, <4 x i16> addrspace(4)* %in) #0 {
4983; GCN-NOHSA-SI-LABEL: constant_sextload_v4i16_to_v4i64:
4984; GCN-NOHSA-SI:       ; %bb.0:
4985; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
4986; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4987; GCN-NOHSA-SI-NEXT:    s_load_dwordx2 s[4:5], s[2:3], 0x0
4988; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
4989; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
4990; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
4991; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, s5
4992; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s8, s4, 16
4993; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[10:11], s[4:5], 0x100000
4994; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[4:5], s[4:5], 48
4995; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[6:7], s[6:7], 0x100000
4996; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[8:9], s[8:9], 0x100000
4997; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
4998; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s7
4999; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
5000; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s5
5001; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5002; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5003; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
5004; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s11
5005; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s8
5006; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s9
5007; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
5008; GCN-NOHSA-SI-NEXT:    s_endpgm
5009;
5010; GCN-HSA-LABEL: constant_sextload_v4i16_to_v4i64:
5011; GCN-HSA:       ; %bb.0:
5012; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
5013; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5014; GCN-HSA-NEXT:    s_load_dwordx2 s[2:3], s[2:3], 0x0
5015; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5016; GCN-HSA-NEXT:    s_mov_b32 s4, s3
5017; GCN-HSA-NEXT:    s_lshr_b32 s6, s2, 16
5018; GCN-HSA-NEXT:    s_bfe_i64 s[8:9], s[2:3], 0x100000
5019; GCN-HSA-NEXT:    s_ashr_i64 s[2:3], s[2:3], 48
5020; GCN-HSA-NEXT:    s_bfe_i64 s[6:7], s[6:7], 0x100000
5021; GCN-HSA-NEXT:    s_bfe_i64 s[4:5], s[4:5], 0x100000
5022; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
5023; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
5024; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
5025; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5026; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5027; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
5028; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s5
5029; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5030; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5031; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
5032; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
5033; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s9
5034; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s6
5035; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s7
5036; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
5037; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5038; GCN-HSA-NEXT:    s_endpgm
5039;
5040; GCN-NOHSA-VI-LABEL: constant_sextload_v4i16_to_v4i64:
5041; GCN-NOHSA-VI:       ; %bb.0:
5042; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
5043; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
5044; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
5045; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5046; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
5047; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
5048; GCN-NOHSA-VI-NEXT:    s_load_dwordx2 s[4:5], s[6:7], 0x0
5049; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5050; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, s5
5051; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s10, s5, 16
5052; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[6:7], s[4:5], 0x100000
5053; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
5054; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[8:9], s[8:9], 0x100000
5055; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[10:11], s[10:11], 0x100000
5056; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[4:5], s[4:5], 0x100000
5057; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
5058; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s9
5059; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s10
5060; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s11
5061; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5062; GCN-NOHSA-VI-NEXT:    s_nop 0
5063; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s6
5064; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s7
5065; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
5066; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s5
5067; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
5068; GCN-NOHSA-VI-NEXT:    s_endpgm
5069;
5070; EG-LABEL: constant_sextload_v4i16_to_v4i64:
5071; EG:       ; %bb.0:
5072; EG-NEXT:    ALU 0, @8, KC0[CB0:0-32], KC1[]
5073; EG-NEXT:    TEX 0 @6
5074; EG-NEXT:    ALU 20, @9, KC0[CB0:0-32], KC1[]
5075; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T7.XYZW, T8.X, 0
5076; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T5.XYZW, T6.X, 1
5077; EG-NEXT:    CF_END
5078; EG-NEXT:    Fetch clause starting at 6:
5079; EG-NEXT:     VTX_READ_64 T5.XY, T5.X, 0, #1
5080; EG-NEXT:    ALU clause starting at 8:
5081; EG-NEXT:     MOV * T5.X, KC0[2].Z,
5082; EG-NEXT:    ALU clause starting at 9:
5083; EG-NEXT:     MOV T2.X, T5.X,
5084; EG-NEXT:     MOV * T3.X, T5.Y,
5085; EG-NEXT:     MOV T0.Y, PS,
5086; EG-NEXT:     MOV * T0.Z, PV.X,
5087; EG-NEXT:     ASHR * T5.W, PV.Z, literal.x,
5088; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
5089; EG-NEXT:     LSHR T6.X, KC0[2].Y, literal.x,
5090; EG-NEXT:     ASHR T5.Z, T0.Z, literal.y,
5091; EG-NEXT:     ASHR * T7.W, T0.Y, literal.z,
5092; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
5093; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
5094; EG-NEXT:     BFE_INT T5.X, T0.Z, 0.0, literal.x,
5095; EG-NEXT:     ASHR * T7.Z, T0.Y, literal.x,
5096; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
5097; EG-NEXT:     BFE_INT T7.X, T0.Y, 0.0, literal.x,
5098; EG-NEXT:     ASHR T5.Y, PV.X, literal.y,
5099; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.x,
5100; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
5101; EG-NEXT:     LSHR T8.X, PV.W, literal.x,
5102; EG-NEXT:     ASHR * T7.Y, PV.X, literal.y,
5103; EG-NEXT:    2(2.802597e-45), 31(4.344025e-44)
5104  %load = load <4 x i16>, <4 x i16> addrspace(4)* %in
5105  %ext = sext <4 x i16> %load to <4 x i64>
5106  store <4 x i64> %ext, <4 x i64> addrspace(1)* %out
5107  ret void
5108}
5109
5110define amdgpu_kernel void @constant_zextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(4)* %in) #0 {
5111; GCN-NOHSA-SI-LABEL: constant_zextload_v8i16_to_v8i64:
5112; GCN-NOHSA-SI:       ; %bb.0:
5113; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x9
5114; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
5115; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5116; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[8:11], s[6:7], 0x0
5117; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
5118; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, 0
5119; GCN-NOHSA-SI-NEXT:    s_mov_b32 s6, 0xffff
5120; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, v1
5121; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s4
5122; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s5
5123; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5124; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s4, s9, 16
5125; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s5, s11, 16
5126; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s7, s10, 16
5127; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s12, s8, 16
5128; GCN-NOHSA-SI-NEXT:    s_and_b32 s8, s8, s6
5129; GCN-NOHSA-SI-NEXT:    s_and_b32 s10, s10, s6
5130; GCN-NOHSA-SI-NEXT:    s_and_b32 s11, s11, s6
5131; GCN-NOHSA-SI-NEXT:    s_and_b32 s6, s9, s6
5132; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s11
5133; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s5
5134; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
5135; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5136; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
5137; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
5138; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5139; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5140; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
5141; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s7
5142; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
5143; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5144; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
5145; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s12
5146; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
5147; GCN-NOHSA-SI-NEXT:    s_endpgm
5148;
5149; GCN-HSA-LABEL: constant_zextload_v8i16_to_v8i64:
5150; GCN-HSA:       ; %bb.0:
5151; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
5152; GCN-HSA-NEXT:    s_mov_b32 s8, 0xffff
5153; GCN-HSA-NEXT:    v_mov_b32_e32 v1, 0
5154; GCN-HSA-NEXT:    v_mov_b32_e32 v3, v1
5155; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5156; GCN-HSA-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
5157; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5158; GCN-HSA-NEXT:    s_lshr_b32 s9, s5, 16
5159; GCN-HSA-NEXT:    s_lshr_b32 s2, s7, 16
5160; GCN-HSA-NEXT:    s_lshr_b32 s10, s6, 16
5161; GCN-HSA-NEXT:    s_lshr_b32 s11, s4, 16
5162; GCN-HSA-NEXT:    s_and_b32 s4, s4, s8
5163; GCN-HSA-NEXT:    s_and_b32 s6, s6, s8
5164; GCN-HSA-NEXT:    s_and_b32 s5, s5, s8
5165; GCN-HSA-NEXT:    s_and_b32 s3, s7, s8
5166; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
5167; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
5168; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s3
5169; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5170; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5171; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5172; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
5173; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5174; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5175; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5176; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5177; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
5178; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s5
5179; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s9
5180; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5181; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5182; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5183; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
5184; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s10
5185; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5186; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5187; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
5188; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
5189; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s11
5190; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
5191; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5192; GCN-HSA-NEXT:    s_endpgm
5193;
5194; GCN-NOHSA-VI-LABEL: constant_zextload_v8i16_to_v8i64:
5195; GCN-NOHSA-VI:       ; %bb.0:
5196; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
5197; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, 0xffff
5198; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, 0
5199; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
5200; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
5201; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5202; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
5203; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
5204; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[6:7], 0x0
5205; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, v1
5206; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5207; GCN-NOHSA-VI-NEXT:    s_and_b32 s9, s4, s8
5208; GCN-NOHSA-VI-NEXT:    s_and_b32 s10, s5, s8
5209; GCN-NOHSA-VI-NEXT:    s_and_b32 s11, s6, s8
5210; GCN-NOHSA-VI-NEXT:    s_and_b32 s8, s7, s8
5211; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s7, s7, 16
5212; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s6, 16
5213; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
5214; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
5215; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s5, s5, 16
5216; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
5217; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
5218; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s11
5219; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s6
5220; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
5221; GCN-NOHSA-VI-NEXT:    s_nop 0
5222; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s10
5223; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
5224; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5225; GCN-NOHSA-VI-NEXT:    s_nop 0
5226; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s9
5227; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
5228; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
5229; GCN-NOHSA-VI-NEXT:    s_endpgm
5230;
5231; EG-LABEL: constant_zextload_v8i16_to_v8i64:
5232; EG:       ; %bb.0:
5233; EG-NEXT:    ALU 0, @10, KC0[CB0:0-32], KC1[]
5234; EG-NEXT:    TEX 0 @8
5235; EG-NEXT:    ALU 30, @11, KC0[CB0:0-32], KC1[]
5236; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T8.XYZW, T14.X, 0
5237; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T9.XYZW, T13.X, 0
5238; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T10.XYZW, T12.X, 0
5239; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T7.XYZW, T11.X, 1
5240; EG-NEXT:    CF_END
5241; EG-NEXT:    Fetch clause starting at 8:
5242; EG-NEXT:     VTX_READ_128 T7.XYZW, T7.X, 0, #1
5243; EG-NEXT:    ALU clause starting at 10:
5244; EG-NEXT:     MOV * T7.X, KC0[2].Z,
5245; EG-NEXT:    ALU clause starting at 11:
5246; EG-NEXT:     LSHR * T8.Z, T7.W, literal.x,
5247; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
5248; EG-NEXT:     AND_INT T8.X, T7.W, literal.x,
5249; EG-NEXT:     MOV T8.Y, 0.0,
5250; EG-NEXT:     LSHR T9.Z, T7.Z, literal.y,
5251; EG-NEXT:     AND_INT * T9.X, T7.Z, literal.x,
5252; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
5253; EG-NEXT:     MOV T9.Y, 0.0,
5254; EG-NEXT:     LSHR * T10.Z, T7.Y, literal.x,
5255; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
5256; EG-NEXT:     AND_INT T10.X, T7.Y, literal.x,
5257; EG-NEXT:     MOV T10.Y, 0.0,
5258; EG-NEXT:     LSHR T7.Z, T7.X, literal.y,
5259; EG-NEXT:     AND_INT * T7.X, T7.X, literal.x,
5260; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
5261; EG-NEXT:     MOV T7.Y, 0.0,
5262; EG-NEXT:     MOV T8.W, 0.0,
5263; EG-NEXT:     MOV * T9.W, 0.0,
5264; EG-NEXT:     MOV T10.W, 0.0,
5265; EG-NEXT:     MOV * T7.W, 0.0,
5266; EG-NEXT:     LSHR T11.X, KC0[2].Y, literal.x,
5267; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5268; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
5269; EG-NEXT:     LSHR T12.X, PV.W, literal.x,
5270; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5271; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
5272; EG-NEXT:     LSHR T13.X, PV.W, literal.x,
5273; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5274; EG-NEXT:    2(2.802597e-45), 48(6.726233e-44)
5275; EG-NEXT:     LSHR * T14.X, PV.W, literal.x,
5276; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
5277  %load = load <8 x i16>, <8 x i16> addrspace(4)* %in
5278  %ext = zext <8 x i16> %load to <8 x i64>
5279  store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
5280  ret void
5281}
5282
5283define amdgpu_kernel void @constant_sextload_v8i16_to_v8i64(<8 x i64> addrspace(1)* %out, <8 x i16> addrspace(4)* %in) #0 {
5284; GCN-NOHSA-SI-LABEL: constant_sextload_v8i16_to_v8i64:
5285; GCN-NOHSA-SI:       ; %bb.0:
5286; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
5287; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5288; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
5289; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
5290; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
5291; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5292; GCN-NOHSA-SI-NEXT:    s_mov_b32 s8, s7
5293; GCN-NOHSA-SI-NEXT:    s_mov_b32 s10, s5
5294; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s12, s6, 16
5295; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s14, s4, 16
5296; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[16:17], s[4:5], 0x100000
5297; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[18:19], s[6:7], 0x100000
5298; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[4:5], s[4:5], 48
5299; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[6:7], s[6:7], 48
5300; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[10:11], s[10:11], 0x100000
5301; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[8:9], s[8:9], 0x100000
5302; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[14:15], s[14:15], 0x100000
5303; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[12:13], s[12:13], 0x100000
5304; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
5305; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s9
5306; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s6
5307; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s7
5308; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
5309; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5310; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
5311; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s11
5312; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
5313; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s5
5314; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5315; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5316; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s18
5317; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s19
5318; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v4, s16
5319; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v5, s17
5320; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s12
5321; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s13
5322; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
5323; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v6, s14
5324; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v7, s15
5325; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0
5326; GCN-NOHSA-SI-NEXT:    s_endpgm
5327;
5328; GCN-HSA-LABEL: constant_sextload_v8i16_to_v8i64:
5329; GCN-HSA:       ; %bb.0:
5330; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
5331; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5332; GCN-HSA-NEXT:    s_load_dwordx4 s[4:7], s[2:3], 0x0
5333; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5334; GCN-HSA-NEXT:    s_mov_b32 s2, s7
5335; GCN-HSA-NEXT:    s_mov_b32 s8, s5
5336; GCN-HSA-NEXT:    s_lshr_b32 s10, s6, 16
5337; GCN-HSA-NEXT:    s_lshr_b32 s12, s4, 16
5338; GCN-HSA-NEXT:    s_bfe_i64 s[14:15], s[4:5], 0x100000
5339; GCN-HSA-NEXT:    s_bfe_i64 s[16:17], s[6:7], 0x100000
5340; GCN-HSA-NEXT:    s_ashr_i64 s[4:5], s[4:5], 48
5341; GCN-HSA-NEXT:    s_ashr_i64 s[6:7], s[6:7], 48
5342; GCN-HSA-NEXT:    s_bfe_i64 s[12:13], s[12:13], 0x100000
5343; GCN-HSA-NEXT:    s_bfe_i64 s[10:11], s[10:11], 0x100000
5344; GCN-HSA-NEXT:    s_bfe_i64 s[8:9], s[8:9], 0x100000
5345; GCN-HSA-NEXT:    s_bfe_i64 s[2:3], s[2:3], 0x100000
5346; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s2
5347; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
5348; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
5349; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5350; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5351; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5352; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
5353; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s6
5354; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s7
5355; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5356; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5357; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5358; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5359; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
5360; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
5361; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s9
5362; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s4
5363; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s5
5364; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5365; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5366; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5367; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s16
5368; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s17
5369; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s10
5370; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s11
5371; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5372; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5373; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
5374; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s14
5375; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s15
5376; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s12
5377; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s13
5378; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
5379; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5380; GCN-HSA-NEXT:    s_endpgm
5381;
5382; GCN-NOHSA-VI-LABEL: constant_sextload_v8i16_to_v8i64:
5383; GCN-NOHSA-VI:       ; %bb.0:
5384; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
5385; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
5386; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
5387; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5388; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
5389; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
5390; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[6:7], 0x0
5391; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5392; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[14:15], s[6:7], 0x100000
5393; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s6, 16
5394; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[16:17], s[6:7], 0x100000
5395; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s7
5396; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[18:19], s[6:7], 0x100000
5397; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s7, 16
5398; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[6:7], s[6:7], 0x100000
5399; GCN-NOHSA-VI-NEXT:    s_mov_b32 s10, s5
5400; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s12, s5, 16
5401; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s18
5402; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s19
5403; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s6
5404; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s7
5405; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[8:9], s[4:5], 0x100000
5406; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
5407; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[10:11], s[10:11], 0x100000
5408; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[12:13], s[12:13], 0x100000
5409; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
5410; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[4:5], s[4:5], 0x100000
5411; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s14
5412; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s15
5413; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s16
5414; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s17
5415; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
5416; GCN-NOHSA-VI-NEXT:    s_nop 0
5417; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s10
5418; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s11
5419; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s12
5420; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s13
5421; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5422; GCN-NOHSA-VI-NEXT:    s_nop 0
5423; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
5424; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s9
5425; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
5426; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s5
5427; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
5428; GCN-NOHSA-VI-NEXT:    s_endpgm
5429;
5430; EG-LABEL: constant_sextload_v8i16_to_v8i64:
5431; EG:       ; %bb.0:
5432; EG-NEXT:    ALU 0, @10, KC0[CB0:0-32], KC1[]
5433; EG-NEXT:    TEX 0 @8
5434; EG-NEXT:    ALU 33, @11, KC0[CB0:0-32], KC1[]
5435; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T14.XYZW, T7.X, 0
5436; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T13.XYZW, T11.X, 0
5437; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T12.XYZW, T9.X, 0
5438; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T10.XYZW, T8.X, 1
5439; EG-NEXT:    CF_END
5440; EG-NEXT:    Fetch clause starting at 8:
5441; EG-NEXT:     VTX_READ_128 T7.XYZW, T7.X, 0, #1
5442; EG-NEXT:    ALU clause starting at 10:
5443; EG-NEXT:     MOV * T7.X, KC0[2].Z,
5444; EG-NEXT:    ALU clause starting at 11:
5445; EG-NEXT:     LSHR T8.X, KC0[2].Y, literal.x,
5446; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5447; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
5448; EG-NEXT:     LSHR T9.X, PV.W, literal.x,
5449; EG-NEXT:     ADD_INT T0.W, KC0[2].Y, literal.y,
5450; EG-NEXT:     ASHR * T10.W, T7.X, literal.z,
5451; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
5452; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
5453; EG-NEXT:     LSHR T11.X, PV.W, literal.x,
5454; EG-NEXT:     ASHR T10.Z, T7.X, literal.y,
5455; EG-NEXT:     ASHR * T12.W, T7.Y, literal.z,
5456; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
5457; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
5458; EG-NEXT:     BFE_INT T10.X, T7.X, 0.0, literal.x,
5459; EG-NEXT:     ASHR T12.Z, T7.Y, literal.x,
5460; EG-NEXT:     ASHR * T13.W, T7.Z, literal.y,
5461; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
5462; EG-NEXT:     BFE_INT T12.X, T7.Y, 0.0, literal.x,
5463; EG-NEXT:     ASHR T10.Y, PV.X, literal.y,
5464; EG-NEXT:     ASHR T13.Z, T7.Z, literal.x,
5465; EG-NEXT:     ASHR * T14.W, T7.W, literal.y,
5466; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
5467; EG-NEXT:     BFE_INT T13.X, T7.Z, 0.0, literal.x,
5468; EG-NEXT:     ASHR T12.Y, PV.X, literal.y,
5469; EG-NEXT:     ASHR * T14.Z, T7.W, literal.x,
5470; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
5471; EG-NEXT:     BFE_INT T14.X, T7.W, 0.0, literal.x,
5472; EG-NEXT:     ASHR T13.Y, PV.X, literal.y,
5473; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.z,
5474; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
5475; EG-NEXT:    48(6.726233e-44), 0(0.000000e+00)
5476; EG-NEXT:     LSHR T7.X, PV.W, literal.x,
5477; EG-NEXT:     ASHR * T14.Y, PV.X, literal.y,
5478; EG-NEXT:    2(2.802597e-45), 31(4.344025e-44)
5479  %load = load <8 x i16>, <8 x i16> addrspace(4)* %in
5480  %ext = sext <8 x i16> %load to <8 x i64>
5481  store <8 x i64> %ext, <8 x i64> addrspace(1)* %out
5482  ret void
5483}
5484
5485define amdgpu_kernel void @constant_zextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(4)* %in) #0 {
5486; GCN-NOHSA-SI-LABEL: constant_zextload_v16i16_to_v16i64:
5487; GCN-NOHSA-SI:       ; %bb.0:
5488; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[12:15], s[0:1], 0x9
5489; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
5490; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5491; GCN-NOHSA-SI-NEXT:    s_load_dwordx8 s[4:11], s[14:15], 0x0
5492; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
5493; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, 0
5494; GCN-NOHSA-SI-NEXT:    s_mov_b32 s14, 0xffff
5495; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, v1
5496; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s12
5497; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s13
5498; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5499; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s12, s5, 16
5500; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s13, s7, 16
5501; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s15, s11, 16
5502; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s16, s9, 16
5503; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s17, s8, 16
5504; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s18, s10, 16
5505; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s19, s6, 16
5506; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s20, s4, 16
5507; GCN-NOHSA-SI-NEXT:    s_and_b32 s4, s4, s14
5508; GCN-NOHSA-SI-NEXT:    s_and_b32 s6, s6, s14
5509; GCN-NOHSA-SI-NEXT:    s_and_b32 s10, s10, s14
5510; GCN-NOHSA-SI-NEXT:    s_and_b32 s8, s8, s14
5511; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s14
5512; GCN-NOHSA-SI-NEXT:    s_and_b32 s7, s7, s14
5513; GCN-NOHSA-SI-NEXT:    s_and_b32 s9, s9, s14
5514; GCN-NOHSA-SI-NEXT:    s_and_b32 s11, s11, s14
5515; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s9
5516; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s16
5517; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
5518; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5519; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s11
5520; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s15
5521; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
5522; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5523; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s7
5524; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s13
5525; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
5526; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5527; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
5528; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s12
5529; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5530; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5531; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s8
5532; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s17
5533; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
5534; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5535; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s10
5536; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s18
5537; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
5538; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5539; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s6
5540; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s19
5541; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
5542; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5543; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s4
5544; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s20
5545; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
5546; GCN-NOHSA-SI-NEXT:    s_endpgm
5547;
5548; GCN-HSA-LABEL: constant_zextload_v16i16_to_v16i64:
5549; GCN-HSA:       ; %bb.0:
5550; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
5551; GCN-HSA-NEXT:    s_mov_b32 s12, 0xffff
5552; GCN-HSA-NEXT:    v_mov_b32_e32 v1, 0
5553; GCN-HSA-NEXT:    v_mov_b32_e32 v3, v1
5554; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5555; GCN-HSA-NEXT:    s_load_dwordx8 s[4:11], s[2:3], 0x0
5556; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5557; GCN-HSA-NEXT:    s_lshr_b32 s13, s5, 16
5558; GCN-HSA-NEXT:    s_lshr_b32 s14, s7, 16
5559; GCN-HSA-NEXT:    s_lshr_b32 s15, s11, 16
5560; GCN-HSA-NEXT:    s_lshr_b32 s2, s9, 16
5561; GCN-HSA-NEXT:    s_lshr_b32 s16, s8, 16
5562; GCN-HSA-NEXT:    s_lshr_b32 s17, s10, 16
5563; GCN-HSA-NEXT:    s_lshr_b32 s18, s6, 16
5564; GCN-HSA-NEXT:    s_lshr_b32 s19, s4, 16
5565; GCN-HSA-NEXT:    s_and_b32 s4, s4, s12
5566; GCN-HSA-NEXT:    s_and_b32 s6, s6, s12
5567; GCN-HSA-NEXT:    s_and_b32 s10, s10, s12
5568; GCN-HSA-NEXT:    s_and_b32 s8, s8, s12
5569; GCN-HSA-NEXT:    s_and_b32 s5, s5, s12
5570; GCN-HSA-NEXT:    s_and_b32 s7, s7, s12
5571; GCN-HSA-NEXT:    s_and_b32 s11, s11, s12
5572; GCN-HSA-NEXT:    s_and_b32 s3, s9, s12
5573; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
5574; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x50
5575; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s3
5576; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5577; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5578; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5579; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x70
5580; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5581; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5582; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5583; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5584; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
5585; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s11
5586; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s15
5587; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5588; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5589; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5590; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5591; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
5592; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s7
5593; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s14
5594; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5595; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5596; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5597; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5598; GCN-HSA-NEXT:    s_add_u32 s2, s0, 64
5599; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s5
5600; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s13
5601; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5602; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5603; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5604; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5605; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x60
5606; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s8
5607; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s16
5608; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5609; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5610; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5611; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5612; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
5613; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s10
5614; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s17
5615; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
5616; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5617; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
5618; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
5619; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s18
5620; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
5621; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5622; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
5623; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
5624; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s19
5625; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
5626; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5627; GCN-HSA-NEXT:    s_endpgm
5628;
5629; GCN-NOHSA-VI-LABEL: constant_zextload_v16i16_to_v16i64:
5630; GCN-NOHSA-VI:       ; %bb.0:
5631; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
5632; GCN-NOHSA-VI-NEXT:    s_mov_b32 s12, 0xffff
5633; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, 0
5634; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
5635; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
5636; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5637; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
5638; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
5639; GCN-NOHSA-VI-NEXT:    s_load_dwordx8 s[4:11], s[6:7], 0x0
5640; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, v1
5641; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5642; GCN-NOHSA-VI-NEXT:    s_and_b32 s13, s4, s12
5643; GCN-NOHSA-VI-NEXT:    s_and_b32 s14, s5, s12
5644; GCN-NOHSA-VI-NEXT:    s_and_b32 s15, s6, s12
5645; GCN-NOHSA-VI-NEXT:    s_and_b32 s16, s7, s12
5646; GCN-NOHSA-VI-NEXT:    s_and_b32 s17, s8, s12
5647; GCN-NOHSA-VI-NEXT:    s_and_b32 s18, s9, s12
5648; GCN-NOHSA-VI-NEXT:    s_and_b32 s19, s10, s12
5649; GCN-NOHSA-VI-NEXT:    s_and_b32 s12, s11, s12
5650; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s11, s11, 16
5651; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s10, s10, 16
5652; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s12
5653; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s11
5654; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s9, s9, 16
5655; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
5656; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s8, s8, 16
5657; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s19
5658; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s10
5659; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
5660; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s7, s7, 16
5661; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s18
5662; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s9
5663; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
5664; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s6, 16
5665; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s17
5666; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s8
5667; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
5668; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s5, s5, 16
5669; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s16
5670; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
5671; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
5672; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
5673; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s15
5674; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s6
5675; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
5676; GCN-NOHSA-VI-NEXT:    s_nop 0
5677; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s14
5678; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
5679; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5680; GCN-NOHSA-VI-NEXT:    s_nop 0
5681; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s13
5682; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
5683; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
5684; GCN-NOHSA-VI-NEXT:    s_endpgm
5685;
5686; EG-LABEL: constant_zextload_v16i16_to_v16i64:
5687; EG:       ; %bb.0:
5688; EG-NEXT:    ALU 0, @16, KC0[CB0:0-32], KC1[]
5689; EG-NEXT:    TEX 1 @12
5690; EG-NEXT:    ALU 62, @17, KC0[CB0:0-32], KC1[]
5691; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T13.XYZW, T26.X, 0
5692; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T14.XYZW, T25.X, 0
5693; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T15.XYZW, T24.X, 0
5694; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T12.XYZW, T23.X, 0
5695; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T16.XYZW, T22.X, 0
5696; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T17.XYZW, T21.X, 0
5697; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T18.XYZW, T20.X, 0
5698; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T11.XYZW, T19.X, 1
5699; EG-NEXT:    CF_END
5700; EG-NEXT:    Fetch clause starting at 12:
5701; EG-NEXT:     VTX_READ_128 T12.XYZW, T11.X, 16, #1
5702; EG-NEXT:     VTX_READ_128 T11.XYZW, T11.X, 0, #1
5703; EG-NEXT:    ALU clause starting at 16:
5704; EG-NEXT:     MOV * T11.X, KC0[2].Z,
5705; EG-NEXT:    ALU clause starting at 17:
5706; EG-NEXT:     LSHR * T13.Z, T12.W, literal.x,
5707; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
5708; EG-NEXT:     AND_INT T13.X, T12.W, literal.x,
5709; EG-NEXT:     MOV T13.Y, 0.0,
5710; EG-NEXT:     LSHR T14.Z, T12.Z, literal.y,
5711; EG-NEXT:     AND_INT * T14.X, T12.Z, literal.x,
5712; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
5713; EG-NEXT:     MOV T14.Y, 0.0,
5714; EG-NEXT:     LSHR * T15.Z, T12.Y, literal.x,
5715; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
5716; EG-NEXT:     AND_INT T15.X, T12.Y, literal.x,
5717; EG-NEXT:     MOV T15.Y, 0.0,
5718; EG-NEXT:     LSHR T12.Z, T12.X, literal.y,
5719; EG-NEXT:     AND_INT * T12.X, T12.X, literal.x,
5720; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
5721; EG-NEXT:     MOV T12.Y, 0.0,
5722; EG-NEXT:     LSHR * T16.Z, T11.W, literal.x,
5723; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
5724; EG-NEXT:     AND_INT T16.X, T11.W, literal.x,
5725; EG-NEXT:     MOV T16.Y, 0.0,
5726; EG-NEXT:     LSHR T17.Z, T11.Z, literal.y,
5727; EG-NEXT:     AND_INT * T17.X, T11.Z, literal.x,
5728; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
5729; EG-NEXT:     MOV T17.Y, 0.0,
5730; EG-NEXT:     LSHR * T18.Z, T11.Y, literal.x,
5731; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
5732; EG-NEXT:     AND_INT T18.X, T11.Y, literal.x,
5733; EG-NEXT:     MOV T18.Y, 0.0,
5734; EG-NEXT:     LSHR T11.Z, T11.X, literal.y,
5735; EG-NEXT:     AND_INT * T11.X, T11.X, literal.x,
5736; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
5737; EG-NEXT:     MOV T11.Y, 0.0,
5738; EG-NEXT:     MOV T13.W, 0.0,
5739; EG-NEXT:     MOV * T14.W, 0.0,
5740; EG-NEXT:     MOV T15.W, 0.0,
5741; EG-NEXT:     MOV * T12.W, 0.0,
5742; EG-NEXT:     MOV T16.W, 0.0,
5743; EG-NEXT:     MOV * T17.W, 0.0,
5744; EG-NEXT:     MOV T18.W, 0.0,
5745; EG-NEXT:     MOV * T11.W, 0.0,
5746; EG-NEXT:     LSHR T19.X, KC0[2].Y, literal.x,
5747; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5748; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
5749; EG-NEXT:     LSHR T20.X, PV.W, literal.x,
5750; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5751; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
5752; EG-NEXT:     LSHR T21.X, PV.W, literal.x,
5753; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5754; EG-NEXT:    2(2.802597e-45), 48(6.726233e-44)
5755; EG-NEXT:     LSHR T22.X, PV.W, literal.x,
5756; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5757; EG-NEXT:    2(2.802597e-45), 64(8.968310e-44)
5758; EG-NEXT:     LSHR T23.X, PV.W, literal.x,
5759; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5760; EG-NEXT:    2(2.802597e-45), 80(1.121039e-43)
5761; EG-NEXT:     LSHR T24.X, PV.W, literal.x,
5762; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5763; EG-NEXT:    2(2.802597e-45), 96(1.345247e-43)
5764; EG-NEXT:     LSHR T25.X, PV.W, literal.x,
5765; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
5766; EG-NEXT:    2(2.802597e-45), 112(1.569454e-43)
5767; EG-NEXT:     LSHR * T26.X, PV.W, literal.x,
5768; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
5769  %load = load <16 x i16>, <16 x i16> addrspace(4)* %in
5770  %ext = zext <16 x i16> %load to <16 x i64>
5771  store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
5772  ret void
5773}
5774
5775define amdgpu_kernel void @constant_sextload_v16i16_to_v16i64(<16 x i64> addrspace(1)* %out, <16 x i16> addrspace(4)* %in) #0 {
5776; GCN-NOHSA-SI-LABEL: constant_sextload_v16i16_to_v16i64:
5777; GCN-NOHSA-SI:       ; %bb.0:
5778; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x9
5779; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5780; GCN-NOHSA-SI-NEXT:    s_load_dwordx8 s[4:11], s[2:3], 0x0
5781; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
5782; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
5783; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
5784; GCN-NOHSA-SI-NEXT:    s_mov_b32 s12, s11
5785; GCN-NOHSA-SI-NEXT:    s_mov_b32 s14, s9
5786; GCN-NOHSA-SI-NEXT:    s_mov_b32 s16, s7
5787; GCN-NOHSA-SI-NEXT:    s_mov_b32 s18, s5
5788; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s20, s10, 16
5789; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s22, s8, 16
5790; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s24, s6, 16
5791; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s26, s4, 16
5792; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[28:29], s[4:5], 0x100000
5793; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[30:31], s[6:7], 0x100000
5794; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[34:35], s[8:9], 0x100000
5795; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[36:37], s[10:11], 0x100000
5796; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[4:5], s[4:5], 48
5797; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[6:7], s[6:7], 48
5798; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[8:9], s[8:9], 48
5799; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[10:11], s[10:11], 48
5800; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[18:19], s[18:19], 0x100000
5801; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[16:17], s[16:17], 0x100000
5802; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[14:15], s[14:15], 0x100000
5803; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[12:13], s[12:13], 0x100000
5804; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[26:27], s[26:27], 0x100000
5805; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[24:25], s[24:25], 0x100000
5806; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[22:23], s[22:23], 0x100000
5807; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[20:21], s[20:21], 0x100000
5808; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s12
5809; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s13
5810; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s10
5811; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s11
5812; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
5813; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5814; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s14
5815; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s15
5816; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s8
5817; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s9
5818; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
5819; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5820; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s16
5821; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s17
5822; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s6
5823; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s7
5824; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
5825; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5826; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s18
5827; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s19
5828; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
5829; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s5
5830; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
5831; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
5832; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s36
5833; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s37
5834; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v4, s34
5835; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v5, s35
5836; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v8, s30
5837; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v9, s31
5838; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v12, s28
5839; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v13, s29
5840; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s20
5841; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s21
5842; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
5843; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v6, s22
5844; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v7, s23
5845; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0 offset:64
5846; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v10, s24
5847; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v11, s25
5848; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[8:11], off, s[0:3], 0 offset:32
5849; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v14, s26
5850; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v15, s27
5851; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[12:15], off, s[0:3], 0
5852; GCN-NOHSA-SI-NEXT:    s_endpgm
5853;
5854; GCN-HSA-LABEL: constant_sextload_v16i16_to_v16i64:
5855; GCN-HSA:       ; %bb.0:
5856; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
5857; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5858; GCN-HSA-NEXT:    s_load_dwordx8 s[8:15], s[2:3], 0x0
5859; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
5860; GCN-HSA-NEXT:    s_mov_b32 s6, s15
5861; GCN-HSA-NEXT:    s_mov_b32 s16, s13
5862; GCN-HSA-NEXT:    s_mov_b32 s18, s11
5863; GCN-HSA-NEXT:    s_mov_b32 s20, s9
5864; GCN-HSA-NEXT:    s_lshr_b32 s22, s14, 16
5865; GCN-HSA-NEXT:    s_lshr_b32 s24, s12, 16
5866; GCN-HSA-NEXT:    s_lshr_b32 s26, s10, 16
5867; GCN-HSA-NEXT:    s_lshr_b32 s28, s8, 16
5868; GCN-HSA-NEXT:    s_bfe_i64 s[34:35], s[14:15], 0x100000
5869; GCN-HSA-NEXT:    s_ashr_i64 s[14:15], s[14:15], 48
5870; GCN-HSA-NEXT:    s_bfe_i64 s[6:7], s[6:7], 0x100000
5871; GCN-HSA-NEXT:    s_bfe_i64 s[2:3], s[8:9], 0x100000
5872; GCN-HSA-NEXT:    s_bfe_i64 s[4:5], s[10:11], 0x100000
5873; GCN-HSA-NEXT:    s_bfe_i64 s[30:31], s[12:13], 0x100000
5874; GCN-HSA-NEXT:    s_ashr_i64 s[8:9], s[8:9], 48
5875; GCN-HSA-NEXT:    s_ashr_i64 s[10:11], s[10:11], 48
5876; GCN-HSA-NEXT:    s_ashr_i64 s[12:13], s[12:13], 48
5877; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s6
5878; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s7
5879; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s14
5880; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s15
5881; GCN-HSA-NEXT:    s_bfe_i64 s[6:7], s[28:29], 0x100000
5882; GCN-HSA-NEXT:    s_bfe_i64 s[14:15], s[26:27], 0x100000
5883; GCN-HSA-NEXT:    s_bfe_i64 s[24:25], s[24:25], 0x100000
5884; GCN-HSA-NEXT:    s_bfe_i64 s[22:23], s[22:23], 0x100000
5885; GCN-HSA-NEXT:    s_bfe_i64 s[20:21], s[20:21], 0x100000
5886; GCN-HSA-NEXT:    s_bfe_i64 s[18:19], s[18:19], 0x100000
5887; GCN-HSA-NEXT:    s_bfe_i64 s[16:17], s[16:17], 0x100000
5888; GCN-HSA-NEXT:    s_add_u32 s26, s0, 0x70
5889; GCN-HSA-NEXT:    s_addc_u32 s27, s1, 0
5890; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s26
5891; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s12
5892; GCN-HSA-NEXT:    s_add_u32 s12, s0, 0x50
5893; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s27
5894; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s13
5895; GCN-HSA-NEXT:    s_addc_u32 s13, s1, 0
5896; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s12
5897; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s16
5898; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s17
5899; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s13
5900; GCN-HSA-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
5901; GCN-HSA-NEXT:    flat_store_dwordx4 v[10:11], v[4:7]
5902; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s10
5903; GCN-HSA-NEXT:    s_add_u32 s10, s0, 48
5904; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s11
5905; GCN-HSA-NEXT:    s_addc_u32 s11, s1, 0
5906; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s10
5907; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s18
5908; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s19
5909; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s11
5910; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5911; GCN-HSA-NEXT:    s_nop 0
5912; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s8
5913; GCN-HSA-NEXT:    s_add_u32 s8, s0, 16
5914; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s9
5915; GCN-HSA-NEXT:    s_addc_u32 s9, s1, 0
5916; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s8
5917; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s20
5918; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s21
5919; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s9
5920; GCN-HSA-NEXT:    s_add_u32 s8, s0, 0x60
5921; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5922; GCN-HSA-NEXT:    s_addc_u32 s9, s1, 0
5923; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s8
5924; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s34
5925; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s35
5926; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s22
5927; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s23
5928; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s9
5929; GCN-HSA-NEXT:    s_add_u32 s8, s0, 64
5930; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5931; GCN-HSA-NEXT:    s_addc_u32 s9, s1, 0
5932; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s8
5933; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s30
5934; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s31
5935; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s24
5936; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s25
5937; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s9
5938; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5939; GCN-HSA-NEXT:    s_nop 0
5940; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s4
5941; GCN-HSA-NEXT:    s_add_u32 s4, s0, 32
5942; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s5
5943; GCN-HSA-NEXT:    s_addc_u32 s5, s1, 0
5944; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s4
5945; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s14
5946; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s15
5947; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s5
5948; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5949; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
5950; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s2
5951; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
5952; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s6
5953; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s7
5954; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
5955; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
5956; GCN-HSA-NEXT:    s_endpgm
5957;
5958; GCN-NOHSA-VI-LABEL: constant_sextload_v16i16_to_v16i64:
5959; GCN-NOHSA-VI:       ; %bb.0:
5960; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[0:3], s[0:1], 0x24
5961; GCN-NOHSA-VI-NEXT:    s_mov_b32 s11, 0xf000
5962; GCN-NOHSA-VI-NEXT:    s_mov_b32 s10, -1
5963; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5964; GCN-NOHSA-VI-NEXT:    s_mov_b32 s8, s0
5965; GCN-NOHSA-VI-NEXT:    s_mov_b32 s9, s1
5966; GCN-NOHSA-VI-NEXT:    s_load_dwordx8 s[0:7], s[2:3], 0x0
5967; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
5968; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[30:31], s[6:7], 0x100000
5969; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s6, 16
5970; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[34:35], s[6:7], 0x100000
5971; GCN-NOHSA-VI-NEXT:    s_mov_b32 s6, s7
5972; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[24:25], s[4:5], 0x100000
5973; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
5974; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[36:37], s[6:7], 0x100000
5975; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s7, 16
5976; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[26:27], s[4:5], 0x100000
5977; GCN-NOHSA-VI-NEXT:    s_mov_b32 s4, s5
5978; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[6:7], s[6:7], 0x100000
5979; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[18:19], s[2:3], 0x100000
5980; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s2, s2, 16
5981; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[28:29], s[4:5], 0x100000
5982; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s5, 16
5983; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s36
5984; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s37
5985; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s6
5986; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s7
5987; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[20:21], s[2:3], 0x100000
5988; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, s3
5989; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[4:5], s[4:5], 0x100000
5990; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:112
5991; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[22:23], s[2:3], 0x100000
5992; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s30
5993; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s31
5994; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s34
5995; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s35
5996; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s2, s3, 16
5997; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:96
5998; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[2:3], s[2:3], 0x100000
5999; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s28
6000; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s29
6001; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
6002; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s5
6003; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:80
6004; GCN-NOHSA-VI-NEXT:    s_mov_b32 s14, s1
6005; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s24
6006; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s25
6007; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s26
6008; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s27
6009; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s16, s1, 16
6010; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:64
6011; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[12:13], s[0:1], 0x100000
6012; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s22
6013; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s23
6014; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s2
6015; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s3
6016; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s0, s0, 16
6017; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[14:15], s[14:15], 0x100000
6018; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[16:17], s[16:17], 0x100000
6019; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:48
6020; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[0:1], s[0:1], 0x100000
6021; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s18
6022; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s19
6023; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s20
6024; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s21
6025; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:32
6026; GCN-NOHSA-VI-NEXT:    s_nop 0
6027; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s14
6028; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s15
6029; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s16
6030; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s17
6031; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0 offset:16
6032; GCN-NOHSA-VI-NEXT:    s_nop 0
6033; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s12
6034; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s13
6035; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s0
6036; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s1
6037; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[8:11], 0
6038; GCN-NOHSA-VI-NEXT:    s_endpgm
6039;
6040; EG-LABEL: constant_sextload_v16i16_to_v16i64:
6041; EG:       ; %bb.0:
6042; EG-NEXT:    ALU 0, @16, KC0[CB0:0-32], KC1[]
6043; EG-NEXT:    TEX 1 @12
6044; EG-NEXT:    ALU 65, @17, KC0[CB0:0-32], KC1[]
6045; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T26.XYZW, T12.X, 0
6046; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T25.XYZW, T20.X, 0
6047; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T11.XYZW, T18.X, 0
6048; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T24.XYZW, T17.X, 0
6049; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T23.XYZW, T16.X, 0
6050; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T22.XYZW, T15.X, 0
6051; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T21.XYZW, T14.X, 0
6052; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T19.XYZW, T13.X, 1
6053; EG-NEXT:    CF_END
6054; EG-NEXT:    Fetch clause starting at 12:
6055; EG-NEXT:     VTX_READ_128 T12.XYZW, T11.X, 16, #1
6056; EG-NEXT:     VTX_READ_128 T11.XYZW, T11.X, 0, #1
6057; EG-NEXT:    ALU clause starting at 16:
6058; EG-NEXT:     MOV * T11.X, KC0[2].Z,
6059; EG-NEXT:    ALU clause starting at 17:
6060; EG-NEXT:     LSHR T13.X, KC0[2].Y, literal.x,
6061; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6062; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
6063; EG-NEXT:     LSHR T14.X, PV.W, literal.x,
6064; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6065; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
6066; EG-NEXT:     LSHR T15.X, PV.W, literal.x,
6067; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6068; EG-NEXT:    2(2.802597e-45), 48(6.726233e-44)
6069; EG-NEXT:     LSHR T16.X, PV.W, literal.x,
6070; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6071; EG-NEXT:    2(2.802597e-45), 64(8.968310e-44)
6072; EG-NEXT:     LSHR T17.X, PV.W, literal.x,
6073; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6074; EG-NEXT:    2(2.802597e-45), 80(1.121039e-43)
6075; EG-NEXT:     LSHR T18.X, PV.W, literal.x,
6076; EG-NEXT:     ADD_INT T0.W, KC0[2].Y, literal.y,
6077; EG-NEXT:     ASHR * T19.W, T11.X, literal.z,
6078; EG-NEXT:    2(2.802597e-45), 96(1.345247e-43)
6079; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
6080; EG-NEXT:     LSHR T20.X, PV.W, literal.x,
6081; EG-NEXT:     ASHR T19.Z, T11.X, literal.y,
6082; EG-NEXT:     ASHR * T21.W, T11.Y, literal.z,
6083; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
6084; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
6085; EG-NEXT:     BFE_INT T19.X, T11.X, 0.0, literal.x,
6086; EG-NEXT:     ASHR T21.Z, T11.Y, literal.x,
6087; EG-NEXT:     ASHR * T22.W, T11.Z, literal.y,
6088; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6089; EG-NEXT:     BFE_INT T21.X, T11.Y, 0.0, literal.x,
6090; EG-NEXT:     ASHR T19.Y, PV.X, literal.y,
6091; EG-NEXT:     ASHR T22.Z, T11.Z, literal.x,
6092; EG-NEXT:     ASHR * T23.W, T11.W, literal.y,
6093; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6094; EG-NEXT:     BFE_INT T22.X, T11.Z, 0.0, literal.x,
6095; EG-NEXT:     ASHR T21.Y, PV.X, literal.y,
6096; EG-NEXT:     ASHR T23.Z, T11.W, literal.x,
6097; EG-NEXT:     ASHR * T24.W, T12.X, literal.y,
6098; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6099; EG-NEXT:     BFE_INT T23.X, T11.W, 0.0, literal.x,
6100; EG-NEXT:     ASHR T22.Y, PV.X, literal.y,
6101; EG-NEXT:     ASHR T24.Z, T12.X, literal.x,
6102; EG-NEXT:     ASHR * T11.W, T12.Y, literal.y,
6103; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6104; EG-NEXT:     BFE_INT T24.X, T12.X, 0.0, literal.x,
6105; EG-NEXT:     ASHR T23.Y, PV.X, literal.y,
6106; EG-NEXT:     ASHR T11.Z, T12.Y, literal.x,
6107; EG-NEXT:     ASHR * T25.W, T12.Z, literal.y,
6108; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6109; EG-NEXT:     BFE_INT T11.X, T12.Y, 0.0, literal.x,
6110; EG-NEXT:     ASHR T24.Y, PV.X, literal.y,
6111; EG-NEXT:     ASHR T25.Z, T12.Z, literal.x,
6112; EG-NEXT:     ASHR * T26.W, T12.W, literal.y,
6113; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6114; EG-NEXT:     BFE_INT T25.X, T12.Z, 0.0, literal.x,
6115; EG-NEXT:     ASHR T11.Y, PV.X, literal.y,
6116; EG-NEXT:     ASHR * T26.Z, T12.W, literal.x,
6117; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6118; EG-NEXT:     BFE_INT T26.X, T12.W, 0.0, literal.x,
6119; EG-NEXT:     ASHR T25.Y, PV.X, literal.y,
6120; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.z,
6121; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
6122; EG-NEXT:    112(1.569454e-43), 0(0.000000e+00)
6123; EG-NEXT:     LSHR T12.X, PV.W, literal.x,
6124; EG-NEXT:     ASHR * T26.Y, PV.X, literal.y,
6125; EG-NEXT:    2(2.802597e-45), 31(4.344025e-44)
6126  %load = load <16 x i16>, <16 x i16> addrspace(4)* %in
6127  %ext = sext <16 x i16> %load to <16 x i64>
6128  store <16 x i64> %ext, <16 x i64> addrspace(1)* %out
6129  ret void
6130}
6131
6132define amdgpu_kernel void @constant_zextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(4)* %in) #0 {
6133; GCN-NOHSA-SI-LABEL: constant_zextload_v32i16_to_v32i64:
6134; GCN-NOHSA-SI:       ; %bb.0:
6135; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[16:19], s[0:1], 0x9
6136; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
6137; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
6138; GCN-NOHSA-SI-NEXT:    s_mov_b32 s18, 0xffff
6139; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
6140; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s19, s1, 16
6141; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s20, s3, 16
6142; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s21, s5, 16
6143; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s22, s7, 16
6144; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s23, s9, 16
6145; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s24, s11, 16
6146; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s25, s13, 16
6147; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s26, s15, 16
6148; GCN-NOHSA-SI-NEXT:    s_and_b32 s27, s0, s18
6149; GCN-NOHSA-SI-NEXT:    s_and_b32 s28, s2, s18
6150; GCN-NOHSA-SI-NEXT:    s_and_b32 s29, s4, s18
6151; GCN-NOHSA-SI-NEXT:    s_and_b32 s30, s6, s18
6152; GCN-NOHSA-SI-NEXT:    s_and_b32 s31, s8, s18
6153; GCN-NOHSA-SI-NEXT:    s_and_b32 s33, s10, s18
6154; GCN-NOHSA-SI-NEXT:    s_and_b32 s34, s12, s18
6155; GCN-NOHSA-SI-NEXT:    s_and_b32 s35, s14, s18
6156; GCN-NOHSA-SI-NEXT:    s_and_b32 s36, s1, s18
6157; GCN-NOHSA-SI-NEXT:    s_and_b32 s37, s3, s18
6158; GCN-NOHSA-SI-NEXT:    s_and_b32 s5, s5, s18
6159; GCN-NOHSA-SI-NEXT:    s_and_b32 s7, s7, s18
6160; GCN-NOHSA-SI-NEXT:    s_and_b32 s9, s9, s18
6161; GCN-NOHSA-SI-NEXT:    s_and_b32 s11, s11, s18
6162; GCN-NOHSA-SI-NEXT:    s_and_b32 s13, s13, s18
6163; GCN-NOHSA-SI-NEXT:    s_and_b32 s15, s15, s18
6164; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s14, s14, 16
6165; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s12, s12, 16
6166; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s10, s10, 16
6167; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s8, s8, 16
6168; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s6, s6, 16
6169; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s4, s4, 16
6170; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s18, s2, 16
6171; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s38, s0, 16
6172; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
6173; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, 0
6174; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
6175; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, v1
6176; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s16
6177; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s17
6178; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s15
6179; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s26
6180; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
6181; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6182; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s13
6183; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s25
6184; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:208
6185; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6186; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s11
6187; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s24
6188; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:176
6189; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6190; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s9
6191; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s23
6192; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:144
6193; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6194; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s7
6195; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s22
6196; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
6197; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6198; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s5
6199; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s21
6200; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
6201; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6202; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s37
6203; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s20
6204; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
6205; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6206; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s36
6207; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s19
6208; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
6209; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6210; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s35
6211; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s14
6212; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:224
6213; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6214; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s34
6215; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s12
6216; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:192
6217; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6218; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s33
6219; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s10
6220; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:160
6221; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6222; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s31
6223; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s8
6224; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:128
6225; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6226; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s30
6227; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s6
6228; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
6229; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6230; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s29
6231; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
6232; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
6233; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6234; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s28
6235; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s18
6236; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
6237; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6238; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s27
6239; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s38
6240; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
6241; GCN-NOHSA-SI-NEXT:    s_endpgm
6242;
6243; GCN-HSA-LABEL: constant_zextload_v32i16_to_v32i64:
6244; GCN-HSA:       ; %bb.0:
6245; GCN-HSA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x0
6246; GCN-HSA-NEXT:    s_mov_b32 s20, 0xffff
6247; GCN-HSA-NEXT:    v_mov_b32_e32 v1, 0
6248; GCN-HSA-NEXT:    v_mov_b32_e32 v3, v1
6249; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
6250; GCN-HSA-NEXT:    s_load_dwordx16 s[4:19], s[2:3], 0x0
6251; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
6252; GCN-HSA-NEXT:    s_and_b32 s21, s4, s20
6253; GCN-HSA-NEXT:    s_and_b32 s22, s6, s20
6254; GCN-HSA-NEXT:    s_and_b32 s23, s8, s20
6255; GCN-HSA-NEXT:    s_and_b32 s24, s10, s20
6256; GCN-HSA-NEXT:    s_and_b32 s25, s12, s20
6257; GCN-HSA-NEXT:    s_and_b32 s26, s14, s20
6258; GCN-HSA-NEXT:    s_and_b32 s27, s16, s20
6259; GCN-HSA-NEXT:    s_and_b32 s28, s18, s20
6260; GCN-HSA-NEXT:    s_and_b32 s29, s5, s20
6261; GCN-HSA-NEXT:    s_and_b32 s30, s7, s20
6262; GCN-HSA-NEXT:    s_and_b32 s31, s9, s20
6263; GCN-HSA-NEXT:    s_and_b32 s33, s11, s20
6264; GCN-HSA-NEXT:    s_and_b32 s34, s13, s20
6265; GCN-HSA-NEXT:    s_and_b32 s35, s15, s20
6266; GCN-HSA-NEXT:    s_and_b32 s36, s17, s20
6267; GCN-HSA-NEXT:    s_and_b32 s20, s19, s20
6268; GCN-HSA-NEXT:    s_lshr_b32 s5, s5, 16
6269; GCN-HSA-NEXT:    s_lshr_b32 s7, s7, 16
6270; GCN-HSA-NEXT:    s_lshr_b32 s9, s9, 16
6271; GCN-HSA-NEXT:    s_lshr_b32 s11, s11, 16
6272; GCN-HSA-NEXT:    s_lshr_b32 s13, s13, 16
6273; GCN-HSA-NEXT:    s_lshr_b32 s15, s15, 16
6274; GCN-HSA-NEXT:    s_lshr_b32 s17, s17, 16
6275; GCN-HSA-NEXT:    s_lshr_b32 s19, s19, 16
6276; GCN-HSA-NEXT:    s_lshr_b32 s18, s18, 16
6277; GCN-HSA-NEXT:    s_lshr_b32 s16, s16, 16
6278; GCN-HSA-NEXT:    s_lshr_b32 s14, s14, 16
6279; GCN-HSA-NEXT:    s_lshr_b32 s12, s12, 16
6280; GCN-HSA-NEXT:    s_lshr_b32 s10, s10, 16
6281; GCN-HSA-NEXT:    s_lshr_b32 s8, s8, 16
6282; GCN-HSA-NEXT:    s_lshr_b32 s6, s6, 16
6283; GCN-HSA-NEXT:    s_lshr_b32 s4, s4, 16
6284; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xf0
6285; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6286; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6287; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6288; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xd0
6289; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6290; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s3
6291; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s2
6292; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xb0
6293; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6294; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s3
6295; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s2
6296; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x90
6297; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6298; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s3
6299; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s2
6300; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s20
6301; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s19
6302; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x70
6303; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6304; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6305; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s36
6306; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s17
6307; GCN-HSA-NEXT:    flat_store_dwordx4 v[6:7], v[0:3]
6308; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6309; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s35
6310; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s15
6311; GCN-HSA-NEXT:    flat_store_dwordx4 v[8:9], v[0:3]
6312; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6313; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s34
6314; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s13
6315; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x50
6316; GCN-HSA-NEXT:    flat_store_dwordx4 v[10:11], v[0:3]
6317; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6318; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s33
6319; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s11
6320; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6321; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6322; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6323; GCN-HSA-NEXT:    s_add_u32 s2, s0, 48
6324; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s31
6325; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s9
6326; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6327; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6328; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6329; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6330; GCN-HSA-NEXT:    s_add_u32 s2, s0, 16
6331; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s30
6332; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s7
6333; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6334; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6335; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6336; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6337; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xe0
6338; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s29
6339; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s5
6340; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6341; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6342; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6343; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6344; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xc0
6345; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s28
6346; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s18
6347; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6348; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6349; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6350; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6351; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0xa0
6352; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s27
6353; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s16
6354; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6355; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6356; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6357; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6358; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x80
6359; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s26
6360; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s14
6361; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6362; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6363; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6364; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6365; GCN-HSA-NEXT:    s_add_u32 s2, s0, 0x60
6366; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s25
6367; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s12
6368; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6369; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6370; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6371; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6372; GCN-HSA-NEXT:    s_add_u32 s2, s0, 64
6373; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s24
6374; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s10
6375; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6376; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6377; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6378; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6379; GCN-HSA-NEXT:    s_add_u32 s2, s0, 32
6380; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s23
6381; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s8
6382; GCN-HSA-NEXT:    s_addc_u32 s3, s1, 0
6383; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6384; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6385; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s22
6386; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s6
6387; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6388; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6389; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s1
6390; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s21
6391; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s4
6392; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s0
6393; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6394; GCN-HSA-NEXT:    s_endpgm
6395;
6396; GCN-NOHSA-VI-LABEL: constant_zextload_v32i16_to_v32i64:
6397; GCN-NOHSA-VI:       ; %bb.0:
6398; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[4:7], s[0:1], 0x24
6399; GCN-NOHSA-VI-NEXT:    s_mov_b32 s20, 0xffff
6400; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, 0
6401; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
6402; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
6403; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
6404; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s4
6405; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s5
6406; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[4:19], s[6:7], 0x0
6407; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, v1
6408; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
6409; GCN-NOHSA-VI-NEXT:    s_and_b32 s21, s4, s20
6410; GCN-NOHSA-VI-NEXT:    s_and_b32 s22, s5, s20
6411; GCN-NOHSA-VI-NEXT:    s_and_b32 s23, s6, s20
6412; GCN-NOHSA-VI-NEXT:    s_and_b32 s24, s7, s20
6413; GCN-NOHSA-VI-NEXT:    s_and_b32 s25, s8, s20
6414; GCN-NOHSA-VI-NEXT:    s_and_b32 s26, s9, s20
6415; GCN-NOHSA-VI-NEXT:    s_and_b32 s27, s10, s20
6416; GCN-NOHSA-VI-NEXT:    s_and_b32 s28, s11, s20
6417; GCN-NOHSA-VI-NEXT:    s_and_b32 s29, s12, s20
6418; GCN-NOHSA-VI-NEXT:    s_and_b32 s30, s13, s20
6419; GCN-NOHSA-VI-NEXT:    s_and_b32 s31, s14, s20
6420; GCN-NOHSA-VI-NEXT:    s_and_b32 s33, s15, s20
6421; GCN-NOHSA-VI-NEXT:    s_and_b32 s34, s16, s20
6422; GCN-NOHSA-VI-NEXT:    s_and_b32 s35, s17, s20
6423; GCN-NOHSA-VI-NEXT:    s_and_b32 s36, s18, s20
6424; GCN-NOHSA-VI-NEXT:    s_and_b32 s20, s19, s20
6425; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s19, s19, 16
6426; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s18, s18, 16
6427; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s20
6428; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s19
6429; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s17, s17, 16
6430; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
6431; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s16, s16, 16
6432; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s36
6433; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s18
6434; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:224
6435; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s15, s15, 16
6436; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s35
6437; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s17
6438; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:208
6439; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s14, s14, 16
6440; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s34
6441; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s16
6442; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:192
6443; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s13, s13, 16
6444; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s33
6445; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s15
6446; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:176
6447; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s12, s12, 16
6448; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s31
6449; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s14
6450; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:160
6451; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s11, s11, 16
6452; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s30
6453; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s13
6454; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:144
6455; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s10, s10, 16
6456; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s29
6457; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s12
6458; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:128
6459; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s9, s9, 16
6460; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s28
6461; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s11
6462; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
6463; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s8, s8, 16
6464; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s27
6465; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s10
6466; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
6467; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s7, s7, 16
6468; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s26
6469; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s9
6470; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
6471; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s6, s6, 16
6472; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s25
6473; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s8
6474; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
6475; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s5, s5, 16
6476; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s24
6477; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s7
6478; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
6479; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s4, s4, 16
6480; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s23
6481; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s6
6482; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
6483; GCN-NOHSA-VI-NEXT:    s_nop 0
6484; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s22
6485; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s5
6486; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
6487; GCN-NOHSA-VI-NEXT:    s_nop 0
6488; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s21
6489; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
6490; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
6491; GCN-NOHSA-VI-NEXT:    s_endpgm
6492;
6493; EG-LABEL: constant_zextload_v32i16_to_v32i64:
6494; EG:       ; %bb.0:
6495; EG-NEXT:    ALU 0, @30, KC0[CB0:0-32], KC1[]
6496; EG-NEXT:    TEX 2 @22
6497; EG-NEXT:    ALU 33, @31, KC0[], KC1[]
6498; EG-NEXT:    TEX 0 @28
6499; EG-NEXT:    ALU 92, @65, KC0[CB0:0-32], KC1[]
6500; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T23.XYZW, T50.X, 0
6501; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T24.XYZW, T49.X, 0
6502; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T25.XYZW, T48.X, 0
6503; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T20.XYZW, T47.X, 0
6504; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T26.XYZW, T46.X, 0
6505; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T27.XYZW, T45.X, 0
6506; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T28.XYZW, T44.X, 0
6507; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T22.XYZW, T43.X, 0
6508; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T19.XYZW, T42.X, 0
6509; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T30.XYZW, T41.X, 0
6510; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T31.XYZW, T40.X, 0
6511; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T21.XYZW, T39.X, 0
6512; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T32.XYZW, T38.X, 0
6513; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T33.XYZW, T37.X, 0
6514; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T34.XYZW, T36.X, 0
6515; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T29.XYZW, T35.X, 1
6516; EG-NEXT:    CF_END
6517; EG-NEXT:    Fetch clause starting at 22:
6518; EG-NEXT:     VTX_READ_128 T20.XYZW, T19.X, 48, #1
6519; EG-NEXT:     VTX_READ_128 T21.XYZW, T19.X, 16, #1
6520; EG-NEXT:     VTX_READ_128 T22.XYZW, T19.X, 32, #1
6521; EG-NEXT:    Fetch clause starting at 28:
6522; EG-NEXT:     VTX_READ_128 T29.XYZW, T19.X, 0, #1
6523; EG-NEXT:    ALU clause starting at 30:
6524; EG-NEXT:     MOV * T19.X, KC0[2].Z,
6525; EG-NEXT:    ALU clause starting at 31:
6526; EG-NEXT:     LSHR * T23.Z, T20.W, literal.x,
6527; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6528; EG-NEXT:     AND_INT T23.X, T20.W, literal.x,
6529; EG-NEXT:     MOV T23.Y, 0.0,
6530; EG-NEXT:     LSHR T24.Z, T20.Z, literal.y,
6531; EG-NEXT:     AND_INT * T24.X, T20.Z, literal.x,
6532; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6533; EG-NEXT:     MOV T24.Y, 0.0,
6534; EG-NEXT:     LSHR * T25.Z, T20.Y, literal.x,
6535; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6536; EG-NEXT:     AND_INT T25.X, T20.Y, literal.x,
6537; EG-NEXT:     MOV T25.Y, 0.0,
6538; EG-NEXT:     LSHR T20.Z, T20.X, literal.y,
6539; EG-NEXT:     AND_INT * T20.X, T20.X, literal.x,
6540; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6541; EG-NEXT:     MOV T20.Y, 0.0,
6542; EG-NEXT:     LSHR * T26.Z, T22.W, literal.x,
6543; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6544; EG-NEXT:     AND_INT T26.X, T22.W, literal.x,
6545; EG-NEXT:     MOV T26.Y, 0.0,
6546; EG-NEXT:     LSHR T27.Z, T22.Z, literal.y,
6547; EG-NEXT:     AND_INT * T27.X, T22.Z, literal.x,
6548; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6549; EG-NEXT:     MOV T27.Y, 0.0,
6550; EG-NEXT:     LSHR * T28.Z, T22.Y, literal.x,
6551; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6552; EG-NEXT:     AND_INT T28.X, T22.Y, literal.x,
6553; EG-NEXT:     MOV T28.Y, 0.0,
6554; EG-NEXT:     LSHR T22.Z, T22.X, literal.y,
6555; EG-NEXT:     AND_INT * T22.X, T22.X, literal.x,
6556; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6557; EG-NEXT:     MOV T22.Y, 0.0,
6558; EG-NEXT:     LSHR * T19.Z, T21.W, literal.x,
6559; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6560; EG-NEXT:    ALU clause starting at 65:
6561; EG-NEXT:     AND_INT T19.X, T21.W, literal.x,
6562; EG-NEXT:     MOV T19.Y, 0.0,
6563; EG-NEXT:     LSHR T30.Z, T21.Z, literal.y,
6564; EG-NEXT:     AND_INT * T30.X, T21.Z, literal.x,
6565; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6566; EG-NEXT:     MOV T30.Y, 0.0,
6567; EG-NEXT:     LSHR * T31.Z, T21.Y, literal.x,
6568; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6569; EG-NEXT:     AND_INT T31.X, T21.Y, literal.x,
6570; EG-NEXT:     MOV T31.Y, 0.0,
6571; EG-NEXT:     LSHR T21.Z, T21.X, literal.y,
6572; EG-NEXT:     AND_INT * T21.X, T21.X, literal.x,
6573; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6574; EG-NEXT:     MOV T21.Y, 0.0,
6575; EG-NEXT:     LSHR * T32.Z, T29.W, literal.x,
6576; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6577; EG-NEXT:     AND_INT T32.X, T29.W, literal.x,
6578; EG-NEXT:     MOV T32.Y, 0.0,
6579; EG-NEXT:     LSHR T33.Z, T29.Z, literal.y,
6580; EG-NEXT:     AND_INT * T33.X, T29.Z, literal.x,
6581; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6582; EG-NEXT:     MOV T33.Y, 0.0,
6583; EG-NEXT:     LSHR * T34.Z, T29.Y, literal.x,
6584; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
6585; EG-NEXT:     AND_INT T34.X, T29.Y, literal.x,
6586; EG-NEXT:     MOV T34.Y, 0.0,
6587; EG-NEXT:     LSHR T29.Z, T29.X, literal.y,
6588; EG-NEXT:     AND_INT * T29.X, T29.X, literal.x,
6589; EG-NEXT:    65535(9.183409e-41), 16(2.242078e-44)
6590; EG-NEXT:     MOV T29.Y, 0.0,
6591; EG-NEXT:     MOV T23.W, 0.0,
6592; EG-NEXT:     MOV * T24.W, 0.0,
6593; EG-NEXT:     MOV T25.W, 0.0,
6594; EG-NEXT:     MOV * T20.W, 0.0,
6595; EG-NEXT:     MOV T26.W, 0.0,
6596; EG-NEXT:     MOV * T27.W, 0.0,
6597; EG-NEXT:     MOV T28.W, 0.0,
6598; EG-NEXT:     MOV * T22.W, 0.0,
6599; EG-NEXT:     MOV T19.W, 0.0,
6600; EG-NEXT:     MOV * T30.W, 0.0,
6601; EG-NEXT:     MOV T31.W, 0.0,
6602; EG-NEXT:     MOV * T21.W, 0.0,
6603; EG-NEXT:     MOV T32.W, 0.0,
6604; EG-NEXT:     MOV * T33.W, 0.0,
6605; EG-NEXT:     MOV T34.W, 0.0,
6606; EG-NEXT:     MOV * T29.W, 0.0,
6607; EG-NEXT:     LSHR T35.X, KC0[2].Y, literal.x,
6608; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6609; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
6610; EG-NEXT:     LSHR T36.X, PV.W, literal.x,
6611; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6612; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
6613; EG-NEXT:     LSHR T37.X, PV.W, literal.x,
6614; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6615; EG-NEXT:    2(2.802597e-45), 48(6.726233e-44)
6616; EG-NEXT:     LSHR T38.X, PV.W, literal.x,
6617; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6618; EG-NEXT:    2(2.802597e-45), 64(8.968310e-44)
6619; EG-NEXT:     LSHR T39.X, PV.W, literal.x,
6620; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6621; EG-NEXT:    2(2.802597e-45), 80(1.121039e-43)
6622; EG-NEXT:     LSHR T40.X, PV.W, literal.x,
6623; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6624; EG-NEXT:    2(2.802597e-45), 96(1.345247e-43)
6625; EG-NEXT:     LSHR T41.X, PV.W, literal.x,
6626; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6627; EG-NEXT:    2(2.802597e-45), 112(1.569454e-43)
6628; EG-NEXT:     LSHR T42.X, PV.W, literal.x,
6629; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6630; EG-NEXT:    2(2.802597e-45), 128(1.793662e-43)
6631; EG-NEXT:     LSHR T43.X, PV.W, literal.x,
6632; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6633; EG-NEXT:    2(2.802597e-45), 144(2.017870e-43)
6634; EG-NEXT:     LSHR T44.X, PV.W, literal.x,
6635; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6636; EG-NEXT:    2(2.802597e-45), 160(2.242078e-43)
6637; EG-NEXT:     LSHR T45.X, PV.W, literal.x,
6638; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6639; EG-NEXT:    2(2.802597e-45), 176(2.466285e-43)
6640; EG-NEXT:     LSHR T46.X, PV.W, literal.x,
6641; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6642; EG-NEXT:    2(2.802597e-45), 192(2.690493e-43)
6643; EG-NEXT:     LSHR T47.X, PV.W, literal.x,
6644; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6645; EG-NEXT:    2(2.802597e-45), 208(2.914701e-43)
6646; EG-NEXT:     LSHR T48.X, PV.W, literal.x,
6647; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6648; EG-NEXT:    2(2.802597e-45), 224(3.138909e-43)
6649; EG-NEXT:     LSHR T49.X, PV.W, literal.x,
6650; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
6651; EG-NEXT:    2(2.802597e-45), 240(3.363116e-43)
6652; EG-NEXT:     LSHR * T50.X, PV.W, literal.x,
6653; EG-NEXT:    2(2.802597e-45), 0(0.000000e+00)
6654  %load = load <32 x i16>, <32 x i16> addrspace(4)* %in
6655  %ext = zext <32 x i16> %load to <32 x i64>
6656  store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
6657  ret void
6658}
6659
6660define amdgpu_kernel void @constant_sextload_v32i16_to_v32i64(<32 x i64> addrspace(1)* %out, <32 x i16> addrspace(4)* %in) #0 {
6661; GCN-NOHSA-SI-LABEL: constant_sextload_v32i16_to_v32i64:
6662; GCN-NOHSA-SI:       ; %bb.0:
6663; GCN-NOHSA-SI-NEXT:    s_load_dwordx4 s[16:19], s[0:1], 0x9
6664; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
6665; GCN-NOHSA-SI-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
6666; GCN-NOHSA-SI-NEXT:    s_waitcnt lgkmcnt(0)
6667; GCN-NOHSA-SI-NEXT:    s_mov_b32 s18, s15
6668; GCN-NOHSA-SI-NEXT:    s_mov_b32 s20, s13
6669; GCN-NOHSA-SI-NEXT:    s_mov_b32 s36, s11
6670; GCN-NOHSA-SI-NEXT:    s_mov_b32 s40, s9
6671; GCN-NOHSA-SI-NEXT:    s_mov_b32 s44, s7
6672; GCN-NOHSA-SI-NEXT:    s_mov_b32 s46, s5
6673; GCN-NOHSA-SI-NEXT:    s_mov_b32 s38, s3
6674; GCN-NOHSA-SI-NEXT:    s_mov_b32 s42, s1
6675; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s24, s14, 16
6676; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s26, s12, 16
6677; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s28, s10, 16
6678; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s34, s8, 16
6679; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[48:49], s[20:21], 0x100000
6680; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[50:51], s[18:19], 0x100000
6681; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s52, s6, 16
6682; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s54, s4, 16
6683; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s56, s2, 16
6684; GCN-NOHSA-SI-NEXT:    s_lshr_b32 s58, s0, 16
6685; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[18:19], s[0:1], 0x100000
6686; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[20:21], s[2:3], 0x100000
6687; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[22:23], s[4:5], 0x100000
6688; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[30:31], s[6:7], 0x100000
6689; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[60:61], s[8:9], 0x100000
6690; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[62:63], s[10:11], 0x100000
6691; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[64:65], s[12:13], 0x100000
6692; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[66:67], s[14:15], 0x100000
6693; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[68:69], s[0:1], 48
6694; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[70:71], s[2:3], 48
6695; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[6:7], s[6:7], 48
6696; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[8:9], s[8:9], 48
6697; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[10:11], s[10:11], 48
6698; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[2:3], s[12:13], 48
6699; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[12:13], s[14:15], 48
6700; GCN-NOHSA-SI-NEXT:    s_ashr_i64 s[4:5], s[4:5], 48
6701; GCN-NOHSA-SI-NEXT:    s_mov_b32 s0, s16
6702; GCN-NOHSA-SI-NEXT:    s_mov_b32 s1, s17
6703; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s50
6704; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s51
6705; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s12
6706; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s13
6707; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v4, s48
6708; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v5, s49
6709; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v6, s2
6710; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v7, s3
6711; GCN-NOHSA-SI-NEXT:    s_mov_b32 s3, 0xf000
6712; GCN-NOHSA-SI-NEXT:    s_mov_b32 s2, -1
6713; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[12:13], s[46:47], 0x100000
6714; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[14:15], s[44:45], 0x100000
6715; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[16:17], s[40:41], 0x100000
6716; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[36:37], s[36:37], 0x100000
6717; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[40:41], s[42:43], 0x100000
6718; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[38:39], s[38:39], 0x100000
6719; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v8, s36
6720; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v9, s37
6721; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v10, s10
6722; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v11, s11
6723; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v12, s16
6724; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v13, s17
6725; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v14, s8
6726; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v15, s9
6727; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v16, s14
6728; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v17, s15
6729; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v18, s6
6730; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v19, s7
6731; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v20, s12
6732; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v21, s13
6733; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v22, s4
6734; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v23, s5
6735; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
6736; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[4:5], s[58:59], 0x100000
6737; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[6:7], s[56:57], 0x100000
6738; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[8:9], s[54:55], 0x100000
6739; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[10:11], s[52:53], 0x100000
6740; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[12:13], s[34:35], 0x100000
6741; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[14:15], s[28:29], 0x100000
6742; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[16:17], s[26:27], 0x100000
6743; GCN-NOHSA-SI-NEXT:    s_bfe_i64 s[24:25], s[24:25], 0x100000
6744; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0 offset:208
6745; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[8:11], off, s[0:3], 0 offset:176
6746; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[12:15], off, s[0:3], 0 offset:144
6747; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[16:19], off, s[0:3], 0 offset:112
6748; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[20:23], off, s[0:3], 0 offset:80
6749; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(5)
6750; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s38
6751; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s39
6752; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s70
6753; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s71
6754; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
6755; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6756; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s40
6757; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s41
6758; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s68
6759; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s69
6760; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
6761; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6762; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s66
6763; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s67
6764; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v4, s64
6765; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v5, s65
6766; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v8, s62
6767; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v9, s63
6768; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v12, s60
6769; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v13, s61
6770; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v16, s30
6771; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v17, s31
6772; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v20, s22
6773; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v21, s23
6774; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v24, s20
6775; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v25, s21
6776; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s24
6777; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s25
6778; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:224
6779; GCN-NOHSA-SI-NEXT:    s_waitcnt expcnt(0)
6780; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v0, s18
6781; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v1, s19
6782; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v6, s16
6783; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v7, s17
6784; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[4:7], off, s[0:3], 0 offset:192
6785; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v10, s14
6786; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v11, s15
6787; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[8:11], off, s[0:3], 0 offset:160
6788; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v14, s12
6789; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v15, s13
6790; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[12:15], off, s[0:3], 0 offset:128
6791; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v18, s10
6792; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v19, s11
6793; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[16:19], off, s[0:3], 0 offset:96
6794; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v22, s8
6795; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v23, s9
6796; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[20:23], off, s[0:3], 0 offset:64
6797; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v26, s6
6798; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v27, s7
6799; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[24:27], off, s[0:3], 0 offset:32
6800; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v2, s4
6801; GCN-NOHSA-SI-NEXT:    v_mov_b32_e32 v3, s5
6802; GCN-NOHSA-SI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
6803; GCN-NOHSA-SI-NEXT:    s_endpgm
6804;
6805; GCN-HSA-LABEL: constant_sextload_v32i16_to_v32i64:
6806; GCN-HSA:       ; %bb.0:
6807; GCN-HSA-NEXT:    s_load_dwordx4 s[16:19], s[4:5], 0x0
6808; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
6809; GCN-HSA-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
6810; GCN-HSA-NEXT:    s_waitcnt lgkmcnt(0)
6811; GCN-HSA-NEXT:    s_mov_b32 s42, s15
6812; GCN-HSA-NEXT:    s_mov_b32 s44, s13
6813; GCN-HSA-NEXT:    s_mov_b32 s46, s11
6814; GCN-HSA-NEXT:    s_mov_b32 s48, s9
6815; GCN-HSA-NEXT:    s_mov_b32 s50, s7
6816; GCN-HSA-NEXT:    s_mov_b32 s52, s5
6817; GCN-HSA-NEXT:    s_mov_b32 s54, s3
6818; GCN-HSA-NEXT:    s_mov_b32 s56, s1
6819; GCN-HSA-NEXT:    s_lshr_b32 s58, s14, 16
6820; GCN-HSA-NEXT:    s_lshr_b32 s60, s12, 16
6821; GCN-HSA-NEXT:    s_lshr_b32 s62, s10, 16
6822; GCN-HSA-NEXT:    s_lshr_b32 s64, s8, 16
6823; GCN-HSA-NEXT:    s_lshr_b32 s66, s6, 16
6824; GCN-HSA-NEXT:    s_lshr_b32 s68, s4, 16
6825; GCN-HSA-NEXT:    s_lshr_b32 s70, s2, 16
6826; GCN-HSA-NEXT:    s_lshr_b32 s72, s0, 16
6827; GCN-HSA-NEXT:    s_bfe_i64 s[18:19], s[0:1], 0x100000
6828; GCN-HSA-NEXT:    s_bfe_i64 s[20:21], s[2:3], 0x100000
6829; GCN-HSA-NEXT:    s_ashr_i64 s[36:37], s[0:1], 48
6830; GCN-HSA-NEXT:    s_ashr_i64 s[38:39], s[2:3], 48
6831; GCN-HSA-NEXT:    s_ashr_i64 s[0:1], s[14:15], 48
6832; GCN-HSA-NEXT:    s_bfe_i64 s[2:3], s[42:43], 0x100000
6833; GCN-HSA-NEXT:    s_bfe_i64 s[22:23], s[4:5], 0x100000
6834; GCN-HSA-NEXT:    s_bfe_i64 s[24:25], s[6:7], 0x100000
6835; GCN-HSA-NEXT:    s_bfe_i64 s[26:27], s[8:9], 0x100000
6836; GCN-HSA-NEXT:    s_bfe_i64 s[28:29], s[10:11], 0x100000
6837; GCN-HSA-NEXT:    s_bfe_i64 s[30:31], s[12:13], 0x100000
6838; GCN-HSA-NEXT:    s_bfe_i64 s[34:35], s[14:15], 0x100000
6839; GCN-HSA-NEXT:    s_ashr_i64 s[40:41], s[4:5], 48
6840; GCN-HSA-NEXT:    s_ashr_i64 s[74:75], s[6:7], 48
6841; GCN-HSA-NEXT:    s_ashr_i64 s[76:77], s[8:9], 48
6842; GCN-HSA-NEXT:    s_ashr_i64 s[78:79], s[10:11], 48
6843; GCN-HSA-NEXT:    s_ashr_i64 s[80:81], s[12:13], 48
6844; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s2
6845; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s3
6846; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s0
6847; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s1
6848; GCN-HSA-NEXT:    s_bfe_i64 s[0:1], s[72:73], 0x100000
6849; GCN-HSA-NEXT:    s_bfe_i64 s[2:3], s[70:71], 0x100000
6850; GCN-HSA-NEXT:    s_bfe_i64 s[4:5], s[68:69], 0x100000
6851; GCN-HSA-NEXT:    s_bfe_i64 s[6:7], s[66:67], 0x100000
6852; GCN-HSA-NEXT:    s_bfe_i64 s[8:9], s[64:65], 0x100000
6853; GCN-HSA-NEXT:    s_bfe_i64 s[10:11], s[62:63], 0x100000
6854; GCN-HSA-NEXT:    s_bfe_i64 s[12:13], s[60:61], 0x100000
6855; GCN-HSA-NEXT:    s_bfe_i64 s[14:15], s[58:59], 0x100000
6856; GCN-HSA-NEXT:    s_bfe_i64 s[42:43], s[56:57], 0x100000
6857; GCN-HSA-NEXT:    s_bfe_i64 s[54:55], s[54:55], 0x100000
6858; GCN-HSA-NEXT:    s_bfe_i64 s[52:53], s[52:53], 0x100000
6859; GCN-HSA-NEXT:    s_bfe_i64 s[50:51], s[50:51], 0x100000
6860; GCN-HSA-NEXT:    s_bfe_i64 s[48:49], s[48:49], 0x100000
6861; GCN-HSA-NEXT:    s_bfe_i64 s[46:47], s[46:47], 0x100000
6862; GCN-HSA-NEXT:    s_bfe_i64 s[44:45], s[44:45], 0x100000
6863; GCN-HSA-NEXT:    s_add_u32 s56, s16, 0xf0
6864; GCN-HSA-NEXT:    s_addc_u32 s57, s17, 0
6865; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s44
6866; GCN-HSA-NEXT:    s_add_u32 s44, s16, 0xd0
6867; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s45
6868; GCN-HSA-NEXT:    s_addc_u32 s45, s17, 0
6869; GCN-HSA-NEXT:    v_mov_b32_e32 v24, s44
6870; GCN-HSA-NEXT:    v_mov_b32_e32 v25, s45
6871; GCN-HSA-NEXT:    s_add_u32 s44, s16, 0xb0
6872; GCN-HSA-NEXT:    s_addc_u32 s45, s17, 0
6873; GCN-HSA-NEXT:    v_mov_b32_e32 v26, s44
6874; GCN-HSA-NEXT:    v_mov_b32_e32 v27, s45
6875; GCN-HSA-NEXT:    s_add_u32 s44, s16, 0x90
6876; GCN-HSA-NEXT:    s_addc_u32 s45, s17, 0
6877; GCN-HSA-NEXT:    v_mov_b32_e32 v28, s44
6878; GCN-HSA-NEXT:    v_mov_b32_e32 v22, s56
6879; GCN-HSA-NEXT:    v_mov_b32_e32 v29, s45
6880; GCN-HSA-NEXT:    s_add_u32 s44, s16, 0x70
6881; GCN-HSA-NEXT:    v_mov_b32_e32 v23, s57
6882; GCN-HSA-NEXT:    s_addc_u32 s45, s17, 0
6883; GCN-HSA-NEXT:    flat_store_dwordx4 v[22:23], v[0:3]
6884; GCN-HSA-NEXT:    v_mov_b32_e32 v22, s40
6885; GCN-HSA-NEXT:    s_add_u32 s40, s16, 0x50
6886; GCN-HSA-NEXT:    v_mov_b32_e32 v23, s41
6887; GCN-HSA-NEXT:    s_addc_u32 s41, s17, 0
6888; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s80
6889; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s81
6890; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s38
6891; GCN-HSA-NEXT:    s_add_u32 s38, s16, 48
6892; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s39
6893; GCN-HSA-NEXT:    flat_store_dwordx4 v[24:25], v[4:7]
6894; GCN-HSA-NEXT:    s_addc_u32 s39, s17, 0
6895; GCN-HSA-NEXT:    v_mov_b32_e32 v24, s38
6896; GCN-HSA-NEXT:    v_mov_b32_e32 v25, s39
6897; GCN-HSA-NEXT:    s_add_u32 s38, s16, 16
6898; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s46
6899; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s47
6900; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s78
6901; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s79
6902; GCN-HSA-NEXT:    s_addc_u32 s39, s17, 0
6903; GCN-HSA-NEXT:    flat_store_dwordx4 v[26:27], v[8:11]
6904; GCN-HSA-NEXT:    v_mov_b32_e32 v12, s48
6905; GCN-HSA-NEXT:    v_mov_b32_e32 v10, s14
6906; GCN-HSA-NEXT:    s_add_u32 s14, s16, 0xe0
6907; GCN-HSA-NEXT:    v_mov_b32_e32 v13, s49
6908; GCN-HSA-NEXT:    v_mov_b32_e32 v14, s76
6909; GCN-HSA-NEXT:    v_mov_b32_e32 v15, s77
6910; GCN-HSA-NEXT:    v_mov_b32_e32 v11, s15
6911; GCN-HSA-NEXT:    s_addc_u32 s15, s17, 0
6912; GCN-HSA-NEXT:    v_mov_b32_e32 v30, s44
6913; GCN-HSA-NEXT:    flat_store_dwordx4 v[28:29], v[12:15]
6914; GCN-HSA-NEXT:    v_mov_b32_e32 v16, s50
6915; GCN-HSA-NEXT:    v_mov_b32_e32 v14, s12
6916; GCN-HSA-NEXT:    s_add_u32 s12, s16, 0xc0
6917; GCN-HSA-NEXT:    v_mov_b32_e32 v17, s51
6918; GCN-HSA-NEXT:    v_mov_b32_e32 v18, s74
6919; GCN-HSA-NEXT:    v_mov_b32_e32 v19, s75
6920; GCN-HSA-NEXT:    v_mov_b32_e32 v31, s45
6921; GCN-HSA-NEXT:    v_mov_b32_e32 v32, s40
6922; GCN-HSA-NEXT:    v_mov_b32_e32 v15, s13
6923; GCN-HSA-NEXT:    s_addc_u32 s13, s17, 0
6924; GCN-HSA-NEXT:    v_mov_b32_e32 v20, s52
6925; GCN-HSA-NEXT:    v_mov_b32_e32 v21, s53
6926; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s54
6927; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s55
6928; GCN-HSA-NEXT:    v_mov_b32_e32 v33, s41
6929; GCN-HSA-NEXT:    v_mov_b32_e32 v34, s38
6930; GCN-HSA-NEXT:    flat_store_dwordx4 v[30:31], v[16:19]
6931; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s42
6932; GCN-HSA-NEXT:    v_mov_b32_e32 v17, s15
6933; GCN-HSA-NEXT:    v_mov_b32_e32 v19, s13
6934; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s43
6935; GCN-HSA-NEXT:    v_mov_b32_e32 v35, s39
6936; GCN-HSA-NEXT:    v_mov_b32_e32 v6, s36
6937; GCN-HSA-NEXT:    v_mov_b32_e32 v7, s37
6938; GCN-HSA-NEXT:    v_mov_b32_e32 v8, s34
6939; GCN-HSA-NEXT:    v_mov_b32_e32 v9, s35
6940; GCN-HSA-NEXT:    v_mov_b32_e32 v12, s30
6941; GCN-HSA-NEXT:    v_mov_b32_e32 v13, s31
6942; GCN-HSA-NEXT:    v_mov_b32_e32 v16, s14
6943; GCN-HSA-NEXT:    flat_store_dwordx4 v[32:33], v[20:23]
6944; GCN-HSA-NEXT:    v_mov_b32_e32 v18, s12
6945; GCN-HSA-NEXT:    flat_store_dwordx4 v[24:25], v[0:3]
6946; GCN-HSA-NEXT:    flat_store_dwordx4 v[34:35], v[4:7]
6947; GCN-HSA-NEXT:    flat_store_dwordx4 v[16:17], v[8:11]
6948; GCN-HSA-NEXT:    flat_store_dwordx4 v[18:19], v[12:15]
6949; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s10
6950; GCN-HSA-NEXT:    s_add_u32 s10, s16, 0xa0
6951; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s11
6952; GCN-HSA-NEXT:    s_addc_u32 s11, s17, 0
6953; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s10
6954; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s28
6955; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s29
6956; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s11
6957; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6958; GCN-HSA-NEXT:    s_nop 0
6959; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s8
6960; GCN-HSA-NEXT:    s_add_u32 s8, s16, 0x80
6961; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s9
6962; GCN-HSA-NEXT:    s_addc_u32 s9, s17, 0
6963; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s8
6964; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s26
6965; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s27
6966; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s9
6967; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6968; GCN-HSA-NEXT:    s_nop 0
6969; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s6
6970; GCN-HSA-NEXT:    s_add_u32 s6, s16, 0x60
6971; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s7
6972; GCN-HSA-NEXT:    s_addc_u32 s7, s17, 0
6973; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s6
6974; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s24
6975; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s25
6976; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s7
6977; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6978; GCN-HSA-NEXT:    s_nop 0
6979; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s4
6980; GCN-HSA-NEXT:    s_add_u32 s4, s16, 64
6981; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s5
6982; GCN-HSA-NEXT:    s_addc_u32 s5, s17, 0
6983; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s4
6984; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s22
6985; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s23
6986; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s5
6987; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6988; GCN-HSA-NEXT:    s_nop 0
6989; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s2
6990; GCN-HSA-NEXT:    s_add_u32 s2, s16, 32
6991; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s3
6992; GCN-HSA-NEXT:    s_addc_u32 s3, s17, 0
6993; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s3
6994; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s20
6995; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s21
6996; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s2
6997; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
6998; GCN-HSA-NEXT:    v_mov_b32_e32 v4, s16
6999; GCN-HSA-NEXT:    v_mov_b32_e32 v0, s18
7000; GCN-HSA-NEXT:    v_mov_b32_e32 v1, s19
7001; GCN-HSA-NEXT:    v_mov_b32_e32 v2, s0
7002; GCN-HSA-NEXT:    v_mov_b32_e32 v3, s1
7003; GCN-HSA-NEXT:    v_mov_b32_e32 v5, s17
7004; GCN-HSA-NEXT:    flat_store_dwordx4 v[4:5], v[0:3]
7005; GCN-HSA-NEXT:    s_endpgm
7006;
7007; GCN-NOHSA-VI-LABEL: constant_sextload_v32i16_to_v32i64:
7008; GCN-NOHSA-VI:       ; %bb.0:
7009; GCN-NOHSA-VI-NEXT:    s_load_dwordx4 s[16:19], s[0:1], 0x24
7010; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
7011; GCN-NOHSA-VI-NEXT:    s_load_dwordx16 s[0:15], s[18:19], 0x0
7012; GCN-NOHSA-VI-NEXT:    s_waitcnt lgkmcnt(0)
7013; GCN-NOHSA-VI-NEXT:    s_mov_b32 s30, s1
7014; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s34, s1, 16
7015; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s46, s5, 16
7016; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s48, s6, 16
7017; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s62, s10, 16
7018; GCN-NOHSA-VI-NEXT:    s_mov_b32 s64, s11
7019; GCN-NOHSA-VI-NEXT:    s_mov_b32 s80, s15
7020; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s82, s15, 16
7021; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s28, s0, 16
7022; GCN-NOHSA-VI-NEXT:    s_mov_b32 s44, s5
7023; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[24:25], s[6:7], 0x100000
7024; GCN-NOHSA-VI-NEXT:    s_mov_b32 s50, s7
7025; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s52, s7, 16
7026; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[26:27], s[8:9], 0x100000
7027; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s54, s8, 16
7028; GCN-NOHSA-VI-NEXT:    s_mov_b32 s56, s9
7029; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s58, s9, 16
7030; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s78, s14, 16
7031; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[8:9], s[30:31], 0x100000
7032; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[6:7], s[34:35], 0x100000
7033; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[30:31], s[46:47], 0x100000
7034; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[34:35], s[48:49], 0x100000
7035; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[46:47], s[62:63], 0x100000
7036; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[48:49], s[64:65], 0x100000
7037; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[62:63], s[80:81], 0x100000
7038; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[64:65], s[82:83], 0x100000
7039; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[18:19], s[0:1], 0x100000
7040; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[20:21], s[2:3], 0x100000
7041; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s36, s2, 16
7042; GCN-NOHSA-VI-NEXT:    s_mov_b32 s38, s3
7043; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s40, s3, 16
7044; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[22:23], s[4:5], 0x100000
7045; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s42, s4, 16
7046; GCN-NOHSA-VI-NEXT:    s_mov_b32 s72, s13
7047; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s74, s13, 16
7048; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[76:77], s[14:15], 0x100000
7049; GCN-NOHSA-VI-NEXT:    s_mov_b32 s3, 0xf000
7050; GCN-NOHSA-VI-NEXT:    s_mov_b32 s2, -1
7051; GCN-NOHSA-VI-NEXT:    s_mov_b32 s0, s16
7052; GCN-NOHSA-VI-NEXT:    s_mov_b32 s1, s17
7053; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[4:5], s[28:29], 0x100000
7054; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[28:29], s[44:45], 0x100000
7055; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[44:45], s[58:59], 0x100000
7056; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[58:59], s[78:79], 0x100000
7057; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s62
7058; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s63
7059; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s64
7060; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s65
7061; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[68:69], s[12:13], 0x100000
7062; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s70, s12, 16
7063; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[12:13], s[40:41], 0x100000
7064; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[16:17], s[42:43], 0x100000
7065; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[40:41], s[54:55], 0x100000
7066; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[42:43], s[56:57], 0x100000
7067; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[54:55], s[72:73], 0x100000
7068; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[56:57], s[74:75], 0x100000
7069; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:240
7070; GCN-NOHSA-VI-NEXT:    s_lshr_b32 s66, s11, 16
7071; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s76
7072; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s77
7073; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s58
7074; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s59
7075; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[14:15], s[38:39], 0x100000
7076; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[38:39], s[52:53], 0x100000
7077; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[52:53], s[70:71], 0x100000
7078; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:224
7079; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[60:61], s[10:11], 0x100000
7080; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s54
7081; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s55
7082; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s56
7083; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s57
7084; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[10:11], s[36:37], 0x100000
7085; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[36:37], s[50:51], 0x100000
7086; GCN-NOHSA-VI-NEXT:    s_bfe_i64 s[50:51], s[66:67], 0x100000
7087; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:208
7088; GCN-NOHSA-VI-NEXT:    s_nop 0
7089; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s68
7090; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s69
7091; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s52
7092; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s53
7093; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:192
7094; GCN-NOHSA-VI-NEXT:    s_nop 0
7095; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s48
7096; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s49
7097; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s50
7098; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s51
7099; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:176
7100; GCN-NOHSA-VI-NEXT:    s_nop 0
7101; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s60
7102; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s61
7103; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s46
7104; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s47
7105; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:160
7106; GCN-NOHSA-VI-NEXT:    s_nop 0
7107; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s42
7108; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s43
7109; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s44
7110; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s45
7111; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:144
7112; GCN-NOHSA-VI-NEXT:    s_nop 0
7113; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s26
7114; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s27
7115; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s40
7116; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s41
7117; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:128
7118; GCN-NOHSA-VI-NEXT:    s_nop 0
7119; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s36
7120; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s37
7121; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s38
7122; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s39
7123; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:112
7124; GCN-NOHSA-VI-NEXT:    s_nop 0
7125; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s24
7126; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s25
7127; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s34
7128; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s35
7129; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:96
7130; GCN-NOHSA-VI-NEXT:    s_nop 0
7131; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s28
7132; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s29
7133; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s30
7134; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s31
7135; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:80
7136; GCN-NOHSA-VI-NEXT:    s_nop 0
7137; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s22
7138; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s23
7139; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s16
7140; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s17
7141; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:64
7142; GCN-NOHSA-VI-NEXT:    s_nop 0
7143; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s14
7144; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s15
7145; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s12
7146; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s13
7147; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:48
7148; GCN-NOHSA-VI-NEXT:    s_nop 0
7149; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s20
7150; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s21
7151; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s10
7152; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s11
7153; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:32
7154; GCN-NOHSA-VI-NEXT:    s_nop 0
7155; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s8
7156; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s9
7157; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s6
7158; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s7
7159; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0 offset:16
7160; GCN-NOHSA-VI-NEXT:    s_nop 0
7161; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v0, s18
7162; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v1, s19
7163; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v2, s4
7164; GCN-NOHSA-VI-NEXT:    v_mov_b32_e32 v3, s5
7165; GCN-NOHSA-VI-NEXT:    buffer_store_dwordx4 v[0:3], off, s[0:3], 0
7166; GCN-NOHSA-VI-NEXT:    s_endpgm
7167;
7168; EG-LABEL: constant_sextload_v32i16_to_v32i64:
7169; EG:       ; %bb.0:
7170; EG-NEXT:    ALU 0, @30, KC0[CB0:0-32], KC1[]
7171; EG-NEXT:    TEX 0 @22
7172; EG-NEXT:    ALU 55, @31, KC0[CB0:0-32], KC1[]
7173; EG-NEXT:    TEX 2 @24
7174; EG-NEXT:    ALU 74, @87, KC0[CB0:0-32], KC1[]
7175; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T50.XYZW, T38.X, 0
7176; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T49.XYZW, T36.X, 0
7177; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T39.XYZW, T34.X, 0
7178; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T48.XYZW, T33.X, 0
7179; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T47.XYZW, T32.X, 0
7180; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T46.XYZW, T31.X, 0
7181; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T40.XYZW, T30.X, 0
7182; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T45.XYZW, T29.X, 0
7183; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T44.XYZW, T28.X, 0
7184; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T43.XYZW, T27.X, 0
7185; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T20.XYZW, T26.X, 0
7186; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T42.XYZW, T25.X, 0
7187; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T41.XYZW, T24.X, 0
7188; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T19.XYZW, T23.X, 0
7189; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T37.XYZW, T22.X, 0
7190; EG-NEXT:    MEM_RAT_CACHELESS STORE_RAW T35.XYZW, T21.X, 1
7191; EG-NEXT:    CF_END
7192; EG-NEXT:    Fetch clause starting at 22:
7193; EG-NEXT:     VTX_READ_128 T20.XYZW, T19.X, 0, #1
7194; EG-NEXT:    Fetch clause starting at 24:
7195; EG-NEXT:     VTX_READ_128 T38.XYZW, T19.X, 48, #1
7196; EG-NEXT:     VTX_READ_128 T39.XYZW, T19.X, 32, #1
7197; EG-NEXT:     VTX_READ_128 T40.XYZW, T19.X, 16, #1
7198; EG-NEXT:    ALU clause starting at 30:
7199; EG-NEXT:     MOV * T19.X, KC0[2].Z,
7200; EG-NEXT:    ALU clause starting at 31:
7201; EG-NEXT:     LSHR T21.X, KC0[2].Y, literal.x,
7202; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7203; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
7204; EG-NEXT:     LSHR T22.X, PV.W, literal.x,
7205; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7206; EG-NEXT:    2(2.802597e-45), 32(4.484155e-44)
7207; EG-NEXT:     LSHR T23.X, PV.W, literal.x,
7208; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7209; EG-NEXT:    2(2.802597e-45), 48(6.726233e-44)
7210; EG-NEXT:     LSHR T24.X, PV.W, literal.x,
7211; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7212; EG-NEXT:    2(2.802597e-45), 64(8.968310e-44)
7213; EG-NEXT:     LSHR T25.X, PV.W, literal.x,
7214; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7215; EG-NEXT:    2(2.802597e-45), 80(1.121039e-43)
7216; EG-NEXT:     LSHR T26.X, PV.W, literal.x,
7217; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7218; EG-NEXT:    2(2.802597e-45), 96(1.345247e-43)
7219; EG-NEXT:     LSHR T27.X, PV.W, literal.x,
7220; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7221; EG-NEXT:    2(2.802597e-45), 112(1.569454e-43)
7222; EG-NEXT:     LSHR T28.X, PV.W, literal.x,
7223; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7224; EG-NEXT:    2(2.802597e-45), 128(1.793662e-43)
7225; EG-NEXT:     LSHR T29.X, PV.W, literal.x,
7226; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7227; EG-NEXT:    2(2.802597e-45), 144(2.017870e-43)
7228; EG-NEXT:     LSHR T30.X, PV.W, literal.x,
7229; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7230; EG-NEXT:    2(2.802597e-45), 160(2.242078e-43)
7231; EG-NEXT:     LSHR T31.X, PV.W, literal.x,
7232; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7233; EG-NEXT:    2(2.802597e-45), 176(2.466285e-43)
7234; EG-NEXT:     LSHR T32.X, PV.W, literal.x,
7235; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7236; EG-NEXT:    2(2.802597e-45), 192(2.690493e-43)
7237; EG-NEXT:     LSHR T33.X, PV.W, literal.x,
7238; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.y,
7239; EG-NEXT:    2(2.802597e-45), 208(2.914701e-43)
7240; EG-NEXT:     LSHR T34.X, PV.W, literal.x,
7241; EG-NEXT:     ADD_INT T0.W, KC0[2].Y, literal.y,
7242; EG-NEXT:     ASHR * T35.W, T20.X, literal.z,
7243; EG-NEXT:    2(2.802597e-45), 224(3.138909e-43)
7244; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
7245; EG-NEXT:     LSHR T36.X, PV.W, literal.x,
7246; EG-NEXT:     ASHR T35.Z, T20.X, literal.y,
7247; EG-NEXT:     ASHR * T37.W, T20.Y, literal.z,
7248; EG-NEXT:    2(2.802597e-45), 16(2.242078e-44)
7249; EG-NEXT:    31(4.344025e-44), 0(0.000000e+00)
7250; EG-NEXT:     BFE_INT T35.X, T20.X, 0.0, literal.x,
7251; EG-NEXT:     ASHR * T37.Z, T20.Y, literal.x,
7252; EG-NEXT:    16(2.242078e-44), 0(0.000000e+00)
7253; EG-NEXT:     BFE_INT T37.X, T20.Y, 0.0, literal.x,
7254; EG-NEXT:     ASHR T35.Y, PV.X, literal.y,
7255; EG-NEXT:     ASHR * T19.W, T20.Z, literal.y,
7256; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7257; EG-NEXT:    ALU clause starting at 87:
7258; EG-NEXT:     ASHR T19.Z, T20.Z, literal.x,
7259; EG-NEXT:     ASHR * T41.W, T20.W, literal.y,
7260; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7261; EG-NEXT:     BFE_INT T19.X, T20.Z, 0.0, literal.x,
7262; EG-NEXT:     ASHR T37.Y, T37.X, literal.y,
7263; EG-NEXT:     ASHR T41.Z, T20.W, literal.x,
7264; EG-NEXT:     ASHR * T42.W, T40.X, literal.y, BS:VEC_120/SCL_212
7265; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7266; EG-NEXT:     BFE_INT T41.X, T20.W, 0.0, literal.x,
7267; EG-NEXT:     ASHR T19.Y, PV.X, literal.y,
7268; EG-NEXT:     ASHR T42.Z, T40.X, literal.x,
7269; EG-NEXT:     ASHR * T20.W, T40.Y, literal.y,
7270; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7271; EG-NEXT:     BFE_INT T42.X, T40.X, 0.0, literal.x,
7272; EG-NEXT:     ASHR T41.Y, PV.X, literal.y,
7273; EG-NEXT:     ASHR T20.Z, T40.Y, literal.x,
7274; EG-NEXT:     ASHR * T43.W, T40.Z, literal.y,
7275; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7276; EG-NEXT:     BFE_INT T20.X, T40.Y, 0.0, literal.x,
7277; EG-NEXT:     ASHR T42.Y, PV.X, literal.y,
7278; EG-NEXT:     ASHR T43.Z, T40.Z, literal.x,
7279; EG-NEXT:     ASHR * T44.W, T40.W, literal.y,
7280; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7281; EG-NEXT:     BFE_INT T43.X, T40.Z, 0.0, literal.x,
7282; EG-NEXT:     ASHR T20.Y, PV.X, literal.y,
7283; EG-NEXT:     ASHR T44.Z, T40.W, literal.x,
7284; EG-NEXT:     ASHR * T45.W, T39.X, literal.y,
7285; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7286; EG-NEXT:     BFE_INT T44.X, T40.W, 0.0, literal.x,
7287; EG-NEXT:     ASHR T43.Y, PV.X, literal.y,
7288; EG-NEXT:     ASHR T45.Z, T39.X, literal.x,
7289; EG-NEXT:     ASHR * T40.W, T39.Y, literal.y,
7290; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7291; EG-NEXT:     BFE_INT T45.X, T39.X, 0.0, literal.x,
7292; EG-NEXT:     ASHR T44.Y, PV.X, literal.y,
7293; EG-NEXT:     ASHR T40.Z, T39.Y, literal.x,
7294; EG-NEXT:     ASHR * T46.W, T39.Z, literal.y,
7295; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7296; EG-NEXT:     BFE_INT T40.X, T39.Y, 0.0, literal.x,
7297; EG-NEXT:     ASHR T45.Y, PV.X, literal.y,
7298; EG-NEXT:     ASHR T46.Z, T39.Z, literal.x,
7299; EG-NEXT:     ASHR * T47.W, T39.W, literal.y,
7300; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7301; EG-NEXT:     BFE_INT T46.X, T39.Z, 0.0, literal.x,
7302; EG-NEXT:     ASHR T40.Y, PV.X, literal.y,
7303; EG-NEXT:     ASHR T47.Z, T39.W, literal.x,
7304; EG-NEXT:     ASHR * T48.W, T38.X, literal.y,
7305; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7306; EG-NEXT:     BFE_INT T47.X, T39.W, 0.0, literal.x,
7307; EG-NEXT:     ASHR T46.Y, PV.X, literal.y,
7308; EG-NEXT:     ASHR T48.Z, T38.X, literal.x,
7309; EG-NEXT:     ASHR * T39.W, T38.Y, literal.y,
7310; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7311; EG-NEXT:     BFE_INT T48.X, T38.X, 0.0, literal.x,
7312; EG-NEXT:     ASHR T47.Y, PV.X, literal.y,
7313; EG-NEXT:     ASHR T39.Z, T38.Y, literal.x,
7314; EG-NEXT:     ASHR * T49.W, T38.Z, literal.y,
7315; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7316; EG-NEXT:     BFE_INT T39.X, T38.Y, 0.0, literal.x,
7317; EG-NEXT:     ASHR T48.Y, PV.X, literal.y,
7318; EG-NEXT:     ASHR T49.Z, T38.Z, literal.x,
7319; EG-NEXT:     ASHR * T50.W, T38.W, literal.y,
7320; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7321; EG-NEXT:     BFE_INT T49.X, T38.Z, 0.0, literal.x,
7322; EG-NEXT:     ASHR T39.Y, PV.X, literal.y,
7323; EG-NEXT:     ASHR * T50.Z, T38.W, literal.x,
7324; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7325; EG-NEXT:     BFE_INT T50.X, T38.W, 0.0, literal.x,
7326; EG-NEXT:     ASHR T49.Y, PV.X, literal.y,
7327; EG-NEXT:     ADD_INT * T0.W, KC0[2].Y, literal.z,
7328; EG-NEXT:    16(2.242078e-44), 31(4.344025e-44)
7329; EG-NEXT:    240(3.363116e-43), 0(0.000000e+00)
7330; EG-NEXT:     LSHR T38.X, PV.W, literal.x,
7331; EG-NEXT:     ASHR * T50.Y, PV.X, literal.y,
7332; EG-NEXT:    2(2.802597e-45), 31(4.344025e-44)
7333  %load = load <32 x i16>, <32 x i16> addrspace(4)* %in
7334  %ext = sext <32 x i16> %load to <32 x i64>
7335  store <32 x i64> %ext, <32 x i64> addrspace(1)* %out
7336  ret void
7337}
7338
7339; These trigger undefined register machine verifier errors
7340
7341; define amdgpu_kernel void @constant_zextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(4)* %in) #0 {
7342;   %load = load <64 x i16>, <64 x i16> addrspace(4)* %in
7343;   %ext = zext <64 x i16> %load to <64 x i64>
7344;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
7345;   ret void
7346; }
7347
7348; define amdgpu_kernel void @constant_sextload_v64i16_to_v64i64(<64 x i64> addrspace(1)* %out, <64 x i16> addrspace(4)* %in) #0 {
7349;   %load = load <64 x i16>, <64 x i16> addrspace(4)* %in
7350;   %ext = sext <64 x i16> %load to <64 x i64>
7351;   store <64 x i64> %ext, <64 x i64> addrspace(1)* %out
7352;   ret void
7353; }
7354
7355attributes #0 = { nounwind }
7356