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