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; GFX10PLUS-LABEL: store_1d:
2441; GFX10PLUS:       ; %bb.0: ; %main_body
2442; GFX10PLUS-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2443; GFX10PLUS-NEXT:    s_endpgm
2444main_body:
2445  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)
2446  ret void
2447}
2448
2449define amdgpu_ps void @store_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t) {
2450; VERDE-LABEL: store_2d:
2451; VERDE:       ; %bb.0: ; %main_body
2452; VERDE-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2453; VERDE-NEXT:    s_endpgm
2454;
2455; FIJI-LABEL: store_2d:
2456; FIJI:       ; %bb.0: ; %main_body
2457; FIJI-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2458; FIJI-NEXT:    s_endpgm
2459;
2460; GFX6789-LABEL: store_2d:
2461; GFX6789:       ; %bb.0: ; %main_body
2462; GFX6789-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2463; GFX6789-NEXT:    s_endpgm
2464;
2465; NOPRT-LABEL: store_2d:
2466; NOPRT:       ; %bb.0: ; %main_body
2467; NOPRT-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2468; NOPRT-NEXT:    s_endpgm
2469;
2470; GFX10PLUS-LABEL: store_2d:
2471; GFX10PLUS:       ; %bb.0: ; %main_body
2472; GFX10PLUS-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2473; GFX10PLUS-NEXT:    s_endpgm
2474main_body:
2475  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)
2476  ret void
2477}
2478
2479define amdgpu_ps void @store_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r) {
2480; VERDE-LABEL: store_3d:
2481; VERDE:       ; %bb.0: ; %main_body
2482; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2483; VERDE-NEXT:    s_endpgm
2484;
2485; FIJI-LABEL: store_3d:
2486; FIJI:       ; %bb.0: ; %main_body
2487; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2488; FIJI-NEXT:    s_endpgm
2489;
2490; GFX6789-LABEL: store_3d:
2491; GFX6789:       ; %bb.0: ; %main_body
2492; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2493; GFX6789-NEXT:    s_endpgm
2494;
2495; NOPRT-LABEL: store_3d:
2496; NOPRT:       ; %bb.0: ; %main_body
2497; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2498; NOPRT-NEXT:    s_endpgm
2499;
2500; GFX10PLUS-LABEL: store_3d:
2501; GFX10PLUS:       ; %bb.0: ; %main_body
2502; GFX10PLUS-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2503; GFX10PLUS-NEXT:    s_endpgm
2504main_body:
2505  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)
2506  ret void
2507}
2508
2509define amdgpu_ps void @store_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) {
2510; VERDE-LABEL: store_cube:
2511; VERDE:       ; %bb.0: ; %main_body
2512; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2513; VERDE-NEXT:    s_endpgm
2514;
2515; FIJI-LABEL: store_cube:
2516; FIJI:       ; %bb.0: ; %main_body
2517; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2518; FIJI-NEXT:    s_endpgm
2519;
2520; GFX6789-LABEL: store_cube:
2521; GFX6789:       ; %bb.0: ; %main_body
2522; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2523; GFX6789-NEXT:    s_endpgm
2524;
2525; NOPRT-LABEL: store_cube:
2526; NOPRT:       ; %bb.0: ; %main_body
2527; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2528; NOPRT-NEXT:    s_endpgm
2529;
2530; GFX10PLUS-LABEL: store_cube:
2531; GFX10PLUS:       ; %bb.0: ; %main_body
2532; GFX10PLUS-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2533; GFX10PLUS-NEXT:    s_endpgm
2534main_body:
2535  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)
2536  ret void
2537}
2538
2539define amdgpu_ps void @store_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice) {
2540; VERDE-LABEL: store_1darray:
2541; VERDE:       ; %bb.0: ; %main_body
2542; VERDE-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2543; VERDE-NEXT:    s_endpgm
2544;
2545; FIJI-LABEL: store_1darray:
2546; FIJI:       ; %bb.0: ; %main_body
2547; FIJI-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2548; FIJI-NEXT:    s_endpgm
2549;
2550; GFX6789-LABEL: store_1darray:
2551; GFX6789:       ; %bb.0: ; %main_body
2552; GFX6789-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2553; GFX6789-NEXT:    s_endpgm
2554;
2555; NOPRT-LABEL: store_1darray:
2556; NOPRT:       ; %bb.0: ; %main_body
2557; NOPRT-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm da
2558; NOPRT-NEXT:    s_endpgm
2559;
2560; GFX10PLUS-LABEL: store_1darray:
2561; GFX10PLUS:       ; %bb.0: ; %main_body
2562; GFX10PLUS-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2563; GFX10PLUS-NEXT:    s_endpgm
2564main_body:
2565  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)
2566  ret void
2567}
2568
2569define amdgpu_ps void @store_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice) {
2570; VERDE-LABEL: store_2darray:
2571; VERDE:       ; %bb.0: ; %main_body
2572; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2573; VERDE-NEXT:    s_endpgm
2574;
2575; FIJI-LABEL: store_2darray:
2576; FIJI:       ; %bb.0: ; %main_body
2577; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2578; FIJI-NEXT:    s_endpgm
2579;
2580; GFX6789-LABEL: store_2darray:
2581; GFX6789:       ; %bb.0: ; %main_body
2582; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2583; GFX6789-NEXT:    s_endpgm
2584;
2585; NOPRT-LABEL: store_2darray:
2586; NOPRT:       ; %bb.0: ; %main_body
2587; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2588; NOPRT-NEXT:    s_endpgm
2589;
2590; GFX10PLUS-LABEL: store_2darray:
2591; GFX10PLUS:       ; %bb.0: ; %main_body
2592; GFX10PLUS-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2593; GFX10PLUS-NEXT:    s_endpgm
2594main_body:
2595  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)
2596  ret void
2597}
2598
2599define amdgpu_ps void @store_2dmsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %fragid) {
2600; VERDE-LABEL: store_2dmsaa:
2601; VERDE:       ; %bb.0: ; %main_body
2602; VERDE-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2603; VERDE-NEXT:    s_endpgm
2604;
2605; FIJI-LABEL: store_2dmsaa:
2606; FIJI:       ; %bb.0: ; %main_body
2607; FIJI-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2608; FIJI-NEXT:    s_endpgm
2609;
2610; GFX6789-LABEL: store_2dmsaa:
2611; GFX6789:       ; %bb.0: ; %main_body
2612; GFX6789-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2613; GFX6789-NEXT:    s_endpgm
2614;
2615; NOPRT-LABEL: store_2dmsaa:
2616; NOPRT:       ; %bb.0: ; %main_body
2617; NOPRT-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2618; NOPRT-NEXT:    s_endpgm
2619;
2620; GFX10PLUS-LABEL: store_2dmsaa:
2621; GFX10PLUS:       ; %bb.0: ; %main_body
2622; GFX10PLUS-NEXT:    image_store v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
2623; GFX10PLUS-NEXT:    s_endpgm
2624main_body:
2625  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)
2626  ret void
2627}
2628
2629define amdgpu_ps void @store_2darraymsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %fragid) {
2630; VERDE-LABEL: store_2darraymsaa:
2631; VERDE:       ; %bb.0: ; %main_body
2632; VERDE-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2633; VERDE-NEXT:    s_endpgm
2634;
2635; FIJI-LABEL: store_2darraymsaa:
2636; FIJI:       ; %bb.0: ; %main_body
2637; FIJI-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2638; FIJI-NEXT:    s_endpgm
2639;
2640; GFX6789-LABEL: store_2darraymsaa:
2641; GFX6789:       ; %bb.0: ; %main_body
2642; GFX6789-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2643; GFX6789-NEXT:    s_endpgm
2644;
2645; NOPRT-LABEL: store_2darraymsaa:
2646; NOPRT:       ; %bb.0: ; %main_body
2647; NOPRT-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2648; NOPRT-NEXT:    s_endpgm
2649;
2650; GFX10PLUS-LABEL: store_2darraymsaa:
2651; GFX10PLUS:       ; %bb.0: ; %main_body
2652; GFX10PLUS-NEXT:    image_store v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
2653; GFX10PLUS-NEXT:    s_endpgm
2654main_body:
2655  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)
2656  ret void
2657}
2658
2659define amdgpu_ps void @store_mip_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %mip) {
2660; VERDE-LABEL: store_mip_1d:
2661; VERDE:       ; %bb.0: ; %main_body
2662; VERDE-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2663; VERDE-NEXT:    s_endpgm
2664;
2665; FIJI-LABEL: store_mip_1d:
2666; FIJI:       ; %bb.0: ; %main_body
2667; FIJI-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2668; FIJI-NEXT:    s_endpgm
2669;
2670; GFX6789-LABEL: store_mip_1d:
2671; GFX6789:       ; %bb.0: ; %main_body
2672; GFX6789-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2673; GFX6789-NEXT:    s_endpgm
2674;
2675; NOPRT-LABEL: store_mip_1d:
2676; NOPRT:       ; %bb.0: ; %main_body
2677; NOPRT-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm
2678; NOPRT-NEXT:    s_endpgm
2679;
2680; GFX10PLUS-LABEL: store_mip_1d:
2681; GFX10PLUS:       ; %bb.0: ; %main_body
2682; GFX10PLUS-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2683; GFX10PLUS-NEXT:    s_endpgm
2684main_body:
2685  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)
2686  ret void
2687}
2688
2689define amdgpu_ps void @store_mip_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %mip) {
2690; VERDE-LABEL: store_mip_2d:
2691; VERDE:       ; %bb.0: ; %main_body
2692; VERDE-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2693; VERDE-NEXT:    s_endpgm
2694;
2695; FIJI-LABEL: store_mip_2d:
2696; FIJI:       ; %bb.0: ; %main_body
2697; FIJI-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2698; FIJI-NEXT:    s_endpgm
2699;
2700; GFX6789-LABEL: store_mip_2d:
2701; GFX6789:       ; %bb.0: ; %main_body
2702; GFX6789-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2703; GFX6789-NEXT:    s_endpgm
2704;
2705; NOPRT-LABEL: store_mip_2d:
2706; NOPRT:       ; %bb.0: ; %main_body
2707; NOPRT-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm
2708; NOPRT-NEXT:    s_endpgm
2709;
2710; GFX10PLUS-LABEL: store_mip_2d:
2711; GFX10PLUS:       ; %bb.0: ; %main_body
2712; GFX10PLUS-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2713; GFX10PLUS-NEXT:    s_endpgm
2714main_body:
2715  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)
2716  ret void
2717}
2718
2719define amdgpu_ps void @store_mip_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %r, i32 %mip) {
2720; VERDE-LABEL: store_mip_3d:
2721; VERDE:       ; %bb.0: ; %main_body
2722; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2723; VERDE-NEXT:    s_endpgm
2724;
2725; FIJI-LABEL: store_mip_3d:
2726; FIJI:       ; %bb.0: ; %main_body
2727; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2728; FIJI-NEXT:    s_endpgm
2729;
2730; GFX6789-LABEL: store_mip_3d:
2731; GFX6789:       ; %bb.0: ; %main_body
2732; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2733; GFX6789-NEXT:    s_endpgm
2734;
2735; NOPRT-LABEL: store_mip_3d:
2736; NOPRT:       ; %bb.0: ; %main_body
2737; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm
2738; NOPRT-NEXT:    s_endpgm
2739;
2740; GFX10PLUS-LABEL: store_mip_3d:
2741; GFX10PLUS:       ; %bb.0: ; %main_body
2742; GFX10PLUS-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2743; GFX10PLUS-NEXT:    s_endpgm
2744main_body:
2745  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)
2746  ret void
2747}
2748
2749define amdgpu_ps void @store_mip_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2750; VERDE-LABEL: store_mip_cube:
2751; VERDE:       ; %bb.0: ; %main_body
2752; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2753; VERDE-NEXT:    s_endpgm
2754;
2755; FIJI-LABEL: store_mip_cube:
2756; FIJI:       ; %bb.0: ; %main_body
2757; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2758; FIJI-NEXT:    s_endpgm
2759;
2760; GFX6789-LABEL: store_mip_cube:
2761; GFX6789:       ; %bb.0: ; %main_body
2762; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2763; GFX6789-NEXT:    s_endpgm
2764;
2765; NOPRT-LABEL: store_mip_cube:
2766; NOPRT:       ; %bb.0: ; %main_body
2767; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2768; NOPRT-NEXT:    s_endpgm
2769;
2770; GFX10PLUS-LABEL: store_mip_cube:
2771; GFX10PLUS:       ; %bb.0: ; %main_body
2772; GFX10PLUS-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2773; GFX10PLUS-NEXT:    s_endpgm
2774main_body:
2775  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)
2776  ret void
2777}
2778
2779define amdgpu_ps void @store_mip_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %slice, i32 %mip) {
2780; VERDE-LABEL: store_mip_1darray:
2781; VERDE:       ; %bb.0: ; %main_body
2782; VERDE-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2783; VERDE-NEXT:    s_endpgm
2784;
2785; FIJI-LABEL: store_mip_1darray:
2786; FIJI:       ; %bb.0: ; %main_body
2787; FIJI-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2788; FIJI-NEXT:    s_endpgm
2789;
2790; GFX6789-LABEL: store_mip_1darray:
2791; GFX6789:       ; %bb.0: ; %main_body
2792; GFX6789-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2793; GFX6789-NEXT:    s_endpgm
2794;
2795; NOPRT-LABEL: store_mip_1darray:
2796; NOPRT:       ; %bb.0: ; %main_body
2797; NOPRT-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf unorm da
2798; NOPRT-NEXT:    s_endpgm
2799;
2800; GFX10PLUS-LABEL: store_mip_1darray:
2801; GFX10PLUS:       ; %bb.0: ; %main_body
2802; GFX10PLUS-NEXT:    image_store_mip v[0:3], v[4:6], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
2803; GFX10PLUS-NEXT:    s_endpgm
2804main_body:
2805  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)
2806  ret void
2807}
2808
2809define amdgpu_ps void @store_mip_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s, i32 %t, i32 %slice, i32 %mip) {
2810; VERDE-LABEL: store_mip_2darray:
2811; VERDE:       ; %bb.0: ; %main_body
2812; VERDE-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2813; VERDE-NEXT:    s_endpgm
2814;
2815; FIJI-LABEL: store_mip_2darray:
2816; FIJI:       ; %bb.0: ; %main_body
2817; FIJI-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2818; FIJI-NEXT:    s_endpgm
2819;
2820; GFX6789-LABEL: store_mip_2darray:
2821; GFX6789:       ; %bb.0: ; %main_body
2822; GFX6789-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2823; GFX6789-NEXT:    s_endpgm
2824;
2825; NOPRT-LABEL: store_mip_2darray:
2826; NOPRT:       ; %bb.0: ; %main_body
2827; NOPRT-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf unorm da
2828; NOPRT-NEXT:    s_endpgm
2829;
2830; GFX10PLUS-LABEL: store_mip_2darray:
2831; GFX10PLUS:       ; %bb.0: ; %main_body
2832; GFX10PLUS-NEXT:    image_store_mip v[0:3], v[4:7], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
2833; GFX10PLUS-NEXT:    s_endpgm
2834main_body:
2835  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)
2836  ret void
2837}
2838
2839define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, i32 %mip) {
2840; VERDE-LABEL: getresinfo_1d:
2841; VERDE:       ; %bb.0: ; %main_body
2842; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2843; VERDE-NEXT:    s_waitcnt vmcnt(0)
2844; VERDE-NEXT:    ; return to shader part epilog
2845;
2846; FIJI-LABEL: getresinfo_1d:
2847; FIJI:       ; %bb.0: ; %main_body
2848; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2849; FIJI-NEXT:    s_waitcnt vmcnt(0)
2850; FIJI-NEXT:    ; return to shader part epilog
2851;
2852; GFX6789-LABEL: getresinfo_1d:
2853; GFX6789:       ; %bb.0: ; %main_body
2854; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2855; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2856; GFX6789-NEXT:    ; return to shader part epilog
2857;
2858; NOPRT-LABEL: getresinfo_1d:
2859; NOPRT:       ; %bb.0: ; %main_body
2860; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2861; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2862; NOPRT-NEXT:    ; return to shader part epilog
2863;
2864; GFX10PLUS-LABEL: getresinfo_1d:
2865; GFX10PLUS:       ; %bb.0: ; %main_body
2866; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
2867; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2868; GFX10PLUS-NEXT:    ; return to shader part epilog
2869main_body:
2870  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2871  ret <4 x float> %v
2872}
2873
2874define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, i32 %mip) {
2875; VERDE-LABEL: getresinfo_2d:
2876; VERDE:       ; %bb.0: ; %main_body
2877; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2878; VERDE-NEXT:    s_waitcnt vmcnt(0)
2879; VERDE-NEXT:    ; return to shader part epilog
2880;
2881; FIJI-LABEL: getresinfo_2d:
2882; FIJI:       ; %bb.0: ; %main_body
2883; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2884; FIJI-NEXT:    s_waitcnt vmcnt(0)
2885; FIJI-NEXT:    ; return to shader part epilog
2886;
2887; GFX6789-LABEL: getresinfo_2d:
2888; GFX6789:       ; %bb.0: ; %main_body
2889; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2890; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2891; GFX6789-NEXT:    ; return to shader part epilog
2892;
2893; NOPRT-LABEL: getresinfo_2d:
2894; NOPRT:       ; %bb.0: ; %main_body
2895; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2896; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2897; NOPRT-NEXT:    ; return to shader part epilog
2898;
2899; GFX10PLUS-LABEL: getresinfo_2d:
2900; GFX10PLUS:       ; %bb.0: ; %main_body
2901; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm
2902; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2903; GFX10PLUS-NEXT:    ; return to shader part epilog
2904main_body:
2905  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2906  ret <4 x float> %v
2907}
2908
2909define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, i32 %mip) {
2910; VERDE-LABEL: getresinfo_3d:
2911; VERDE:       ; %bb.0: ; %main_body
2912; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2913; VERDE-NEXT:    s_waitcnt vmcnt(0)
2914; VERDE-NEXT:    ; return to shader part epilog
2915;
2916; FIJI-LABEL: getresinfo_3d:
2917; FIJI:       ; %bb.0: ; %main_body
2918; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2919; FIJI-NEXT:    s_waitcnt vmcnt(0)
2920; FIJI-NEXT:    ; return to shader part epilog
2921;
2922; GFX6789-LABEL: getresinfo_3d:
2923; GFX6789:       ; %bb.0: ; %main_body
2924; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2925; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2926; GFX6789-NEXT:    ; return to shader part epilog
2927;
2928; NOPRT-LABEL: getresinfo_3d:
2929; NOPRT:       ; %bb.0: ; %main_body
2930; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
2931; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2932; NOPRT-NEXT:    ; return to shader part epilog
2933;
2934; GFX10PLUS-LABEL: getresinfo_3d:
2935; GFX10PLUS:       ; %bb.0: ; %main_body
2936; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm
2937; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2938; GFX10PLUS-NEXT:    ; return to shader part epilog
2939main_body:
2940  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2941  ret <4 x float> %v
2942}
2943
2944define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, i32 %mip) {
2945; VERDE-LABEL: getresinfo_cube:
2946; VERDE:       ; %bb.0: ; %main_body
2947; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2948; VERDE-NEXT:    s_waitcnt vmcnt(0)
2949; VERDE-NEXT:    ; return to shader part epilog
2950;
2951; FIJI-LABEL: getresinfo_cube:
2952; FIJI:       ; %bb.0: ; %main_body
2953; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2954; FIJI-NEXT:    s_waitcnt vmcnt(0)
2955; FIJI-NEXT:    ; return to shader part epilog
2956;
2957; GFX6789-LABEL: getresinfo_cube:
2958; GFX6789:       ; %bb.0: ; %main_body
2959; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2960; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2961; GFX6789-NEXT:    ; return to shader part epilog
2962;
2963; NOPRT-LABEL: getresinfo_cube:
2964; NOPRT:       ; %bb.0: ; %main_body
2965; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2966; NOPRT-NEXT:    s_waitcnt vmcnt(0)
2967; NOPRT-NEXT:    ; return to shader part epilog
2968;
2969; GFX10PLUS-LABEL: getresinfo_cube:
2970; GFX10PLUS:       ; %bb.0: ; %main_body
2971; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm
2972; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
2973; GFX10PLUS-NEXT:    ; return to shader part epilog
2974main_body:
2975  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
2976  ret <4 x float> %v
2977}
2978
2979define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, i32 %mip) {
2980; VERDE-LABEL: getresinfo_1darray:
2981; VERDE:       ; %bb.0: ; %main_body
2982; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2983; VERDE-NEXT:    s_waitcnt vmcnt(0)
2984; VERDE-NEXT:    ; return to shader part epilog
2985;
2986; FIJI-LABEL: getresinfo_1darray:
2987; FIJI:       ; %bb.0: ; %main_body
2988; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2989; FIJI-NEXT:    s_waitcnt vmcnt(0)
2990; FIJI-NEXT:    ; return to shader part epilog
2991;
2992; GFX6789-LABEL: getresinfo_1darray:
2993; GFX6789:       ; %bb.0: ; %main_body
2994; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
2995; GFX6789-NEXT:    s_waitcnt vmcnt(0)
2996; GFX6789-NEXT:    ; return to shader part epilog
2997;
2998; NOPRT-LABEL: getresinfo_1darray:
2999; NOPRT:       ; %bb.0: ; %main_body
3000; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3001; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3002; NOPRT-NEXT:    ; return to shader part epilog
3003;
3004; GFX10PLUS-LABEL: getresinfo_1darray:
3005; GFX10PLUS:       ; %bb.0: ; %main_body
3006; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm
3007; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3008; GFX10PLUS-NEXT:    ; return to shader part epilog
3009main_body:
3010  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3011  ret <4 x float> %v
3012}
3013
3014define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, i32 %mip) {
3015; VERDE-LABEL: getresinfo_2darray:
3016; VERDE:       ; %bb.0: ; %main_body
3017; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3018; VERDE-NEXT:    s_waitcnt vmcnt(0)
3019; VERDE-NEXT:    ; return to shader part epilog
3020;
3021; FIJI-LABEL: getresinfo_2darray:
3022; FIJI:       ; %bb.0: ; %main_body
3023; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3024; FIJI-NEXT:    s_waitcnt vmcnt(0)
3025; FIJI-NEXT:    ; return to shader part epilog
3026;
3027; GFX6789-LABEL: getresinfo_2darray:
3028; GFX6789:       ; %bb.0: ; %main_body
3029; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3030; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3031; GFX6789-NEXT:    ; return to shader part epilog
3032;
3033; NOPRT-LABEL: getresinfo_2darray:
3034; NOPRT:       ; %bb.0: ; %main_body
3035; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3036; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3037; NOPRT-NEXT:    ; return to shader part epilog
3038;
3039; GFX10PLUS-LABEL: getresinfo_2darray:
3040; GFX10PLUS:       ; %bb.0: ; %main_body
3041; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm
3042; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3043; GFX10PLUS-NEXT:    ; return to shader part epilog
3044main_body:
3045  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3046  ret <4 x float> %v
3047}
3048
3049define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, i32 %mip) {
3050; VERDE-LABEL: getresinfo_2dmsaa:
3051; VERDE:       ; %bb.0: ; %main_body
3052; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3053; VERDE-NEXT:    s_waitcnt vmcnt(0)
3054; VERDE-NEXT:    ; return to shader part epilog
3055;
3056; FIJI-LABEL: getresinfo_2dmsaa:
3057; FIJI:       ; %bb.0: ; %main_body
3058; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3059; FIJI-NEXT:    s_waitcnt vmcnt(0)
3060; FIJI-NEXT:    ; return to shader part epilog
3061;
3062; GFX6789-LABEL: getresinfo_2dmsaa:
3063; GFX6789:       ; %bb.0: ; %main_body
3064; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3065; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3066; GFX6789-NEXT:    ; return to shader part epilog
3067;
3068; NOPRT-LABEL: getresinfo_2dmsaa:
3069; NOPRT:       ; %bb.0: ; %main_body
3070; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm
3071; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3072; NOPRT-NEXT:    ; return to shader part epilog
3073;
3074; GFX10PLUS-LABEL: getresinfo_2dmsaa:
3075; GFX10PLUS:       ; %bb.0: ; %main_body
3076; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm
3077; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3078; GFX10PLUS-NEXT:    ; return to shader part epilog
3079main_body:
3080  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3081  ret <4 x float> %v
3082}
3083
3084define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, i32 %mip) {
3085; VERDE-LABEL: getresinfo_2darraymsaa:
3086; VERDE:       ; %bb.0: ; %main_body
3087; VERDE-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3088; VERDE-NEXT:    s_waitcnt vmcnt(0)
3089; VERDE-NEXT:    ; return to shader part epilog
3090;
3091; FIJI-LABEL: getresinfo_2darraymsaa:
3092; FIJI:       ; %bb.0: ; %main_body
3093; FIJI-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3094; FIJI-NEXT:    s_waitcnt vmcnt(0)
3095; FIJI-NEXT:    ; return to shader part epilog
3096;
3097; GFX6789-LABEL: getresinfo_2darraymsaa:
3098; GFX6789:       ; %bb.0: ; %main_body
3099; GFX6789-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3100; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3101; GFX6789-NEXT:    ; return to shader part epilog
3102;
3103; NOPRT-LABEL: getresinfo_2darraymsaa:
3104; NOPRT:       ; %bb.0: ; %main_body
3105; NOPRT-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm da
3106; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3107; NOPRT-NEXT:    ; return to shader part epilog
3108;
3109; GFX10PLUS-LABEL: getresinfo_2darraymsaa:
3110; GFX10PLUS:       ; %bb.0: ; %main_body
3111; GFX10PLUS-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm
3112; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3113; GFX10PLUS-NEXT:    ; return to shader part epilog
3114main_body:
3115  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32 15, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3116  ret <4 x float> %v
3117}
3118
3119define amdgpu_ps float @load_1d_V1(<8 x i32> inreg %rsrc, i32 %s) {
3120; VERDE-LABEL: load_1d_V1:
3121; VERDE:       ; %bb.0: ; %main_body
3122; VERDE-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3123; VERDE-NEXT:    s_waitcnt vmcnt(0)
3124; VERDE-NEXT:    ; return to shader part epilog
3125;
3126; FIJI-LABEL: load_1d_V1:
3127; FIJI:       ; %bb.0: ; %main_body
3128; FIJI-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3129; FIJI-NEXT:    s_waitcnt vmcnt(0)
3130; FIJI-NEXT:    ; return to shader part epilog
3131;
3132; GFX6789-LABEL: load_1d_V1:
3133; GFX6789:       ; %bb.0: ; %main_body
3134; GFX6789-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3135; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3136; GFX6789-NEXT:    ; return to shader part epilog
3137;
3138; NOPRT-LABEL: load_1d_V1:
3139; NOPRT:       ; %bb.0: ; %main_body
3140; NOPRT-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm
3141; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3142; NOPRT-NEXT:    ; return to shader part epilog
3143;
3144; GFX10PLUS-LABEL: load_1d_V1:
3145; GFX10PLUS:       ; %bb.0: ; %main_body
3146; GFX10PLUS-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm
3147; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3148; GFX10PLUS-NEXT:    ; return to shader part epilog
3149main_body:
3150  %v = call float @llvm.amdgcn.image.load.1d.f32.i32(i32 8, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3151  ret float %v
3152}
3153
3154define amdgpu_ps <2 x float> @load_1d_V2(<8 x i32> inreg %rsrc, i32 %s) {
3155; VERDE-LABEL: load_1d_V2:
3156; VERDE:       ; %bb.0: ; %main_body
3157; VERDE-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3158; VERDE-NEXT:    s_waitcnt vmcnt(0)
3159; VERDE-NEXT:    ; return to shader part epilog
3160;
3161; FIJI-LABEL: load_1d_V2:
3162; FIJI:       ; %bb.0: ; %main_body
3163; FIJI-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3164; FIJI-NEXT:    s_waitcnt vmcnt(0)
3165; FIJI-NEXT:    ; return to shader part epilog
3166;
3167; GFX6789-LABEL: load_1d_V2:
3168; GFX6789:       ; %bb.0: ; %main_body
3169; GFX6789-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3170; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3171; GFX6789-NEXT:    ; return to shader part epilog
3172;
3173; NOPRT-LABEL: load_1d_V2:
3174; NOPRT:       ; %bb.0: ; %main_body
3175; NOPRT-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm
3176; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3177; NOPRT-NEXT:    ; return to shader part epilog
3178;
3179; GFX10PLUS-LABEL: load_1d_V2:
3180; GFX10PLUS:       ; %bb.0: ; %main_body
3181; GFX10PLUS-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm
3182; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3183; GFX10PLUS-NEXT:    ; return to shader part epilog
3184main_body:
3185  %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32 9, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3186  ret <2 x float> %v
3187}
3188
3189define amdgpu_ps void @store_1d_V1(<8 x i32> inreg %rsrc, float %vdata, i32 %s) {
3190; VERDE-LABEL: store_1d_V1:
3191; VERDE:       ; %bb.0: ; %main_body
3192; VERDE-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3193; VERDE-NEXT:    s_endpgm
3194;
3195; FIJI-LABEL: store_1d_V1:
3196; FIJI:       ; %bb.0: ; %main_body
3197; FIJI-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3198; FIJI-NEXT:    s_endpgm
3199;
3200; GFX6789-LABEL: store_1d_V1:
3201; GFX6789:       ; %bb.0: ; %main_body
3202; GFX6789-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3203; GFX6789-NEXT:    s_endpgm
3204;
3205; NOPRT-LABEL: store_1d_V1:
3206; NOPRT:       ; %bb.0: ; %main_body
3207; NOPRT-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm
3208; NOPRT-NEXT:    s_endpgm
3209;
3210; GFX10PLUS-LABEL: store_1d_V1:
3211; GFX10PLUS:       ; %bb.0: ; %main_body
3212; GFX10PLUS-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm
3213; GFX10PLUS-NEXT:    s_endpgm
3214main_body:
3215  call void @llvm.amdgcn.image.store.1d.f32.i32(float %vdata, i32 2, i32 %s, <8 x i32> %rsrc, i32 0, i32 0)
3216  ret void
3217}
3218
3219define amdgpu_ps void @store_1d_V2(<8 x i32> inreg %rsrc, <2 x float> %vdata, i32 %s) {
3220; VERDE-LABEL: store_1d_V2:
3221; VERDE:       ; %bb.0: ; %main_body
3222; VERDE-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3223; VERDE-NEXT:    s_endpgm
3224;
3225; FIJI-LABEL: store_1d_V2:
3226; FIJI:       ; %bb.0: ; %main_body
3227; FIJI-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3228; FIJI-NEXT:    s_endpgm
3229;
3230; GFX6789-LABEL: store_1d_V2:
3231; GFX6789:       ; %bb.0: ; %main_body
3232; GFX6789-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3233; GFX6789-NEXT:    s_endpgm
3234;
3235; NOPRT-LABEL: store_1d_V2:
3236; NOPRT:       ; %bb.0: ; %main_body
3237; NOPRT-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm
3238; NOPRT-NEXT:    s_endpgm
3239;
3240; GFX10PLUS-LABEL: store_1d_V2:
3241; GFX10PLUS:       ; %bb.0: ; %main_body
3242; GFX10PLUS-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm
3243; GFX10PLUS-NEXT:    s_endpgm
3244main_body:
3245  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)
3246  ret void
3247}
3248
3249define amdgpu_ps <4 x float> @load_1d_glc(<8 x i32> inreg %rsrc, i32 %s) {
3250; VERDE-LABEL: load_1d_glc:
3251; VERDE:       ; %bb.0: ; %main_body
3252; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3253; VERDE-NEXT:    s_waitcnt vmcnt(0)
3254; VERDE-NEXT:    ; return to shader part epilog
3255;
3256; FIJI-LABEL: load_1d_glc:
3257; FIJI:       ; %bb.0: ; %main_body
3258; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3259; FIJI-NEXT:    s_waitcnt vmcnt(0)
3260; FIJI-NEXT:    ; return to shader part epilog
3261;
3262; GFX6789-LABEL: load_1d_glc:
3263; GFX6789:       ; %bb.0: ; %main_body
3264; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3265; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3266; GFX6789-NEXT:    ; return to shader part epilog
3267;
3268; NOPRT-LABEL: load_1d_glc:
3269; NOPRT:       ; %bb.0: ; %main_body
3270; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc
3271; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3272; NOPRT-NEXT:    ; return to shader part epilog
3273;
3274; GFX10PLUS-LABEL: load_1d_glc:
3275; GFX10PLUS:       ; %bb.0: ; %main_body
3276; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3277; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3278; GFX10PLUS-NEXT:    ; return to shader part epilog
3279main_body:
3280  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 1)
3281  ret <4 x float> %v
3282}
3283
3284define amdgpu_ps <4 x float> @load_1d_slc(<8 x i32> inreg %rsrc, i32 %s) {
3285; VERDE-LABEL: load_1d_slc:
3286; VERDE:       ; %bb.0: ; %main_body
3287; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3288; VERDE-NEXT:    s_waitcnt vmcnt(0)
3289; VERDE-NEXT:    ; return to shader part epilog
3290;
3291; FIJI-LABEL: load_1d_slc:
3292; FIJI:       ; %bb.0: ; %main_body
3293; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3294; FIJI-NEXT:    s_waitcnt vmcnt(0)
3295; FIJI-NEXT:    ; return to shader part epilog
3296;
3297; GFX6789-LABEL: load_1d_slc:
3298; GFX6789:       ; %bb.0: ; %main_body
3299; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3300; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3301; GFX6789-NEXT:    ; return to shader part epilog
3302;
3303; NOPRT-LABEL: load_1d_slc:
3304; NOPRT:       ; %bb.0: ; %main_body
3305; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc
3306; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3307; NOPRT-NEXT:    ; return to shader part epilog
3308;
3309; GFX10PLUS-LABEL: load_1d_slc:
3310; GFX10PLUS:       ; %bb.0: ; %main_body
3311; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3312; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3313; GFX10PLUS-NEXT:    ; return to shader part epilog
3314main_body:
3315  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 2)
3316  ret <4 x float> %v
3317}
3318
3319define amdgpu_ps <4 x float> @load_1d_glc_slc(<8 x i32> inreg %rsrc, i32 %s) {
3320; VERDE-LABEL: load_1d_glc_slc:
3321; VERDE:       ; %bb.0: ; %main_body
3322; VERDE-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3323; VERDE-NEXT:    s_waitcnt vmcnt(0)
3324; VERDE-NEXT:    ; return to shader part epilog
3325;
3326; FIJI-LABEL: load_1d_glc_slc:
3327; FIJI:       ; %bb.0: ; %main_body
3328; FIJI-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3329; FIJI-NEXT:    s_waitcnt vmcnt(0)
3330; FIJI-NEXT:    ; return to shader part epilog
3331;
3332; GFX6789-LABEL: load_1d_glc_slc:
3333; GFX6789:       ; %bb.0: ; %main_body
3334; GFX6789-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3335; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3336; GFX6789-NEXT:    ; return to shader part epilog
3337;
3338; NOPRT-LABEL: load_1d_glc_slc:
3339; NOPRT:       ; %bb.0: ; %main_body
3340; NOPRT-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc
3341; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3342; NOPRT-NEXT:    ; return to shader part epilog
3343;
3344; GFX10PLUS-LABEL: load_1d_glc_slc:
3345; GFX10PLUS:       ; %bb.0: ; %main_body
3346; GFX10PLUS-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3347; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3348; GFX10PLUS-NEXT:    ; return to shader part epilog
3349main_body:
3350  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %s, <8 x i32> %rsrc, i32 0, i32 3)
3351  ret <4 x float> %v
3352}
3353
3354define amdgpu_ps void @store_1d_glc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3355; VERDE-LABEL: store_1d_glc:
3356; VERDE:       ; %bb.0: ; %main_body
3357; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3358; VERDE-NEXT:    s_endpgm
3359;
3360; FIJI-LABEL: store_1d_glc:
3361; FIJI:       ; %bb.0: ; %main_body
3362; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3363; FIJI-NEXT:    s_endpgm
3364;
3365; GFX6789-LABEL: store_1d_glc:
3366; GFX6789:       ; %bb.0: ; %main_body
3367; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3368; GFX6789-NEXT:    s_endpgm
3369;
3370; NOPRT-LABEL: store_1d_glc:
3371; NOPRT:       ; %bb.0: ; %main_body
3372; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc
3373; NOPRT-NEXT:    s_endpgm
3374;
3375; GFX10PLUS-LABEL: store_1d_glc:
3376; GFX10PLUS:       ; %bb.0: ; %main_body
3377; GFX10PLUS-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc
3378; GFX10PLUS-NEXT:    s_endpgm
3379main_body:
3380  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)
3381  ret void
3382}
3383
3384define amdgpu_ps void @store_1d_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3385; VERDE-LABEL: store_1d_slc:
3386; VERDE:       ; %bb.0: ; %main_body
3387; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3388; VERDE-NEXT:    s_endpgm
3389;
3390; FIJI-LABEL: store_1d_slc:
3391; FIJI:       ; %bb.0: ; %main_body
3392; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3393; FIJI-NEXT:    s_endpgm
3394;
3395; GFX6789-LABEL: store_1d_slc:
3396; GFX6789:       ; %bb.0: ; %main_body
3397; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3398; GFX6789-NEXT:    s_endpgm
3399;
3400; NOPRT-LABEL: store_1d_slc:
3401; NOPRT:       ; %bb.0: ; %main_body
3402; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc
3403; NOPRT-NEXT:    s_endpgm
3404;
3405; GFX10PLUS-LABEL: store_1d_slc:
3406; GFX10PLUS:       ; %bb.0: ; %main_body
3407; GFX10PLUS-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc
3408; GFX10PLUS-NEXT:    s_endpgm
3409main_body:
3410  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)
3411  ret void
3412}
3413
3414define amdgpu_ps void @store_1d_glc_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %s) {
3415; VERDE-LABEL: store_1d_glc_slc:
3416; VERDE:       ; %bb.0: ; %main_body
3417; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3418; VERDE-NEXT:    s_endpgm
3419;
3420; FIJI-LABEL: store_1d_glc_slc:
3421; FIJI:       ; %bb.0: ; %main_body
3422; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3423; FIJI-NEXT:    s_endpgm
3424;
3425; GFX6789-LABEL: store_1d_glc_slc:
3426; GFX6789:       ; %bb.0: ; %main_body
3427; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3428; GFX6789-NEXT:    s_endpgm
3429;
3430; NOPRT-LABEL: store_1d_glc_slc:
3431; NOPRT:       ; %bb.0: ; %main_body
3432; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc
3433; NOPRT-NEXT:    s_endpgm
3434;
3435; GFX10PLUS-LABEL: store_1d_glc_slc:
3436; GFX10PLUS:       ; %bb.0: ; %main_body
3437; GFX10PLUS-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc
3438; GFX10PLUS-NEXT:    s_endpgm
3439main_body:
3440  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)
3441  ret void
3442}
3443
3444define amdgpu_ps <3 x float> @getresinfo_dmask7(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3445; GFX6-LABEL: getresinfo_dmask7:
3446; GFX6:       ; %bb.0: ; %main_body
3447; GFX6-NEXT:    s_mov_b32 s0, s2
3448; GFX6-NEXT:    s_mov_b32 s1, s3
3449; GFX6-NEXT:    s_mov_b32 s2, s4
3450; GFX6-NEXT:    s_mov_b32 s3, s5
3451; GFX6-NEXT:    s_mov_b32 s4, s6
3452; GFX6-NEXT:    s_mov_b32 s5, s7
3453; GFX6-NEXT:    s_mov_b32 s6, s8
3454; GFX6-NEXT:    s_mov_b32 s7, s9
3455; GFX6-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3456; GFX6-NEXT:    s_waitcnt vmcnt(0)
3457; GFX6-NEXT:    ; return to shader part epilog
3458;
3459; GFX8-LABEL: getresinfo_dmask7:
3460; GFX8:       ; %bb.0: ; %main_body
3461; GFX8-NEXT:    s_mov_b32 s0, s2
3462; GFX8-NEXT:    s_mov_b32 s1, s3
3463; GFX8-NEXT:    s_mov_b32 s2, s4
3464; GFX8-NEXT:    s_mov_b32 s3, s5
3465; GFX8-NEXT:    s_mov_b32 s4, s6
3466; GFX8-NEXT:    s_mov_b32 s5, s7
3467; GFX8-NEXT:    s_mov_b32 s6, s8
3468; GFX8-NEXT:    s_mov_b32 s7, s9
3469; GFX8-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3470; GFX8-NEXT:    s_waitcnt vmcnt(0)
3471; GFX8-NEXT:    ; return to shader part epilog
3472;
3473; VERDE-LABEL: getresinfo_dmask7:
3474; VERDE:       ; %bb.0: ; %main_body
3475; VERDE-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3476; VERDE-NEXT:    s_waitcnt vmcnt(0)
3477; VERDE-NEXT:    ; return to shader part epilog
3478;
3479; FIJI-LABEL: getresinfo_dmask7:
3480; FIJI:       ; %bb.0: ; %main_body
3481; FIJI-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3482; FIJI-NEXT:    s_waitcnt vmcnt(0)
3483; FIJI-NEXT:    ; return to shader part epilog
3484;
3485; GFX6789-LABEL: getresinfo_dmask7:
3486; GFX6789:       ; %bb.0: ; %main_body
3487; GFX6789-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3488; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3489; GFX6789-NEXT:    ; return to shader part epilog
3490;
3491; NOPRT-LABEL: getresinfo_dmask7:
3492; NOPRT:       ; %bb.0: ; %main_body
3493; NOPRT-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 unorm
3494; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3495; NOPRT-NEXT:    ; return to shader part epilog
3496;
3497; GFX10PLUS-LABEL: getresinfo_dmask7:
3498; GFX10PLUS:       ; %bb.0: ; %main_body
3499; GFX10PLUS-NEXT:    image_get_resinfo v[0:2], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm
3500; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3501; GFX10PLUS-NEXT:    ; return to shader part epilog
3502main_body:
3503  %r = call <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 7, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3504  ret <3 x float> %r
3505}
3506
3507define amdgpu_ps <2 x float> @getresinfo_dmask3(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3508; GFX6-LABEL: getresinfo_dmask3:
3509; GFX6:       ; %bb.0: ; %main_body
3510; GFX6-NEXT:    s_mov_b32 s0, s2
3511; GFX6-NEXT:    s_mov_b32 s1, s3
3512; GFX6-NEXT:    s_mov_b32 s2, s4
3513; GFX6-NEXT:    s_mov_b32 s3, s5
3514; GFX6-NEXT:    s_mov_b32 s4, s6
3515; GFX6-NEXT:    s_mov_b32 s5, s7
3516; GFX6-NEXT:    s_mov_b32 s6, s8
3517; GFX6-NEXT:    s_mov_b32 s7, s9
3518; GFX6-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3519; GFX6-NEXT:    s_waitcnt vmcnt(0)
3520; GFX6-NEXT:    ; return to shader part epilog
3521;
3522; GFX8-LABEL: getresinfo_dmask3:
3523; GFX8:       ; %bb.0: ; %main_body
3524; GFX8-NEXT:    s_mov_b32 s0, s2
3525; GFX8-NEXT:    s_mov_b32 s1, s3
3526; GFX8-NEXT:    s_mov_b32 s2, s4
3527; GFX8-NEXT:    s_mov_b32 s3, s5
3528; GFX8-NEXT:    s_mov_b32 s4, s6
3529; GFX8-NEXT:    s_mov_b32 s5, s7
3530; GFX8-NEXT:    s_mov_b32 s6, s8
3531; GFX8-NEXT:    s_mov_b32 s7, s9
3532; GFX8-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3533; GFX8-NEXT:    s_waitcnt vmcnt(0)
3534; GFX8-NEXT:    ; return to shader part epilog
3535;
3536; VERDE-LABEL: getresinfo_dmask3:
3537; VERDE:       ; %bb.0: ; %main_body
3538; VERDE-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3539; VERDE-NEXT:    s_waitcnt vmcnt(0)
3540; VERDE-NEXT:    ; return to shader part epilog
3541;
3542; FIJI-LABEL: getresinfo_dmask3:
3543; FIJI:       ; %bb.0: ; %main_body
3544; FIJI-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3545; FIJI-NEXT:    s_waitcnt vmcnt(0)
3546; FIJI-NEXT:    ; return to shader part epilog
3547;
3548; GFX6789-LABEL: getresinfo_dmask3:
3549; GFX6789:       ; %bb.0: ; %main_body
3550; GFX6789-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3551; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3552; GFX6789-NEXT:    ; return to shader part epilog
3553;
3554; NOPRT-LABEL: getresinfo_dmask3:
3555; NOPRT:       ; %bb.0: ; %main_body
3556; NOPRT-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 unorm
3557; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3558; NOPRT-NEXT:    ; return to shader part epilog
3559;
3560; GFX10PLUS-LABEL: getresinfo_dmask3:
3561; GFX10PLUS:       ; %bb.0: ; %main_body
3562; GFX10PLUS-NEXT:    image_get_resinfo v[0:1], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm
3563; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3564; GFX10PLUS-NEXT:    ; return to shader part epilog
3565main_body:
3566  %r = call <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 3, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3567  ret <2 x float> %r
3568}
3569
3570define amdgpu_ps float @getresinfo_dmask1(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) {
3571; GFX6-LABEL: getresinfo_dmask1:
3572; GFX6:       ; %bb.0: ; %main_body
3573; GFX6-NEXT:    s_mov_b32 s0, s2
3574; GFX6-NEXT:    s_mov_b32 s1, s3
3575; GFX6-NEXT:    s_mov_b32 s2, s4
3576; GFX6-NEXT:    s_mov_b32 s3, s5
3577; GFX6-NEXT:    s_mov_b32 s4, s6
3578; GFX6-NEXT:    s_mov_b32 s5, s7
3579; GFX6-NEXT:    s_mov_b32 s6, s8
3580; GFX6-NEXT:    s_mov_b32 s7, s9
3581; GFX6-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3582; GFX6-NEXT:    s_waitcnt vmcnt(0)
3583; GFX6-NEXT:    ; return to shader part epilog
3584;
3585; GFX8-LABEL: getresinfo_dmask1:
3586; GFX8:       ; %bb.0: ; %main_body
3587; GFX8-NEXT:    s_mov_b32 s0, s2
3588; GFX8-NEXT:    s_mov_b32 s1, s3
3589; GFX8-NEXT:    s_mov_b32 s2, s4
3590; GFX8-NEXT:    s_mov_b32 s3, s5
3591; GFX8-NEXT:    s_mov_b32 s4, s6
3592; GFX8-NEXT:    s_mov_b32 s5, s7
3593; GFX8-NEXT:    s_mov_b32 s6, s8
3594; GFX8-NEXT:    s_mov_b32 s7, s9
3595; GFX8-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3596; GFX8-NEXT:    s_waitcnt vmcnt(0)
3597; GFX8-NEXT:    ; return to shader part epilog
3598;
3599; VERDE-LABEL: getresinfo_dmask1:
3600; VERDE:       ; %bb.0: ; %main_body
3601; VERDE-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3602; VERDE-NEXT:    s_waitcnt vmcnt(0)
3603; VERDE-NEXT:    ; return to shader part epilog
3604;
3605; FIJI-LABEL: getresinfo_dmask1:
3606; FIJI:       ; %bb.0: ; %main_body
3607; FIJI-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3608; FIJI-NEXT:    s_waitcnt vmcnt(0)
3609; FIJI-NEXT:    ; return to shader part epilog
3610;
3611; GFX6789-LABEL: getresinfo_dmask1:
3612; GFX6789:       ; %bb.0: ; %main_body
3613; GFX6789-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3614; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3615; GFX6789-NEXT:    ; return to shader part epilog
3616;
3617; NOPRT-LABEL: getresinfo_dmask1:
3618; NOPRT:       ; %bb.0: ; %main_body
3619; NOPRT-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 unorm
3620; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3621; NOPRT-NEXT:    ; return to shader part epilog
3622;
3623; GFX10PLUS-LABEL: getresinfo_dmask1:
3624; GFX10PLUS:       ; %bb.0: ; %main_body
3625; GFX10PLUS-NEXT:    image_get_resinfo v0, v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm
3626; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3627; GFX10PLUS-NEXT:    ; return to shader part epilog
3628main_body:
3629  %r = call float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 1, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3630  ret float %r
3631}
3632
3633define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, i32 %mip) #0 {
3634; VERDE-LABEL: getresinfo_dmask0:
3635; VERDE:       ; %bb.0: ; %main_body
3636; VERDE-NEXT:    ; return to shader part epilog
3637;
3638; FIJI-LABEL: getresinfo_dmask0:
3639; FIJI:       ; %bb.0: ; %main_body
3640; FIJI-NEXT:    ; return to shader part epilog
3641;
3642; GFX6789-LABEL: getresinfo_dmask0:
3643; GFX6789:       ; %bb.0: ; %main_body
3644; GFX6789-NEXT:    ; return to shader part epilog
3645;
3646; NOPRT-LABEL: getresinfo_dmask0:
3647; NOPRT:       ; %bb.0: ; %main_body
3648; NOPRT-NEXT:    ; return to shader part epilog
3649;
3650; GFX10PLUS-LABEL: getresinfo_dmask0:
3651; GFX10PLUS:       ; %bb.0: ; %main_body
3652; GFX10PLUS-NEXT:    ; return to shader part epilog
3653main_body:
3654  %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32 0, i32 %mip, <8 x i32> %rsrc, i32 0, i32 0)
3655  ret <4 x float> %r
3656}
3657
3658;
3659define 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 {
3660; VERDE-LABEL: image_store_wait:
3661; VERDE:       ; %bb.0: ; %main_body
3662; VERDE-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3663; VERDE-NEXT:    s_waitcnt expcnt(0)
3664; VERDE-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3665; VERDE-NEXT:    s_waitcnt vmcnt(0)
3666; VERDE-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3667; VERDE-NEXT:    s_endpgm
3668;
3669; FIJI-LABEL: image_store_wait:
3670; FIJI:       ; %bb.0: ; %main_body
3671; FIJI-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3672; FIJI-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3673; FIJI-NEXT:    s_waitcnt vmcnt(0)
3674; FIJI-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3675; FIJI-NEXT:    s_endpgm
3676;
3677; GFX6789-LABEL: image_store_wait:
3678; GFX6789:       ; %bb.0: ; %main_body
3679; GFX6789-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3680; GFX6789-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3681; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3682; GFX6789-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3683; GFX6789-NEXT:    s_endpgm
3684;
3685; NOPRT-LABEL: image_store_wait:
3686; NOPRT:       ; %bb.0: ; %main_body
3687; NOPRT-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm
3688; NOPRT-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf unorm
3689; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3690; NOPRT-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf unorm
3691; NOPRT-NEXT:    s_endpgm
3692;
3693; GFX10PLUS-LABEL: image_store_wait:
3694; GFX10PLUS:       ; %bb.0: ; %main_body
3695; GFX10PLUS-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3696; GFX10PLUS-NEXT:    image_load v[0:3], v4, s[8:15] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3697; GFX10PLUS-NEXT:    s_waitcnt vmcnt(0)
3698; GFX10PLUS-NEXT:    image_store v[0:3], v4, s[16:23] dmask:0xf dim:SQ_RSRC_IMG_1D unorm
3699; GFX10PLUS-NEXT:    s_endpgm
3700main_body:
3701  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)
3702  %data = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32 15, i32 %arg4, <8 x i32> %arg1, i32 0, i32 0)
3703  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)
3704  ret void
3705}
3706
3707define amdgpu_ps float @image_load_mmo(<8 x i32> inreg %rsrc, float addrspace(3)* %lds, <2 x i32> %c) #0 {
3708; VERDE-LABEL: image_load_mmo:
3709; VERDE:       ; %bb.0:
3710; VERDE-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3711; VERDE-NEXT:    v_mov_b32_e32 v2, 0
3712; VERDE-NEXT:    s_mov_b32 m0, -1
3713; VERDE-NEXT:    ds_write_b32 v0, v2
3714; VERDE-NEXT:    v_add_i32_e32 v0, vcc, 16, v0
3715; VERDE-NEXT:    ds_write_b32 v0, v2
3716; VERDE-NEXT:    s_waitcnt vmcnt(0)
3717; VERDE-NEXT:    v_mov_b32_e32 v0, v1
3718; VERDE-NEXT:    s_waitcnt lgkmcnt(0)
3719; VERDE-NEXT:    ; return to shader part epilog
3720;
3721; FIJI-LABEL: image_load_mmo:
3722; FIJI:       ; %bb.0:
3723; FIJI-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3724; FIJI-NEXT:    v_mov_b32_e32 v2, 0
3725; FIJI-NEXT:    s_mov_b32 m0, -1
3726; FIJI-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3727; FIJI-NEXT:    s_waitcnt vmcnt(0)
3728; FIJI-NEXT:    v_mov_b32_e32 v0, v1
3729; FIJI-NEXT:    s_waitcnt lgkmcnt(0)
3730; FIJI-NEXT:    ; return to shader part epilog
3731;
3732; GFX6789-LABEL: image_load_mmo:
3733; GFX6789:       ; %bb.0:
3734; GFX6789-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3735; GFX6789-NEXT:    v_mov_b32_e32 v2, 0
3736; GFX6789-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3737; GFX6789-NEXT:    s_waitcnt vmcnt(0)
3738; GFX6789-NEXT:    v_mov_b32_e32 v0, v1
3739; GFX6789-NEXT:    s_waitcnt lgkmcnt(0)
3740; GFX6789-NEXT:    ; return to shader part epilog
3741;
3742; NOPRT-LABEL: image_load_mmo:
3743; NOPRT:       ; %bb.0:
3744; NOPRT-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 unorm
3745; NOPRT-NEXT:    v_mov_b32_e32 v2, 0
3746; NOPRT-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3747; NOPRT-NEXT:    s_waitcnt vmcnt(0)
3748; NOPRT-NEXT:    v_mov_b32_e32 v0, v1
3749; NOPRT-NEXT:    s_waitcnt lgkmcnt(0)
3750; NOPRT-NEXT:    ; return to shader part epilog
3751;
3752; GFX10-LABEL: image_load_mmo:
3753; GFX10:       ; %bb.0:
3754; GFX10-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm
3755; GFX10-NEXT:    v_mov_b32_e32 v2, 0
3756; GFX10-NEXT:    ds_write2_b32 v0, v2, v2 offset1:4
3757; GFX10-NEXT:    s_waitcnt vmcnt(0)
3758; GFX10-NEXT:    v_mov_b32_e32 v0, v1
3759; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3760; GFX10-NEXT:    ; return to shader part epilog
3761;
3762; GFX11-LABEL: image_load_mmo:
3763; GFX11:       ; %bb.0:
3764; GFX11-NEXT:    image_load v1, v[1:2], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm
3765; GFX11-NEXT:    v_mov_b32_e32 v2, 0
3766; GFX11-NEXT:    ds_store_2addr_b32 v0, v2, v2 offset1:4
3767; GFX11-NEXT:    s_waitcnt vmcnt(0)
3768; GFX11-NEXT:    v_mov_b32_e32 v0, v1
3769; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3770; GFX11-NEXT:    ; return to shader part epilog
3771  store float 0.000000e+00, float addrspace(3)* %lds
3772  %c0 = extractelement <2 x i32> %c, i32 0
3773  %c1 = extractelement <2 x i32> %c, i32 1
3774  %tex = call float @llvm.amdgcn.image.load.2d.f32.i32(i32 1, i32 %c0, i32 %c1, <8 x i32> %rsrc, i32 0, i32 0)
3775  %tmp2 = getelementptr float, float addrspace(3)* %lds, i32 4
3776  store float 0.000000e+00, float addrspace(3)* %tmp2
3777  ret float %tex
3778}
3779
3780declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3781declare {float,i32} @llvm.amdgcn.image.load.1d.f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3782declare {<2 x float>,i32} @llvm.amdgcn.image.load.1d.v2f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3783declare {<4 x float>,i32} @llvm.amdgcn.image.load.1d.v4f32i32.i32(i32, i32, <8 x i32>, i32, i32) #1
3784declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3785declare {<4 x float>,i32} @llvm.amdgcn.image.load.2d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3786declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3787declare {<4 x float>,i32} @llvm.amdgcn.image.load.3d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3788declare <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3789declare {<4 x float>,i32} @llvm.amdgcn.image.load.cube.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3790declare <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3791declare {<4 x float>,i32} @llvm.amdgcn.image.load.1darray.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3792declare <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3793declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darray.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3794declare <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3795declare {<4 x float>,i32} @llvm.amdgcn.image.load.2dmsaa.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3796declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3797declare {<4 x float>,i32} @llvm.amdgcn.image.load.2darraymsaa.v4f32i32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3798
3799declare <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3800declare <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3801declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.1d.v4f32i32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3802declare {<4 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v4f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3803declare {<2 x float>,i32} @llvm.amdgcn.image.load.mip.2d.v2f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3804declare {float,i32} @llvm.amdgcn.image.load.mip.2d.f32i32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3805declare <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3806declare <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3807declare <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i32(i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3808declare <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i32(i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #1
3809
3810declare void @llvm.amdgcn.image.store.1d.v4f32.i32(<4 x float>, i32, i32, <8 x i32>, i32, i32) #0
3811declare void @llvm.amdgcn.image.store.2d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3812declare void @llvm.amdgcn.image.store.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3813declare void @llvm.amdgcn.image.store.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3814declare void @llvm.amdgcn.image.store.1darray.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3815declare void @llvm.amdgcn.image.store.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3816declare void @llvm.amdgcn.image.store.2dmsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3817declare void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3818
3819declare void @llvm.amdgcn.image.store.mip.1d.v4f32.i32(<4 x float>, i32, i32, i32, <8 x i32>, i32, i32) #0
3820declare void @llvm.amdgcn.image.store.mip.2d.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3821declare void @llvm.amdgcn.image.store.mip.3d.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3822declare void @llvm.amdgcn.image.store.mip.cube.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3823declare void @llvm.amdgcn.image.store.mip.1darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3824declare void @llvm.amdgcn.image.store.mip.2darray.v4f32.i32(<4 x float>, i32, i32, i32, i32, i32, <8 x i32>, i32, i32) #0
3825
3826declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3827declare <3 x float> @llvm.amdgcn.image.getresinfo.1d.v3f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3828declare <2 x float> @llvm.amdgcn.image.getresinfo.1d.v2f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3829declare float @llvm.amdgcn.image.getresinfo.1d.f32.i32(i32 immarg, i32, <8 x i32>, i32 immarg, i32 immarg) #1
3830declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3831declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3832declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3833declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3834declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3835declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3836declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #2
3837
3838declare float @llvm.amdgcn.image.load.1d.f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3839declare float @llvm.amdgcn.image.load.2d.f32.i32(i32, i32, i32, <8 x i32>, i32, i32) #1
3840declare <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i32(i32, i32, <8 x i32>, i32, i32) #1
3841declare void @llvm.amdgcn.image.store.1d.f32.i32(float, i32, i32, <8 x i32>, i32, i32) #0
3842declare void @llvm.amdgcn.image.store.1d.v2f32.i32(<2 x float>, i32, i32, <8 x i32>, i32, i32) #0
3843
3844attributes #0 = { nounwind }
3845attributes #1 = { nounwind readonly }
3846attributes #2 = { nounwind readnone }
3847