1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefixes=VERDE %s
3; RUN: llc -march=amdgcn -mcpu=fiji -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefixes=FIJI %s
4; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX6789 %s
5; RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-enable-prt-strict-null -verify-machineinstrs < %s | FileCheck -check-prefixes=NOPRT %s
6; RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX10 %s
7; RUN: llc -march=amdgcn -mcpu=gfx1100 -amdgpu-enable-delay-alu=0 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10PLUS,GFX11 %s
8
9define amdgpu_ps <4 x float> @load_1d(<8 x i32> inreg %rsrc, i32 %s) {
10; VERDE-LABEL: load_1d:
11; VERDE:       ; %bb.0: ; %main_body
12; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
13; VERDE-NEXT:    s_waitcnt vmcnt(0)
14; VERDE-NEXT:    ; return to shader part epilog
15;
16; FIJI-LABEL: load_1d:
17; FIJI:       ; %bb.0: ; %main_body
18; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
19; FIJI-NEXT:    s_waitcnt vmcnt(0)
20; FIJI-NEXT:    ; return to shader part epilog
21;
22; GFX6789-LABEL: load_1d:
23; GFX6789:       ; %bb.0: ; %main_body
24; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
25; GFX6789-NEXT:    s_waitcnt vmcnt(0)
26; GFX6789-NEXT:    ; return to shader part epilog
27;
28; NOPRT-LABEL: load_1d:
29; NOPRT:       ; %bb.0: ; %main_body
30; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm
31; NOPRT-NEXT:    s_waitcnt vmcnt(0)
32; NOPRT-NEXT:    ; return to shader part epilog
33;
34; GFX10PLUS-LABEL: load_1d:
35; GFX10PLUS:       ; %bb.0: ; %main_body
36; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
37; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
38; GFX10PLUS-NEXT:    ; return to shader part epilog
39main_body:
40  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
41  ret <4 x float> %v
42}
43
44define amdgpu_ps <4 x float> @load_1d_tfe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s) {
45; VERDE-LABEL: load_1d_tfe:
46; VERDE:       ; %bb.0: ; %main_body
47; VERDE-NEXT:    v_mov_b32_e32 v5, v0
48; VERDE-NEXT:    v_mov_b32_e32 v0, 0
49; VERDE-NEXT:    v_mov_b32_e32 v1, v0
50; VERDE-NEXT:    v_mov_b32_e32 v2, v0
51; VERDE-NEXT:    v_mov_b32_e32 v3, v0
52; VERDE-NEXT:    v_mov_b32_e32 v4, v0
53; VERDE-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe
54; VERDE-NEXT:    s_mov_b32 s11, 0xf000
55; VERDE-NEXT:    s_mov_b32 s10, -1
56; VERDE-NEXT:    s_waitcnt vmcnt(0)
57; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
58; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
59; VERDE-NEXT:    ; return to shader part epilog
60;
61; FIJI-LABEL: load_1d_tfe:
62; FIJI:       ; %bb.0: ; %main_body
63; FIJI-NEXT:    v_mov_b32_e32 v5, v0
64; FIJI-NEXT:    v_mov_b32_e32 v0, 0
65; FIJI-NEXT:    v_mov_b32_e32 v1, v0
66; FIJI-NEXT:    v_mov_b32_e32 v2, v0
67; FIJI-NEXT:    v_mov_b32_e32 v3, v0
68; FIJI-NEXT:    v_mov_b32_e32 v4, v0
69; FIJI-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe
70; FIJI-NEXT:    s_mov_b32 s11, 0xf000
71; FIJI-NEXT:    s_mov_b32 s10, -1
72; FIJI-NEXT:    s_waitcnt vmcnt(0)
73; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
74; FIJI-NEXT:    s_waitcnt vmcnt(0)
75; FIJI-NEXT:    ; return to shader part epilog
76;
77; GFX6789-LABEL: load_1d_tfe:
78; GFX6789:       ; %bb.0: ; %main_body
79; GFX6789-NEXT:    v_mov_b32_e32 v6, 0
80; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
81; GFX6789-NEXT:    v_mov_b32_e32 v7, v6
82; GFX6789-NEXT:    v_mov_b32_e32 v8, v6
83; GFX6789-NEXT:    v_mov_b32_e32 v9, v6
84; GFX6789-NEXT:    v_mov_b32_e32 v10, v6
85; GFX6789-NEXT:    v_mov_b32_e32 v0, v6
86; GFX6789-NEXT:    v_mov_b32_e32 v1, v7
87; GFX6789-NEXT:    v_mov_b32_e32 v2, v8
88; GFX6789-NEXT:    v_mov_b32_e32 v3, v9
89; GFX6789-NEXT:    v_mov_b32_e32 v4, v10
90; GFX6789-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm tfe
91; GFX6789-NEXT:    s_waitcnt vmcnt(0)
92; GFX6789-NEXT:    global_store_dword v6, v4, s[8:9]
93; GFX6789-NEXT:    s_waitcnt vmcnt(0)
94; GFX6789-NEXT:    ; return to shader part epilog
95;
96; NOPRT-LABEL: load_1d_tfe:
97; NOPRT:       ; %bb.0: ; %main_body
98; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
99; NOPRT-NEXT:    image_load v[0:4], v0, s[0:7] dmask:0xf unorm tfe
100; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
101; NOPRT-NEXT:    s_waitcnt vmcnt(0)
102; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
103; NOPRT-NEXT:    s_waitcnt vmcnt(0)
104; NOPRT-NEXT:    ; return to shader part epilog
105;
106; GFX10-LABEL: load_1d_tfe:
107; GFX10:       ; %bb.0: ; %main_body
108; GFX10-NEXT:    v_mov_b32_e32 v6, 0
109; GFX10-NEXT:    v_mov_b32_e32 v5, v0
110; GFX10-NEXT:    v_mov_b32_e32 v7, v6
111; GFX10-NEXT:    v_mov_b32_e32 v8, v6
112; GFX10-NEXT:    v_mov_b32_e32 v9, v6
113; GFX10-NEXT:    v_mov_b32_e32 v10, v6
114; GFX10-NEXT:    v_mov_b32_e32 v0, v6
115; GFX10-NEXT:    v_mov_b32_e32 v1, v7
116; GFX10-NEXT:    v_mov_b32_e32 v2, v8
117; GFX10-NEXT:    v_mov_b32_e32 v3, v9
118; GFX10-NEXT:    v_mov_b32_e32 v4, v10
119; GFX10-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe
120; GFX10-NEXT:    s_waitcnt vmcnt(0)
121; GFX10-NEXT:    global_store_dword v6, v4, s[8:9]
122; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
123; GFX10-NEXT:    ; return to shader part epilog
124;
125; GFX11-LABEL: load_1d_tfe:
126; GFX11:       ; %bb.0: ; %main_body
127; GFX11-NEXT:    v_mov_b32_e32 v6, 0
128; GFX11-NEXT:    v_mov_b32_e32 v5, v0
129; GFX11-NEXT:    v_mov_b32_e32 v7, v6
130; GFX11-NEXT:    v_mov_b32_e32 v8, v6
131; GFX11-NEXT:    v_mov_b32_e32 v9, v6
132; GFX11-NEXT:    v_mov_b32_e32 v10, v6
133; GFX11-NEXT:    v_mov_b32_e32 v0, v6
134; GFX11-NEXT:    v_mov_b32_e32 v1, v7
135; GFX11-NEXT:    v_mov_b32_e32 v2, v8
136; GFX11-NEXT:    v_mov_b32_e32 v3, v9
137; GFX11-NEXT:    v_mov_b32_e32 v4, v10
138; GFX11-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm tfe
139; GFX11-NEXT:    s_waitcnt vmcnt(0)
140; GFX11-NEXT:    global_store_b32 v6, v4, s[8:9]
141; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
142; GFX11-NEXT:    ; return to shader part epilog
143main_body:
144  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
145  %v.vec = extractvalue {<4 x float>, i32} %v, 0
146  %v.err = extractvalue {<4 x float>, i32} %v, 1
147  store i32 %v.err, i32 addrspace(1)* %out, align 4
148  ret <4 x float> %v.vec
149}
150
151define amdgpu_ps <4 x float> @load_1d_lwe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s) {
152; VERDE-LABEL: load_1d_lwe:
153; VERDE:       ; %bb.0: ; %main_body
154; VERDE-NEXT:    v_mov_b32_e32 v5, v0
155; VERDE-NEXT:    v_mov_b32_e32 v0, 0
156; VERDE-NEXT:    v_mov_b32_e32 v1, v0
157; VERDE-NEXT:    v_mov_b32_e32 v2, v0
158; VERDE-NEXT:    v_mov_b32_e32 v3, v0
159; VERDE-NEXT:    v_mov_b32_e32 v4, v0
160; VERDE-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe
161; VERDE-NEXT:    s_mov_b32 s11, 0xf000
162; VERDE-NEXT:    s_mov_b32 s10, -1
163; VERDE-NEXT:    s_waitcnt vmcnt(0)
164; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
165; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
166; VERDE-NEXT:    ; return to shader part epilog
167;
168; FIJI-LABEL: load_1d_lwe:
169; FIJI:       ; %bb.0: ; %main_body
170; FIJI-NEXT:    v_mov_b32_e32 v5, v0
171; FIJI-NEXT:    v_mov_b32_e32 v0, 0
172; FIJI-NEXT:    v_mov_b32_e32 v1, v0
173; FIJI-NEXT:    v_mov_b32_e32 v2, v0
174; FIJI-NEXT:    v_mov_b32_e32 v3, v0
175; FIJI-NEXT:    v_mov_b32_e32 v4, v0
176; FIJI-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe
177; FIJI-NEXT:    s_mov_b32 s11, 0xf000
178; FIJI-NEXT:    s_mov_b32 s10, -1
179; FIJI-NEXT:    s_waitcnt vmcnt(0)
180; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
181; FIJI-NEXT:    s_waitcnt vmcnt(0)
182; FIJI-NEXT:    ; return to shader part epilog
183;
184; GFX6789-LABEL: load_1d_lwe:
185; GFX6789:       ; %bb.0: ; %main_body
186; GFX6789-NEXT:    v_mov_b32_e32 v6, 0
187; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
188; GFX6789-NEXT:    v_mov_b32_e32 v7, v6
189; GFX6789-NEXT:    v_mov_b32_e32 v8, v6
190; GFX6789-NEXT:    v_mov_b32_e32 v9, v6
191; GFX6789-NEXT:    v_mov_b32_e32 v10, v6
192; GFX6789-NEXT:    v_mov_b32_e32 v0, v6
193; GFX6789-NEXT:    v_mov_b32_e32 v1, v7
194; GFX6789-NEXT:    v_mov_b32_e32 v2, v8
195; GFX6789-NEXT:    v_mov_b32_e32 v3, v9
196; GFX6789-NEXT:    v_mov_b32_e32 v4, v10
197; GFX6789-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf unorm lwe
198; GFX6789-NEXT:    s_waitcnt vmcnt(0)
199; GFX6789-NEXT:    global_store_dword v6, v4, s[8:9]
200; GFX6789-NEXT:    s_waitcnt vmcnt(0)
201; GFX6789-NEXT:    ; return to shader part epilog
202;
203; NOPRT-LABEL: load_1d_lwe:
204; NOPRT:       ; %bb.0: ; %main_body
205; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
206; NOPRT-NEXT:    image_load v[0:4], v0, s[0:7] dmask:0xf unorm lwe
207; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
208; NOPRT-NEXT:    s_waitcnt vmcnt(0)
209; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
210; NOPRT-NEXT:    s_waitcnt vmcnt(0)
211; NOPRT-NEXT:    ; return to shader part epilog
212;
213; GFX10-LABEL: load_1d_lwe:
214; GFX10:       ; %bb.0: ; %main_body
215; GFX10-NEXT:    v_mov_b32_e32 v6, 0
216; GFX10-NEXT:    v_mov_b32_e32 v5, v0
217; GFX10-NEXT:    v_mov_b32_e32 v7, v6
218; GFX10-NEXT:    v_mov_b32_e32 v8, v6
219; GFX10-NEXT:    v_mov_b32_e32 v9, v6
220; GFX10-NEXT:    v_mov_b32_e32 v10, v6
221; GFX10-NEXT:    v_mov_b32_e32 v0, v6
222; GFX10-NEXT:    v_mov_b32_e32 v1, v7
223; GFX10-NEXT:    v_mov_b32_e32 v2, v8
224; GFX10-NEXT:    v_mov_b32_e32 v3, v9
225; GFX10-NEXT:    v_mov_b32_e32 v4, v10
226; GFX10-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
227; GFX10-NEXT:    s_waitcnt vmcnt(0)
228; GFX10-NEXT:    global_store_dword v6, v4, s[8:9]
229; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
230; GFX10-NEXT:    ; return to shader part epilog
231;
232; GFX11-LABEL: load_1d_lwe:
233; GFX11:       ; %bb.0: ; %main_body
234; GFX11-NEXT:    v_mov_b32_e32 v6, 0
235; GFX11-NEXT:    v_mov_b32_e32 v5, v0
236; GFX11-NEXT:    v_mov_b32_e32 v7, v6
237; GFX11-NEXT:    v_mov_b32_e32 v8, v6
238; GFX11-NEXT:    v_mov_b32_e32 v9, v6
239; GFX11-NEXT:    v_mov_b32_e32 v10, v6
240; GFX11-NEXT:    v_mov_b32_e32 v0, v6
241; GFX11-NEXT:    v_mov_b32_e32 v1, v7
242; GFX11-NEXT:    v_mov_b32_e32 v2, v8
243; GFX11-NEXT:    v_mov_b32_e32 v3, v9
244; GFX11-NEXT:    v_mov_b32_e32 v4, v10
245; GFX11-NEXT:    image_load v[0:4], v5, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
246; GFX11-NEXT:    s_waitcnt vmcnt(0)
247; GFX11-NEXT:    global_store_b32 v6, v4, s[8:9]
248; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
249; GFX11-NEXT:    ; return to shader part epilog
250main_body:
251  %v = call {<4 x float>, i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 2, i32 0)
252  %v.vec = extractvalue {<4 x float>, i32} %v, 0
253  %v.err = extractvalue {<4 x float>, i32} %v, 1
254  store i32 %v.err, i32 addrspace(1)* %out, align 4
255  ret <4 x float> %v.vec
256}
257
258define amdgpu_ps <4 x float> @load_2d(<8 x i32> inreg %rsrc, i32 %s, i32 %t) {
259; VERDE-LABEL: load_2d:
260; VERDE:       ; %bb.0: ; %main_body
261; VERDE-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
262; VERDE-NEXT:    s_waitcnt vmcnt(0)
263; VERDE-NEXT:    ; return to shader part epilog
264;
265; FIJI-LABEL: load_2d:
266; FIJI:       ; %bb.0: ; %main_body
267; FIJI-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
268; FIJI-NEXT:    s_waitcnt vmcnt(0)
269; FIJI-NEXT:    ; return to shader part epilog
270;
271; GFX6789-LABEL: load_2d:
272; GFX6789:       ; %bb.0: ; %main_body
273; GFX6789-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
274; GFX6789-NEXT:    s_waitcnt vmcnt(0)
275; GFX6789-NEXT:    ; return to shader part epilog
276;
277; NOPRT-LABEL: load_2d:
278; NOPRT:       ; %bb.0: ; %main_body
279; NOPRT-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm
280; NOPRT-NEXT:    s_waitcnt vmcnt(0)
281; NOPRT-NEXT:    ; return to shader part epilog
282;
283; GFX10PLUS-LABEL: load_2d:
284; GFX10PLUS:       ; %bb.0: ; %main_body
285; GFX10PLUS-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
286; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
287; GFX10PLUS-NEXT:    ; return to shader part epilog
288main_body:
289  %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0)
290  ret <4 x float> %v
291}
292
293define amdgpu_ps <4 x float> @load_2d_tfe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %t) {
294; VERDE-LABEL: load_2d_tfe:
295; VERDE:       ; %bb.0: ; %main_body
296; VERDE-NEXT:    v_mov_b32_e32 v5, v0
297; VERDE-NEXT:    v_mov_b32_e32 v0, 0
298; VERDE-NEXT:    v_mov_b32_e32 v6, v1
299; VERDE-NEXT:    v_mov_b32_e32 v1, v0
300; VERDE-NEXT:    v_mov_b32_e32 v2, v0
301; VERDE-NEXT:    v_mov_b32_e32 v3, v0
302; VERDE-NEXT:    v_mov_b32_e32 v4, v0
303; VERDE-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe
304; VERDE-NEXT:    s_mov_b32 s11, 0xf000
305; VERDE-NEXT:    s_mov_b32 s10, -1
306; VERDE-NEXT:    s_waitcnt vmcnt(0)
307; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
308; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
309; VERDE-NEXT:    ; return to shader part epilog
310;
311; FIJI-LABEL: load_2d_tfe:
312; FIJI:       ; %bb.0: ; %main_body
313; FIJI-NEXT:    v_mov_b32_e32 v5, v0
314; FIJI-NEXT:    v_mov_b32_e32 v0, 0
315; FIJI-NEXT:    v_mov_b32_e32 v6, v1
316; FIJI-NEXT:    v_mov_b32_e32 v1, v0
317; FIJI-NEXT:    v_mov_b32_e32 v2, v0
318; FIJI-NEXT:    v_mov_b32_e32 v3, v0
319; FIJI-NEXT:    v_mov_b32_e32 v4, v0
320; FIJI-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe
321; FIJI-NEXT:    s_mov_b32 s11, 0xf000
322; FIJI-NEXT:    s_mov_b32 s10, -1
323; FIJI-NEXT:    s_waitcnt vmcnt(0)
324; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
325; FIJI-NEXT:    s_waitcnt vmcnt(0)
326; FIJI-NEXT:    ; return to shader part epilog
327;
328; GFX6789-LABEL: load_2d_tfe:
329; GFX6789:       ; %bb.0: ; %main_body
330; GFX6789-NEXT:    v_mov_b32_e32 v7, 0
331; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
332; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
333; GFX6789-NEXT:    v_mov_b32_e32 v8, v7
334; GFX6789-NEXT:    v_mov_b32_e32 v9, v7
335; GFX6789-NEXT:    v_mov_b32_e32 v10, v7
336; GFX6789-NEXT:    v_mov_b32_e32 v11, v7
337; GFX6789-NEXT:    v_mov_b32_e32 v0, v7
338; GFX6789-NEXT:    v_mov_b32_e32 v1, v8
339; GFX6789-NEXT:    v_mov_b32_e32 v2, v9
340; GFX6789-NEXT:    v_mov_b32_e32 v3, v10
341; GFX6789-NEXT:    v_mov_b32_e32 v4, v11
342; GFX6789-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe
343; GFX6789-NEXT:    s_waitcnt vmcnt(0)
344; GFX6789-NEXT:    global_store_dword v7, v4, s[8:9]
345; GFX6789-NEXT:    s_waitcnt vmcnt(0)
346; GFX6789-NEXT:    ; return to shader part epilog
347;
348; NOPRT-LABEL: load_2d_tfe:
349; NOPRT:       ; %bb.0: ; %main_body
350; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
351; NOPRT-NEXT:    image_load v[0:4], v[0:1], s[0:7] dmask:0xf unorm tfe
352; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
353; NOPRT-NEXT:    s_waitcnt vmcnt(0)
354; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
355; NOPRT-NEXT:    s_waitcnt vmcnt(0)
356; NOPRT-NEXT:    ; return to shader part epilog
357;
358; GFX10-LABEL: load_2d_tfe:
359; GFX10:       ; %bb.0: ; %main_body
360; GFX10-NEXT:    v_mov_b32_e32 v7, 0
361; GFX10-NEXT:    v_mov_b32_e32 v6, v1
362; GFX10-NEXT:    v_mov_b32_e32 v5, v0
363; GFX10-NEXT:    v_mov_b32_e32 v8, v7
364; GFX10-NEXT:    v_mov_b32_e32 v9, v7
365; GFX10-NEXT:    v_mov_b32_e32 v10, v7
366; GFX10-NEXT:    v_mov_b32_e32 v11, v7
367; GFX10-NEXT:    v_mov_b32_e32 v0, v7
368; GFX10-NEXT:    v_mov_b32_e32 v1, v8
369; GFX10-NEXT:    v_mov_b32_e32 v2, v9
370; GFX10-NEXT:    v_mov_b32_e32 v3, v10
371; GFX10-NEXT:    v_mov_b32_e32 v4, v11
372; GFX10-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
373; GFX10-NEXT:    s_waitcnt vmcnt(0)
374; GFX10-NEXT:    global_store_dword v7, v4, s[8:9]
375; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
376; GFX10-NEXT:    ; return to shader part epilog
377;
378; GFX11-LABEL: load_2d_tfe:
379; GFX11:       ; %bb.0: ; %main_body
380; GFX11-NEXT:    v_mov_b32_e32 v7, 0
381; GFX11-NEXT:    v_mov_b32_e32 v6, v1
382; GFX11-NEXT:    v_mov_b32_e32 v5, v0
383; GFX11-NEXT:    v_mov_b32_e32 v8, v7
384; GFX11-NEXT:    v_mov_b32_e32 v9, v7
385; GFX11-NEXT:    v_mov_b32_e32 v10, v7
386; GFX11-NEXT:    v_mov_b32_e32 v11, v7
387; GFX11-NEXT:    v_mov_b32_e32 v0, v7
388; GFX11-NEXT:    v_mov_b32_e32 v1, v8
389; GFX11-NEXT:    v_mov_b32_e32 v2, v9
390; GFX11-NEXT:    v_mov_b32_e32 v3, v10
391; GFX11-NEXT:    v_mov_b32_e32 v4, v11
392; GFX11-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
393; GFX11-NEXT:    s_waitcnt vmcnt(0)
394; GFX11-NEXT:    global_store_b32 v7, v4, s[8:9]
395; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
396; GFX11-NEXT:    ; return to shader part epilog
397main_body:
398  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 1, i32 0)
399  %v.vec = extractvalue {<4 x float>, i32} %v, 0
400  %v.err = extractvalue {<4 x float>, i32} %v, 1
401  store i32 %v.err, i32 addrspace(1)* %out, align 4
402  ret <4 x float> %v.vec
403}
404
405define amdgpu_ps <4 x float> @load_3d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %r) {
406; VERDE-LABEL: load_3d:
407; VERDE:       ; %bb.0: ; %main_body
408; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
409; VERDE-NEXT:    s_waitcnt vmcnt(0)
410; VERDE-NEXT:    ; return to shader part epilog
411;
412; FIJI-LABEL: load_3d:
413; FIJI:       ; %bb.0: ; %main_body
414; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
415; FIJI-NEXT:    s_waitcnt vmcnt(0)
416; FIJI-NEXT:    ; return to shader part epilog
417;
418; GFX6789-LABEL: load_3d:
419; GFX6789:       ; %bb.0: ; %main_body
420; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
421; GFX6789-NEXT:    s_waitcnt vmcnt(0)
422; GFX6789-NEXT:    ; return to shader part epilog
423;
424; NOPRT-LABEL: load_3d:
425; NOPRT:       ; %bb.0: ; %main_body
426; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
427; NOPRT-NEXT:    s_waitcnt vmcnt(0)
428; NOPRT-NEXT:    ; return to shader part epilog
429;
430; GFX10PLUS-LABEL: load_3d:
431; GFX10PLUS:       ; %bb.0: ; %main_body
432; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
433; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
434; GFX10PLUS-NEXT:    ; return to shader part epilog
435main_body:
436  %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0)
437  ret <4 x float> %v
438}
439
440define amdgpu_ps <4 x float> @load_3d_tfe_lwe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %t, i32 %r) {
441; VERDE-LABEL: load_3d_tfe_lwe:
442; VERDE:       ; %bb.0: ; %main_body
443; VERDE-NEXT:    v_mov_b32_e32 v5, v0
444; VERDE-NEXT:    v_mov_b32_e32 v0, 0
445; VERDE-NEXT:    v_mov_b32_e32 v7, v2
446; VERDE-NEXT:    v_mov_b32_e32 v6, v1
447; VERDE-NEXT:    v_mov_b32_e32 v1, v0
448; VERDE-NEXT:    v_mov_b32_e32 v2, v0
449; VERDE-NEXT:    v_mov_b32_e32 v3, v0
450; VERDE-NEXT:    v_mov_b32_e32 v4, v0
451; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
452; VERDE-NEXT:    s_mov_b32 s11, 0xf000
453; VERDE-NEXT:    s_mov_b32 s10, -1
454; VERDE-NEXT:    s_waitcnt vmcnt(0)
455; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
456; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
457; VERDE-NEXT:    ; return to shader part epilog
458;
459; FIJI-LABEL: load_3d_tfe_lwe:
460; FIJI:       ; %bb.0: ; %main_body
461; FIJI-NEXT:    v_mov_b32_e32 v5, v0
462; FIJI-NEXT:    v_mov_b32_e32 v0, 0
463; FIJI-NEXT:    v_mov_b32_e32 v7, v2
464; FIJI-NEXT:    v_mov_b32_e32 v6, v1
465; FIJI-NEXT:    v_mov_b32_e32 v1, v0
466; FIJI-NEXT:    v_mov_b32_e32 v2, v0
467; FIJI-NEXT:    v_mov_b32_e32 v3, v0
468; FIJI-NEXT:    v_mov_b32_e32 v4, v0
469; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
470; FIJI-NEXT:    s_mov_b32 s11, 0xf000
471; FIJI-NEXT:    s_mov_b32 s10, -1
472; FIJI-NEXT:    s_waitcnt vmcnt(0)
473; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
474; FIJI-NEXT:    s_waitcnt vmcnt(0)
475; FIJI-NEXT:    ; return to shader part epilog
476;
477; GFX6789-LABEL: load_3d_tfe_lwe:
478; GFX6789:       ; %bb.0: ; %main_body
479; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
480; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
481; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
482; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
483; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
484; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
485; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
486; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
487; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
488; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
489; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
490; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
491; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
492; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
493; GFX6789-NEXT:    s_waitcnt vmcnt(0)
494; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
495; GFX6789-NEXT:    s_waitcnt vmcnt(0)
496; GFX6789-NEXT:    ; return to shader part epilog
497;
498; NOPRT-LABEL: load_3d_tfe_lwe:
499; NOPRT:       ; %bb.0: ; %main_body
500; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
501; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe lwe
502; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
503; NOPRT-NEXT:    s_waitcnt vmcnt(0)
504; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
505; NOPRT-NEXT:    s_waitcnt vmcnt(0)
506; NOPRT-NEXT:    ; return to shader part epilog
507;
508; GFX10-LABEL: load_3d_tfe_lwe:
509; GFX10:       ; %bb.0: ; %main_body
510; GFX10-NEXT:    v_mov_b32_e32 v8, 0
511; GFX10-NEXT:    v_mov_b32_e32 v7, v2
512; GFX10-NEXT:    v_mov_b32_e32 v6, v1
513; GFX10-NEXT:    v_mov_b32_e32 v5, v0
514; GFX10-NEXT:    v_mov_b32_e32 v9, v8
515; GFX10-NEXT:    v_mov_b32_e32 v10, v8
516; GFX10-NEXT:    v_mov_b32_e32 v11, v8
517; GFX10-NEXT:    v_mov_b32_e32 v12, v8
518; GFX10-NEXT:    v_mov_b32_e32 v0, v8
519; GFX10-NEXT:    v_mov_b32_e32 v1, v9
520; GFX10-NEXT:    v_mov_b32_e32 v2, v10
521; GFX10-NEXT:    v_mov_b32_e32 v3, v11
522; GFX10-NEXT:    v_mov_b32_e32 v4, v12
523; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm tfe lwe
524; GFX10-NEXT:    s_waitcnt vmcnt(0)
525; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
526; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
527; GFX10-NEXT:    ; return to shader part epilog
528;
529; GFX11-LABEL: load_3d_tfe_lwe:
530; GFX11:       ; %bb.0: ; %main_body
531; GFX11-NEXT:    v_mov_b32_e32 v8, 0
532; GFX11-NEXT:    v_mov_b32_e32 v7, v2
533; GFX11-NEXT:    v_mov_b32_e32 v6, v1
534; GFX11-NEXT:    v_mov_b32_e32 v5, v0
535; GFX11-NEXT:    v_mov_b32_e32 v9, v8
536; GFX11-NEXT:    v_mov_b32_e32 v10, v8
537; GFX11-NEXT:    v_mov_b32_e32 v11, v8
538; GFX11-NEXT:    v_mov_b32_e32 v12, v8
539; GFX11-NEXT:    v_mov_b32_e32 v0, v8
540; GFX11-NEXT:    v_mov_b32_e32 v1, v9
541; GFX11-NEXT:    v_mov_b32_e32 v2, v10
542; GFX11-NEXT:    v_mov_b32_e32 v3, v11
543; GFX11-NEXT:    v_mov_b32_e32 v4, v12
544; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm tfe lwe
545; GFX11-NEXT:    s_waitcnt vmcnt(0)
546; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
547; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
548; GFX11-NEXT:    ; return to shader part epilog
549main_body:
550  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 3, i32 0)
551  %v.vec = extractvalue {<4 x float>, i32} %v, 0
552  %v.err = extractvalue {<4 x float>, i32} %v, 1
553  store i32 %v.err, i32 addrspace(1)* %out, align 4
554  ret <4 x float> %v.vec
555}
556
557define amdgpu_ps <4 x float> @load_cube(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice) {
558; VERDE-LABEL: load_cube:
559; VERDE:       ; %bb.0: ; %main_body
560; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
561; VERDE-NEXT:    s_waitcnt vmcnt(0)
562; VERDE-NEXT:    ; return to shader part epilog
563;
564; FIJI-LABEL: load_cube:
565; FIJI:       ; %bb.0: ; %main_body
566; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
567; FIJI-NEXT:    s_waitcnt vmcnt(0)
568; FIJI-NEXT:    ; return to shader part epilog
569;
570; GFX6789-LABEL: load_cube:
571; GFX6789:       ; %bb.0: ; %main_body
572; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
573; GFX6789-NEXT:    s_waitcnt vmcnt(0)
574; GFX6789-NEXT:    ; return to shader part epilog
575;
576; NOPRT-LABEL: load_cube:
577; NOPRT:       ; %bb.0: ; %main_body
578; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
579; NOPRT-NEXT:    s_waitcnt vmcnt(0)
580; NOPRT-NEXT:    ; return to shader part epilog
581;
582; GFX10PLUS-LABEL: load_cube:
583; GFX10PLUS:       ; %bb.0: ; %main_body
584; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
585; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
586; GFX10PLUS-NEXT:    ; return to shader part epilog
587main_body:
588  %v = call <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
589  ret <4 x float> %v
590}
591
592define amdgpu_ps <4 x float> @load_cube_lwe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %t, i32 %slice) {
593; VERDE-LABEL: load_cube_lwe:
594; VERDE:       ; %bb.0: ; %main_body
595; VERDE-NEXT:    v_mov_b32_e32 v5, v0
596; VERDE-NEXT:    v_mov_b32_e32 v0, 0
597; VERDE-NEXT:    v_mov_b32_e32 v7, v2
598; VERDE-NEXT:    v_mov_b32_e32 v6, v1
599; VERDE-NEXT:    v_mov_b32_e32 v1, v0
600; VERDE-NEXT:    v_mov_b32_e32 v2, v0
601; VERDE-NEXT:    v_mov_b32_e32 v3, v0
602; VERDE-NEXT:    v_mov_b32_e32 v4, v0
603; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
604; VERDE-NEXT:    s_mov_b32 s11, 0xf000
605; VERDE-NEXT:    s_mov_b32 s10, -1
606; VERDE-NEXT:    s_waitcnt vmcnt(0)
607; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
608; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
609; VERDE-NEXT:    ; return to shader part epilog
610;
611; FIJI-LABEL: load_cube_lwe:
612; FIJI:       ; %bb.0: ; %main_body
613; FIJI-NEXT:    v_mov_b32_e32 v5, v0
614; FIJI-NEXT:    v_mov_b32_e32 v0, 0
615; FIJI-NEXT:    v_mov_b32_e32 v7, v2
616; FIJI-NEXT:    v_mov_b32_e32 v6, v1
617; FIJI-NEXT:    v_mov_b32_e32 v1, v0
618; FIJI-NEXT:    v_mov_b32_e32 v2, v0
619; FIJI-NEXT:    v_mov_b32_e32 v3, v0
620; FIJI-NEXT:    v_mov_b32_e32 v4, v0
621; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
622; FIJI-NEXT:    s_mov_b32 s11, 0xf000
623; FIJI-NEXT:    s_mov_b32 s10, -1
624; FIJI-NEXT:    s_waitcnt vmcnt(0)
625; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
626; FIJI-NEXT:    s_waitcnt vmcnt(0)
627; FIJI-NEXT:    ; return to shader part epilog
628;
629; GFX6789-LABEL: load_cube_lwe:
630; GFX6789:       ; %bb.0: ; %main_body
631; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
632; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
633; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
634; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
635; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
636; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
637; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
638; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
639; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
640; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
641; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
642; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
643; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
644; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
645; GFX6789-NEXT:    s_waitcnt vmcnt(0)
646; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
647; GFX6789-NEXT:    s_waitcnt vmcnt(0)
648; GFX6789-NEXT:    ; return to shader part epilog
649;
650; NOPRT-LABEL: load_cube_lwe:
651; NOPRT:       ; %bb.0: ; %main_body
652; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
653; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm lwe da
654; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
655; NOPRT-NEXT:    s_waitcnt vmcnt(0)
656; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
657; NOPRT-NEXT:    s_waitcnt vmcnt(0)
658; NOPRT-NEXT:    ; return to shader part epilog
659;
660; GFX10-LABEL: load_cube_lwe:
661; GFX10:       ; %bb.0: ; %main_body
662; GFX10-NEXT:    v_mov_b32_e32 v8, 0
663; GFX10-NEXT:    v_mov_b32_e32 v7, v2
664; GFX10-NEXT:    v_mov_b32_e32 v6, v1
665; GFX10-NEXT:    v_mov_b32_e32 v5, v0
666; GFX10-NEXT:    v_mov_b32_e32 v9, v8
667; GFX10-NEXT:    v_mov_b32_e32 v10, v8
668; GFX10-NEXT:    v_mov_b32_e32 v11, v8
669; GFX10-NEXT:    v_mov_b32_e32 v12, v8
670; GFX10-NEXT:    v_mov_b32_e32 v0, v8
671; GFX10-NEXT:    v_mov_b32_e32 v1, v9
672; GFX10-NEXT:    v_mov_b32_e32 v2, v10
673; GFX10-NEXT:    v_mov_b32_e32 v3, v11
674; GFX10-NEXT:    v_mov_b32_e32 v4, v12
675; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm lwe
676; GFX10-NEXT:    s_waitcnt vmcnt(0)
677; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
678; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
679; GFX10-NEXT:    ; return to shader part epilog
680;
681; GFX11-LABEL: load_cube_lwe:
682; GFX11:       ; %bb.0: ; %main_body
683; GFX11-NEXT:    v_mov_b32_e32 v8, 0
684; GFX11-NEXT:    v_mov_b32_e32 v7, v2
685; GFX11-NEXT:    v_mov_b32_e32 v6, v1
686; GFX11-NEXT:    v_mov_b32_e32 v5, v0
687; GFX11-NEXT:    v_mov_b32_e32 v9, v8
688; GFX11-NEXT:    v_mov_b32_e32 v10, v8
689; GFX11-NEXT:    v_mov_b32_e32 v11, v8
690; GFX11-NEXT:    v_mov_b32_e32 v12, v8
691; GFX11-NEXT:    v_mov_b32_e32 v0, v8
692; GFX11-NEXT:    v_mov_b32_e32 v1, v9
693; GFX11-NEXT:    v_mov_b32_e32 v2, v10
694; GFX11-NEXT:    v_mov_b32_e32 v3, v11
695; GFX11-NEXT:    v_mov_b32_e32 v4, v12
696; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm lwe
697; GFX11-NEXT:    s_waitcnt vmcnt(0)
698; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
699; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
700; GFX11-NEXT:    ; return to shader part epilog
701main_body:
702  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 2, i32 0)
703  %v.vec = extractvalue {<4 x float>, i32} %v, 0
704  %v.err = extractvalue {<4 x float>, i32} %v, 1
705  store i32 %v.err, i32 addrspace(1)* %out, align 4
706  ret <4 x float> %v.vec
707}
708
709define amdgpu_ps <4 x float> @load_1darray(<8 x i32> inreg %rsrc, i32 %s, i32 %slice) {
710; VERDE-LABEL: load_1darray:
711; VERDE:       ; %bb.0: ; %main_body
712; VERDE-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
713; VERDE-NEXT:    s_waitcnt vmcnt(0)
714; VERDE-NEXT:    ; return to shader part epilog
715;
716; FIJI-LABEL: load_1darray:
717; FIJI:       ; %bb.0: ; %main_body
718; FIJI-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
719; FIJI-NEXT:    s_waitcnt vmcnt(0)
720; FIJI-NEXT:    ; return to shader part epilog
721;
722; GFX6789-LABEL: load_1darray:
723; GFX6789:       ; %bb.0: ; %main_body
724; GFX6789-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
725; GFX6789-NEXT:    s_waitcnt vmcnt(0)
726; GFX6789-NEXT:    ; return to shader part epilog
727;
728; NOPRT-LABEL: load_1darray:
729; NOPRT:       ; %bb.0: ; %main_body
730; NOPRT-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm da
731; NOPRT-NEXT:    s_waitcnt vmcnt(0)
732; NOPRT-NEXT:    ; return to shader part epilog
733;
734; GFX10PLUS-LABEL: load_1darray:
735; GFX10PLUS:       ; %bb.0: ; %main_body
736; GFX10PLUS-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
737; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
738; GFX10PLUS-NEXT:    ; return to shader part epilog
739main_body:
740  %v = call <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
741  ret <4 x float> %v
742}
743
744define amdgpu_ps <4 x float> @load_1darray_tfe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %slice) {
745; VERDE-LABEL: load_1darray_tfe:
746; VERDE:       ; %bb.0: ; %main_body
747; VERDE-NEXT:    v_mov_b32_e32 v5, v0
748; VERDE-NEXT:    v_mov_b32_e32 v0, 0
749; VERDE-NEXT:    v_mov_b32_e32 v6, v1
750; VERDE-NEXT:    v_mov_b32_e32 v1, v0
751; VERDE-NEXT:    v_mov_b32_e32 v2, v0
752; VERDE-NEXT:    v_mov_b32_e32 v3, v0
753; VERDE-NEXT:    v_mov_b32_e32 v4, v0
754; VERDE-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da
755; VERDE-NEXT:    s_mov_b32 s11, 0xf000
756; VERDE-NEXT:    s_mov_b32 s10, -1
757; VERDE-NEXT:    s_waitcnt vmcnt(0)
758; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
759; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
760; VERDE-NEXT:    ; return to shader part epilog
761;
762; FIJI-LABEL: load_1darray_tfe:
763; FIJI:       ; %bb.0: ; %main_body
764; FIJI-NEXT:    v_mov_b32_e32 v5, v0
765; FIJI-NEXT:    v_mov_b32_e32 v0, 0
766; FIJI-NEXT:    v_mov_b32_e32 v6, v1
767; FIJI-NEXT:    v_mov_b32_e32 v1, v0
768; FIJI-NEXT:    v_mov_b32_e32 v2, v0
769; FIJI-NEXT:    v_mov_b32_e32 v3, v0
770; FIJI-NEXT:    v_mov_b32_e32 v4, v0
771; FIJI-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da
772; FIJI-NEXT:    s_mov_b32 s11, 0xf000
773; FIJI-NEXT:    s_mov_b32 s10, -1
774; FIJI-NEXT:    s_waitcnt vmcnt(0)
775; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
776; FIJI-NEXT:    s_waitcnt vmcnt(0)
777; FIJI-NEXT:    ; return to shader part epilog
778;
779; GFX6789-LABEL: load_1darray_tfe:
780; GFX6789:       ; %bb.0: ; %main_body
781; GFX6789-NEXT:    v_mov_b32_e32 v7, 0
782; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
783; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
784; GFX6789-NEXT:    v_mov_b32_e32 v8, v7
785; GFX6789-NEXT:    v_mov_b32_e32 v9, v7
786; GFX6789-NEXT:    v_mov_b32_e32 v10, v7
787; GFX6789-NEXT:    v_mov_b32_e32 v11, v7
788; GFX6789-NEXT:    v_mov_b32_e32 v0, v7
789; GFX6789-NEXT:    v_mov_b32_e32 v1, v8
790; GFX6789-NEXT:    v_mov_b32_e32 v2, v9
791; GFX6789-NEXT:    v_mov_b32_e32 v3, v10
792; GFX6789-NEXT:    v_mov_b32_e32 v4, v11
793; GFX6789-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf unorm tfe da
794; GFX6789-NEXT:    s_waitcnt vmcnt(0)
795; GFX6789-NEXT:    global_store_dword v7, v4, s[8:9]
796; GFX6789-NEXT:    s_waitcnt vmcnt(0)
797; GFX6789-NEXT:    ; return to shader part epilog
798;
799; NOPRT-LABEL: load_1darray_tfe:
800; NOPRT:       ; %bb.0: ; %main_body
801; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
802; NOPRT-NEXT:    image_load v[0:4], v[0:1], s[0:7] dmask:0xf unorm tfe da
803; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
804; NOPRT-NEXT:    s_waitcnt vmcnt(0)
805; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
806; NOPRT-NEXT:    s_waitcnt vmcnt(0)
807; NOPRT-NEXT:    ; return to shader part epilog
808;
809; GFX10-LABEL: load_1darray_tfe:
810; GFX10:       ; %bb.0: ; %main_body
811; GFX10-NEXT:    v_mov_b32_e32 v7, 0
812; GFX10-NEXT:    v_mov_b32_e32 v6, v1
813; GFX10-NEXT:    v_mov_b32_e32 v5, v0
814; GFX10-NEXT:    v_mov_b32_e32 v8, v7
815; GFX10-NEXT:    v_mov_b32_e32 v9, v7
816; GFX10-NEXT:    v_mov_b32_e32 v10, v7
817; GFX10-NEXT:    v_mov_b32_e32 v11, v7
818; GFX10-NEXT:    v_mov_b32_e32 v0, v7
819; GFX10-NEXT:    v_mov_b32_e32 v1, v8
820; GFX10-NEXT:    v_mov_b32_e32 v2, v9
821; GFX10-NEXT:    v_mov_b32_e32 v3, v10
822; GFX10-NEXT:    v_mov_b32_e32 v4, v11
823; GFX10-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm tfe
824; GFX10-NEXT:    s_waitcnt vmcnt(0)
825; GFX10-NEXT:    global_store_dword v7, v4, s[8:9]
826; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
827; GFX10-NEXT:    ; return to shader part epilog
828;
829; GFX11-LABEL: load_1darray_tfe:
830; GFX11:       ; %bb.0: ; %main_body
831; GFX11-NEXT:    v_mov_b32_e32 v7, 0
832; GFX11-NEXT:    v_mov_b32_e32 v6, v1
833; GFX11-NEXT:    v_mov_b32_e32 v5, v0
834; GFX11-NEXT:    v_mov_b32_e32 v8, v7
835; GFX11-NEXT:    v_mov_b32_e32 v9, v7
836; GFX11-NEXT:    v_mov_b32_e32 v10, v7
837; GFX11-NEXT:    v_mov_b32_e32 v11, v7
838; GFX11-NEXT:    v_mov_b32_e32 v0, v7
839; GFX11-NEXT:    v_mov_b32_e32 v1, v8
840; GFX11-NEXT:    v_mov_b32_e32 v2, v9
841; GFX11-NEXT:    v_mov_b32_e32 v3, v10
842; GFX11-NEXT:    v_mov_b32_e32 v4, v11
843; GFX11-NEXT:    image_load v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm tfe
844; GFX11-NEXT:    s_waitcnt vmcnt(0)
845; GFX11-NEXT:    global_store_b32 v7, v4, s[8:9]
846; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
847; GFX11-NEXT:    ; return to shader part epilog
848main_body:
849  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 1, i32 0)
850  %v.vec = extractvalue {<4 x float>, i32} %v, 0
851  %v.err = extractvalue {<4 x float>, i32} %v, 1
852  store i32 %v.err, i32 addrspace(1)* %out, align 4
853  ret <4 x float> %v.vec
854}
855
856define amdgpu_ps <4 x float> @load_2darray(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice) {
857; VERDE-LABEL: load_2darray:
858; VERDE:       ; %bb.0: ; %main_body
859; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
860; VERDE-NEXT:    s_waitcnt vmcnt(0)
861; VERDE-NEXT:    ; return to shader part epilog
862;
863; FIJI-LABEL: load_2darray:
864; FIJI:       ; %bb.0: ; %main_body
865; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
866; FIJI-NEXT:    s_waitcnt vmcnt(0)
867; FIJI-NEXT:    ; return to shader part epilog
868;
869; GFX6789-LABEL: load_2darray:
870; GFX6789:       ; %bb.0: ; %main_body
871; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
872; GFX6789-NEXT:    s_waitcnt vmcnt(0)
873; GFX6789-NEXT:    ; return to shader part epilog
874;
875; NOPRT-LABEL: load_2darray:
876; NOPRT:       ; %bb.0: ; %main_body
877; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
878; NOPRT-NEXT:    s_waitcnt vmcnt(0)
879; NOPRT-NEXT:    ; return to shader part epilog
880;
881; GFX10PLUS-LABEL: load_2darray:
882; GFX10PLUS:       ; %bb.0: ; %main_body
883; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
884; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
885; GFX10PLUS-NEXT:    ; return to shader part epilog
886main_body:
887  %v = call <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
888  ret <4 x float> %v
889}
890
891define amdgpu_ps <4 x float> @load_2darray_lwe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %t, i32 %slice) {
892; VERDE-LABEL: load_2darray_lwe:
893; VERDE:       ; %bb.0: ; %main_body
894; VERDE-NEXT:    v_mov_b32_e32 v5, v0
895; VERDE-NEXT:    v_mov_b32_e32 v0, 0
896; VERDE-NEXT:    v_mov_b32_e32 v7, v2
897; VERDE-NEXT:    v_mov_b32_e32 v6, v1
898; VERDE-NEXT:    v_mov_b32_e32 v1, v0
899; VERDE-NEXT:    v_mov_b32_e32 v2, v0
900; VERDE-NEXT:    v_mov_b32_e32 v3, v0
901; VERDE-NEXT:    v_mov_b32_e32 v4, v0
902; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
903; VERDE-NEXT:    s_mov_b32 s11, 0xf000
904; VERDE-NEXT:    s_mov_b32 s10, -1
905; VERDE-NEXT:    s_waitcnt vmcnt(0)
906; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
907; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
908; VERDE-NEXT:    ; return to shader part epilog
909;
910; FIJI-LABEL: load_2darray_lwe:
911; FIJI:       ; %bb.0: ; %main_body
912; FIJI-NEXT:    v_mov_b32_e32 v5, v0
913; FIJI-NEXT:    v_mov_b32_e32 v0, 0
914; FIJI-NEXT:    v_mov_b32_e32 v7, v2
915; FIJI-NEXT:    v_mov_b32_e32 v6, v1
916; FIJI-NEXT:    v_mov_b32_e32 v1, v0
917; FIJI-NEXT:    v_mov_b32_e32 v2, v0
918; FIJI-NEXT:    v_mov_b32_e32 v3, v0
919; FIJI-NEXT:    v_mov_b32_e32 v4, v0
920; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
921; FIJI-NEXT:    s_mov_b32 s11, 0xf000
922; FIJI-NEXT:    s_mov_b32 s10, -1
923; FIJI-NEXT:    s_waitcnt vmcnt(0)
924; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
925; FIJI-NEXT:    s_waitcnt vmcnt(0)
926; FIJI-NEXT:    ; return to shader part epilog
927;
928; GFX6789-LABEL: load_2darray_lwe:
929; GFX6789:       ; %bb.0: ; %main_body
930; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
931; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
932; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
933; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
934; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
935; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
936; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
937; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
938; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
939; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
940; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
941; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
942; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
943; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm lwe da
944; GFX6789-NEXT:    s_waitcnt vmcnt(0)
945; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
946; GFX6789-NEXT:    s_waitcnt vmcnt(0)
947; GFX6789-NEXT:    ; return to shader part epilog
948;
949; NOPRT-LABEL: load_2darray_lwe:
950; NOPRT:       ; %bb.0: ; %main_body
951; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
952; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm lwe da
953; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
954; NOPRT-NEXT:    s_waitcnt vmcnt(0)
955; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
956; NOPRT-NEXT:    s_waitcnt vmcnt(0)
957; NOPRT-NEXT:    ; return to shader part epilog
958;
959; GFX10-LABEL: load_2darray_lwe:
960; GFX10:       ; %bb.0: ; %main_body
961; GFX10-NEXT:    v_mov_b32_e32 v8, 0
962; GFX10-NEXT:    v_mov_b32_e32 v7, v2
963; GFX10-NEXT:    v_mov_b32_e32 v6, v1
964; GFX10-NEXT:    v_mov_b32_e32 v5, v0
965; GFX10-NEXT:    v_mov_b32_e32 v9, v8
966; GFX10-NEXT:    v_mov_b32_e32 v10, v8
967; GFX10-NEXT:    v_mov_b32_e32 v11, v8
968; GFX10-NEXT:    v_mov_b32_e32 v12, v8
969; GFX10-NEXT:    v_mov_b32_e32 v0, v8
970; GFX10-NEXT:    v_mov_b32_e32 v1, v9
971; GFX10-NEXT:    v_mov_b32_e32 v2, v10
972; GFX10-NEXT:    v_mov_b32_e32 v3, v11
973; GFX10-NEXT:    v_mov_b32_e32 v4, v12
974; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm lwe
975; GFX10-NEXT:    s_waitcnt vmcnt(0)
976; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
977; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
978; GFX10-NEXT:    ; return to shader part epilog
979;
980; GFX11-LABEL: load_2darray_lwe:
981; GFX11:       ; %bb.0: ; %main_body
982; GFX11-NEXT:    v_mov_b32_e32 v8, 0
983; GFX11-NEXT:    v_mov_b32_e32 v7, v2
984; GFX11-NEXT:    v_mov_b32_e32 v6, v1
985; GFX11-NEXT:    v_mov_b32_e32 v5, v0
986; GFX11-NEXT:    v_mov_b32_e32 v9, v8
987; GFX11-NEXT:    v_mov_b32_e32 v10, v8
988; GFX11-NEXT:    v_mov_b32_e32 v11, v8
989; GFX11-NEXT:    v_mov_b32_e32 v12, v8
990; GFX11-NEXT:    v_mov_b32_e32 v0, v8
991; GFX11-NEXT:    v_mov_b32_e32 v1, v9
992; GFX11-NEXT:    v_mov_b32_e32 v2, v10
993; GFX11-NEXT:    v_mov_b32_e32 v3, v11
994; GFX11-NEXT:    v_mov_b32_e32 v4, v12
995; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm lwe
996; GFX11-NEXT:    s_waitcnt vmcnt(0)
997; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
998; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
999; GFX11-NEXT:    ; return to shader part epilog
1000main_body:
1001  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 2, i32 0)
1002  %v.vec = extractvalue {<4 x float>, i32} %v, 0
1003  %v.err = extractvalue {<4 x float>, i32} %v, 1
1004  store i32 %v.err, i32 addrspace(1)* %out, align 4
1005  ret <4 x float> %v.vec
1006}
1007
1008define amdgpu_ps <4 x float> @load_2dmsaa(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %fragid) {
1009; VERDE-LABEL: load_2dmsaa:
1010; VERDE:       ; %bb.0: ; %main_body
1011; VERDE-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1012; VERDE-NEXT:    s_waitcnt vmcnt(0)
1013; VERDE-NEXT:    ; return to shader part epilog
1014;
1015; FIJI-LABEL: load_2dmsaa:
1016; FIJI:       ; %bb.0: ; %main_body
1017; FIJI-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1018; FIJI-NEXT:    s_waitcnt vmcnt(0)
1019; FIJI-NEXT:    ; return to shader part epilog
1020;
1021; GFX6789-LABEL: load_2dmsaa:
1022; GFX6789:       ; %bb.0: ; %main_body
1023; GFX6789-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1024; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1025; GFX6789-NEXT:    ; return to shader part epilog
1026;
1027; NOPRT-LABEL: load_2dmsaa:
1028; NOPRT:       ; %bb.0: ; %main_body
1029; NOPRT-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1030; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1031; NOPRT-NEXT:    ; return to shader part epilog
1032;
1033; GFX10PLUS-LABEL: load_2dmsaa:
1034; GFX10PLUS:       ; %bb.0: ; %main_body
1035; GFX10PLUS-NEXT:    image_load v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
1036; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1037; GFX10PLUS-NEXT:    ; return to shader part epilog
1038main_body:
1039  %v = call <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
1040  ret <4 x float> %v
1041}
1042
1043define amdgpu_ps <4 x float> @load_2dmsaa_both(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %t, i32 %fragid) {
1044; VERDE-LABEL: load_2dmsaa_both:
1045; VERDE:       ; %bb.0: ; %main_body
1046; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1047; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1048; VERDE-NEXT:    v_mov_b32_e32 v7, v2
1049; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1050; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1051; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1052; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1053; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1054; VERDE-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
1055; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1056; VERDE-NEXT:    s_mov_b32 s10, -1
1057; VERDE-NEXT:    s_waitcnt vmcnt(0)
1058; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1059; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1060; VERDE-NEXT:    ; return to shader part epilog
1061;
1062; FIJI-LABEL: load_2dmsaa_both:
1063; FIJI:       ; %bb.0: ; %main_body
1064; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1065; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1066; FIJI-NEXT:    v_mov_b32_e32 v7, v2
1067; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1068; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1069; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1070; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1071; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1072; FIJI-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
1073; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1074; FIJI-NEXT:    s_mov_b32 s10, -1
1075; FIJI-NEXT:    s_waitcnt vmcnt(0)
1076; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1077; FIJI-NEXT:    s_waitcnt vmcnt(0)
1078; FIJI-NEXT:    ; return to shader part epilog
1079;
1080; GFX6789-LABEL: load_2dmsaa_both:
1081; GFX6789:       ; %bb.0: ; %main_body
1082; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
1083; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
1084; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1085; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1086; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
1087; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
1088; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
1089; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
1090; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
1091; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
1092; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
1093; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
1094; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
1095; GFX6789-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe lwe
1096; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1097; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
1098; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1099; GFX6789-NEXT:    ; return to shader part epilog
1100;
1101; NOPRT-LABEL: load_2dmsaa_both:
1102; NOPRT:       ; %bb.0: ; %main_body
1103; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1104; NOPRT-NEXT:    image_load v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe lwe
1105; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1106; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1107; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1108; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1109; NOPRT-NEXT:    ; return to shader part epilog
1110;
1111; GFX10-LABEL: load_2dmsaa_both:
1112; GFX10:       ; %bb.0: ; %main_body
1113; GFX10-NEXT:    v_mov_b32_e32 v8, 0
1114; GFX10-NEXT:    v_mov_b32_e32 v7, v2
1115; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1116; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1117; GFX10-NEXT:    v_mov_b32_e32 v9, v8
1118; GFX10-NEXT:    v_mov_b32_e32 v10, v8
1119; GFX10-NEXT:    v_mov_b32_e32 v11, v8
1120; GFX10-NEXT:    v_mov_b32_e32 v12, v8
1121; GFX10-NEXT:    v_mov_b32_e32 v0, v8
1122; GFX10-NEXT:    v_mov_b32_e32 v1, v9
1123; GFX10-NEXT:    v_mov_b32_e32 v2, v10
1124; GFX10-NEXT:    v_mov_b32_e32 v3, v11
1125; GFX10-NEXT:    v_mov_b32_e32 v4, v12
1126; GFX10-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm tfe lwe
1127; GFX10-NEXT:    s_waitcnt vmcnt(0)
1128; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
1129; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1130; GFX10-NEXT:    ; return to shader part epilog
1131;
1132; GFX11-LABEL: load_2dmsaa_both:
1133; GFX11:       ; %bb.0: ; %main_body
1134; GFX11-NEXT:    v_mov_b32_e32 v8, 0
1135; GFX11-NEXT:    v_mov_b32_e32 v7, v2
1136; GFX11-NEXT:    v_mov_b32_e32 v6, v1
1137; GFX11-NEXT:    v_mov_b32_e32 v5, v0
1138; GFX11-NEXT:    v_mov_b32_e32 v9, v8
1139; GFX11-NEXT:    v_mov_b32_e32 v10, v8
1140; GFX11-NEXT:    v_mov_b32_e32 v11, v8
1141; GFX11-NEXT:    v_mov_b32_e32 v12, v8
1142; GFX11-NEXT:    v_mov_b32_e32 v0, v8
1143; GFX11-NEXT:    v_mov_b32_e32 v1, v9
1144; GFX11-NEXT:    v_mov_b32_e32 v2, v10
1145; GFX11-NEXT:    v_mov_b32_e32 v3, v11
1146; GFX11-NEXT:    v_mov_b32_e32 v4, v12
1147; GFX11-NEXT:    image_load v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm tfe lwe
1148; GFX11-NEXT:    s_waitcnt vmcnt(0)
1149; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
1150; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1151; GFX11-NEXT:    ; return to shader part epilog
1152main_body:
1153  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 3, i32 0)
1154  %v.vec = extractvalue {<4 x float>, i32} %v, 0
1155  %v.err = extractvalue {<4 x float>, i32} %v, 1
1156  store i32 %v.err, i32 addrspace(1)* %out, align 4
1157  ret <4 x float> %v.vec
1158}
1159
1160define amdgpu_ps <4 x float> @load_2darraymsaa(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %fragid) {
1161; VERDE-LABEL: load_2darraymsaa:
1162; VERDE:       ; %bb.0: ; %main_body
1163; VERDE-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1164; VERDE-NEXT:    s_waitcnt vmcnt(0)
1165; VERDE-NEXT:    ; return to shader part epilog
1166;
1167; FIJI-LABEL: load_2darraymsaa:
1168; FIJI:       ; %bb.0: ; %main_body
1169; FIJI-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1170; FIJI-NEXT:    s_waitcnt vmcnt(0)
1171; FIJI-NEXT:    ; return to shader part epilog
1172;
1173; GFX6789-LABEL: load_2darraymsaa:
1174; GFX6789:       ; %bb.0: ; %main_body
1175; GFX6789-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1176; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1177; GFX6789-NEXT:    ; return to shader part epilog
1178;
1179; NOPRT-LABEL: load_2darraymsaa:
1180; NOPRT:       ; %bb.0: ; %main_body
1181; NOPRT-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
1182; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1183; NOPRT-NEXT:    ; return to shader part epilog
1184;
1185; GFX10PLUS-LABEL: load_2darraymsaa:
1186; GFX10PLUS:       ; %bb.0: ; %main_body
1187; GFX10PLUS-NEXT:    image_load v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
1188; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1189; GFX10PLUS-NEXT:    ; return to shader part epilog
1190main_body:
1191  %v = call <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
1192  ret <4 x float> %v
1193}
1194
1195define amdgpu_ps <4 x float> @load_2darraymsaa_tfe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %t, i32 %slice, i32 %fragid) {
1196; VERDE-LABEL: load_2darraymsaa_tfe:
1197; VERDE:       ; %bb.0: ; %main_body
1198; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1199; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1200; VERDE-NEXT:    v_mov_b32_e32 v8, v3
1201; VERDE-NEXT:    v_mov_b32_e32 v7, v2
1202; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1203; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1204; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1205; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1206; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1207; VERDE-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da
1208; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1209; VERDE-NEXT:    s_mov_b32 s10, -1
1210; VERDE-NEXT:    s_waitcnt vmcnt(0)
1211; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1212; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1213; VERDE-NEXT:    ; return to shader part epilog
1214;
1215; FIJI-LABEL: load_2darraymsaa_tfe:
1216; FIJI:       ; %bb.0: ; %main_body
1217; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1218; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1219; FIJI-NEXT:    v_mov_b32_e32 v8, v3
1220; FIJI-NEXT:    v_mov_b32_e32 v7, v2
1221; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1222; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1223; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1224; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1225; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1226; FIJI-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da
1227; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1228; FIJI-NEXT:    s_mov_b32 s10, -1
1229; FIJI-NEXT:    s_waitcnt vmcnt(0)
1230; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1231; FIJI-NEXT:    s_waitcnt vmcnt(0)
1232; FIJI-NEXT:    ; return to shader part epilog
1233;
1234; GFX6789-LABEL: load_2darraymsaa_tfe:
1235; GFX6789:       ; %bb.0: ; %main_body
1236; GFX6789-NEXT:    v_mov_b32_e32 v9, 0
1237; GFX6789-NEXT:    v_mov_b32_e32 v8, v3
1238; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
1239; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1240; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1241; GFX6789-NEXT:    v_mov_b32_e32 v10, v9
1242; GFX6789-NEXT:    v_mov_b32_e32 v11, v9
1243; GFX6789-NEXT:    v_mov_b32_e32 v12, v9
1244; GFX6789-NEXT:    v_mov_b32_e32 v13, v9
1245; GFX6789-NEXT:    v_mov_b32_e32 v0, v9
1246; GFX6789-NEXT:    v_mov_b32_e32 v1, v10
1247; GFX6789-NEXT:    v_mov_b32_e32 v2, v11
1248; GFX6789-NEXT:    v_mov_b32_e32 v3, v12
1249; GFX6789-NEXT:    v_mov_b32_e32 v4, v13
1250; GFX6789-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf unorm tfe da
1251; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1252; GFX6789-NEXT:    global_store_dword v9, v4, s[8:9]
1253; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1254; GFX6789-NEXT:    ; return to shader part epilog
1255;
1256; NOPRT-LABEL: load_2darraymsaa_tfe:
1257; NOPRT:       ; %bb.0: ; %main_body
1258; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1259; NOPRT-NEXT:    image_load v[0:4], v[0:3], s[0:7] dmask:0xf unorm tfe da
1260; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1261; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1262; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1263; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1264; NOPRT-NEXT:    ; return to shader part epilog
1265;
1266; GFX10-LABEL: load_2darraymsaa_tfe:
1267; GFX10:       ; %bb.0: ; %main_body
1268; GFX10-NEXT:    v_mov_b32_e32 v9, 0
1269; GFX10-NEXT:    v_mov_b32_e32 v8, v3
1270; GFX10-NEXT:    v_mov_b32_e32 v7, v2
1271; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1272; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1273; GFX10-NEXT:    v_mov_b32_e32 v10, v9
1274; GFX10-NEXT:    v_mov_b32_e32 v11, v9
1275; GFX10-NEXT:    v_mov_b32_e32 v12, v9
1276; GFX10-NEXT:    v_mov_b32_e32 v13, v9
1277; GFX10-NEXT:    v_mov_b32_e32 v0, v9
1278; GFX10-NEXT:    v_mov_b32_e32 v1, v10
1279; GFX10-NEXT:    v_mov_b32_e32 v2, v11
1280; GFX10-NEXT:    v_mov_b32_e32 v3, v12
1281; GFX10-NEXT:    v_mov_b32_e32 v4, v13
1282; GFX10-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe
1283; GFX10-NEXT:    s_waitcnt vmcnt(0)
1284; GFX10-NEXT:    global_store_dword v9, v4, s[8:9]
1285; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1286; GFX10-NEXT:    ; return to shader part epilog
1287;
1288; GFX11-LABEL: load_2darraymsaa_tfe:
1289; GFX11:       ; %bb.0: ; %main_body
1290; GFX11-NEXT:    v_mov_b32_e32 v9, 0
1291; GFX11-NEXT:    v_mov_b32_e32 v8, v3
1292; GFX11-NEXT:    v_mov_b32_e32 v7, v2
1293; GFX11-NEXT:    v_mov_b32_e32 v6, v1
1294; GFX11-NEXT:    v_mov_b32_e32 v5, v0
1295; GFX11-NEXT:    v_mov_b32_e32 v10, v9
1296; GFX11-NEXT:    v_mov_b32_e32 v11, v9
1297; GFX11-NEXT:    v_mov_b32_e32 v12, v9
1298; GFX11-NEXT:    v_mov_b32_e32 v13, v9
1299; GFX11-NEXT:    v_mov_b32_e32 v0, v9
1300; GFX11-NEXT:    v_mov_b32_e32 v1, v10
1301; GFX11-NEXT:    v_mov_b32_e32 v2, v11
1302; GFX11-NEXT:    v_mov_b32_e32 v3, v12
1303; GFX11-NEXT:    v_mov_b32_e32 v4, v13
1304; GFX11-NEXT:    image_load v[0:4], v[5:8], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm tfe
1305; GFX11-NEXT:    s_waitcnt vmcnt(0)
1306; GFX11-NEXT:    global_store_b32 v9, v4, s[8:9]
1307; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1308; GFX11-NEXT:    ; return to shader part epilog
1309main_body:
1310  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 1, i32 0)
1311  %v.vec = extractvalue {<4 x float>, i32} %v, 0
1312  %v.err = extractvalue {<4 x float>, i32} %v, 1
1313  store i32 %v.err, i32 addrspace(1)* %out, align 4
1314  ret <4 x float> %v.vec
1315}
1316
1317define amdgpu_ps <4 x float> @load_mip_1d(<8 x i32> inreg %rsrc, i32 %s, i32 %mip) {
1318; VERDE-LABEL: load_mip_1d:
1319; VERDE:       ; %bb.0: ; %main_body
1320; VERDE-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1321; VERDE-NEXT:    s_waitcnt vmcnt(0)
1322; VERDE-NEXT:    ; return to shader part epilog
1323;
1324; FIJI-LABEL: load_mip_1d:
1325; FIJI:       ; %bb.0: ; %main_body
1326; FIJI-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1327; FIJI-NEXT:    s_waitcnt vmcnt(0)
1328; FIJI-NEXT:    ; return to shader part epilog
1329;
1330; GFX6789-LABEL: load_mip_1d:
1331; GFX6789:       ; %bb.0: ; %main_body
1332; GFX6789-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1333; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1334; GFX6789-NEXT:    ; return to shader part epilog
1335;
1336; NOPRT-LABEL: load_mip_1d:
1337; NOPRT:       ; %bb.0: ; %main_body
1338; NOPRT-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm
1339; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1340; NOPRT-NEXT:    ; return to shader part epilog
1341;
1342; GFX10PLUS-LABEL: load_mip_1d:
1343; GFX10PLUS:       ; %bb.0: ; %main_body
1344; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
1345; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1346; GFX10PLUS-NEXT:    ; return to shader part epilog
1347main_body:
1348  %v = call <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
1349  ret <4 x float> %v
1350}
1351
1352define amdgpu_ps <4 x float> @load_mip_1d_lwe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %mip) {
1353; VERDE-LABEL: load_mip_1d_lwe:
1354; VERDE:       ; %bb.0: ; %main_body
1355; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1356; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1357; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1358; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1359; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1360; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1361; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1362; VERDE-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe
1363; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1364; VERDE-NEXT:    s_mov_b32 s10, -1
1365; VERDE-NEXT:    s_waitcnt vmcnt(0)
1366; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1367; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1368; VERDE-NEXT:    ; return to shader part epilog
1369;
1370; FIJI-LABEL: load_mip_1d_lwe:
1371; FIJI:       ; %bb.0: ; %main_body
1372; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1373; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1374; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1375; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1376; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1377; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1378; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1379; FIJI-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe
1380; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1381; FIJI-NEXT:    s_mov_b32 s10, -1
1382; FIJI-NEXT:    s_waitcnt vmcnt(0)
1383; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1384; FIJI-NEXT:    s_waitcnt vmcnt(0)
1385; FIJI-NEXT:    ; return to shader part epilog
1386;
1387; GFX6789-LABEL: load_mip_1d_lwe:
1388; GFX6789:       ; %bb.0: ; %main_body
1389; GFX6789-NEXT:    v_mov_b32_e32 v7, 0
1390; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1391; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1392; GFX6789-NEXT:    v_mov_b32_e32 v8, v7
1393; GFX6789-NEXT:    v_mov_b32_e32 v9, v7
1394; GFX6789-NEXT:    v_mov_b32_e32 v10, v7
1395; GFX6789-NEXT:    v_mov_b32_e32 v11, v7
1396; GFX6789-NEXT:    v_mov_b32_e32 v0, v7
1397; GFX6789-NEXT:    v_mov_b32_e32 v1, v8
1398; GFX6789-NEXT:    v_mov_b32_e32 v2, v9
1399; GFX6789-NEXT:    v_mov_b32_e32 v3, v10
1400; GFX6789-NEXT:    v_mov_b32_e32 v4, v11
1401; GFX6789-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf unorm lwe
1402; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1403; GFX6789-NEXT:    global_store_dword v7, v4, s[8:9]
1404; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1405; GFX6789-NEXT:    ; return to shader part epilog
1406;
1407; NOPRT-LABEL: load_mip_1d_lwe:
1408; NOPRT:       ; %bb.0: ; %main_body
1409; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1410; NOPRT-NEXT:    image_load_mip v[0:4], v[0:1], s[0:7] dmask:0xf unorm lwe
1411; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1412; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1413; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1414; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1415; NOPRT-NEXT:    ; return to shader part epilog
1416;
1417; GFX10-LABEL: load_mip_1d_lwe:
1418; GFX10:       ; %bb.0: ; %main_body
1419; GFX10-NEXT:    v_mov_b32_e32 v7, 0
1420; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1421; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1422; GFX10-NEXT:    v_mov_b32_e32 v8, v7
1423; GFX10-NEXT:    v_mov_b32_e32 v9, v7
1424; GFX10-NEXT:    v_mov_b32_e32 v10, v7
1425; GFX10-NEXT:    v_mov_b32_e32 v11, v7
1426; GFX10-NEXT:    v_mov_b32_e32 v0, v7
1427; GFX10-NEXT:    v_mov_b32_e32 v1, v8
1428; GFX10-NEXT:    v_mov_b32_e32 v2, v9
1429; GFX10-NEXT:    v_mov_b32_e32 v3, v10
1430; GFX10-NEXT:    v_mov_b32_e32 v4, v11
1431; GFX10-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
1432; GFX10-NEXT:    s_waitcnt vmcnt(0)
1433; GFX10-NEXT:    global_store_dword v7, v4, s[8:9]
1434; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1435; GFX10-NEXT:    ; return to shader part epilog
1436;
1437; GFX11-LABEL: load_mip_1d_lwe:
1438; GFX11:       ; %bb.0: ; %main_body
1439; GFX11-NEXT:    v_mov_b32_e32 v7, 0
1440; GFX11-NEXT:    v_mov_b32_e32 v6, v1
1441; GFX11-NEXT:    v_mov_b32_e32 v5, v0
1442; GFX11-NEXT:    v_mov_b32_e32 v8, v7
1443; GFX11-NEXT:    v_mov_b32_e32 v9, v7
1444; GFX11-NEXT:    v_mov_b32_e32 v10, v7
1445; GFX11-NEXT:    v_mov_b32_e32 v11, v7
1446; GFX11-NEXT:    v_mov_b32_e32 v0, v7
1447; GFX11-NEXT:    v_mov_b32_e32 v1, v8
1448; GFX11-NEXT:    v_mov_b32_e32 v2, v9
1449; GFX11-NEXT:    v_mov_b32_e32 v3, v10
1450; GFX11-NEXT:    v_mov_b32_e32 v4, v11
1451; GFX11-NEXT:    image_load_mip v[0:4], v[5:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm lwe
1452; GFX11-NEXT:    s_waitcnt vmcnt(0)
1453; GFX11-NEXT:    global_store_b32 v7, v4, s[8:9]
1454; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1455; GFX11-NEXT:    ; return to shader part epilog
1456main_body:
1457  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 2, i32 0)
1458  %v.vec = extractvalue {<4 x float>, i32} %v, 0
1459  %v.err = extractvalue {<4 x float>, i32} %v, 1
1460  store i32 %v.err, i32 addrspace(1)* %out, align 4
1461  ret <4 x float> %v.vec
1462}
1463
1464define amdgpu_ps <4 x float> @load_mip_2d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1465; VERDE-LABEL: load_mip_2d:
1466; VERDE:       ; %bb.0: ; %main_body
1467; VERDE-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1468; VERDE-NEXT:    s_waitcnt vmcnt(0)
1469; VERDE-NEXT:    ; return to shader part epilog
1470;
1471; FIJI-LABEL: load_mip_2d:
1472; FIJI:       ; %bb.0: ; %main_body
1473; FIJI-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1474; FIJI-NEXT:    s_waitcnt vmcnt(0)
1475; FIJI-NEXT:    ; return to shader part epilog
1476;
1477; GFX6789-LABEL: load_mip_2d:
1478; GFX6789:       ; %bb.0: ; %main_body
1479; GFX6789-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1480; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1481; GFX6789-NEXT:    ; return to shader part epilog
1482;
1483; NOPRT-LABEL: load_mip_2d:
1484; NOPRT:       ; %bb.0: ; %main_body
1485; NOPRT-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm
1486; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1487; NOPRT-NEXT:    ; return to shader part epilog
1488;
1489; GFX10PLUS-LABEL: load_mip_2d:
1490; GFX10PLUS:       ; %bb.0: ; %main_body
1491; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
1492; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1493; GFX10PLUS-NEXT:    ; return to shader part epilog
1494main_body:
1495  %v = call <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
1496  ret <4 x float> %v
1497}
1498
1499define amdgpu_ps <4 x float> @load_mip_2d_tfe(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s, i32 %t, i32 %mip) {
1500; VERDE-LABEL: load_mip_2d_tfe:
1501; VERDE:       ; %bb.0: ; %main_body
1502; VERDE-NEXT:    v_mov_b32_e32 v5, v0
1503; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1504; VERDE-NEXT:    v_mov_b32_e32 v7, v2
1505; VERDE-NEXT:    v_mov_b32_e32 v6, v1
1506; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1507; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1508; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1509; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1510; VERDE-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe
1511; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1512; VERDE-NEXT:    s_mov_b32 s10, -1
1513; VERDE-NEXT:    s_waitcnt vmcnt(0)
1514; VERDE-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1515; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1516; VERDE-NEXT:    ; return to shader part epilog
1517;
1518; FIJI-LABEL: load_mip_2d_tfe:
1519; FIJI:       ; %bb.0: ; %main_body
1520; FIJI-NEXT:    v_mov_b32_e32 v5, v0
1521; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1522; FIJI-NEXT:    v_mov_b32_e32 v7, v2
1523; FIJI-NEXT:    v_mov_b32_e32 v6, v1
1524; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1525; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1526; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1527; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1528; FIJI-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe
1529; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1530; FIJI-NEXT:    s_mov_b32 s10, -1
1531; FIJI-NEXT:    s_waitcnt vmcnt(0)
1532; FIJI-NEXT:    buffer_store_dword v4, off, s[8:11], 0
1533; FIJI-NEXT:    s_waitcnt vmcnt(0)
1534; FIJI-NEXT:    ; return to shader part epilog
1535;
1536; GFX6789-LABEL: load_mip_2d_tfe:
1537; GFX6789:       ; %bb.0: ; %main_body
1538; GFX6789-NEXT:    v_mov_b32_e32 v8, 0
1539; GFX6789-NEXT:    v_mov_b32_e32 v7, v2
1540; GFX6789-NEXT:    v_mov_b32_e32 v6, v1
1541; GFX6789-NEXT:    v_mov_b32_e32 v5, v0
1542; GFX6789-NEXT:    v_mov_b32_e32 v9, v8
1543; GFX6789-NEXT:    v_mov_b32_e32 v10, v8
1544; GFX6789-NEXT:    v_mov_b32_e32 v11, v8
1545; GFX6789-NEXT:    v_mov_b32_e32 v12, v8
1546; GFX6789-NEXT:    v_mov_b32_e32 v0, v8
1547; GFX6789-NEXT:    v_mov_b32_e32 v1, v9
1548; GFX6789-NEXT:    v_mov_b32_e32 v2, v10
1549; GFX6789-NEXT:    v_mov_b32_e32 v3, v11
1550; GFX6789-NEXT:    v_mov_b32_e32 v4, v12
1551; GFX6789-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf unorm tfe
1552; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1553; GFX6789-NEXT:    global_store_dword v8, v4, s[8:9]
1554; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1555; GFX6789-NEXT:    ; return to shader part epilog
1556;
1557; NOPRT-LABEL: load_mip_2d_tfe:
1558; NOPRT:       ; %bb.0: ; %main_body
1559; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1560; NOPRT-NEXT:    image_load_mip v[0:4], v[0:2], s[0:7] dmask:0xf unorm tfe
1561; NOPRT-NEXT:    v_mov_b32_e32 v5, 0
1562; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1563; NOPRT-NEXT:    global_store_dword v5, v4, s[8:9]
1564; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1565; NOPRT-NEXT:    ; return to shader part epilog
1566;
1567; GFX10-LABEL: load_mip_2d_tfe:
1568; GFX10:       ; %bb.0: ; %main_body
1569; GFX10-NEXT:    v_mov_b32_e32 v8, 0
1570; GFX10-NEXT:    v_mov_b32_e32 v7, v2
1571; GFX10-NEXT:    v_mov_b32_e32 v6, v1
1572; GFX10-NEXT:    v_mov_b32_e32 v5, v0
1573; GFX10-NEXT:    v_mov_b32_e32 v9, v8
1574; GFX10-NEXT:    v_mov_b32_e32 v10, v8
1575; GFX10-NEXT:    v_mov_b32_e32 v11, v8
1576; GFX10-NEXT:    v_mov_b32_e32 v12, v8
1577; GFX10-NEXT:    v_mov_b32_e32 v0, v8
1578; GFX10-NEXT:    v_mov_b32_e32 v1, v9
1579; GFX10-NEXT:    v_mov_b32_e32 v2, v10
1580; GFX10-NEXT:    v_mov_b32_e32 v3, v11
1581; GFX10-NEXT:    v_mov_b32_e32 v4, v12
1582; GFX10-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
1583; GFX10-NEXT:    s_waitcnt vmcnt(0)
1584; GFX10-NEXT:    global_store_dword v8, v4, s[8:9]
1585; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1586; GFX10-NEXT:    ; return to shader part epilog
1587;
1588; GFX11-LABEL: load_mip_2d_tfe:
1589; GFX11:       ; %bb.0: ; %main_body
1590; GFX11-NEXT:    v_mov_b32_e32 v8, 0
1591; GFX11-NEXT:    v_mov_b32_e32 v7, v2
1592; GFX11-NEXT:    v_mov_b32_e32 v6, v1
1593; GFX11-NEXT:    v_mov_b32_e32 v5, v0
1594; GFX11-NEXT:    v_mov_b32_e32 v9, v8
1595; GFX11-NEXT:    v_mov_b32_e32 v10, v8
1596; GFX11-NEXT:    v_mov_b32_e32 v11, v8
1597; GFX11-NEXT:    v_mov_b32_e32 v12, v8
1598; GFX11-NEXT:    v_mov_b32_e32 v0, v8
1599; GFX11-NEXT:    v_mov_b32_e32 v1, v9
1600; GFX11-NEXT:    v_mov_b32_e32 v2, v10
1601; GFX11-NEXT:    v_mov_b32_e32 v3, v11
1602; GFX11-NEXT:    v_mov_b32_e32 v4, v12
1603; GFX11-NEXT:    image_load_mip v[0:4], v[5:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm tfe
1604; GFX11-NEXT:    s_waitcnt vmcnt(0)
1605; GFX11-NEXT:    global_store_b32 v8, v4, s[8:9]
1606; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
1607; GFX11-NEXT:    ; return to shader part epilog
1608main_body:
1609  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1610  %v.vec = extractvalue {<4 x float>, i32} %v, 0
1611  %v.err = extractvalue {<4 x float>, i32} %v, 1
1612  store i32 %v.err, i32 addrspace(1)* %out, align 4
1613  ret <4 x float> %v.vec
1614}
1615
1616define amdgpu_ps float @load_1d_V2_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
1617; VERDE-LABEL: load_1d_V2_tfe_dmask0:
1618; VERDE:       ; %bb.0: ; %main_body
1619; VERDE-NEXT:    v_mov_b32_e32 v1, 0
1620; VERDE-NEXT:    v_mov_b32_e32 v2, v1
1621; VERDE-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1622; VERDE-NEXT:    s_waitcnt vmcnt(0)
1623; VERDE-NEXT:    v_mov_b32_e32 v0, v2
1624; VERDE-NEXT:    ; return to shader part epilog
1625;
1626; FIJI-LABEL: load_1d_V2_tfe_dmask0:
1627; FIJI:       ; %bb.0: ; %main_body
1628; FIJI-NEXT:    v_mov_b32_e32 v1, 0
1629; FIJI-NEXT:    v_mov_b32_e32 v2, v1
1630; FIJI-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1631; FIJI-NEXT:    s_waitcnt vmcnt(0)
1632; FIJI-NEXT:    v_mov_b32_e32 v0, v2
1633; FIJI-NEXT:    ; return to shader part epilog
1634;
1635; GFX6789-LABEL: load_1d_V2_tfe_dmask0:
1636; GFX6789:       ; %bb.0: ; %main_body
1637; GFX6789-NEXT:    v_mov_b32_e32 v1, 0
1638; GFX6789-NEXT:    v_mov_b32_e32 v2, v1
1639; GFX6789-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1640; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1641; GFX6789-NEXT:    v_mov_b32_e32 v0, v2
1642; GFX6789-NEXT:    ; return to shader part epilog
1643;
1644; NOPRT-LABEL: load_1d_V2_tfe_dmask0:
1645; NOPRT:       ; %bb.0: ; %main_body
1646; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
1647; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x1 unorm tfe
1648; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1649; NOPRT-NEXT:    v_mov_b32_e32 v0, v1
1650; NOPRT-NEXT:    ; return to shader part epilog
1651;
1652; GFX10PLUS-LABEL: load_1d_V2_tfe_dmask0:
1653; GFX10PLUS:       ; %bb.0: ; %main_body
1654; GFX10PLUS-NEXT:    v_mov_b32_e32 v1, 0
1655; GFX10PLUS-NEXT:    v_mov_b32_e32 v2, v1
1656; GFX10PLUS-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe
1657; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1658; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v2
1659; GFX10PLUS-NEXT:    ; return to shader part epilog
1660main_body:
1661  %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
1662  %v.err = extractvalue {<2 x float>, i32} %v, 1
1663  %vv = bitcast i32 %v.err to float
1664  ret float %vv
1665}
1666
1667define amdgpu_ps float @load_1d_V1_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s) {
1668; VERDE-LABEL: load_1d_V1_tfe_dmask0:
1669; VERDE:       ; %bb.0: ; %main_body
1670; VERDE-NEXT:    v_mov_b32_e32 v1, 0
1671; VERDE-NEXT:    v_mov_b32_e32 v2, v1
1672; VERDE-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1673; VERDE-NEXT:    s_waitcnt vmcnt(0)
1674; VERDE-NEXT:    v_mov_b32_e32 v0, v2
1675; VERDE-NEXT:    ; return to shader part epilog
1676;
1677; FIJI-LABEL: load_1d_V1_tfe_dmask0:
1678; FIJI:       ; %bb.0: ; %main_body
1679; FIJI-NEXT:    v_mov_b32_e32 v1, 0
1680; FIJI-NEXT:    v_mov_b32_e32 v2, v1
1681; FIJI-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1682; FIJI-NEXT:    s_waitcnt vmcnt(0)
1683; FIJI-NEXT:    v_mov_b32_e32 v0, v2
1684; FIJI-NEXT:    ; return to shader part epilog
1685;
1686; GFX6789-LABEL: load_1d_V1_tfe_dmask0:
1687; GFX6789:       ; %bb.0: ; %main_body
1688; GFX6789-NEXT:    v_mov_b32_e32 v1, 0
1689; GFX6789-NEXT:    v_mov_b32_e32 v2, v1
1690; GFX6789-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 unorm tfe
1691; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1692; GFX6789-NEXT:    v_mov_b32_e32 v0, v2
1693; GFX6789-NEXT:    ; return to shader part epilog
1694;
1695; NOPRT-LABEL: load_1d_V1_tfe_dmask0:
1696; NOPRT:       ; %bb.0: ; %main_body
1697; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
1698; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x1 unorm tfe
1699; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1700; NOPRT-NEXT:    v_mov_b32_e32 v0, v1
1701; NOPRT-NEXT:    ; return to shader part epilog
1702;
1703; GFX10PLUS-LABEL: load_1d_V1_tfe_dmask0:
1704; GFX10PLUS:       ; %bb.0: ; %main_body
1705; GFX10PLUS-NEXT:    v_mov_b32_e32 v1, 0
1706; GFX10PLUS-NEXT:    v_mov_b32_e32 v2, v1
1707; GFX10PLUS-NEXT:    image_load v[1:2], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm tfe
1708; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1709; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v2
1710; GFX10PLUS-NEXT:    ; return to shader part epilog
1711main_body:
1712  %v = call {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32 0, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
1713  %v.err = extractvalue {float, i32} %v, 1
1714  %vv = bitcast i32 %v.err to float
1715  ret float %vv
1716}
1717
1718define amdgpu_ps float @load_mip_2d_tfe_dmask0(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1719; VERDE-LABEL: load_mip_2d_tfe_dmask0:
1720; VERDE:       ; %bb.0: ; %main_body
1721; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1722; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1723; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1724; VERDE-NEXT:    s_waitcnt vmcnt(0)
1725; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1726; VERDE-NEXT:    ; return to shader part epilog
1727;
1728; FIJI-LABEL: load_mip_2d_tfe_dmask0:
1729; FIJI:       ; %bb.0: ; %main_body
1730; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1731; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1732; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1733; FIJI-NEXT:    s_waitcnt vmcnt(0)
1734; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1735; FIJI-NEXT:    ; return to shader part epilog
1736;
1737; GFX6789-LABEL: load_mip_2d_tfe_dmask0:
1738; GFX6789:       ; %bb.0: ; %main_body
1739; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1740; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1741; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1742; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1743; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1744; GFX6789-NEXT:    ; return to shader part epilog
1745;
1746; NOPRT-LABEL: load_mip_2d_tfe_dmask0:
1747; NOPRT:       ; %bb.0: ; %main_body
1748; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1749; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe
1750; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1751; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1752; NOPRT-NEXT:    ; return to shader part epilog
1753;
1754; GFX10PLUS-LABEL: load_mip_2d_tfe_dmask0:
1755; GFX10PLUS:       ; %bb.0: ; %main_body
1756; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1757; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1758; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe
1759; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1760; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1761; GFX10PLUS-NEXT:    ; return to shader part epilog
1762main_body:
1763  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 0, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1764  %v.err = extractvalue {<4 x float>, i32} %v, 1
1765  %vv = bitcast i32 %v.err to float
1766  ret float %vv
1767}
1768
1769define amdgpu_ps float @load_mip_2d_tfe_nouse(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1770; VERDE-LABEL: load_mip_2d_tfe_nouse:
1771; VERDE:       ; %bb.0: ; %main_body
1772; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1773; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1774; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1775; VERDE-NEXT:    s_waitcnt vmcnt(0)
1776; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1777; VERDE-NEXT:    ; return to shader part epilog
1778;
1779; FIJI-LABEL: load_mip_2d_tfe_nouse:
1780; FIJI:       ; %bb.0: ; %main_body
1781; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1782; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1783; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1784; FIJI-NEXT:    s_waitcnt vmcnt(0)
1785; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1786; FIJI-NEXT:    ; return to shader part epilog
1787;
1788; GFX6789-LABEL: load_mip_2d_tfe_nouse:
1789; GFX6789:       ; %bb.0: ; %main_body
1790; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1791; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1792; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1793; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1794; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1795; GFX6789-NEXT:    ; return to shader part epilog
1796;
1797; NOPRT-LABEL: load_mip_2d_tfe_nouse:
1798; NOPRT:       ; %bb.0: ; %main_body
1799; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1800; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe
1801; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1802; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1803; NOPRT-NEXT:    ; return to shader part epilog
1804;
1805; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse:
1806; GFX10PLUS:       ; %bb.0: ; %main_body
1807; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1808; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1809; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe
1810; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1811; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1812; GFX10PLUS-NEXT:    ; return to shader part epilog
1813main_body:
1814  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1815  %v.err = extractvalue {<4 x float>, i32} %v, 1
1816  %vv = bitcast i32 %v.err to float
1817  ret float %vv
1818}
1819
1820define amdgpu_ps float @load_mip_2d_tfe_nouse_V2(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1821; VERDE-LABEL: load_mip_2d_tfe_nouse_V2:
1822; VERDE:       ; %bb.0: ; %main_body
1823; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1824; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1825; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1826; VERDE-NEXT:    s_waitcnt vmcnt(0)
1827; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1828; VERDE-NEXT:    ; return to shader part epilog
1829;
1830; FIJI-LABEL: load_mip_2d_tfe_nouse_V2:
1831; FIJI:       ; %bb.0: ; %main_body
1832; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1833; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1834; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1835; FIJI-NEXT:    s_waitcnt vmcnt(0)
1836; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1837; FIJI-NEXT:    ; return to shader part epilog
1838;
1839; GFX6789-LABEL: load_mip_2d_tfe_nouse_V2:
1840; GFX6789:       ; %bb.0: ; %main_body
1841; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1842; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1843; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 unorm tfe
1844; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1845; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1846; GFX6789-NEXT:    ; return to shader part epilog
1847;
1848; NOPRT-LABEL: load_mip_2d_tfe_nouse_V2:
1849; NOPRT:       ; %bb.0: ; %main_body
1850; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1851; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x1 unorm tfe
1852; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1853; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1854; NOPRT-NEXT:    ; return to shader part epilog
1855;
1856; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse_V2:
1857; GFX10PLUS:       ; %bb.0: ; %main_body
1858; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1859; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1860; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm tfe
1861; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1862; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1863; GFX10PLUS-NEXT:    ; return to shader part epilog
1864main_body:
1865  %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32 6, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1866  %v.err = extractvalue {<2 x float>, i32} %v, 1
1867  %vv = bitcast i32 %v.err to float
1868  ret float %vv
1869}
1870
1871define amdgpu_ps float @load_mip_2d_tfe_nouse_V1(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %mip) {
1872; VERDE-LABEL: load_mip_2d_tfe_nouse_V1:
1873; VERDE:       ; %bb.0: ; %main_body
1874; VERDE-NEXT:    v_mov_b32_e32 v3, 0
1875; VERDE-NEXT:    v_mov_b32_e32 v4, v3
1876; VERDE-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe
1877; VERDE-NEXT:    s_waitcnt vmcnt(0)
1878; VERDE-NEXT:    v_mov_b32_e32 v0, v4
1879; VERDE-NEXT:    ; return to shader part epilog
1880;
1881; FIJI-LABEL: load_mip_2d_tfe_nouse_V1:
1882; FIJI:       ; %bb.0: ; %main_body
1883; FIJI-NEXT:    v_mov_b32_e32 v3, 0
1884; FIJI-NEXT:    v_mov_b32_e32 v4, v3
1885; FIJI-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe
1886; FIJI-NEXT:    s_waitcnt vmcnt(0)
1887; FIJI-NEXT:    v_mov_b32_e32 v0, v4
1888; FIJI-NEXT:    ; return to shader part epilog
1889;
1890; GFX6789-LABEL: load_mip_2d_tfe_nouse_V1:
1891; GFX6789:       ; %bb.0: ; %main_body
1892; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
1893; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
1894; GFX6789-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 unorm tfe
1895; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1896; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
1897; GFX6789-NEXT:    ; return to shader part epilog
1898;
1899; NOPRT-LABEL: load_mip_2d_tfe_nouse_V1:
1900; NOPRT:       ; %bb.0: ; %main_body
1901; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1902; NOPRT-NEXT:    image_load_mip v[2:3], v[0:2], s[0:7] dmask:0x2 unorm tfe
1903; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1904; NOPRT-NEXT:    v_mov_b32_e32 v0, v3
1905; NOPRT-NEXT:    ; return to shader part epilog
1906;
1907; GFX10PLUS-LABEL: load_mip_2d_tfe_nouse_V1:
1908; GFX10PLUS:       ; %bb.0: ; %main_body
1909; GFX10PLUS-NEXT:    v_mov_b32_e32 v3, 0
1910; GFX10PLUS-NEXT:    v_mov_b32_e32 v4, v3
1911; GFX10PLUS-NEXT:    image_load_mip v[3:4], v[0:2], s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_2D unorm tfe
1912; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
1913; GFX10PLUS-NEXT:    v_mov_b32_e32 v0, v4
1914; GFX10PLUS-NEXT:    ; return to shader part epilog
1915main_body:
1916  %v = call {float, i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32 2, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 1, i32 0)
1917  %v.err = extractvalue {float, i32} %v, 1
1918  %vv = bitcast i32 %v.err to float
1919  ret float %vv
1920}
1921
1922define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask3(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s) {
1923; VERDE-LABEL: load_1d_tfe_V4_dmask3:
1924; VERDE:       ; %bb.0: ; %main_body
1925; VERDE-NEXT:    v_mov_b32_e32 v4, v0
1926; VERDE-NEXT:    v_mov_b32_e32 v0, 0
1927; VERDE-NEXT:    v_mov_b32_e32 v1, v0
1928; VERDE-NEXT:    v_mov_b32_e32 v2, v0
1929; VERDE-NEXT:    v_mov_b32_e32 v3, v0
1930; VERDE-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe
1931; VERDE-NEXT:    s_mov_b32 s11, 0xf000
1932; VERDE-NEXT:    s_mov_b32 s10, -1
1933; VERDE-NEXT:    s_waitcnt vmcnt(0)
1934; VERDE-NEXT:    buffer_store_dword v3, off, s[8:11], 0
1935; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
1936; VERDE-NEXT:    ; return to shader part epilog
1937;
1938; FIJI-LABEL: load_1d_tfe_V4_dmask3:
1939; FIJI:       ; %bb.0: ; %main_body
1940; FIJI-NEXT:    v_mov_b32_e32 v4, v0
1941; FIJI-NEXT:    v_mov_b32_e32 v0, 0
1942; FIJI-NEXT:    v_mov_b32_e32 v1, v0
1943; FIJI-NEXT:    v_mov_b32_e32 v2, v0
1944; FIJI-NEXT:    v_mov_b32_e32 v3, v0
1945; FIJI-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe
1946; FIJI-NEXT:    s_mov_b32 s11, 0xf000
1947; FIJI-NEXT:    s_mov_b32 s10, -1
1948; FIJI-NEXT:    s_waitcnt vmcnt(0)
1949; FIJI-NEXT:    buffer_store_dword v3, off, s[8:11], 0
1950; FIJI-NEXT:    s_waitcnt vmcnt(0)
1951; FIJI-NEXT:    ; return to shader part epilog
1952;
1953; GFX6789-LABEL: load_1d_tfe_V4_dmask3:
1954; GFX6789:       ; %bb.0: ; %main_body
1955; GFX6789-NEXT:    v_mov_b32_e32 v5, 0
1956; GFX6789-NEXT:    v_mov_b32_e32 v4, v0
1957; GFX6789-NEXT:    v_mov_b32_e32 v6, v5
1958; GFX6789-NEXT:    v_mov_b32_e32 v7, v5
1959; GFX6789-NEXT:    v_mov_b32_e32 v8, v5
1960; GFX6789-NEXT:    v_mov_b32_e32 v0, v5
1961; GFX6789-NEXT:    v_mov_b32_e32 v1, v6
1962; GFX6789-NEXT:    v_mov_b32_e32 v2, v7
1963; GFX6789-NEXT:    v_mov_b32_e32 v3, v8
1964; GFX6789-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 unorm tfe
1965; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1966; GFX6789-NEXT:    global_store_dword v5, v3, s[8:9]
1967; GFX6789-NEXT:    s_waitcnt vmcnt(0)
1968; GFX6789-NEXT:    ; return to shader part epilog
1969;
1970; NOPRT-LABEL: load_1d_tfe_V4_dmask3:
1971; NOPRT:       ; %bb.0: ; %main_body
1972; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
1973; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0x7 unorm tfe
1974; NOPRT-NEXT:    v_mov_b32_e32 v4, 0
1975; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1976; NOPRT-NEXT:    global_store_dword v4, v3, s[8:9]
1977; NOPRT-NEXT:    s_waitcnt vmcnt(0)
1978; NOPRT-NEXT:    ; return to shader part epilog
1979;
1980; GFX10-LABEL: load_1d_tfe_V4_dmask3:
1981; GFX10:       ; %bb.0: ; %main_body
1982; GFX10-NEXT:    v_mov_b32_e32 v5, 0
1983; GFX10-NEXT:    v_mov_b32_e32 v4, v0
1984; GFX10-NEXT:    v_mov_b32_e32 v6, v5
1985; GFX10-NEXT:    v_mov_b32_e32 v7, v5
1986; GFX10-NEXT:    v_mov_b32_e32 v8, v5
1987; GFX10-NEXT:    v_mov_b32_e32 v0, v5
1988; GFX10-NEXT:    v_mov_b32_e32 v1, v6
1989; GFX10-NEXT:    v_mov_b32_e32 v2, v7
1990; GFX10-NEXT:    v_mov_b32_e32 v3, v8
1991; GFX10-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe
1992; GFX10-NEXT:    s_waitcnt vmcnt(0)
1993; GFX10-NEXT:    global_store_dword v5, v3, s[8:9]
1994; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1995; GFX10-NEXT:    ; return to shader part epilog
1996;
1997; GFX11-LABEL: load_1d_tfe_V4_dmask3:
1998; GFX11:       ; %bb.0: ; %main_body
1999; GFX11-NEXT:    v_mov_b32_e32 v5, 0
2000; GFX11-NEXT:    v_mov_b32_e32 v4, v0
2001; GFX11-NEXT:    v_mov_b32_e32 v6, v5
2002; GFX11-NEXT:    v_mov_b32_e32 v7, v5
2003; GFX11-NEXT:    v_mov_b32_e32 v8, v5
2004; GFX11-NEXT:    v_mov_b32_e32 v0, v5
2005; GFX11-NEXT:    v_mov_b32_e32 v1, v6
2006; GFX11-NEXT:    v_mov_b32_e32 v2, v7
2007; GFX11-NEXT:    v_mov_b32_e32 v3, v8
2008; GFX11-NEXT:    image_load v[0:3], v4, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm tfe
2009; GFX11-NEXT:    s_waitcnt vmcnt(0)
2010; GFX11-NEXT:    global_store_b32 v5, v3, s[8:9]
2011; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
2012; GFX11-NEXT:    ; return to shader part epilog
2013main_body:
2014  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 7, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
2015  %v.vec = extractvalue {<4 x float>, i32} %v, 0
2016  %v.err = extractvalue {<4 x float>, i32} %v, 1
2017  store i32 %v.err, i32 addrspace(1)* %out, align 4
2018  ret <4 x float> %v.vec
2019}
2020
2021define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask2(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s) {
2022; VERDE-LABEL: load_1d_tfe_V4_dmask2:
2023; VERDE:       ; %bb.0: ; %main_body
2024; VERDE-NEXT:    v_mov_b32_e32 v3, v0
2025; VERDE-NEXT:    v_mov_b32_e32 v0, 0
2026; VERDE-NEXT:    v_mov_b32_e32 v1, v0
2027; VERDE-NEXT:    v_mov_b32_e32 v2, v0
2028; VERDE-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe
2029; VERDE-NEXT:    s_mov_b32 s11, 0xf000
2030; VERDE-NEXT:    s_mov_b32 s10, -1
2031; VERDE-NEXT:    s_waitcnt vmcnt(0)
2032; VERDE-NEXT:    buffer_store_dword v2, off, s[8:11], 0
2033; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2034; VERDE-NEXT:    ; return to shader part epilog
2035;
2036; FIJI-LABEL: load_1d_tfe_V4_dmask2:
2037; FIJI:       ; %bb.0: ; %main_body
2038; FIJI-NEXT:    v_mov_b32_e32 v3, v0
2039; FIJI-NEXT:    v_mov_b32_e32 v0, 0
2040; FIJI-NEXT:    v_mov_b32_e32 v1, v0
2041; FIJI-NEXT:    v_mov_b32_e32 v2, v0
2042; FIJI-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe
2043; FIJI-NEXT:    s_mov_b32 s11, 0xf000
2044; FIJI-NEXT:    s_mov_b32 s10, -1
2045; FIJI-NEXT:    s_waitcnt vmcnt(0)
2046; FIJI-NEXT:    buffer_store_dword v2, off, s[8:11], 0
2047; FIJI-NEXT:    s_waitcnt vmcnt(0)
2048; FIJI-NEXT:    ; return to shader part epilog
2049;
2050; GFX6789-LABEL: load_1d_tfe_V4_dmask2:
2051; GFX6789:       ; %bb.0: ; %main_body
2052; GFX6789-NEXT:    v_mov_b32_e32 v4, 0
2053; GFX6789-NEXT:    v_mov_b32_e32 v3, v0
2054; GFX6789-NEXT:    v_mov_b32_e32 v5, v4
2055; GFX6789-NEXT:    v_mov_b32_e32 v6, v4
2056; GFX6789-NEXT:    v_mov_b32_e32 v0, v4
2057; GFX6789-NEXT:    v_mov_b32_e32 v1, v5
2058; GFX6789-NEXT:    v_mov_b32_e32 v2, v6
2059; GFX6789-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 unorm tfe
2060; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2061; GFX6789-NEXT:    global_store_dword v4, v2, s[8:9]
2062; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2063; GFX6789-NEXT:    ; return to shader part epilog
2064;
2065; NOPRT-LABEL: load_1d_tfe_V4_dmask2:
2066; NOPRT:       ; %bb.0: ; %main_body
2067; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
2068; NOPRT-NEXT:    image_load v[0:2], v0, s[0:7] dmask:0x6 unorm tfe
2069; NOPRT-NEXT:    v_mov_b32_e32 v3, 0
2070; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2071; NOPRT-NEXT:    global_store_dword v3, v2, s[8:9]
2072; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2073; NOPRT-NEXT:    ; return to shader part epilog
2074;
2075; GFX10-LABEL: load_1d_tfe_V4_dmask2:
2076; GFX10:       ; %bb.0: ; %main_body
2077; GFX10-NEXT:    v_mov_b32_e32 v4, 0
2078; GFX10-NEXT:    v_mov_b32_e32 v3, v0
2079; GFX10-NEXT:    v_mov_b32_e32 v5, v4
2080; GFX10-NEXT:    v_mov_b32_e32 v6, v4
2081; GFX10-NEXT:    v_mov_b32_e32 v0, v4
2082; GFX10-NEXT:    v_mov_b32_e32 v1, v5
2083; GFX10-NEXT:    v_mov_b32_e32 v2, v6
2084; GFX10-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm tfe
2085; GFX10-NEXT:    s_waitcnt vmcnt(0)
2086; GFX10-NEXT:    global_store_dword v4, v2, s[8:9]
2087; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2088; GFX10-NEXT:    ; return to shader part epilog
2089;
2090; GFX11-LABEL: load_1d_tfe_V4_dmask2:
2091; GFX11:       ; %bb.0: ; %main_body
2092; GFX11-NEXT:    v_mov_b32_e32 v4, 0
2093; GFX11-NEXT:    v_mov_b32_e32 v3, v0
2094; GFX11-NEXT:    v_mov_b32_e32 v5, v4
2095; GFX11-NEXT:    v_mov_b32_e32 v6, v4
2096; GFX11-NEXT:    v_mov_b32_e32 v0, v4
2097; GFX11-NEXT:    v_mov_b32_e32 v1, v5
2098; GFX11-NEXT:    v_mov_b32_e32 v2, v6
2099; GFX11-NEXT:    image_load v[0:2], v3, s[0:7] dmask:0x6 dim:SQ_RSRC_IMG_1D unorm tfe
2100; GFX11-NEXT:    s_waitcnt vmcnt(0)
2101; GFX11-NEXT:    global_store_b32 v4, v2, s[8:9]
2102; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
2103; GFX11-NEXT:    ; return to shader part epilog
2104main_body:
2105  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 6, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
2106  %v.vec = extractvalue {<4 x float>, i32} %v, 0
2107  %v.err = extractvalue {<4 x float>, i32} %v, 1
2108  store i32 %v.err, i32 addrspace(1)* %out, align 4
2109  ret <4 x float> %v.vec
2110}
2111
2112define amdgpu_ps <4 x float> @load_1d_tfe_V4_dmask1(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s) {
2113; VERDE-LABEL: load_1d_tfe_V4_dmask1:
2114; VERDE:       ; %bb.0: ; %main_body
2115; VERDE-NEXT:    v_mov_b32_e32 v2, v0
2116; VERDE-NEXT:    v_mov_b32_e32 v0, 0
2117; VERDE-NEXT:    v_mov_b32_e32 v1, v0
2118; VERDE-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2119; VERDE-NEXT:    s_mov_b32 s11, 0xf000
2120; VERDE-NEXT:    s_mov_b32 s10, -1
2121; VERDE-NEXT:    s_waitcnt vmcnt(0)
2122; VERDE-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2123; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2124; VERDE-NEXT:    ; return to shader part epilog
2125;
2126; FIJI-LABEL: load_1d_tfe_V4_dmask1:
2127; FIJI:       ; %bb.0: ; %main_body
2128; FIJI-NEXT:    v_mov_b32_e32 v2, v0
2129; FIJI-NEXT:    v_mov_b32_e32 v0, 0
2130; FIJI-NEXT:    v_mov_b32_e32 v1, v0
2131; FIJI-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2132; FIJI-NEXT:    s_mov_b32 s11, 0xf000
2133; FIJI-NEXT:    s_mov_b32 s10, -1
2134; FIJI-NEXT:    s_waitcnt vmcnt(0)
2135; FIJI-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2136; FIJI-NEXT:    s_waitcnt vmcnt(0)
2137; FIJI-NEXT:    ; return to shader part epilog
2138;
2139; GFX6789-LABEL: load_1d_tfe_V4_dmask1:
2140; GFX6789:       ; %bb.0: ; %main_body
2141; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
2142; GFX6789-NEXT:    v_mov_b32_e32 v2, v0
2143; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
2144; GFX6789-NEXT:    v_mov_b32_e32 v0, v3
2145; GFX6789-NEXT:    v_mov_b32_e32 v1, v4
2146; GFX6789-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2147; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2148; GFX6789-NEXT:    global_store_dword v3, v1, s[8:9]
2149; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2150; GFX6789-NEXT:    ; return to shader part epilog
2151;
2152; NOPRT-LABEL: load_1d_tfe_V4_dmask1:
2153; NOPRT:       ; %bb.0: ; %main_body
2154; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
2155; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x8 unorm tfe
2156; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
2157; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2158; NOPRT-NEXT:    global_store_dword v2, v1, s[8:9]
2159; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2160; NOPRT-NEXT:    ; return to shader part epilog
2161;
2162; GFX10-LABEL: load_1d_tfe_V4_dmask1:
2163; GFX10:       ; %bb.0: ; %main_body
2164; GFX10-NEXT:    v_mov_b32_e32 v3, 0
2165; GFX10-NEXT:    v_mov_b32_e32 v2, v0
2166; GFX10-NEXT:    v_mov_b32_e32 v4, v3
2167; GFX10-NEXT:    v_mov_b32_e32 v0, v3
2168; GFX10-NEXT:    v_mov_b32_e32 v1, v4
2169; GFX10-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2170; GFX10-NEXT:    s_waitcnt vmcnt(0)
2171; GFX10-NEXT:    global_store_dword v3, v1, s[8:9]
2172; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2173; GFX10-NEXT:    ; return to shader part epilog
2174;
2175; GFX11-LABEL: load_1d_tfe_V4_dmask1:
2176; GFX11:       ; %bb.0: ; %main_body
2177; GFX11-NEXT:    v_mov_b32_e32 v3, 0
2178; GFX11-NEXT:    v_mov_b32_e32 v2, v0
2179; GFX11-NEXT:    v_mov_b32_e32 v4, v3
2180; GFX11-NEXT:    v_mov_b32_e32 v0, v3
2181; GFX11-NEXT:    v_mov_b32_e32 v1, v4
2182; GFX11-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2183; GFX11-NEXT:    s_waitcnt vmcnt(0)
2184; GFX11-NEXT:    global_store_b32 v3, v1, s[8:9]
2185; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
2186; GFX11-NEXT:    ; return to shader part epilog
2187main_body:
2188  %v = call {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
2189  %v.vec = extractvalue {<4 x float>, i32} %v, 0
2190  %v.err = extractvalue {<4 x float>, i32} %v, 1
2191  store i32 %v.err, i32 addrspace(1)* %out, align 4
2192  ret <4 x float> %v.vec
2193}
2194
2195define amdgpu_ps <2 x float> @load_1d_tfe_V2_dmask1(<8 x i32> inreg %rsrc, i32 addrspace(1)* inreg %out, i32 %s) {
2196; VERDE-LABEL: load_1d_tfe_V2_dmask1:
2197; VERDE:       ; %bb.0: ; %main_body
2198; VERDE-NEXT:    v_mov_b32_e32 v2, v0
2199; VERDE-NEXT:    v_mov_b32_e32 v0, 0
2200; VERDE-NEXT:    v_mov_b32_e32 v1, v0
2201; VERDE-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2202; VERDE-NEXT:    s_mov_b32 s11, 0xf000
2203; VERDE-NEXT:    s_mov_b32 s10, -1
2204; VERDE-NEXT:    s_waitcnt vmcnt(0)
2205; VERDE-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2206; VERDE-NEXT:    s_waitcnt vmcnt(0) expcnt(0)
2207; VERDE-NEXT:    ; return to shader part epilog
2208;
2209; FIJI-LABEL: load_1d_tfe_V2_dmask1:
2210; FIJI:       ; %bb.0: ; %main_body
2211; FIJI-NEXT:    v_mov_b32_e32 v2, v0
2212; FIJI-NEXT:    v_mov_b32_e32 v0, 0
2213; FIJI-NEXT:    v_mov_b32_e32 v1, v0
2214; FIJI-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2215; FIJI-NEXT:    s_mov_b32 s11, 0xf000
2216; FIJI-NEXT:    s_mov_b32 s10, -1
2217; FIJI-NEXT:    s_waitcnt vmcnt(0)
2218; FIJI-NEXT:    buffer_store_dword v1, off, s[8:11], 0
2219; FIJI-NEXT:    s_waitcnt vmcnt(0)
2220; FIJI-NEXT:    ; return to shader part epilog
2221;
2222; GFX6789-LABEL: load_1d_tfe_V2_dmask1:
2223; GFX6789:       ; %bb.0: ; %main_body
2224; GFX6789-NEXT:    v_mov_b32_e32 v3, 0
2225; GFX6789-NEXT:    v_mov_b32_e32 v2, v0
2226; GFX6789-NEXT:    v_mov_b32_e32 v4, v3
2227; GFX6789-NEXT:    v_mov_b32_e32 v0, v3
2228; GFX6789-NEXT:    v_mov_b32_e32 v1, v4
2229; GFX6789-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 unorm tfe
2230; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2231; GFX6789-NEXT:    global_store_dword v3, v1, s[8:9]
2232; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2233; GFX6789-NEXT:    ; return to shader part epilog
2234;
2235; NOPRT-LABEL: load_1d_tfe_V2_dmask1:
2236; NOPRT:       ; %bb.0: ; %main_body
2237; NOPRT-NEXT:    v_mov_b32_e32 v1, 0
2238; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x8 unorm tfe
2239; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
2240; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2241; NOPRT-NEXT:    global_store_dword v2, v1, s[8:9]
2242; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2243; NOPRT-NEXT:    ; return to shader part epilog
2244;
2245; GFX10-LABEL: load_1d_tfe_V2_dmask1:
2246; GFX10:       ; %bb.0: ; %main_body
2247; GFX10-NEXT:    v_mov_b32_e32 v3, 0
2248; GFX10-NEXT:    v_mov_b32_e32 v2, v0
2249; GFX10-NEXT:    v_mov_b32_e32 v4, v3
2250; GFX10-NEXT:    v_mov_b32_e32 v0, v3
2251; GFX10-NEXT:    v_mov_b32_e32 v1, v4
2252; GFX10-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2253; GFX10-NEXT:    s_waitcnt vmcnt(0)
2254; GFX10-NEXT:    global_store_dword v3, v1, s[8:9]
2255; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2256; GFX10-NEXT:    ; return to shader part epilog
2257;
2258; GFX11-LABEL: load_1d_tfe_V2_dmask1:
2259; GFX11:       ; %bb.0: ; %main_body
2260; GFX11-NEXT:    v_mov_b32_e32 v3, 0
2261; GFX11-NEXT:    v_mov_b32_e32 v2, v0
2262; GFX11-NEXT:    v_mov_b32_e32 v4, v3
2263; GFX11-NEXT:    v_mov_b32_e32 v0, v3
2264; GFX11-NEXT:    v_mov_b32_e32 v1, v4
2265; GFX11-NEXT:    image_load v[0:1], v2, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm tfe
2266; GFX11-NEXT:    s_waitcnt vmcnt(0)
2267; GFX11-NEXT:    global_store_b32 v3, v1, s[8:9]
2268; GFX11-NEXT:    s_waitcnt_vscnt null, 0x0
2269; GFX11-NEXT:    ; return to shader part epilog
2270main_body:
2271  %v = call {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 1, i32 0)
2272  %v.vec = extractvalue {<2 x float>, i32} %v, 0
2273  %v.err = extractvalue {<2 x float>, i32} %v, 1
2274  store i32 %v.err, i32 addrspace(1)* %out, align 4
2275  ret <2 x float> %v.vec
2276}
2277
2278
2279define amdgpu_ps <4 x float> @load_mip_3d(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %r, i32 %mip) {
2280; VERDE-LABEL: load_mip_3d:
2281; VERDE:       ; %bb.0: ; %main_body
2282; VERDE-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2283; VERDE-NEXT:    s_waitcnt vmcnt(0)
2284; VERDE-NEXT:    ; return to shader part epilog
2285;
2286; FIJI-LABEL: load_mip_3d:
2287; FIJI:       ; %bb.0: ; %main_body
2288; FIJI-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2289; FIJI-NEXT:    s_waitcnt vmcnt(0)
2290; FIJI-NEXT:    ; return to shader part epilog
2291;
2292; GFX6789-LABEL: load_mip_3d:
2293; GFX6789:       ; %bb.0: ; %main_body
2294; GFX6789-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2295; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2296; GFX6789-NEXT:    ; return to shader part epilog
2297;
2298; NOPRT-LABEL: load_mip_3d:
2299; NOPRT:       ; %bb.0: ; %main_body
2300; NOPRT-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm
2301; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2302; NOPRT-NEXT:    ; return to shader part epilog
2303;
2304; GFX10PLUS-LABEL: load_mip_3d:
2305; GFX10PLUS:       ; %bb.0: ; %main_body
2306; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2307; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2308; GFX10PLUS-NEXT:    ; return to shader part epilog
2309main_body:
2310  %v = call <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %r, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2311  ret <4 x float> %v
2312}
2313
2314define amdgpu_ps <4 x float> @load_mip_cube(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2315; VERDE-LABEL: load_mip_cube:
2316; VERDE:       ; %bb.0: ; %main_body
2317; VERDE-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2318; VERDE-NEXT:    s_waitcnt vmcnt(0)
2319; VERDE-NEXT:    ; return to shader part epilog
2320;
2321; FIJI-LABEL: load_mip_cube:
2322; FIJI:       ; %bb.0: ; %main_body
2323; FIJI-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2324; FIJI-NEXT:    s_waitcnt vmcnt(0)
2325; FIJI-NEXT:    ; return to shader part epilog
2326;
2327; GFX6789-LABEL: load_mip_cube:
2328; GFX6789:       ; %bb.0: ; %main_body
2329; GFX6789-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2330; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2331; GFX6789-NEXT:    ; return to shader part epilog
2332;
2333; NOPRT-LABEL: load_mip_cube:
2334; NOPRT:       ; %bb.0: ; %main_body
2335; NOPRT-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2336; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2337; NOPRT-NEXT:    ; return to shader part epilog
2338;
2339; GFX10PLUS-LABEL: load_mip_cube:
2340; GFX10PLUS:       ; %bb.0: ; %main_body
2341; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2342; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2343; GFX10PLUS-NEXT:    ; return to shader part epilog
2344main_body:
2345  %v = call <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2346  ret <4 x float> %v
2347}
2348
2349define amdgpu_ps <4 x float> @load_mip_1darray(<8 x i32> inreg %rsrc, i32 %s, i32 %slice, i32 %mip) {
2350; VERDE-LABEL: load_mip_1darray:
2351; VERDE:       ; %bb.0: ; %main_body
2352; VERDE-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2353; VERDE-NEXT:    s_waitcnt vmcnt(0)
2354; VERDE-NEXT:    ; return to shader part epilog
2355;
2356; FIJI-LABEL: load_mip_1darray:
2357; FIJI:       ; %bb.0: ; %main_body
2358; FIJI-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2359; FIJI-NEXT:    s_waitcnt vmcnt(0)
2360; FIJI-NEXT:    ; return to shader part epilog
2361;
2362; GFX6789-LABEL: load_mip_1darray:
2363; GFX6789:       ; %bb.0: ; %main_body
2364; GFX6789-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2365; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2366; GFX6789-NEXT:    ; return to shader part epilog
2367;
2368; NOPRT-LABEL: load_mip_1darray:
2369; NOPRT:       ; %bb.0: ; %main_body
2370; NOPRT-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf unorm da
2371; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2372; NOPRT-NEXT:    ; return to shader part epilog
2373;
2374; GFX10PLUS-LABEL: load_mip_1darray:
2375; GFX10PLUS:       ; %bb.0: ; %main_body
2376; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:2], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2377; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2378; GFX10PLUS-NEXT:    ; return to shader part epilog
2379main_body:
2380  %v = call <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32 15, i32 %s, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2381  ret <4 x float> %v
2382}
2383
2384define amdgpu_ps <4 x float> @load_mip_2darray(<8 x i32> inreg %rsrc, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2385; VERDE-LABEL: load_mip_2darray:
2386; VERDE:       ; %bb.0: ; %main_body
2387; VERDE-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2388; VERDE-NEXT:    s_waitcnt vmcnt(0)
2389; VERDE-NEXT:    ; return to shader part epilog
2390;
2391; FIJI-LABEL: load_mip_2darray:
2392; FIJI:       ; %bb.0: ; %main_body
2393; FIJI-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2394; FIJI-NEXT:    s_waitcnt vmcnt(0)
2395; FIJI-NEXT:    ; return to shader part epilog
2396;
2397; GFX6789-LABEL: load_mip_2darray:
2398; GFX6789:       ; %bb.0: ; %main_body
2399; GFX6789-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2400; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2401; GFX6789-NEXT:    ; return to shader part epilog
2402;
2403; NOPRT-LABEL: load_mip_2darray:
2404; NOPRT:       ; %bb.0: ; %main_body
2405; NOPRT-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf unorm da
2406; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2407; NOPRT-NEXT:    ; return to shader part epilog
2408;
2409; GFX10PLUS-LABEL: load_mip_2darray:
2410; GFX10PLUS:       ; %bb.0: ; %main_body
2411; GFX10PLUS-NEXT:    image_load_mip v[0:3], v[0:3], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2412; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2413; GFX10PLUS-NEXT:    ; return to shader part epilog
2414main_body:
2415  %v = call <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2416  ret <4 x float> %v
2417}
2418
2419define amdgpu_ps void @store_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
2420; VERDE-LABEL: store_1d:
2421; VERDE:       ; %bb.0: ; %main_body
2422; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2423; VERDE-NEXT:    s_endpgm
2424;
2425; FIJI-LABEL: store_1d:
2426; FIJI:       ; %bb.0: ; %main_body
2427; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2428; FIJI-NEXT:    s_endpgm
2429;
2430; GFX6789-LABEL: store_1d:
2431; GFX6789:       ; %bb.0: ; %main_body
2432; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2433; GFX6789-NEXT:    s_endpgm
2434;
2435; NOPRT-LABEL: store_1d:
2436; NOPRT:       ; %bb.0: ; %main_body
2437; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
2438; NOPRT-NEXT:    s_endpgm
2439;
2440; GFX10-LABEL: store_1d:
2441; GFX10:       ; %bb.0: ; %main_body
2442; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2443; GFX10-NEXT:    s_endpgm
2444;
2445; GFX11-LABEL: store_1d:
2446; GFX11:       ; %bb.0: ; %main_body
2447; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2448; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2449; GFX11-NEXT:    s_endpgm
2450main_body:
2451  call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
2452  ret void
2453}
2454
2455define amdgpu_ps void @store_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t) {
2456; VERDE-LABEL: store_2d:
2457; VERDE:       ; %bb.0: ; %main_body
2458; VERDE-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2459; VERDE-NEXT:    s_endpgm
2460;
2461; FIJI-LABEL: store_2d:
2462; FIJI:       ; %bb.0: ; %main_body
2463; FIJI-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2464; FIJI-NEXT:    s_endpgm
2465;
2466; GFX6789-LABEL: store_2d:
2467; GFX6789:       ; %bb.0: ; %main_body
2468; GFX6789-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2469; GFX6789-NEXT:    s_endpgm
2470;
2471; NOPRT-LABEL: store_2d:
2472; NOPRT:       ; %bb.0: ; %main_body
2473; NOPRT-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2474; NOPRT-NEXT:    s_endpgm
2475;
2476; GFX10-LABEL: store_2d:
2477; GFX10:       ; %bb.0: ; %main_body
2478; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2479; GFX10-NEXT:    s_endpgm
2480;
2481; GFX11-LABEL: store_2d:
2482; GFX11:       ; %bb.0: ; %main_body
2483; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2484; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2485; GFX11-NEXT:    s_endpgm
2486main_body:
2487  call void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, <8 x i32> %rsrc, i32 0, i32 0)
2488  ret void
2489}
2490
2491define amdgpu_ps void @store_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r) {
2492; VERDE-LABEL: store_3d:
2493; VERDE:       ; %bb.0: ; %main_body
2494; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2495; VERDE-NEXT:    s_endpgm
2496;
2497; FIJI-LABEL: store_3d:
2498; FIJI:       ; %bb.0: ; %main_body
2499; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2500; FIJI-NEXT:    s_endpgm
2501;
2502; GFX6789-LABEL: store_3d:
2503; GFX6789:       ; %bb.0: ; %main_body
2504; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2505; GFX6789-NEXT:    s_endpgm
2506;
2507; NOPRT-LABEL: store_3d:
2508; NOPRT:       ; %bb.0: ; %main_body
2509; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2510; NOPRT-NEXT:    s_endpgm
2511;
2512; GFX10-LABEL: store_3d:
2513; GFX10:       ; %bb.0: ; %main_body
2514; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2515; GFX10-NEXT:    s_endpgm
2516;
2517; GFX11-LABEL: store_3d:
2518; GFX11:       ; %bb.0: ; %main_body
2519; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2520; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2521; GFX11-NEXT:    s_endpgm
2522main_body:
2523  call void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %r, <8 x i32> %rsrc, i32 0, i32 0)
2524  ret void
2525}
2526
2527define amdgpu_ps void @store_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) {
2528; VERDE-LABEL: store_cube:
2529; VERDE:       ; %bb.0: ; %main_body
2530; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2531; VERDE-NEXT:    s_endpgm
2532;
2533; FIJI-LABEL: store_cube:
2534; FIJI:       ; %bb.0: ; %main_body
2535; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2536; FIJI-NEXT:    s_endpgm
2537;
2538; GFX6789-LABEL: store_cube:
2539; GFX6789:       ; %bb.0: ; %main_body
2540; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2541; GFX6789-NEXT:    s_endpgm
2542;
2543; NOPRT-LABEL: store_cube:
2544; NOPRT:       ; %bb.0: ; %main_body
2545; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2546; NOPRT-NEXT:    s_endpgm
2547;
2548; GFX10-LABEL: store_cube:
2549; GFX10:       ; %bb.0: ; %main_body
2550; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2551; GFX10-NEXT:    s_endpgm
2552;
2553; GFX11-LABEL: store_cube:
2554; GFX11:       ; %bb.0: ; %main_body
2555; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2556; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2557; GFX11-NEXT:    s_endpgm
2558main_body:
2559  call void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
2560  ret void
2561}
2562
2563define amdgpu_ps void @store_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice) {
2564; VERDE-LABEL: store_1darray:
2565; VERDE:       ; %bb.0: ; %main_body
2566; VERDE-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2567; VERDE-NEXT:    s_endpgm
2568;
2569; FIJI-LABEL: store_1darray:
2570; FIJI:       ; %bb.0: ; %main_body
2571; FIJI-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2572; FIJI-NEXT:    s_endpgm
2573;
2574; GFX6789-LABEL: store_1darray:
2575; GFX6789:       ; %bb.0: ; %main_body
2576; GFX6789-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2577; GFX6789-NEXT:    s_endpgm
2578;
2579; NOPRT-LABEL: store_1darray:
2580; NOPRT:       ; %bb.0: ; %main_body
2581; NOPRT-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2582; NOPRT-NEXT:    s_endpgm
2583;
2584; GFX10-LABEL: store_1darray:
2585; GFX10:       ; %bb.0: ; %main_body
2586; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2587; GFX10-NEXT:    s_endpgm
2588;
2589; GFX11-LABEL: store_1darray:
2590; GFX11:       ; %bb.0: ; %main_body
2591; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2592; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2593; GFX11-NEXT:    s_endpgm
2594main_body:
2595  call void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
2596  ret void
2597}
2598
2599define amdgpu_ps void @store_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) {
2600; VERDE-LABEL: store_2darray:
2601; VERDE:       ; %bb.0: ; %main_body
2602; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2603; VERDE-NEXT:    s_endpgm
2604;
2605; FIJI-LABEL: store_2darray:
2606; FIJI:       ; %bb.0: ; %main_body
2607; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2608; FIJI-NEXT:    s_endpgm
2609;
2610; GFX6789-LABEL: store_2darray:
2611; GFX6789:       ; %bb.0: ; %main_body
2612; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2613; GFX6789-NEXT:    s_endpgm
2614;
2615; NOPRT-LABEL: store_2darray:
2616; NOPRT:       ; %bb.0: ; %main_body
2617; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2618; NOPRT-NEXT:    s_endpgm
2619;
2620; GFX10-LABEL: store_2darray:
2621; GFX10:       ; %bb.0: ; %main_body
2622; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2623; GFX10-NEXT:    s_endpgm
2624;
2625; GFX11-LABEL: store_2darray:
2626; GFX11:       ; %bb.0: ; %main_body
2627; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2628; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2629; GFX11-NEXT:    s_endpgm
2630main_body:
2631  call void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, <8 x i32> %rsrc, i32 0, i32 0)
2632  ret void
2633}
2634
2635define amdgpu_ps void @store_2dmsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %fragid) {
2636; VERDE-LABEL: store_2dmsaa:
2637; VERDE:       ; %bb.0: ; %main_body
2638; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2639; VERDE-NEXT:    s_endpgm
2640;
2641; FIJI-LABEL: store_2dmsaa:
2642; FIJI:       ; %bb.0: ; %main_body
2643; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2644; FIJI-NEXT:    s_endpgm
2645;
2646; GFX6789-LABEL: store_2dmsaa:
2647; GFX6789:       ; %bb.0: ; %main_body
2648; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2649; GFX6789-NEXT:    s_endpgm
2650;
2651; NOPRT-LABEL: store_2dmsaa:
2652; NOPRT:       ; %bb.0: ; %main_body
2653; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2654; NOPRT-NEXT:    s_endpgm
2655;
2656; GFX10-LABEL: store_2dmsaa:
2657; GFX10:       ; %bb.0: ; %main_body
2658; GFX10-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
2659; GFX10-NEXT:    s_endpgm
2660;
2661; GFX11-LABEL: store_2dmsaa:
2662; GFX11:       ; %bb.0: ; %main_body
2663; GFX11-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
2664; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2665; GFX11-NEXT:    s_endpgm
2666main_body:
2667  call void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
2668  ret void
2669}
2670
2671define amdgpu_ps void @store_2darraymsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %fragid) {
2672; VERDE-LABEL: store_2darraymsaa:
2673; VERDE:       ; %bb.0: ; %main_body
2674; VERDE-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2675; VERDE-NEXT:    s_endpgm
2676;
2677; FIJI-LABEL: store_2darraymsaa:
2678; FIJI:       ; %bb.0: ; %main_body
2679; FIJI-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2680; FIJI-NEXT:    s_endpgm
2681;
2682; GFX6789-LABEL: store_2darraymsaa:
2683; GFX6789:       ; %bb.0: ; %main_body
2684; GFX6789-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2685; GFX6789-NEXT:    s_endpgm
2686;
2687; NOPRT-LABEL: store_2darraymsaa:
2688; NOPRT:       ; %bb.0: ; %main_body
2689; NOPRT-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2690; NOPRT-NEXT:    s_endpgm
2691;
2692; GFX10-LABEL: store_2darraymsaa:
2693; GFX10:       ; %bb.0: ; %main_body
2694; GFX10-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
2695; GFX10-NEXT:    s_endpgm
2696;
2697; GFX11-LABEL: store_2darraymsaa:
2698; GFX11:       ; %bb.0: ; %main_body
2699; GFX11-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
2700; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2701; GFX11-NEXT:    s_endpgm
2702main_body:
2703  call void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
2704  ret void
2705}
2706
2707define amdgpu_ps void @store_mip_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %mip) {
2708; VERDE-LABEL: store_mip_1d:
2709; VERDE:       ; %bb.0: ; %main_body
2710; VERDE-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2711; VERDE-NEXT:    s_endpgm
2712;
2713; FIJI-LABEL: store_mip_1d:
2714; FIJI:       ; %bb.0: ; %main_body
2715; FIJI-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2716; FIJI-NEXT:    s_endpgm
2717;
2718; GFX6789-LABEL: store_mip_1d:
2719; GFX6789:       ; %bb.0: ; %main_body
2720; GFX6789-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2721; GFX6789-NEXT:    s_endpgm
2722;
2723; NOPRT-LABEL: store_mip_1d:
2724; NOPRT:       ; %bb.0: ; %main_body
2725; NOPRT-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2726; NOPRT-NEXT:    s_endpgm
2727;
2728; GFX10-LABEL: store_mip_1d:
2729; GFX10:       ; %bb.0: ; %main_body
2730; GFX10-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2731; GFX10-NEXT:    s_endpgm
2732;
2733; GFX11-LABEL: store_mip_1d:
2734; GFX11:       ; %bb.0: ; %main_body
2735; GFX11-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2736; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2737; GFX11-NEXT:    s_endpgm
2738main_body:
2739  call void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2740  ret void
2741}
2742
2743define amdgpu_ps void @store_mip_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %mip) {
2744; VERDE-LABEL: store_mip_2d:
2745; VERDE:       ; %bb.0: ; %main_body
2746; VERDE-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2747; VERDE-NEXT:    s_endpgm
2748;
2749; FIJI-LABEL: store_mip_2d:
2750; FIJI:       ; %bb.0: ; %main_body
2751; FIJI-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2752; FIJI-NEXT:    s_endpgm
2753;
2754; GFX6789-LABEL: store_mip_2d:
2755; GFX6789:       ; %bb.0: ; %main_body
2756; GFX6789-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2757; GFX6789-NEXT:    s_endpgm
2758;
2759; NOPRT-LABEL: store_mip_2d:
2760; NOPRT:       ; %bb.0: ; %main_body
2761; NOPRT-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2762; NOPRT-NEXT:    s_endpgm
2763;
2764; GFX10-LABEL: store_mip_2d:
2765; GFX10:       ; %bb.0: ; %main_body
2766; GFX10-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2767; GFX10-NEXT:    s_endpgm
2768;
2769; GFX11-LABEL: store_mip_2d:
2770; GFX11:       ; %bb.0: ; %main_body
2771; GFX11-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2772; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2773; GFX11-NEXT:    s_endpgm
2774main_body:
2775  call void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2776  ret void
2777}
2778
2779define amdgpu_ps void @store_mip_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r, i32 %mip) {
2780; VERDE-LABEL: store_mip_3d:
2781; VERDE:       ; %bb.0: ; %main_body
2782; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2783; VERDE-NEXT:    s_endpgm
2784;
2785; FIJI-LABEL: store_mip_3d:
2786; FIJI:       ; %bb.0: ; %main_body
2787; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2788; FIJI-NEXT:    s_endpgm
2789;
2790; GFX6789-LABEL: store_mip_3d:
2791; GFX6789:       ; %bb.0: ; %main_body
2792; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2793; GFX6789-NEXT:    s_endpgm
2794;
2795; NOPRT-LABEL: store_mip_3d:
2796; NOPRT:       ; %bb.0: ; %main_body
2797; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2798; NOPRT-NEXT:    s_endpgm
2799;
2800; GFX10-LABEL: store_mip_3d:
2801; GFX10:       ; %bb.0: ; %main_body
2802; GFX10-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2803; GFX10-NEXT:    s_endpgm
2804;
2805; GFX11-LABEL: store_mip_3d:
2806; GFX11:       ; %bb.0: ; %main_body
2807; GFX11-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2808; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2809; GFX11-NEXT:    s_endpgm
2810main_body:
2811  call void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %r, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2812  ret void
2813}
2814
2815define amdgpu_ps void @store_mip_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2816; VERDE-LABEL: store_mip_cube:
2817; VERDE:       ; %bb.0: ; %main_body
2818; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2819; VERDE-NEXT:    s_endpgm
2820;
2821; FIJI-LABEL: store_mip_cube:
2822; FIJI:       ; %bb.0: ; %main_body
2823; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2824; FIJI-NEXT:    s_endpgm
2825;
2826; GFX6789-LABEL: store_mip_cube:
2827; GFX6789:       ; %bb.0: ; %main_body
2828; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2829; GFX6789-NEXT:    s_endpgm
2830;
2831; NOPRT-LABEL: store_mip_cube:
2832; NOPRT:       ; %bb.0: ; %main_body
2833; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2834; NOPRT-NEXT:    s_endpgm
2835;
2836; GFX10-LABEL: store_mip_cube:
2837; GFX10:       ; %bb.0: ; %main_body
2838; GFX10-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2839; GFX10-NEXT:    s_endpgm
2840;
2841; GFX11-LABEL: store_mip_cube:
2842; GFX11:       ; %bb.0: ; %main_body
2843; GFX11-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2844; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2845; GFX11-NEXT:    s_endpgm
2846main_body:
2847  call void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2848  ret void
2849}
2850
2851define amdgpu_ps void @store_mip_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice, i32 %mip) {
2852; VERDE-LABEL: store_mip_1darray:
2853; VERDE:       ; %bb.0: ; %main_body
2854; VERDE-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2855; VERDE-NEXT:    s_endpgm
2856;
2857; FIJI-LABEL: store_mip_1darray:
2858; FIJI:       ; %bb.0: ; %main_body
2859; FIJI-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2860; FIJI-NEXT:    s_endpgm
2861;
2862; GFX6789-LABEL: store_mip_1darray:
2863; GFX6789:       ; %bb.0: ; %main_body
2864; GFX6789-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2865; GFX6789-NEXT:    s_endpgm
2866;
2867; NOPRT-LABEL: store_mip_1darray:
2868; NOPRT:       ; %bb.0: ; %main_body
2869; NOPRT-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2870; NOPRT-NEXT:    s_endpgm
2871;
2872; GFX10-LABEL: store_mip_1darray:
2873; GFX10:       ; %bb.0: ; %main_body
2874; GFX10-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2875; GFX10-NEXT:    s_endpgm
2876;
2877; GFX11-LABEL: store_mip_1darray:
2878; GFX11:       ; %bb.0: ; %main_body
2879; GFX11-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2880; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2881; GFX11-NEXT:    s_endpgm
2882main_body:
2883  call void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2884  ret void
2885}
2886
2887define amdgpu_ps void @store_mip_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2888; VERDE-LABEL: store_mip_2darray:
2889; VERDE:       ; %bb.0: ; %main_body
2890; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2891; VERDE-NEXT:    s_endpgm
2892;
2893; FIJI-LABEL: store_mip_2darray:
2894; FIJI:       ; %bb.0: ; %main_body
2895; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2896; FIJI-NEXT:    s_endpgm
2897;
2898; GFX6789-LABEL: store_mip_2darray:
2899; GFX6789:       ; %bb.0: ; %main_body
2900; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2901; GFX6789-NEXT:    s_endpgm
2902;
2903; NOPRT-LABEL: store_mip_2darray:
2904; NOPRT:       ; %bb.0: ; %main_body
2905; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2906; NOPRT-NEXT:    s_endpgm
2907;
2908; GFX10-LABEL: store_mip_2darray:
2909; GFX10:       ; %bb.0: ; %main_body
2910; GFX10-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2911; GFX10-NEXT:    s_endpgm
2912;
2913; GFX11-LABEL: store_mip_2darray:
2914; GFX11:       ; %bb.0: ; %main_body
2915; GFX11-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2916; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
2917; GFX11-NEXT:    s_endpgm
2918main_body:
2919  call void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, i32 %t, i32 %slice, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2920  ret void
2921}
2922
2923define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, i32 %mip) {
2924; VERDE-LABEL: getresinfo_1d:
2925; VERDE:       ; %bb.0: ; %main_body
2926; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2927; VERDE-NEXT:    s_waitcnt vmcnt(0)
2928; VERDE-NEXT:    ; return to shader part epilog
2929;
2930; FIJI-LABEL: getresinfo_1d:
2931; FIJI:       ; %bb.0: ; %main_body
2932; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2933; FIJI-NEXT:    s_waitcnt vmcnt(0)
2934; FIJI-NEXT:    ; return to shader part epilog
2935;
2936; GFX6789-LABEL: getresinfo_1d:
2937; GFX6789:       ; %bb.0: ; %main_body
2938; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2939; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2940; GFX6789-NEXT:    ; return to shader part epilog
2941;
2942; NOPRT-LABEL: getresinfo_1d:
2943; NOPRT:       ; %bb.0: ; %main_body
2944; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2945; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2946; NOPRT-NEXT:    ; return to shader part epilog
2947;
2948; GFX10PLUS-LABEL: getresinfo_1d:
2949; GFX10PLUS:       ; %bb.0: ; %main_body
2950; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2951; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2952; GFX10PLUS-NEXT:    ; return to shader part epilog
2953main_body:
2954  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2955  ret <4 x float> %v
2956}
2957
2958define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, i32 %mip) {
2959; VERDE-LABEL: getresinfo_2d:
2960; VERDE:       ; %bb.0: ; %main_body
2961; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2962; VERDE-NEXT:    s_waitcnt vmcnt(0)
2963; VERDE-NEXT:    ; return to shader part epilog
2964;
2965; FIJI-LABEL: getresinfo_2d:
2966; FIJI:       ; %bb.0: ; %main_body
2967; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2968; FIJI-NEXT:    s_waitcnt vmcnt(0)
2969; FIJI-NEXT:    ; return to shader part epilog
2970;
2971; GFX6789-LABEL: getresinfo_2d:
2972; GFX6789:       ; %bb.0: ; %main_body
2973; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2974; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2975; GFX6789-NEXT:    ; return to shader part epilog
2976;
2977; NOPRT-LABEL: getresinfo_2d:
2978; NOPRT:       ; %bb.0: ; %main_body
2979; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2980; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2981; NOPRT-NEXT:    ; return to shader part epilog
2982;
2983; GFX10PLUS-LABEL: getresinfo_2d:
2984; GFX10PLUS:       ; %bb.0: ; %main_body
2985; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2986; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2987; GFX10PLUS-NEXT:    ; return to shader part epilog
2988main_body:
2989  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2990  ret <4 x float> %v
2991}
2992
2993define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, i32 %mip) {
2994; VERDE-LABEL: getresinfo_3d:
2995; VERDE:       ; %bb.0: ; %main_body
2996; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2997; VERDE-NEXT:    s_waitcnt vmcnt(0)
2998; VERDE-NEXT:    ; return to shader part epilog
2999;
3000; FIJI-LABEL: getresinfo_3d:
3001; FIJI:       ; %bb.0: ; %main_body
3002; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3003; FIJI-NEXT:    s_waitcnt vmcnt(0)
3004; FIJI-NEXT:    ; return to shader part epilog
3005;
3006; GFX6789-LABEL: getresinfo_3d:
3007; GFX6789:       ; %bb.0: ; %main_body
3008; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3009; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3010; GFX6789-NEXT:    ; return to shader part epilog
3011;
3012; NOPRT-LABEL: getresinfo_3d:
3013; NOPRT:       ; %bb.0: ; %main_body
3014; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3015; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3016; NOPRT-NEXT:    ; return to shader part epilog
3017;
3018; GFX10PLUS-LABEL: getresinfo_3d:
3019; GFX10PLUS:       ; %bb.0: ; %main_body
3020; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
3021; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3022; GFX10PLUS-NEXT:    ; return to shader part epilog
3023main_body:
3024  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3025  ret <4 x float> %v
3026}
3027
3028define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, i32 %mip) {
3029; VERDE-LABEL: getresinfo_cube:
3030; VERDE:       ; %bb.0: ; %main_body
3031; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3032; VERDE-NEXT:    s_waitcnt vmcnt(0)
3033; VERDE-NEXT:    ; return to shader part epilog
3034;
3035; FIJI-LABEL: getresinfo_cube:
3036; FIJI:       ; %bb.0: ; %main_body
3037; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3038; FIJI-NEXT:    s_waitcnt vmcnt(0)
3039; FIJI-NEXT:    ; return to shader part epilog
3040;
3041; GFX6789-LABEL: getresinfo_cube:
3042; GFX6789:       ; %bb.0: ; %main_body
3043; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3044; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3045; GFX6789-NEXT:    ; return to shader part epilog
3046;
3047; NOPRT-LABEL: getresinfo_cube:
3048; NOPRT:       ; %bb.0: ; %main_body
3049; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3050; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3051; NOPRT-NEXT:    ; return to shader part epilog
3052;
3053; GFX10PLUS-LABEL: getresinfo_cube:
3054; GFX10PLUS:       ; %bb.0: ; %main_body
3055; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
3056; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3057; GFX10PLUS-NEXT:    ; return to shader part epilog
3058main_body:
3059  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3060  ret <4 x float> %v
3061}
3062
3063define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, i32 %mip) {
3064; VERDE-LABEL: getresinfo_1darray:
3065; VERDE:       ; %bb.0: ; %main_body
3066; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3067; VERDE-NEXT:    s_waitcnt vmcnt(0)
3068; VERDE-NEXT:    ; return to shader part epilog
3069;
3070; FIJI-LABEL: getresinfo_1darray:
3071; FIJI:       ; %bb.0: ; %main_body
3072; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3073; FIJI-NEXT:    s_waitcnt vmcnt(0)
3074; FIJI-NEXT:    ; return to shader part epilog
3075;
3076; GFX6789-LABEL: getresinfo_1darray:
3077; GFX6789:       ; %bb.0: ; %main_body
3078; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3079; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3080; GFX6789-NEXT:    ; return to shader part epilog
3081;
3082; NOPRT-LABEL: getresinfo_1darray:
3083; NOPRT:       ; %bb.0: ; %main_body
3084; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3085; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3086; NOPRT-NEXT:    ; return to shader part epilog
3087;
3088; GFX10PLUS-LABEL: getresinfo_1darray:
3089; GFX10PLUS:       ; %bb.0: ; %main_body
3090; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
3091; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3092; GFX10PLUS-NEXT:    ; return to shader part epilog
3093main_body:
3094  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3095  ret <4 x float> %v
3096}
3097
3098define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, i32 %mip) {
3099; VERDE-LABEL: getresinfo_2darray:
3100; VERDE:       ; %bb.0: ; %main_body
3101; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3102; VERDE-NEXT:    s_waitcnt vmcnt(0)
3103; VERDE-NEXT:    ; return to shader part epilog
3104;
3105; FIJI-LABEL: getresinfo_2darray:
3106; FIJI:       ; %bb.0: ; %main_body
3107; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3108; FIJI-NEXT:    s_waitcnt vmcnt(0)
3109; FIJI-NEXT:    ; return to shader part epilog
3110;
3111; GFX6789-LABEL: getresinfo_2darray:
3112; GFX6789:       ; %bb.0: ; %main_body
3113; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3114; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3115; GFX6789-NEXT:    ; return to shader part epilog
3116;
3117; NOPRT-LABEL: getresinfo_2darray:
3118; NOPRT:       ; %bb.0: ; %main_body
3119; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3120; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3121; NOPRT-NEXT:    ; return to shader part epilog
3122;
3123; GFX10PLUS-LABEL: getresinfo_2darray:
3124; GFX10PLUS:       ; %bb.0: ; %main_body
3125; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
3126; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3127; GFX10PLUS-NEXT:    ; return to shader part epilog
3128main_body:
3129  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3130  ret <4 x float> %v
3131}
3132
3133define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, i32 %mip) {
3134; VERDE-LABEL: getresinfo_2dmsaa:
3135; VERDE:       ; %bb.0: ; %main_body
3136; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3137; VERDE-NEXT:    s_waitcnt vmcnt(0)
3138; VERDE-NEXT:    ; return to shader part epilog
3139;
3140; FIJI-LABEL: getresinfo_2dmsaa:
3141; FIJI:       ; %bb.0: ; %main_body
3142; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3143; FIJI-NEXT:    s_waitcnt vmcnt(0)
3144; FIJI-NEXT:    ; return to shader part epilog
3145;
3146; GFX6789-LABEL: getresinfo_2dmsaa:
3147; GFX6789:       ; %bb.0: ; %main_body
3148; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3149; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3150; GFX6789-NEXT:    ; return to shader part epilog
3151;
3152; NOPRT-LABEL: getresinfo_2dmsaa:
3153; NOPRT:       ; %bb.0: ; %main_body
3154; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3155; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3156; NOPRT-NEXT:    ; return to shader part epilog
3157;
3158; GFX10PLUS-LABEL: getresinfo_2dmsaa:
3159; GFX10PLUS:       ; %bb.0: ; %main_body
3160; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
3161; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3162; GFX10PLUS-NEXT:    ; return to shader part epilog
3163main_body:
3164  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3165  ret <4 x float> %v
3166}
3167
3168define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, i32 %mip) {
3169; VERDE-LABEL: getresinfo_2darraymsaa:
3170; VERDE:       ; %bb.0: ; %main_body
3171; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3172; VERDE-NEXT:    s_waitcnt vmcnt(0)
3173; VERDE-NEXT:    ; return to shader part epilog
3174;
3175; FIJI-LABEL: getresinfo_2darraymsaa:
3176; FIJI:       ; %bb.0: ; %main_body
3177; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3178; FIJI-NEXT:    s_waitcnt vmcnt(0)
3179; FIJI-NEXT:    ; return to shader part epilog
3180;
3181; GFX6789-LABEL: getresinfo_2darraymsaa:
3182; GFX6789:       ; %bb.0: ; %main_body
3183; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3184; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3185; GFX6789-NEXT:    ; return to shader part epilog
3186;
3187; NOPRT-LABEL: getresinfo_2darraymsaa:
3188; NOPRT:       ; %bb.0: ; %main_body
3189; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3190; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3191; NOPRT-NEXT:    ; return to shader part epilog
3192;
3193; GFX10PLUS-LABEL: getresinfo_2darraymsaa:
3194; GFX10PLUS:       ; %bb.0: ; %main_body
3195; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
3196; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3197; GFX10PLUS-NEXT:    ; return to shader part epilog
3198main_body:
3199  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3200  ret <4 x float> %v
3201}
3202
3203define amdgpu_ps float @load_1d_V1(<8 x i32> inreg %rsrc, i32 %s) {
3204; VERDE-LABEL: load_1d_V1:
3205; VERDE:       ; %bb.0: ; %main_body
3206; VERDE-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3207; VERDE-NEXT:    s_waitcnt vmcnt(0)
3208; VERDE-NEXT:    ; return to shader part epilog
3209;
3210; FIJI-LABEL: load_1d_V1:
3211; FIJI:       ; %bb.0: ; %main_body
3212; FIJI-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3213; FIJI-NEXT:    s_waitcnt vmcnt(0)
3214; FIJI-NEXT:    ; return to shader part epilog
3215;
3216; GFX6789-LABEL: load_1d_V1:
3217; GFX6789:       ; %bb.0: ; %main_body
3218; GFX6789-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3219; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3220; GFX6789-NEXT:    ; return to shader part epilog
3221;
3222; NOPRT-LABEL: load_1d_V1:
3223; NOPRT:       ; %bb.0: ; %main_body
3224; NOPRT-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3225; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3226; NOPRT-NEXT:    ; return to shader part epilog
3227;
3228; GFX10PLUS-LABEL: load_1d_V1:
3229; GFX10PLUS:       ; %bb.0: ; %main_body
3230; GFX10PLUS-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm
3231; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3232; GFX10PLUS-NEXT:    ; return to shader part epilog
3233main_body:
3234  %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3235  ret float %v
3236}
3237
3238define amdgpu_ps <2 x float> @load_1d_V2(<8 x i32> inreg %rsrc, i32 %s) {
3239; VERDE-LABEL: load_1d_V2:
3240; VERDE:       ; %bb.0: ; %main_body
3241; VERDE-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3242; VERDE-NEXT:    s_waitcnt vmcnt(0)
3243; VERDE-NEXT:    ; return to shader part epilog
3244;
3245; FIJI-LABEL: load_1d_V2:
3246; FIJI:       ; %bb.0: ; %main_body
3247; FIJI-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3248; FIJI-NEXT:    s_waitcnt vmcnt(0)
3249; FIJI-NEXT:    ; return to shader part epilog
3250;
3251; GFX6789-LABEL: load_1d_V2:
3252; GFX6789:       ; %bb.0: ; %main_body
3253; GFX6789-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3254; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3255; GFX6789-NEXT:    ; return to shader part epilog
3256;
3257; NOPRT-LABEL: load_1d_V2:
3258; NOPRT:       ; %bb.0: ; %main_body
3259; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3260; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3261; NOPRT-NEXT:    ; return to shader part epilog
3262;
3263; GFX10PLUS-LABEL: load_1d_V2:
3264; GFX10PLUS:       ; %bb.0: ; %main_body
3265; GFX10PLUS-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm
3266; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3267; GFX10PLUS-NEXT:    ; return to shader part epilog
3268main_body:
3269  %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 9, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3270  ret <2 x float> %v
3271}
3272
3273define amdgpu_ps void @store_1d_V1(<8 x i32> inreg %rsrc, float %vdata, i32 %s) {
3274; VERDE-LABEL: store_1d_V1:
3275; VERDE:       ; %bb.0: ; %main_body
3276; VERDE-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3277; VERDE-NEXT:    s_endpgm
3278;
3279; FIJI-LABEL: store_1d_V1:
3280; FIJI:       ; %bb.0: ; %main_body
3281; FIJI-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3282; FIJI-NEXT:    s_endpgm
3283;
3284; GFX6789-LABEL: store_1d_V1:
3285; GFX6789:       ; %bb.0: ; %main_body
3286; GFX6789-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3287; GFX6789-NEXT:    s_endpgm
3288;
3289; NOPRT-LABEL: store_1d_V1:
3290; NOPRT:       ; %bb.0: ; %main_body
3291; NOPRT-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3292; NOPRT-NEXT:    s_endpgm
3293;
3294; GFX10-LABEL: store_1d_V1:
3295; GFX10:       ; %bb.0: ; %main_body
3296; GFX10-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm
3297; GFX10-NEXT:    s_endpgm
3298;
3299; GFX11-LABEL: store_1d_V1:
3300; GFX11:       ; %bb.0: ; %main_body
3301; GFX11-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm
3302; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3303; GFX11-NEXT:    s_endpgm
3304main_body:
3305  call void @llvm.amdgcn.image.store.1d.f32.i32(float %vdata, i32 2, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3306  ret void
3307}
3308
3309define amdgpu_ps void @store_1d_V2(<8 x i32> inreg %rsrc, <2 x float> %vdata, i32 %s) {
3310; VERDE-LABEL: store_1d_V2:
3311; VERDE:       ; %bb.0: ; %main_body
3312; VERDE-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3313; VERDE-NEXT:    s_endpgm
3314;
3315; FIJI-LABEL: store_1d_V2:
3316; FIJI:       ; %bb.0: ; %main_body
3317; FIJI-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3318; FIJI-NEXT:    s_endpgm
3319;
3320; GFX6789-LABEL: store_1d_V2:
3321; GFX6789:       ; %bb.0: ; %main_body
3322; GFX6789-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3323; GFX6789-NEXT:    s_endpgm
3324;
3325; NOPRT-LABEL: store_1d_V2:
3326; NOPRT:       ; %bb.0: ; %main_body
3327; NOPRT-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3328; NOPRT-NEXT:    s_endpgm
3329;
3330; GFX10-LABEL: store_1d_V2:
3331; GFX10:       ; %bb.0: ; %main_body
3332; GFX10-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm
3333; GFX10-NEXT:    s_endpgm
3334;
3335; GFX11-LABEL: store_1d_V2:
3336; GFX11:       ; %bb.0: ; %main_body
3337; GFX11-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm
3338; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3339; GFX11-NEXT:    s_endpgm
3340main_body:
3341  call void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float> %vdata, i32 12, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3342  ret void
3343}
3344
3345define amdgpu_ps <4 x float> @load_1d_glc(<8 x i32> inreg %rsrc, i32 %s) {
3346; VERDE-LABEL: load_1d_glc:
3347; VERDE:       ; %bb.0: ; %main_body
3348; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3349; VERDE-NEXT:    s_waitcnt vmcnt(0)
3350; VERDE-NEXT:    ; return to shader part epilog
3351;
3352; FIJI-LABEL: load_1d_glc:
3353; FIJI:       ; %bb.0: ; %main_body
3354; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3355; FIJI-NEXT:    s_waitcnt vmcnt(0)
3356; FIJI-NEXT:    ; return to shader part epilog
3357;
3358; GFX6789-LABEL: load_1d_glc:
3359; GFX6789:       ; %bb.0: ; %main_body
3360; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3361; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3362; GFX6789-NEXT:    ; return to shader part epilog
3363;
3364; NOPRT-LABEL: load_1d_glc:
3365; NOPRT:       ; %bb.0: ; %main_body
3366; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3367; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3368; NOPRT-NEXT:    ; return to shader part epilog
3369;
3370; GFX10PLUS-LABEL: load_1d_glc:
3371; GFX10PLUS:       ; %bb.0: ; %main_body
3372; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3373; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3374; GFX10PLUS-NEXT:    ; return to shader part epilog
3375main_body:
3376  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1)
3377  ret <4 x float> %v
3378}
3379
3380define amdgpu_ps <4 x float> @load_1d_slc(<8 x i32> inreg %rsrc, i32 %s) {
3381; VERDE-LABEL: load_1d_slc:
3382; VERDE:       ; %bb.0: ; %main_body
3383; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3384; VERDE-NEXT:    s_waitcnt vmcnt(0)
3385; VERDE-NEXT:    ; return to shader part epilog
3386;
3387; FIJI-LABEL: load_1d_slc:
3388; FIJI:       ; %bb.0: ; %main_body
3389; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3390; FIJI-NEXT:    s_waitcnt vmcnt(0)
3391; FIJI-NEXT:    ; return to shader part epilog
3392;
3393; GFX6789-LABEL: load_1d_slc:
3394; GFX6789:       ; %bb.0: ; %main_body
3395; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3396; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3397; GFX6789-NEXT:    ; return to shader part epilog
3398;
3399; NOPRT-LABEL: load_1d_slc:
3400; NOPRT:       ; %bb.0: ; %main_body
3401; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3402; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3403; NOPRT-NEXT:    ; return to shader part epilog
3404;
3405; GFX10PLUS-LABEL: load_1d_slc:
3406; GFX10PLUS:       ; %bb.0: ; %main_body
3407; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3408; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3409; GFX10PLUS-NEXT:    ; return to shader part epilog
3410main_body:
3411  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2)
3412  ret <4 x float> %v
3413}
3414
3415define amdgpu_ps <4 x float> @load_1d_glc_slc(<8 x i32> inreg %rsrc, i32 %s) {
3416; VERDE-LABEL: load_1d_glc_slc:
3417; VERDE:       ; %bb.0: ; %main_body
3418; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3419; VERDE-NEXT:    s_waitcnt vmcnt(0)
3420; VERDE-NEXT:    ; return to shader part epilog
3421;
3422; FIJI-LABEL: load_1d_glc_slc:
3423; FIJI:       ; %bb.0: ; %main_body
3424; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3425; FIJI-NEXT:    s_waitcnt vmcnt(0)
3426; FIJI-NEXT:    ; return to shader part epilog
3427;
3428; GFX6789-LABEL: load_1d_glc_slc:
3429; GFX6789:       ; %bb.0: ; %main_body
3430; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3431; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3432; GFX6789-NEXT:    ; return to shader part epilog
3433;
3434; NOPRT-LABEL: load_1d_glc_slc:
3435; NOPRT:       ; %bb.0: ; %main_body
3436; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3437; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3438; NOPRT-NEXT:    ; return to shader part epilog
3439;
3440; GFX10PLUS-LABEL: load_1d_glc_slc:
3441; GFX10PLUS:       ; %bb.0: ; %main_body
3442; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3443; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3444; GFX10PLUS-NEXT:    ; return to shader part epilog
3445main_body:
3446  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3)
3447  ret <4 x float> %v
3448}
3449
3450define amdgpu_ps void @store_1d_glc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3451; VERDE-LABEL: store_1d_glc:
3452; VERDE:       ; %bb.0: ; %main_body
3453; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3454; VERDE-NEXT:    s_endpgm
3455;
3456; FIJI-LABEL: store_1d_glc:
3457; FIJI:       ; %bb.0: ; %main_body
3458; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3459; FIJI-NEXT:    s_endpgm
3460;
3461; GFX6789-LABEL: store_1d_glc:
3462; GFX6789:       ; %bb.0: ; %main_body
3463; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3464; GFX6789-NEXT:    s_endpgm
3465;
3466; NOPRT-LABEL: store_1d_glc:
3467; NOPRT:       ; %bb.0: ; %main_body
3468; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3469; NOPRT-NEXT:    s_endpgm
3470;
3471; GFX10-LABEL: store_1d_glc:
3472; GFX10:       ; %bb.0: ; %main_body
3473; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3474; GFX10-NEXT:    s_endpgm
3475;
3476; GFX11-LABEL: store_1d_glc:
3477; GFX11:       ; %bb.0: ; %main_body
3478; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3479; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3480; GFX11-NEXT:    s_endpgm
3481main_body:
3482  call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1)
3483  ret void
3484}
3485
3486define amdgpu_ps void @store_1d_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3487; VERDE-LABEL: store_1d_slc:
3488; VERDE:       ; %bb.0: ; %main_body
3489; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3490; VERDE-NEXT:    s_endpgm
3491;
3492; FIJI-LABEL: store_1d_slc:
3493; FIJI:       ; %bb.0: ; %main_body
3494; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3495; FIJI-NEXT:    s_endpgm
3496;
3497; GFX6789-LABEL: store_1d_slc:
3498; GFX6789:       ; %bb.0: ; %main_body
3499; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3500; GFX6789-NEXT:    s_endpgm
3501;
3502; NOPRT-LABEL: store_1d_slc:
3503; NOPRT:       ; %bb.0: ; %main_body
3504; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3505; NOPRT-NEXT:    s_endpgm
3506;
3507; GFX10-LABEL: store_1d_slc:
3508; GFX10:       ; %bb.0: ; %main_body
3509; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3510; GFX10-NEXT:    s_endpgm
3511;
3512; GFX11-LABEL: store_1d_slc:
3513; GFX11:       ; %bb.0: ; %main_body
3514; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3515; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3516; GFX11-NEXT:    s_endpgm
3517main_body:
3518  call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2)
3519  ret void
3520}
3521
3522define amdgpu_ps void @store_1d_glc_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3523; VERDE-LABEL: store_1d_glc_slc:
3524; VERDE:       ; %bb.0: ; %main_body
3525; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3526; VERDE-NEXT:    s_endpgm
3527;
3528; FIJI-LABEL: store_1d_glc_slc:
3529; FIJI:       ; %bb.0: ; %main_body
3530; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3531; FIJI-NEXT:    s_endpgm
3532;
3533; GFX6789-LABEL: store_1d_glc_slc:
3534; GFX6789:       ; %bb.0: ; %main_body
3535; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3536; GFX6789-NEXT:    s_endpgm
3537;
3538; NOPRT-LABEL: store_1d_glc_slc:
3539; NOPRT:       ; %bb.0: ; %main_body
3540; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3541; NOPRT-NEXT:    s_endpgm
3542;
3543; GFX10-LABEL: store_1d_glc_slc:
3544; GFX10:       ; %bb.0: ; %main_body
3545; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3546; GFX10-NEXT:    s_endpgm
3547;
3548; GFX11-LABEL: store_1d_glc_slc:
3549; GFX11:       ; %bb.0: ; %main_body
3550; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3551; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3552; GFX11-NEXT:    s_endpgm
3553main_body:
3554  call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %vdata, i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3)
3555  ret void
3556}
3557
3558define amdgpu_ps <3 x float> @getresinfo_dmask7(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3559; GFX6-LABEL: getresinfo_dmask7:
3560; GFX6:       ; %bb.0: ; %main_body
3561; GFX6-NEXT:    s_mov_b32 s0, s2
3562; GFX6-NEXT:    s_mov_b32 s1, s3
3563; GFX6-NEXT:    s_mov_b32 s2, s4
3564; GFX6-NEXT:    s_mov_b32 s3, s5
3565; GFX6-NEXT:    s_mov_b32 s4, s6
3566; GFX6-NEXT:    s_mov_b32 s5, s7
3567; GFX6-NEXT:    s_mov_b32 s6, s8
3568; GFX6-NEXT:    s_mov_b32 s7, s9
3569; GFX6-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3570; GFX6-NEXT:    s_waitcnt vmcnt(0)
3571; GFX6-NEXT:    ; return to shader part epilog
3572;
3573; GFX8-LABEL: getresinfo_dmask7:
3574; GFX8:       ; %bb.0: ; %main_body
3575; GFX8-NEXT:    s_mov_b32 s0, s2
3576; GFX8-NEXT:    s_mov_b32 s1, s3
3577; GFX8-NEXT:    s_mov_b32 s2, s4
3578; GFX8-NEXT:    s_mov_b32 s3, s5
3579; GFX8-NEXT:    s_mov_b32 s4, s6
3580; GFX8-NEXT:    s_mov_b32 s5, s7
3581; GFX8-NEXT:    s_mov_b32 s6, s8
3582; GFX8-NEXT:    s_mov_b32 s7, s9
3583; GFX8-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3584; GFX8-NEXT:    s_waitcnt vmcnt(0)
3585; GFX8-NEXT:    ; return to shader part epilog
3586;
3587; VERDE-LABEL: getresinfo_dmask7:
3588; VERDE:       ; %bb.0: ; %main_body
3589; VERDE-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3590; VERDE-NEXT:    s_waitcnt vmcnt(0)
3591; VERDE-NEXT:    ; return to shader part epilog
3592;
3593; FIJI-LABEL: getresinfo_dmask7:
3594; FIJI:       ; %bb.0: ; %main_body
3595; FIJI-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3596; FIJI-NEXT:    s_waitcnt vmcnt(0)
3597; FIJI-NEXT:    ; return to shader part epilog
3598;
3599; GFX6789-LABEL: getresinfo_dmask7:
3600; GFX6789:       ; %bb.0: ; %main_body
3601; GFX6789-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3602; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3603; GFX6789-NEXT:    ; return to shader part epilog
3604;
3605; NOPRT-LABEL: getresinfo_dmask7:
3606; NOPRT:       ; %bb.0: ; %main_body
3607; NOPRT-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3608; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3609; NOPRT-NEXT:    ; return to shader part epilog
3610;
3611; GFX10PLUS-LABEL: getresinfo_dmask7:
3612; GFX10PLUS:       ; %bb.0: ; %main_body
3613; GFX10PLUS-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm
3614; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3615; GFX10PLUS-NEXT:    ; return to shader part epilog
3616main_body:
3617  %r = call <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 7, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3618  ret <3 x float> %r
3619}
3620
3621define amdgpu_ps <2 x float> @getresinfo_dmask3(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3622; GFX6-LABEL: getresinfo_dmask3:
3623; GFX6:       ; %bb.0: ; %main_body
3624; GFX6-NEXT:    s_mov_b32 s0, s2
3625; GFX6-NEXT:    s_mov_b32 s1, s3
3626; GFX6-NEXT:    s_mov_b32 s2, s4
3627; GFX6-NEXT:    s_mov_b32 s3, s5
3628; GFX6-NEXT:    s_mov_b32 s4, s6
3629; GFX6-NEXT:    s_mov_b32 s5, s7
3630; GFX6-NEXT:    s_mov_b32 s6, s8
3631; GFX6-NEXT:    s_mov_b32 s7, s9
3632; GFX6-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3633; GFX6-NEXT:    s_waitcnt vmcnt(0)
3634; GFX6-NEXT:    ; return to shader part epilog
3635;
3636; GFX8-LABEL: getresinfo_dmask3:
3637; GFX8:       ; %bb.0: ; %main_body
3638; GFX8-NEXT:    s_mov_b32 s0, s2
3639; GFX8-NEXT:    s_mov_b32 s1, s3
3640; GFX8-NEXT:    s_mov_b32 s2, s4
3641; GFX8-NEXT:    s_mov_b32 s3, s5
3642; GFX8-NEXT:    s_mov_b32 s4, s6
3643; GFX8-NEXT:    s_mov_b32 s5, s7
3644; GFX8-NEXT:    s_mov_b32 s6, s8
3645; GFX8-NEXT:    s_mov_b32 s7, s9
3646; GFX8-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3647; GFX8-NEXT:    s_waitcnt vmcnt(0)
3648; GFX8-NEXT:    ; return to shader part epilog
3649;
3650; VERDE-LABEL: getresinfo_dmask3:
3651; VERDE:       ; %bb.0: ; %main_body
3652; VERDE-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3653; VERDE-NEXT:    s_waitcnt vmcnt(0)
3654; VERDE-NEXT:    ; return to shader part epilog
3655;
3656; FIJI-LABEL: getresinfo_dmask3:
3657; FIJI:       ; %bb.0: ; %main_body
3658; FIJI-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3659; FIJI-NEXT:    s_waitcnt vmcnt(0)
3660; FIJI-NEXT:    ; return to shader part epilog
3661;
3662; GFX6789-LABEL: getresinfo_dmask3:
3663; GFX6789:       ; %bb.0: ; %main_body
3664; GFX6789-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3665; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3666; GFX6789-NEXT:    ; return to shader part epilog
3667;
3668; NOPRT-LABEL: getresinfo_dmask3:
3669; NOPRT:       ; %bb.0: ; %main_body
3670; NOPRT-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3671; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3672; NOPRT-NEXT:    ; return to shader part epilog
3673;
3674; GFX10PLUS-LABEL: getresinfo_dmask3:
3675; GFX10PLUS:       ; %bb.0: ; %main_body
3676; GFX10PLUS-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm
3677; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3678; GFX10PLUS-NEXT:    ; return to shader part epilog
3679main_body:
3680  %r = call <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 3, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3681  ret <2 x float> %r
3682}
3683
3684define amdgpu_ps float @getresinfo_dmask1(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3685; GFX6-LABEL: getresinfo_dmask1:
3686; GFX6:       ; %bb.0: ; %main_body
3687; GFX6-NEXT:    s_mov_b32 s0, s2
3688; GFX6-NEXT:    s_mov_b32 s1, s3
3689; GFX6-NEXT:    s_mov_b32 s2, s4
3690; GFX6-NEXT:    s_mov_b32 s3, s5
3691; GFX6-NEXT:    s_mov_b32 s4, s6
3692; GFX6-NEXT:    s_mov_b32 s5, s7
3693; GFX6-NEXT:    s_mov_b32 s6, s8
3694; GFX6-NEXT:    s_mov_b32 s7, s9
3695; GFX6-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3696; GFX6-NEXT:    s_waitcnt vmcnt(0)
3697; GFX6-NEXT:    ; return to shader part epilog
3698;
3699; GFX8-LABEL: getresinfo_dmask1:
3700; GFX8:       ; %bb.0: ; %main_body
3701; GFX8-NEXT:    s_mov_b32 s0, s2
3702; GFX8-NEXT:    s_mov_b32 s1, s3
3703; GFX8-NEXT:    s_mov_b32 s2, s4
3704; GFX8-NEXT:    s_mov_b32 s3, s5
3705; GFX8-NEXT:    s_mov_b32 s4, s6
3706; GFX8-NEXT:    s_mov_b32 s5, s7
3707; GFX8-NEXT:    s_mov_b32 s6, s8
3708; GFX8-NEXT:    s_mov_b32 s7, s9
3709; GFX8-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3710; GFX8-NEXT:    s_waitcnt vmcnt(0)
3711; GFX8-NEXT:    ; return to shader part epilog
3712;
3713; VERDE-LABEL: getresinfo_dmask1:
3714; VERDE:       ; %bb.0: ; %main_body
3715; VERDE-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3716; VERDE-NEXT:    s_waitcnt vmcnt(0)
3717; VERDE-NEXT:    ; return to shader part epilog
3718;
3719; FIJI-LABEL: getresinfo_dmask1:
3720; FIJI:       ; %bb.0: ; %main_body
3721; FIJI-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3722; FIJI-NEXT:    s_waitcnt vmcnt(0)
3723; FIJI-NEXT:    ; return to shader part epilog
3724;
3725; GFX6789-LABEL: getresinfo_dmask1:
3726; GFX6789:       ; %bb.0: ; %main_body
3727; GFX6789-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3728; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3729; GFX6789-NEXT:    ; return to shader part epilog
3730;
3731; NOPRT-LABEL: getresinfo_dmask1:
3732; NOPRT:       ; %bb.0: ; %main_body
3733; NOPRT-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3734; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3735; NOPRT-NEXT:    ; return to shader part epilog
3736;
3737; GFX10PLUS-LABEL: getresinfo_dmask1:
3738; GFX10PLUS:       ; %bb.0: ; %main_body
3739; GFX10PLUS-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm
3740; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3741; GFX10PLUS-NEXT:    ; return to shader part epilog
3742main_body:
3743  %r = call float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 1, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3744  ret float %r
3745}
3746
3747define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) #0 {
3748; VERDE-LABEL: getresinfo_dmask0:
3749; VERDE:       ; %bb.0: ; %main_body
3750; VERDE-NEXT:    ; return to shader part epilog
3751;
3752; FIJI-LABEL: getresinfo_dmask0:
3753; FIJI:       ; %bb.0: ; %main_body
3754; FIJI-NEXT:    ; return to shader part epilog
3755;
3756; GFX6789-LABEL: getresinfo_dmask0:
3757; GFX6789:       ; %bb.0: ; %main_body
3758; GFX6789-NEXT:    ; return to shader part epilog
3759;
3760; NOPRT-LABEL: getresinfo_dmask0:
3761; NOPRT:       ; %bb.0: ; %main_body
3762; NOPRT-NEXT:    ; return to shader part epilog
3763;
3764; GFX10PLUS-LABEL: getresinfo_dmask0:
3765; GFX10PLUS:       ; %bb.0: ; %main_body
3766; GFX10PLUS-NEXT:    ; return to shader part epilog
3767main_body:
3768  %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 0, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3769  ret <4 x float> %r
3770}
3771
3772;
3773define amdgpu_ps void @image_store_wait(<8 x i32> inreg %arg, <8 x i32> inreg %arg1, <8 x i32> inreg %arg2, <4 x float> %arg3, i32 %arg4) #0 {
3774; VERDE-LABEL: image_store_wait:
3775; VERDE:       ; %bb.0: ; %main_body
3776; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3777; VERDE-NEXT:    s_waitcnt expcnt(0)
3778; VERDE-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3779; VERDE-NEXT:    s_waitcnt vmcnt(0)
3780; VERDE-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3781; VERDE-NEXT:    s_endpgm
3782;
3783; FIJI-LABEL: image_store_wait:
3784; FIJI:       ; %bb.0: ; %main_body
3785; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3786; FIJI-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3787; FIJI-NEXT:    s_waitcnt vmcnt(0)
3788; FIJI-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3789; FIJI-NEXT:    s_endpgm
3790;
3791; GFX6789-LABEL: image_store_wait:
3792; GFX6789:       ; %bb.0: ; %main_body
3793; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3794; GFX6789-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3795; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3796; GFX6789-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3797; GFX6789-NEXT:    s_endpgm
3798;
3799; NOPRT-LABEL: image_store_wait:
3800; NOPRT:       ; %bb.0: ; %main_body
3801; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3802; NOPRT-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3803; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3804; NOPRT-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3805; NOPRT-NEXT:    s_endpgm
3806;
3807; GFX10-LABEL: image_store_wait:
3808; GFX10:       ; %bb.0: ; %main_body
3809; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3810; GFX10-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3811; GFX10-NEXT:    s_waitcnt vmcnt(0)
3812; GFX10-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3813; GFX10-NEXT:    s_endpgm
3814;
3815; GFX11-LABEL: image_store_wait:
3816; GFX11:       ; %bb.0: ; %main_body
3817; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3818; GFX11-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3819; GFX11-NEXT:    s_waitcnt vmcnt(0)
3820; GFX11-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3821; GFX11-NEXT:    s_sendmsg sendmsg(MSG_DEALLOC_VGPRS)
3822; GFX11-NEXT:    s_endpgm
3823main_body:
3824  call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %arg3, i32 15, i32 %arg4, <8 x i32> %arg, i32 0, i32 0)
3825  %data = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %arg4, <8 x i32> %arg1, i32 0, i32 0)
3826  call void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float> %data, i32 15, i32 %arg4, <8 x i32> %arg2, i32 0, i32 0)
3827  ret void
3828}
3829
3830define amdgpu_ps float @image_load_mmo(<8 x i32> inreg %rsrc, float addrspace(3)* %lds, <2 x i32> %c) #0 {
3831; VERDE-LABEL: image_load_mmo:
3832; VERDE:       ; %bb.0:
3833; VERDE-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3834; VERDE-NEXT:    v_mov_b32_e32 v2, 0
3835; VERDE-NEXT:    s_mov_b32 m0, -1
3836; VERDE-NEXT:    ds_write_b32 v0, v2
3837; VERDE-NEXT:    v_add_i32_e32 v0, vcc, 16, v0
3838; VERDE-NEXT:    ds_write_b32 v0, v2
3839; VERDE-NEXT:    s_waitcnt vmcnt(0)
3840; VERDE-NEXT:    v_mov_b32_e32 v0, v1
3841; VERDE-NEXT:    s_waitcnt lgkmcnt(0)
3842; VERDE-NEXT:    ; return to shader part epilog
3843;
3844; FIJI-LABEL: image_load_mmo:
3845; FIJI:       ; %bb.0:
3846; FIJI-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3847; FIJI-NEXT:    v_mov_b32_e32 v2, 0
3848; FIJI-NEXT:    s_mov_b32 m0, -1
3849; FIJI-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3850; FIJI-NEXT:    s_waitcnt vmcnt(0)
3851; FIJI-NEXT:    v_mov_b32_e32 v0, v1
3852; FIJI-NEXT:    s_waitcnt lgkmcnt(0)
3853; FIJI-NEXT:    ; return to shader part epilog
3854;
3855; GFX6789-LABEL: image_load_mmo:
3856; GFX6789:       ; %bb.0:
3857; GFX6789-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3858; GFX6789-NEXT:    v_mov_b32_e32 v2, 0
3859; GFX6789-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3860; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3861; GFX6789-NEXT:    v_mov_b32_e32 v0, v1
3862; GFX6789-NEXT:    s_waitcnt lgkmcnt(0)
3863; GFX6789-NEXT:    ; return to shader part epilog
3864;
3865; NOPRT-LABEL: image_load_mmo:
3866; NOPRT:       ; %bb.0:
3867; NOPRT-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3868; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
3869; NOPRT-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3870; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3871; NOPRT-NEXT:    v_mov_b32_e32 v0, v1
3872; NOPRT-NEXT:    s_waitcnt lgkmcnt(0)
3873; NOPRT-NEXT:    ; return to shader part epilog
3874;
3875; GFX10-LABEL: image_load_mmo:
3876; GFX10:       ; %bb.0:
3877; GFX10-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm
3878; GFX10-NEXT:    v_mov_b32_e32 v2, 0
3879; GFX10-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3880; GFX10-NEXT:    s_waitcnt vmcnt(0)
3881; GFX10-NEXT:    v_mov_b32_e32 v0, v1
3882; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3883; GFX10-NEXT:    ; return to shader part epilog
3884;
3885; GFX11-LABEL: image_load_mmo:
3886; GFX11:       ; %bb.0:
3887; GFX11-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm
3888; GFX11-NEXT:    v_mov_b32_e32 v2, 0
3889; GFX11-NEXT:    ds_store_2addr_b32 v0, v2, v2 offset1:4
3890; GFX11-NEXT:    s_waitcnt vmcnt(0)
3891; GFX11-NEXT:    v_mov_b32_e32 v0, v1
3892; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3893; GFX11-NEXT:    ; return to shader part epilog
3894  store float 0.000000e+00, float addrspace(3)* %lds
3895  %c0 = extractelement <2 x i32> %c, i32 0
3896  %c1 = extractelement <2 x i32> %c, i32 1
3897  %tex = call float @llvm.amdgcn.image.load.2d.f32.i32(i32 1, i32 %c0, i32 %c1, <8 x i32> %rsrc, i32 0, i32 0)
3898  %tmp2 = getelementptr float, float addrspace(3)* %lds, i32 4
3899  store float 0.000000e+00, float addrspace(3)* %tmp2
3900  ret float %tex
3901}
3902
3903declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3904declare {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3905declare {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3906declare {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3907declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3908declare {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3909declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3910declare {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3911declare <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3912declare {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3913declare <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3914declare {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3915declare <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3916declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3917declare <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3918declare {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3919declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3920declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3921
3922declare <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3923declare <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3924declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3925declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3926declare {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3927declare {float,i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3928declare <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3929declare <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3930declare <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3931declare <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3932
3933declare void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float>, i32, i32, <8 x i32>, i32, i32) #0
3934declare void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3935declare void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3936declare void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3937declare void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3938declare void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3939declare void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3940declare void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3941
3942declare void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3943declare void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3944declare void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3945declare void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3946declare void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3947declare void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3948
3949declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3950declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3951declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3952declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3953declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3954declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3955declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3956declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3957declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3958declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3959declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3960
3961declare float @llvm.amdgcn.image.load.1d.f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3962declare float @llvm.amdgcn.image.load.2d.f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3963declare <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3964declare void @llvm.amdgcn.image.store.1d.f32.i32(float, i32, i32, <8 x i32>, i32, i32) #0
3965declare void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float>, i32, i32, <8 x i32>, i32, i32) #0
3966
3967attributes #0 = { nounwind }
3968attributes #1 = { nounwind readonly }
3969attributes #2 = { nounwind readnone }
3970