1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -march=amdgcn -mcpu=gfx900 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX9 %s
3; RUN: llc -march=amdgcn -mcpu=gfx1010 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX10 %s
4; RUN: llc -march=amdgcn -mcpu=gfx1100 -show-mc-encoding < %s | FileCheck -check-prefixes=GFX11 %s
5
6define amdgpu_ps <4 x float> @load_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
7; GFX9-LABEL: load_1d:
8; GFX9:       ; %bb.0: ; %main_body
9; GFX9-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x00,0xf0,0x00,0x00,0x00,0x00]
10; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
11; GFX9-NEXT:    ; return to shader part epilog
12;
13; GFX10-LABEL: load_1d:
14; GFX10:       ; %bb.0: ; %main_body
15; GFX10-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
16; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
17; GFX10-NEXT:    ; return to shader part epilog
18;
19; GFX11-LABEL: load_1d:
20; GFX11:       ; %bb.0: ; %main_body
21; GFX11-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
22; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
23; GFX11-NEXT:    ; return to shader part epilog
24main_body:
25  %s = extractelement <2 x i16> %coords, i32 0
26  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
27  ret <4 x float> %v
28}
29
30define amdgpu_ps <4 x float> @load_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
31; GFX9-LABEL: load_2d:
32; GFX9:       ; %bb.0: ; %main_body
33; GFX9-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x00,0xf0,0x00,0x00,0x00,0x00]
34; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
35; GFX9-NEXT:    ; return to shader part epilog
36;
37; GFX10-LABEL: load_2d:
38; GFX10:       ; %bb.0: ; %main_body
39; GFX10-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x08,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
40; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
41; GFX10-NEXT:    ; return to shader part epilog
42;
43; GFX11-LABEL: load_2d:
44; GFX11:       ; %bb.0: ; %main_body
45; GFX11-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x84,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
46; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
47; GFX11-NEXT:    ; return to shader part epilog
48main_body:
49  %s = extractelement <2 x i16> %coords, i32 0
50  %t = extractelement <2 x i16> %coords, i32 1
51  %v = call <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i16(i32 15, i16 %s, i16 %t, <8 x i32> %rsrc, i32 0, i32 0)
52  ret <4 x float> %v
53}
54
55define amdgpu_ps <4 x float> @load_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
56; GFX9-LABEL: load_3d:
57; GFX9:       ; %bb.0: ; %main_body
58; GFX9-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x00,0xf0,0x00,0x00,0x00,0x00]
59; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
60; GFX9-NEXT:    ; return to shader part epilog
61;
62; GFX10-LABEL: load_3d:
63; GFX10:       ; %bb.0: ; %main_body
64; GFX10-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x10,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
65; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
66; GFX10-NEXT:    ; return to shader part epilog
67;
68; GFX11-LABEL: load_3d:
69; GFX11:       ; %bb.0: ; %main_body
70; GFX11-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x88,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
71; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
72; GFX11-NEXT:    ; return to shader part epilog
73main_body:
74  %s = extractelement <2 x i16> %coords_lo, i32 0
75  %t = extractelement <2 x i16> %coords_lo, i32 1
76  %r = extractelement <2 x i16> %coords_hi, i32 0
77  %v = call <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)
78  ret <4 x float> %v
79}
80
81define amdgpu_ps <4 x float> @load_cube(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
82; GFX9-LABEL: load_cube:
83; GFX9:       ; %bb.0: ; %main_body
84; GFX9-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x00,0xf0,0x00,0x00,0x00,0x00]
85; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
86; GFX9-NEXT:    ; return to shader part epilog
87;
88; GFX10-LABEL: load_cube:
89; GFX10:       ; %bb.0: ; %main_body
90; GFX10-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x18,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
91; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
92; GFX10-NEXT:    ; return to shader part epilog
93;
94; GFX11-LABEL: load_cube:
95; GFX11:       ; %bb.0: ; %main_body
96; GFX11-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x8c,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
97; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
98; GFX11-NEXT:    ; return to shader part epilog
99main_body:
100  %s = extractelement <2 x i16> %coords_lo, i32 0
101  %t = extractelement <2 x i16> %coords_lo, i32 1
102  %slice = extractelement <2 x i16> %coords_hi, i32 0
103  %v = call <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
104  ret <4 x float> %v
105}
106
107define amdgpu_ps <4 x float> @load_1darray(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
108; GFX9-LABEL: load_1darray:
109; GFX9:       ; %bb.0: ; %main_body
110; GFX9-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x00,0xf0,0x00,0x00,0x00,0x00]
111; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
112; GFX9-NEXT:    ; return to shader part epilog
113;
114; GFX10-LABEL: load_1darray:
115; GFX10:       ; %bb.0: ; %main_body
116; GFX10-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x20,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
117; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
118; GFX10-NEXT:    ; return to shader part epilog
119;
120; GFX11-LABEL: load_1darray:
121; GFX11:       ; %bb.0: ; %main_body
122; GFX11-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x90,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
123; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
124; GFX11-NEXT:    ; return to shader part epilog
125main_body:
126  %s = extractelement <2 x i16> %coords, i32 0
127  %slice = extractelement <2 x i16> %coords, i32 1
128  %v = call <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i16(i32 15, i16 %s, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
129  ret <4 x float> %v
130}
131
132define amdgpu_ps <4 x float> @load_2darray(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
133; GFX9-LABEL: load_2darray:
134; GFX9:       ; %bb.0: ; %main_body
135; GFX9-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x00,0xf0,0x00,0x00,0x00,0x00]
136; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
137; GFX9-NEXT:    ; return to shader part epilog
138;
139; GFX10-LABEL: load_2darray:
140; GFX10:       ; %bb.0: ; %main_body
141; GFX10-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x28,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
142; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
143; GFX10-NEXT:    ; return to shader part epilog
144;
145; GFX11-LABEL: load_2darray:
146; GFX11:       ; %bb.0: ; %main_body
147; GFX11-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x94,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
148; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
149; GFX11-NEXT:    ; return to shader part epilog
150main_body:
151  %s = extractelement <2 x i16> %coords_lo, i32 0
152  %t = extractelement <2 x i16> %coords_lo, i32 1
153  %slice = extractelement <2 x i16> %coords_hi, i32 0
154  %v = call <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
155  ret <4 x float> %v
156}
157
158define amdgpu_ps <4 x float> @load_2dmsaa(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
159; GFX9-LABEL: load_2dmsaa:
160; GFX9:       ; %bb.0: ; %main_body
161; GFX9-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x00,0xf0,0x00,0x00,0x00,0x00]
162; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
163; GFX9-NEXT:    ; return to shader part epilog
164;
165; GFX10-LABEL: load_2dmsaa:
166; GFX10:       ; %bb.0: ; %main_body
167; GFX10-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm a16 ; encoding: [0x30,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
168; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
169; GFX10-NEXT:    ; return to shader part epilog
170;
171; GFX11-LABEL: load_2dmsaa:
172; GFX11:       ; %bb.0: ; %main_body
173; GFX11-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm a16 ; encoding: [0x98,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
174; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
175; GFX11-NEXT:    ; return to shader part epilog
176main_body:
177  %s = extractelement <2 x i16> %coords_lo, i32 0
178  %t = extractelement <2 x i16> %coords_lo, i32 1
179  %fragid = extractelement <2 x i16> %coords_hi, i32 0
180  %v = call <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
181  ret <4 x float> %v
182}
183
184define amdgpu_ps <4 x float> @load_2darraymsaa(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
185; GFX9-LABEL: load_2darraymsaa:
186; GFX9:       ; %bb.0: ; %main_body
187; GFX9-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x00,0xf0,0x00,0x00,0x00,0x00]
188; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
189; GFX9-NEXT:    ; return to shader part epilog
190;
191; GFX10-LABEL: load_2darraymsaa:
192; GFX10:       ; %bb.0: ; %main_body
193; GFX10-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 ; encoding: [0x38,0x1f,0x00,0xf0,0x00,0x00,0x00,0x40]
194; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
195; GFX10-NEXT:    ; return to shader part epilog
196;
197; GFX11-LABEL: load_2darraymsaa:
198; GFX11:       ; %bb.0: ; %main_body
199; GFX11-NEXT:    image_load v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 ; encoding: [0x9c,0x0f,0x01,0xf0,0x00,0x00,0x00,0x00]
200; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
201; GFX11-NEXT:    ; return to shader part epilog
202main_body:
203  %s = extractelement <2 x i16> %coords_lo, i32 0
204  %t = extractelement <2 x i16> %coords_lo, i32 1
205  %slice = extractelement <2 x i16> %coords_hi, i32 0
206  %fragid = extractelement <2 x i16> %coords_hi, i32 1
207  %v = call <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
208  ret <4 x float> %v
209}
210
211define amdgpu_ps <4 x float> @load_mip_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
212; GFX9-LABEL: load_mip_1d:
213; GFX9:       ; %bb.0: ; %main_body
214; GFX9-NEXT:    image_load_mip v[0:3], v0, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x04,0xf0,0x00,0x00,0x00,0x00]
215; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
216; GFX9-NEXT:    ; return to shader part epilog
217;
218; GFX10-LABEL: load_mip_1d:
219; GFX10:       ; %bb.0: ; %main_body
220; GFX10-NEXT:    image_load_mip v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x1f,0x04,0xf0,0x00,0x00,0x00,0x40]
221; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
222; GFX10-NEXT:    ; return to shader part epilog
223;
224; GFX11-LABEL: load_mip_1d:
225; GFX11:       ; %bb.0: ; %main_body
226; GFX11-NEXT:    image_load_mip v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x0f,0x05,0xf0,0x00,0x00,0x00,0x00]
227; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
228; GFX11-NEXT:    ; return to shader part epilog
229main_body:
230  %s = extractelement <2 x i16> %coords, i32 0
231  %mip = extractelement <2 x i16> %coords, i32 1
232  %v = call <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i16(i32 15, i16 %s, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
233  ret <4 x float> %v
234}
235
236define amdgpu_ps <4 x float> @load_mip_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
237; GFX9-LABEL: load_mip_2d:
238; GFX9:       ; %bb.0: ; %main_body
239; GFX9-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x04,0xf0,0x00,0x00,0x00,0x00]
240; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
241; GFX9-NEXT:    ; return to shader part epilog
242;
243; GFX10-LABEL: load_mip_2d:
244; GFX10:       ; %bb.0: ; %main_body
245; GFX10-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x08,0x1f,0x04,0xf0,0x00,0x00,0x00,0x40]
246; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
247; GFX10-NEXT:    ; return to shader part epilog
248;
249; GFX11-LABEL: load_mip_2d:
250; GFX11:       ; %bb.0: ; %main_body
251; GFX11-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x84,0x0f,0x05,0xf0,0x00,0x00,0x00,0x00]
252; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
253; GFX11-NEXT:    ; return to shader part epilog
254main_body:
255  %s = extractelement <2 x i16> %coords_lo, i32 0
256  %t = extractelement <2 x i16> %coords_lo, i32 1
257  %mip = extractelement <2 x i16> %coords_hi, i32 0
258  %v = call <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
259  ret <4 x float> %v
260}
261
262define amdgpu_ps <4 x float> @load_mip_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
263; GFX9-LABEL: load_mip_3d:
264; GFX9:       ; %bb.0: ; %main_body
265; GFX9-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x04,0xf0,0x00,0x00,0x00,0x00]
266; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
267; GFX9-NEXT:    ; return to shader part epilog
268;
269; GFX10-LABEL: load_mip_3d:
270; GFX10:       ; %bb.0: ; %main_body
271; GFX10-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x10,0x1f,0x04,0xf0,0x00,0x00,0x00,0x40]
272; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
273; GFX10-NEXT:    ; return to shader part epilog
274;
275; GFX11-LABEL: load_mip_3d:
276; GFX11:       ; %bb.0: ; %main_body
277; GFX11-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x88,0x0f,0x05,0xf0,0x00,0x00,0x00,0x00]
278; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
279; GFX11-NEXT:    ; return to shader part epilog
280main_body:
281  %s = extractelement <2 x i16> %coords_lo, i32 0
282  %t = extractelement <2 x i16> %coords_lo, i32 1
283  %r = extractelement <2 x i16> %coords_hi, i32 0
284  %mip = extractelement <2 x i16> %coords_hi, i32 1
285  %v = call <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %r, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
286  ret <4 x float> %v
287}
288
289define amdgpu_ps <4 x float> @load_mip_cube(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
290; GFX9-LABEL: load_mip_cube:
291; GFX9:       ; %bb.0: ; %main_body
292; GFX9-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x04,0xf0,0x00,0x00,0x00,0x00]
293; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
294; GFX9-NEXT:    ; return to shader part epilog
295;
296; GFX10-LABEL: load_mip_cube:
297; GFX10:       ; %bb.0: ; %main_body
298; GFX10-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x18,0x1f,0x04,0xf0,0x00,0x00,0x00,0x40]
299; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
300; GFX10-NEXT:    ; return to shader part epilog
301;
302; GFX11-LABEL: load_mip_cube:
303; GFX11:       ; %bb.0: ; %main_body
304; GFX11-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x8c,0x0f,0x05,0xf0,0x00,0x00,0x00,0x00]
305; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
306; GFX11-NEXT:    ; return to shader part epilog
307main_body:
308  %s = extractelement <2 x i16> %coords_lo, i32 0
309  %t = extractelement <2 x i16> %coords_lo, i32 1
310  %slice = extractelement <2 x i16> %coords_hi, i32 0
311  %mip = extractelement <2 x i16> %coords_hi, i32 1
312  %v = call <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %slice, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
313  ret <4 x float> %v
314}
315
316define amdgpu_ps <4 x float> @load_mip_1darray(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
317; GFX9-LABEL: load_mip_1darray:
318; GFX9:       ; %bb.0: ; %main_body
319; GFX9-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x04,0xf0,0x00,0x00,0x00,0x00]
320; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
321; GFX9-NEXT:    ; return to shader part epilog
322;
323; GFX10-LABEL: load_mip_1darray:
324; GFX10:       ; %bb.0: ; %main_body
325; GFX10-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x20,0x1f,0x04,0xf0,0x00,0x00,0x00,0x40]
326; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
327; GFX10-NEXT:    ; return to shader part epilog
328;
329; GFX11-LABEL: load_mip_1darray:
330; GFX11:       ; %bb.0: ; %main_body
331; GFX11-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x90,0x0f,0x05,0xf0,0x00,0x00,0x00,0x00]
332; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
333; GFX11-NEXT:    ; return to shader part epilog
334main_body:
335  %s = extractelement <2 x i16> %coords_lo, i32 0
336  %slice = extractelement <2 x i16> %coords_lo, i32 1
337  %mip = extractelement <2 x i16> %coords_hi, i32 0
338  %v = call <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i16(i32 15, i16 %s, i16 %slice, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
339  ret <4 x float> %v
340}
341
342define amdgpu_ps <4 x float> @load_mip_2darray(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
343; GFX9-LABEL: load_mip_2darray:
344; GFX9:       ; %bb.0: ; %main_body
345; GFX9-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x04,0xf0,0x00,0x00,0x00,0x00]
346; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
347; GFX9-NEXT:    ; return to shader part epilog
348;
349; GFX10-LABEL: load_mip_2darray:
350; GFX10:       ; %bb.0: ; %main_body
351; GFX10-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x28,0x1f,0x04,0xf0,0x00,0x00,0x00,0x40]
352; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
353; GFX10-NEXT:    ; return to shader part epilog
354;
355; GFX11-LABEL: load_mip_2darray:
356; GFX11:       ; %bb.0: ; %main_body
357; GFX11-NEXT:    image_load_mip v[0:3], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x94,0x0f,0x05,0xf0,0x00,0x00,0x00,0x00]
358; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
359; GFX11-NEXT:    ; return to shader part epilog
360main_body:
361  %s = extractelement <2 x i16> %coords_lo, i32 0
362  %t = extractelement <2 x i16> %coords_lo, i32 1
363  %slice = extractelement <2 x i16> %coords_hi, i32 0
364  %mip = extractelement <2 x i16> %coords_hi, i32 1
365  %v = call <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i16(i32 15, i16 %s, i16 %t, i16 %slice, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
366  ret <4 x float> %v
367}
368
369define amdgpu_ps void @store_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) {
370; GFX9-LABEL: store_1d:
371; GFX9:       ; %bb.0: ; %main_body
372; GFX9-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x20,0xf0,0x04,0x00,0x00,0x00]
373; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
374;
375; GFX10-LABEL: store_1d:
376; GFX10:       ; %bb.0: ; %main_body
377; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
378; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
379;
380; GFX11-LABEL: store_1d:
381; GFX11:       ; %bb.0: ; %main_body
382; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
383; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
384main_body:
385  %s = extractelement <2 x i16> %coords, i32 0
386  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
387  ret void
388}
389
390define amdgpu_ps void @store_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) {
391; GFX9-LABEL: store_2d:
392; GFX9:       ; %bb.0: ; %main_body
393; GFX9-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x20,0xf0,0x04,0x00,0x00,0x00]
394; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
395;
396; GFX10-LABEL: store_2d:
397; GFX10:       ; %bb.0: ; %main_body
398; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x08,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
399; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
400;
401; GFX11-LABEL: store_2d:
402; GFX11:       ; %bb.0: ; %main_body
403; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x84,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
404; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
405main_body:
406  %s = extractelement <2 x i16> %coords, i32 0
407  %t = extractelement <2 x i16> %coords, i32 1
408  call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, <8 x i32> %rsrc, i32 0, i32 0)
409  ret void
410}
411
412define amdgpu_ps void @store_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
413; GFX9-LABEL: store_3d:
414; GFX9:       ; %bb.0: ; %main_body
415; GFX9-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x20,0xf0,0x04,0x00,0x00,0x00]
416; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
417;
418; GFX10-LABEL: store_3d:
419; GFX10:       ; %bb.0: ; %main_body
420; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x10,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
421; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
422;
423; GFX11-LABEL: store_3d:
424; GFX11:       ; %bb.0: ; %main_body
425; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x88,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
426; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
427main_body:
428  %s = extractelement <2 x i16> %coords_lo, i32 0
429  %t = extractelement <2 x i16> %coords_lo, i32 1
430  %r = extractelement <2 x i16> %coords_hi, i32 0
431  call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %r, <8 x i32> %rsrc, i32 0, i32 0)
432  ret void
433}
434
435define amdgpu_ps void @store_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
436; GFX9-LABEL: store_cube:
437; GFX9:       ; %bb.0: ; %main_body
438; GFX9-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x20,0xf0,0x04,0x00,0x00,0x00]
439; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
440;
441; GFX10-LABEL: store_cube:
442; GFX10:       ; %bb.0: ; %main_body
443; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x18,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
444; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
445;
446; GFX11-LABEL: store_cube:
447; GFX11:       ; %bb.0: ; %main_body
448; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x8c,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
449; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
450main_body:
451  %s = extractelement <2 x i16> %coords_lo, i32 0
452  %t = extractelement <2 x i16> %coords_lo, i32 1
453  %slice = extractelement <2 x i16> %coords_hi, i32 0
454  call void @llvm.amdgcn.image.store.cube.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
455  ret void
456}
457
458define amdgpu_ps void @store_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) {
459; GFX9-LABEL: store_1darray:
460; GFX9:       ; %bb.0: ; %main_body
461; GFX9-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x20,0xf0,0x04,0x00,0x00,0x00]
462; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
463;
464; GFX10-LABEL: store_1darray:
465; GFX10:       ; %bb.0: ; %main_body
466; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x20,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
467; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
468;
469; GFX11-LABEL: store_1darray:
470; GFX11:       ; %bb.0: ; %main_body
471; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x90,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
472; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
473main_body:
474  %s = extractelement <2 x i16> %coords, i32 0
475  %slice = extractelement <2 x i16> %coords, i32 1
476  call void @llvm.amdgcn.image.store.1darray.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
477  ret void
478}
479
480define amdgpu_ps void @store_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
481; GFX9-LABEL: store_2darray:
482; GFX9:       ; %bb.0: ; %main_body
483; GFX9-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x20,0xf0,0x04,0x00,0x00,0x00]
484; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
485;
486; GFX10-LABEL: store_2darray:
487; GFX10:       ; %bb.0: ; %main_body
488; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x28,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
489; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
490;
491; GFX11-LABEL: store_2darray:
492; GFX11:       ; %bb.0: ; %main_body
493; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x94,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
494; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
495main_body:
496  %s = extractelement <2 x i16> %coords_lo, i32 0
497  %t = extractelement <2 x i16> %coords_lo, i32 1
498  %slice = extractelement <2 x i16> %coords_hi, i32 0
499  call void @llvm.amdgcn.image.store.2darray.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %slice, <8 x i32> %rsrc, i32 0, i32 0)
500  ret void
501}
502
503define amdgpu_ps void @store_2dmsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
504; GFX9-LABEL: store_2dmsaa:
505; GFX9:       ; %bb.0: ; %main_body
506; GFX9-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x20,0xf0,0x04,0x00,0x00,0x00]
507; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
508;
509; GFX10-LABEL: store_2dmsaa:
510; GFX10:       ; %bb.0: ; %main_body
511; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm a16 ; encoding: [0x30,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
512; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
513;
514; GFX11-LABEL: store_2dmsaa:
515; GFX11:       ; %bb.0: ; %main_body
516; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm a16 ; encoding: [0x98,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
517; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
518main_body:
519  %s = extractelement <2 x i16> %coords_lo, i32 0
520  %t = extractelement <2 x i16> %coords_lo, i32 1
521  %fragid = extractelement <2 x i16> %coords_hi, i32 0
522  call void @llvm.amdgcn.image.store.2dmsaa.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
523  ret void
524}
525
526define amdgpu_ps void @store_2darraymsaa(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
527; GFX9-LABEL: store_2darraymsaa:
528; GFX9:       ; %bb.0: ; %main_body
529; GFX9-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x20,0xf0,0x04,0x00,0x00,0x00]
530; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
531;
532; GFX10-LABEL: store_2darraymsaa:
533; GFX10:       ; %bb.0: ; %main_body
534; GFX10-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 ; encoding: [0x38,0x1f,0x20,0xf0,0x04,0x00,0x00,0x40]
535; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
536;
537; GFX11-LABEL: store_2darraymsaa:
538; GFX11:       ; %bb.0: ; %main_body
539; GFX11-NEXT:    image_store v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 ; encoding: [0x9c,0x0f,0x19,0xf0,0x04,0x00,0x00,0x00]
540; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
541main_body:
542  %s = extractelement <2 x i16> %coords_lo, i32 0
543  %t = extractelement <2 x i16> %coords_lo, i32 1
544  %slice = extractelement <2 x i16> %coords_hi, i32 0
545  %fragid = extractelement <2 x i16> %coords_hi, i32 1
546  call void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %slice, i16 %fragid, <8 x i32> %rsrc, i32 0, i32 0)
547  ret void
548}
549
550define amdgpu_ps void @store_mip_1d(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) {
551; GFX9-LABEL: store_mip_1d:
552; GFX9:       ; %bb.0: ; %main_body
553; GFX9-NEXT:    image_store_mip v[0:3], v4, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x24,0xf0,0x04,0x00,0x00,0x00]
554; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
555;
556; GFX10-LABEL: store_mip_1d:
557; GFX10:       ; %bb.0: ; %main_body
558; GFX10-NEXT:    image_store_mip v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x1f,0x24,0xf0,0x04,0x00,0x00,0x40]
559; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
560;
561; GFX11-LABEL: store_mip_1d:
562; GFX11:       ; %bb.0: ; %main_body
563; GFX11-NEXT:    image_store_mip v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x0f,0x1d,0xf0,0x04,0x00,0x00,0x00]
564; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
565main_body:
566  %s = extractelement <2 x i16> %coords, i32 0
567  %mip = extractelement <2 x i16> %coords, i32 1
568  call void @llvm.amdgcn.image.store.mip.1d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
569  ret void
570}
571
572define amdgpu_ps void @store_mip_2d(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
573; GFX9-LABEL: store_mip_2d:
574; GFX9:       ; %bb.0: ; %main_body
575; GFX9-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x24,0xf0,0x04,0x00,0x00,0x00]
576; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
577;
578; GFX10-LABEL: store_mip_2d:
579; GFX10:       ; %bb.0: ; %main_body
580; GFX10-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x08,0x1f,0x24,0xf0,0x04,0x00,0x00,0x40]
581; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
582;
583; GFX11-LABEL: store_mip_2d:
584; GFX11:       ; %bb.0: ; %main_body
585; GFX11-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x84,0x0f,0x1d,0xf0,0x04,0x00,0x00,0x00]
586; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
587main_body:
588  %s = extractelement <2 x i16> %coords_lo, i32 0
589  %t = extractelement <2 x i16> %coords_lo, i32 1
590  %mip = extractelement <2 x i16> %coords_hi, i32 0
591  call void @llvm.amdgcn.image.store.mip.2d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
592  ret void
593}
594
595define amdgpu_ps void @store_mip_3d(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
596; GFX9-LABEL: store_mip_3d:
597; GFX9:       ; %bb.0: ; %main_body
598; GFX9-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x24,0xf0,0x04,0x00,0x00,0x00]
599; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
600;
601; GFX10-LABEL: store_mip_3d:
602; GFX10:       ; %bb.0: ; %main_body
603; GFX10-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x10,0x1f,0x24,0xf0,0x04,0x00,0x00,0x40]
604; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
605;
606; GFX11-LABEL: store_mip_3d:
607; GFX11:       ; %bb.0: ; %main_body
608; GFX11-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x88,0x0f,0x1d,0xf0,0x04,0x00,0x00,0x00]
609; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
610main_body:
611  %s = extractelement <2 x i16> %coords_lo, i32 0
612  %t = extractelement <2 x i16> %coords_lo, i32 1
613  %r = extractelement <2 x i16> %coords_hi, i32 0
614  %mip = extractelement <2 x i16> %coords_hi, i32 1
615  call void @llvm.amdgcn.image.store.mip.3d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %r, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
616  ret void
617}
618
619define amdgpu_ps void @store_mip_cube(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
620; GFX9-LABEL: store_mip_cube:
621; GFX9:       ; %bb.0: ; %main_body
622; GFX9-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x24,0xf0,0x04,0x00,0x00,0x00]
623; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
624;
625; GFX10-LABEL: store_mip_cube:
626; GFX10:       ; %bb.0: ; %main_body
627; GFX10-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x18,0x1f,0x24,0xf0,0x04,0x00,0x00,0x40]
628; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
629;
630; GFX11-LABEL: store_mip_cube:
631; GFX11:       ; %bb.0: ; %main_body
632; GFX11-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x8c,0x0f,0x1d,0xf0,0x04,0x00,0x00,0x00]
633; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
634main_body:
635  %s = extractelement <2 x i16> %coords_lo, i32 0
636  %t = extractelement <2 x i16> %coords_lo, i32 1
637  %slice = extractelement <2 x i16> %coords_hi, i32 0
638  %mip = extractelement <2 x i16> %coords_hi, i32 1
639  call void @llvm.amdgcn.image.store.mip.cube.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %slice, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
640  ret void
641}
642
643define amdgpu_ps void @store_mip_1darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
644; GFX9-LABEL: store_mip_1darray:
645; GFX9:       ; %bb.0: ; %main_body
646; GFX9-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x24,0xf0,0x04,0x00,0x00,0x00]
647; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
648;
649; GFX10-LABEL: store_mip_1darray:
650; GFX10:       ; %bb.0: ; %main_body
651; GFX10-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x20,0x1f,0x24,0xf0,0x04,0x00,0x00,0x40]
652; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
653;
654; GFX11-LABEL: store_mip_1darray:
655; GFX11:       ; %bb.0: ; %main_body
656; GFX11-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x90,0x0f,0x1d,0xf0,0x04,0x00,0x00,0x00]
657; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
658main_body:
659  %s = extractelement <2 x i16> %coords_lo, i32 0
660  %slice = extractelement <2 x i16> %coords_lo, i32 1
661  %mip = extractelement <2 x i16> %coords_hi, i32 0
662  call void @llvm.amdgcn.image.store.mip.1darray.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %slice, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
663  ret void
664}
665
666define amdgpu_ps void @store_mip_2darray(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords_lo, <2 x i16> %coords_hi) {
667; GFX9-LABEL: store_mip_2darray:
668; GFX9:       ; %bb.0: ; %main_body
669; GFX9-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x24,0xf0,0x04,0x00,0x00,0x00]
670; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
671;
672; GFX10-LABEL: store_mip_2darray:
673; GFX10:       ; %bb.0: ; %main_body
674; GFX10-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x28,0x1f,0x24,0xf0,0x04,0x00,0x00,0x40]
675; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
676;
677; GFX11-LABEL: store_mip_2darray:
678; GFX11:       ; %bb.0: ; %main_body
679; GFX11-NEXT:    image_store_mip v[0:3], v[4:5], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x94,0x0f,0x1d,0xf0,0x04,0x00,0x00,0x00]
680; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
681main_body:
682  %s = extractelement <2 x i16> %coords_lo, i32 0
683  %t = extractelement <2 x i16> %coords_lo, i32 1
684  %slice = extractelement <2 x i16> %coords_hi, i32 0
685  %mip = extractelement <2 x i16> %coords_hi, i32 1
686  call void @llvm.amdgcn.image.store.mip.2darray.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, i16 %t, i16 %slice, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
687  ret void
688}
689
690define amdgpu_ps <4 x float> @getresinfo_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
691; GFX9-LABEL: getresinfo_1d:
692; GFX9:       ; %bb.0: ; %main_body
693; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x38,0xf0,0x00,0x00,0x00,0x00]
694; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
695; GFX9-NEXT:    ; return to shader part epilog
696;
697; GFX10-LABEL: getresinfo_1d:
698; GFX10:       ; %bb.0: ; %main_body
699; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
700; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
701; GFX10-NEXT:    ; return to shader part epilog
702;
703; GFX11-LABEL: getresinfo_1d:
704; GFX11:       ; %bb.0: ; %main_body
705; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
706; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
707; GFX11-NEXT:    ; return to shader part epilog
708main_body:
709  %mip = extractelement <2 x i16> %coords, i32 0
710  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
711  ret <4 x float> %v
712}
713
714define amdgpu_ps <4 x float> @getresinfo_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
715; GFX9-LABEL: getresinfo_2d:
716; GFX9:       ; %bb.0: ; %main_body
717; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x38,0xf0,0x00,0x00,0x00,0x00]
718; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
719; GFX9-NEXT:    ; return to shader part epilog
720;
721; GFX10-LABEL: getresinfo_2d:
722; GFX10:       ; %bb.0: ; %main_body
723; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x08,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
724; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
725; GFX10-NEXT:    ; return to shader part epilog
726;
727; GFX11-LABEL: getresinfo_2d:
728; GFX11:       ; %bb.0: ; %main_body
729; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16 ; encoding: [0x84,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
730; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
731; GFX11-NEXT:    ; return to shader part epilog
732main_body:
733  %mip = extractelement <2 x i16> %coords, i32 0
734  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
735  ret <4 x float> %v
736}
737
738define amdgpu_ps <4 x float> @getresinfo_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
739; GFX9-LABEL: getresinfo_3d:
740; GFX9:       ; %bb.0: ; %main_body
741; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x38,0xf0,0x00,0x00,0x00,0x00]
742; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
743; GFX9-NEXT:    ; return to shader part epilog
744;
745; GFX10-LABEL: getresinfo_3d:
746; GFX10:       ; %bb.0: ; %main_body
747; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x10,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
748; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
749; GFX10-NEXT:    ; return to shader part epilog
750;
751; GFX11-LABEL: getresinfo_3d:
752; GFX11:       ; %bb.0: ; %main_body
753; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16 ; encoding: [0x88,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
754; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
755; GFX11-NEXT:    ; return to shader part epilog
756main_body:
757  %mip = extractelement <2 x i16> %coords, i32 0
758  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
759  ret <4 x float> %v
760}
761
762define amdgpu_ps <4 x float> @getresinfo_cube(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
763; GFX9-LABEL: getresinfo_cube:
764; GFX9:       ; %bb.0: ; %main_body
765; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x38,0xf0,0x00,0x00,0x00,0x00]
766; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
767; GFX9-NEXT:    ; return to shader part epilog
768;
769; GFX10-LABEL: getresinfo_cube:
770; GFX10:       ; %bb.0: ; %main_body
771; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x18,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
772; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
773; GFX10-NEXT:    ; return to shader part epilog
774;
775; GFX11-LABEL: getresinfo_cube:
776; GFX11:       ; %bb.0: ; %main_body
777; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_CUBE unorm a16 ; encoding: [0x8c,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
778; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
779; GFX11-NEXT:    ; return to shader part epilog
780main_body:
781  %mip = extractelement <2 x i16> %coords, i32 0
782  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
783  ret <4 x float> %v
784}
785
786define amdgpu_ps <4 x float> @getresinfo_1darray(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
787; GFX9-LABEL: getresinfo_1darray:
788; GFX9:       ; %bb.0: ; %main_body
789; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x38,0xf0,0x00,0x00,0x00,0x00]
790; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
791; GFX9-NEXT:    ; return to shader part epilog
792;
793; GFX10-LABEL: getresinfo_1darray:
794; GFX10:       ; %bb.0: ; %main_body
795; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x20,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
796; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
797; GFX10-NEXT:    ; return to shader part epilog
798;
799; GFX11-LABEL: getresinfo_1darray:
800; GFX11:       ; %bb.0: ; %main_body
801; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D_ARRAY unorm a16 ; encoding: [0x90,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
802; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
803; GFX11-NEXT:    ; return to shader part epilog
804main_body:
805  %mip = extractelement <2 x i16> %coords, i32 0
806  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
807  ret <4 x float> %v
808}
809
810define amdgpu_ps <4 x float> @getresinfo_2darray(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
811; GFX9-LABEL: getresinfo_2darray:
812; GFX9:       ; %bb.0: ; %main_body
813; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x38,0xf0,0x00,0x00,0x00,0x00]
814; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
815; GFX9-NEXT:    ; return to shader part epilog
816;
817; GFX10-LABEL: getresinfo_2darray:
818; GFX10:       ; %bb.0: ; %main_body
819; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x28,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
820; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
821; GFX10-NEXT:    ; return to shader part epilog
822;
823; GFX11-LABEL: getresinfo_2darray:
824; GFX11:       ; %bb.0: ; %main_body
825; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_ARRAY unorm a16 ; encoding: [0x94,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
826; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
827; GFX11-NEXT:    ; return to shader part epilog
828main_body:
829  %mip = extractelement <2 x i16> %coords, i32 0
830  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
831  ret <4 x float> %v
832}
833
834define amdgpu_ps <4 x float> @getresinfo_2dmsaa(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
835; GFX9-LABEL: getresinfo_2dmsaa:
836; GFX9:       ; %bb.0: ; %main_body
837; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 ; encoding: [0x00,0x9f,0x38,0xf0,0x00,0x00,0x00,0x00]
838; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
839; GFX9-NEXT:    ; return to shader part epilog
840;
841; GFX10-LABEL: getresinfo_2dmsaa:
842; GFX10:       ; %bb.0: ; %main_body
843; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm a16 ; encoding: [0x30,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
844; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
845; GFX10-NEXT:    ; return to shader part epilog
846;
847; GFX11-LABEL: getresinfo_2dmsaa:
848; GFX11:       ; %bb.0: ; %main_body
849; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA unorm a16 ; encoding: [0x98,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
850; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
851; GFX11-NEXT:    ; return to shader part epilog
852main_body:
853  %mip = extractelement <2 x i16> %coords, i32 0
854  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
855  ret <4 x float> %v
856}
857
858define amdgpu_ps <4 x float> @getresinfo_2darraymsaa(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
859; GFX9-LABEL: getresinfo_2darraymsaa:
860; GFX9:       ; %bb.0: ; %main_body
861; GFX9-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf unorm a16 da ; encoding: [0x00,0xdf,0x38,0xf0,0x00,0x00,0x00,0x00]
862; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
863; GFX9-NEXT:    ; return to shader part epilog
864;
865; GFX10-LABEL: getresinfo_2darraymsaa:
866; GFX10:       ; %bb.0: ; %main_body
867; GFX10-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 ; encoding: [0x38,0x1f,0x38,0xf0,0x00,0x00,0x00,0x40]
868; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
869; GFX10-NEXT:    ; return to shader part epilog
870;
871; GFX11-LABEL: getresinfo_2darraymsaa:
872; GFX11:       ; %bb.0: ; %main_body
873; GFX11-NEXT:    image_get_resinfo v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D_MSAA_ARRAY unorm a16 ; encoding: [0x9c,0x0f,0x5d,0xf0,0x00,0x00,0x00,0x00]
874; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
875; GFX11-NEXT:    ; return to shader part epilog
876main_body:
877  %mip = extractelement <2 x i16> %coords, i32 0
878  %v = call <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i16(i32 15, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
879  ret <4 x float> %v
880}
881
882define amdgpu_ps float @load_1d_V1(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
883; GFX9-LABEL: load_1d_V1:
884; GFX9:       ; %bb.0: ; %main_body
885; GFX9-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 unorm a16 ; encoding: [0x00,0x98,0x00,0xf0,0x00,0x00,0x00,0x00]
886; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
887; GFX9-NEXT:    ; return to shader part epilog
888;
889; GFX10-LABEL: load_1d_V1:
890; GFX10:       ; %bb.0: ; %main_body
891; GFX10-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x18,0x00,0xf0,0x00,0x00,0x00,0x40]
892; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
893; GFX10-NEXT:    ; return to shader part epilog
894;
895; GFX11-LABEL: load_1d_V1:
896; GFX11:       ; %bb.0: ; %main_body
897; GFX11-NEXT:    image_load v0, v0, s[0:7] dmask:0x8 dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x08,0x01,0xf0,0x00,0x00,0x00,0x00]
898; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
899; GFX11-NEXT:    ; return to shader part epilog
900main_body:
901  %s = extractelement <2 x i16> %coords, i32 0
902  %v = call float @llvm.amdgcn.image.load.1d.f32.i16(i32 8, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
903  ret float %v
904}
905
906define amdgpu_ps <2 x float> @load_1d_V2(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
907; GFX9-LABEL: load_1d_V2:
908; GFX9:       ; %bb.0: ; %main_body
909; GFX9-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 unorm a16 ; encoding: [0x00,0x99,0x00,0xf0,0x00,0x00,0x00,0x00]
910; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
911; GFX9-NEXT:    ; return to shader part epilog
912;
913; GFX10-LABEL: load_1d_V2:
914; GFX10:       ; %bb.0: ; %main_body
915; GFX10-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x19,0x00,0xf0,0x00,0x00,0x00,0x40]
916; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
917; GFX10-NEXT:    ; return to shader part epilog
918;
919; GFX11-LABEL: load_1d_V2:
920; GFX11:       ; %bb.0: ; %main_body
921; GFX11-NEXT:    image_load v[0:1], v0, s[0:7] dmask:0x9 dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x09,0x01,0xf0,0x00,0x00,0x00,0x00]
922; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
923; GFX11-NEXT:    ; return to shader part epilog
924main_body:
925  %s = extractelement <2 x i16> %coords, i32 0
926  %v = call <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i16(i32 9, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
927  ret <2 x float> %v
928}
929
930define amdgpu_ps void @store_1d_V1(<8 x i32> inreg %rsrc, float %vdata, <2 x i16> %coords) {
931; GFX9-LABEL: store_1d_V1:
932; GFX9:       ; %bb.0: ; %main_body
933; GFX9-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 unorm a16 ; encoding: [0x00,0x92,0x20,0xf0,0x01,0x00,0x00,0x00]
934; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
935;
936; GFX10-LABEL: store_1d_V1:
937; GFX10:       ; %bb.0: ; %main_body
938; GFX10-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x12,0x20,0xf0,0x01,0x00,0x00,0x40]
939; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
940;
941; GFX11-LABEL: store_1d_V1:
942; GFX11:       ; %bb.0: ; %main_body
943; GFX11-NEXT:    image_store v0, v1, s[0:7] dmask:0x2 dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x02,0x19,0xf0,0x01,0x00,0x00,0x00]
944; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
945main_body:
946  %s = extractelement <2 x i16> %coords, i32 0
947  call void @llvm.amdgcn.image.store.1d.f32.i16(float %vdata, i32 2, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
948  ret void
949}
950
951define amdgpu_ps void @store_1d_V2(<8 x i32> inreg %rsrc, <2 x float> %vdata, <2 x i16> %coords) {
952; GFX9-LABEL: store_1d_V2:
953; GFX9:       ; %bb.0: ; %main_body
954; GFX9-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc unorm a16 ; encoding: [0x00,0x9c,0x20,0xf0,0x02,0x00,0x00,0x00]
955; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
956;
957; GFX10-LABEL: store_1d_V2:
958; GFX10:       ; %bb.0: ; %main_body
959; GFX10-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x00,0x1c,0x20,0xf0,0x02,0x00,0x00,0x40]
960; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
961;
962; GFX11-LABEL: store_1d_V2:
963; GFX11:       ; %bb.0: ; %main_body
964; GFX11-NEXT:    image_store v[0:1], v2, s[0:7] dmask:0xc dim:SQ_RSRC_IMG_1D unorm a16 ; encoding: [0x80,0x0c,0x19,0xf0,0x02,0x00,0x00,0x00]
965; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
966main_body:
967  %s = extractelement <2 x i16> %coords, i32 0
968  call void @llvm.amdgcn.image.store.1d.v2f32.i16(<2 x float> %vdata, i32 12, i16 %s, <8 x i32> %rsrc, i32 0, i32 0)
969  ret void
970}
971
972define amdgpu_ps <4 x float> @load_1d_glc(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
973; GFX9-LABEL: load_1d_glc:
974; GFX9:       ; %bb.0: ; %main_body
975; GFX9-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc a16 ; encoding: [0x00,0xbf,0x00,0xf0,0x00,0x00,0x00,0x00]
976; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
977; GFX9-NEXT:    ; return to shader part epilog
978;
979; GFX10-LABEL: load_1d_glc:
980; GFX10:       ; %bb.0: ; %main_body
981; GFX10-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc a16 ; encoding: [0x00,0x3f,0x00,0xf0,0x00,0x00,0x00,0x40]
982; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
983; GFX10-NEXT:    ; return to shader part epilog
984;
985; GFX11-LABEL: load_1d_glc:
986; GFX11:       ; %bb.0: ; %main_body
987; GFX11-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc a16 ; encoding: [0x80,0x4f,0x01,0xf0,0x00,0x00,0x00,0x00]
988; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
989; GFX11-NEXT:    ; return to shader part epilog
990main_body:
991  %s = extractelement <2 x i16> %coords, i32 0
992  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 1)
993  ret <4 x float> %v
994}
995
996define amdgpu_ps <4 x float> @load_1d_slc(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
997; GFX9-LABEL: load_1d_slc:
998; GFX9:       ; %bb.0: ; %main_body
999; GFX9-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm slc a16 ; encoding: [0x00,0x9f,0x00,0xf2,0x00,0x00,0x00,0x00]
1000; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
1001; GFX9-NEXT:    ; return to shader part epilog
1002;
1003; GFX10-LABEL: load_1d_slc:
1004; GFX10:       ; %bb.0: ; %main_body
1005; GFX10-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc a16 ; encoding: [0x00,0x1f,0x00,0xf2,0x00,0x00,0x00,0x40]
1006; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
1007; GFX10-NEXT:    ; return to shader part epilog
1008;
1009; GFX11-LABEL: load_1d_slc:
1010; GFX11:       ; %bb.0: ; %main_body
1011; GFX11-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc a16 ; encoding: [0x80,0x1f,0x01,0xf0,0x00,0x00,0x00,0x00]
1012; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
1013; GFX11-NEXT:    ; return to shader part epilog
1014main_body:
1015  %s = extractelement <2 x i16> %coords, i32 0
1016  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 2)
1017  ret <4 x float> %v
1018}
1019
1020define amdgpu_ps <4 x float> @load_1d_glc_slc(<8 x i32> inreg %rsrc, <2 x i16> %coords) {
1021; GFX9-LABEL: load_1d_glc_slc:
1022; GFX9:       ; %bb.0: ; %main_body
1023; GFX9-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf unorm glc slc a16 ; encoding: [0x00,0xbf,0x00,0xf2,0x00,0x00,0x00,0x00]
1024; GFX9-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x0f,0x8c,0xbf]
1025; GFX9-NEXT:    ; return to shader part epilog
1026;
1027; GFX10-LABEL: load_1d_glc_slc:
1028; GFX10:       ; %bb.0: ; %main_body
1029; GFX10-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc a16 ; encoding: [0x00,0x3f,0x00,0xf2,0x00,0x00,0x00,0x40]
1030; GFX10-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0x70,0x3f,0x8c,0xbf]
1031; GFX10-NEXT:    ; return to shader part epilog
1032;
1033; GFX11-LABEL: load_1d_glc_slc:
1034; GFX11:       ; %bb.0: ; %main_body
1035; GFX11-NEXT:    image_load v[0:3], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc a16 ; encoding: [0x80,0x5f,0x01,0xf0,0x00,0x00,0x00,0x00]
1036; GFX11-NEXT:    s_waitcnt vmcnt(0) ; encoding: [0xf7,0x03,0x89,0xbf]
1037; GFX11-NEXT:    ; return to shader part epilog
1038main_body:
1039  %s = extractelement <2 x i16> %coords, i32 0
1040  %v = call <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 3)
1041  ret <4 x float> %v
1042}
1043
1044define amdgpu_ps void @store_1d_glc(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) {
1045; GFX9-LABEL: store_1d_glc:
1046; GFX9:       ; %bb.0: ; %main_body
1047; GFX9-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc a16 ; encoding: [0x00,0xbf,0x20,0xf0,0x04,0x00,0x00,0x00]
1048; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
1049;
1050; GFX10-LABEL: store_1d_glc:
1051; GFX10:       ; %bb.0: ; %main_body
1052; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc a16 ; encoding: [0x00,0x3f,0x20,0xf0,0x04,0x00,0x00,0x40]
1053; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
1054;
1055; GFX11-LABEL: store_1d_glc:
1056; GFX11:       ; %bb.0: ; %main_body
1057; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc a16 ; encoding: [0x80,0x4f,0x19,0xf0,0x04,0x00,0x00,0x00]
1058; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
1059main_body:
1060  %s = extractelement <2 x i16> %coords, i32 0
1061  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 1)
1062  ret void
1063}
1064
1065define amdgpu_ps void @store_1d_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) {
1066; GFX9-LABEL: store_1d_slc:
1067; GFX9:       ; %bb.0: ; %main_body
1068; GFX9-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm slc a16 ; encoding: [0x00,0x9f,0x20,0xf2,0x04,0x00,0x00,0x00]
1069; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
1070;
1071; GFX10-LABEL: store_1d_slc:
1072; GFX10:       ; %bb.0: ; %main_body
1073; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc a16 ; encoding: [0x00,0x1f,0x20,0xf2,0x04,0x00,0x00,0x40]
1074; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
1075;
1076; GFX11-LABEL: store_1d_slc:
1077; GFX11:       ; %bb.0: ; %main_body
1078; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm slc a16 ; encoding: [0x80,0x1f,0x19,0xf0,0x04,0x00,0x00,0x00]
1079; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
1080main_body:
1081  %s = extractelement <2 x i16> %coords, i32 0
1082  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 2)
1083  ret void
1084}
1085
1086define amdgpu_ps void @store_1d_glc_slc(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) {
1087; GFX9-LABEL: store_1d_glc_slc:
1088; GFX9:       ; %bb.0: ; %main_body
1089; GFX9-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf unorm glc slc a16 ; encoding: [0x00,0xbf,0x20,0xf2,0x04,0x00,0x00,0x00]
1090; GFX9-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
1091;
1092; GFX10-LABEL: store_1d_glc_slc:
1093; GFX10:       ; %bb.0: ; %main_body
1094; GFX10-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc a16 ; encoding: [0x00,0x3f,0x20,0xf2,0x04,0x00,0x00,0x40]
1095; GFX10-NEXT:    s_endpgm ; encoding: [0x00,0x00,0x81,0xbf]
1096;
1097; GFX11-LABEL: store_1d_glc_slc:
1098; GFX11:       ; %bb.0: ; %main_body
1099; GFX11-NEXT:    image_store v[0:3], v4, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm glc slc a16 ; encoding: [0x80,0x5f,0x19,0xf0,0x04,0x00,0x00,0x00]
1100; GFX11-NEXT:    s_endpgm ; encoding: [0x00,0x00,0xb0,0xbf]
1101main_body:
1102  %s = extractelement <2 x i16> %coords, i32 0
1103  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %vdata, i32 15, i16 %s, <8 x i32> %rsrc, i32 0, i32 3)
1104  ret void
1105}
1106
1107define amdgpu_ps <4 x float> @getresinfo_dmask0(<8 x i32> inreg %rsrc, <4 x float> %vdata, <2 x i16> %coords) #0 {
1108; GFX9-LABEL: getresinfo_dmask0:
1109; GFX9:       ; %bb.0: ; %main_body
1110; GFX9-NEXT:    ; return to shader part epilog
1111;
1112; GFX10-LABEL: getresinfo_dmask0:
1113; GFX10:       ; %bb.0: ; %main_body
1114; GFX10-NEXT:    ; return to shader part epilog
1115;
1116; GFX11-LABEL: getresinfo_dmask0:
1117; GFX11:       ; %bb.0: ; %main_body
1118; GFX11-NEXT:    ; return to shader part epilog
1119main_body:
1120  %mip = extractelement <2 x i16> %coords, i32 0
1121  %r = call <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i16(i32 0, i16 %mip, <8 x i32> %rsrc, i32 0, i32 0)
1122  ret <4 x float> %r
1123}
1124
1125declare <4 x float> @llvm.amdgcn.image.load.1d.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #1
1126declare <4 x float> @llvm.amdgcn.image.load.2d.v4f32.i16(i32, i16, i16, <8 x i32>, i32, i32) #1
1127declare <4 x float> @llvm.amdgcn.image.load.3d.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32) #1
1128declare <4 x float> @llvm.amdgcn.image.load.cube.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32) #1
1129declare <4 x float> @llvm.amdgcn.image.load.1darray.v4f32.i16(i32, i16, i16, <8 x i32>, i32, i32) #1
1130declare <4 x float> @llvm.amdgcn.image.load.2darray.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32) #1
1131declare <4 x float> @llvm.amdgcn.image.load.2dmsaa.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32) #1
1132declare <4 x float> @llvm.amdgcn.image.load.2darraymsaa.v4f32.i16(i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #1
1133
1134declare <4 x float> @llvm.amdgcn.image.load.mip.1d.v4f32.i16(i32, i16, i16, <8 x i32>, i32, i32) #1
1135declare <4 x float> @llvm.amdgcn.image.load.mip.2d.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32) #1
1136declare <4 x float> @llvm.amdgcn.image.load.mip.3d.v4f32.i16(i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #1
1137declare <4 x float> @llvm.amdgcn.image.load.mip.cube.v4f32.i16(i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #1
1138declare <4 x float> @llvm.amdgcn.image.load.mip.1darray.v4f32.i16(i32, i16, i16, i16, <8 x i32>, i32, i32) #1
1139declare <4 x float> @llvm.amdgcn.image.load.mip.2darray.v4f32.i16(i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #1
1140
1141declare void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float>, i32, i16, <8 x i32>, i32, i32) #0
1142declare void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float>, i32, i16, i16, <8 x i32>, i32, i32) #0
1143declare void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #0
1144declare void @llvm.amdgcn.image.store.cube.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #0
1145declare void @llvm.amdgcn.image.store.1darray.v4f32.i16(<4 x float>, i32, i16, i16, <8 x i32>, i32, i32) #0
1146declare void @llvm.amdgcn.image.store.2darray.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #0
1147declare void @llvm.amdgcn.image.store.2dmsaa.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #0
1148declare void @llvm.amdgcn.image.store.2darraymsaa.v4f32.i16(<4 x float>, i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #0
1149
1150declare void @llvm.amdgcn.image.store.mip.1d.v4f32.i16(<4 x float>, i32, i16, i16, <8 x i32>, i32, i32) #0
1151declare void @llvm.amdgcn.image.store.mip.2d.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #0
1152declare void @llvm.amdgcn.image.store.mip.3d.v4f32.i16(<4 x float>, i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #0
1153declare void @llvm.amdgcn.image.store.mip.cube.v4f32.i16(<4 x float>, i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #0
1154declare void @llvm.amdgcn.image.store.mip.1darray.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #0
1155declare void @llvm.amdgcn.image.store.mip.2darray.v4f32.i16(<4 x float>, i32, i16, i16, i16, i16, <8 x i32>, i32, i32) #0
1156
1157declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1158declare <4 x float> @llvm.amdgcn.image.getresinfo.2d.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1159declare <4 x float> @llvm.amdgcn.image.getresinfo.3d.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1160declare <4 x float> @llvm.amdgcn.image.getresinfo.cube.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1161declare <4 x float> @llvm.amdgcn.image.getresinfo.1darray.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1162declare <4 x float> @llvm.amdgcn.image.getresinfo.2darray.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1163declare <4 x float> @llvm.amdgcn.image.getresinfo.2dmsaa.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1164declare <4 x float> @llvm.amdgcn.image.getresinfo.2darraymsaa.v4f32.i16(i32, i16, <8 x i32>, i32, i32) #2
1165
1166declare float @llvm.amdgcn.image.load.1d.f32.i16(i32, i16, <8 x i32>, i32, i32) #1
1167declare float @llvm.amdgcn.image.load.2d.f32.i16(i32, i16, i16, <8 x i32>, i32, i32) #1
1168declare <2 x float> @llvm.amdgcn.image.load.1d.v2f32.i16(i32, i16, <8 x i32>, i32, i32) #1
1169declare void @llvm.amdgcn.image.store.1d.f32.i16(float, i32, i16, <8 x i32>, i32, i32) #0
1170declare void @llvm.amdgcn.image.store.1d.v2f32.i16(<2 x float>, i32, i16, <8 x i32>, i32, i32) #0
1171
1172attributes #0 = { nounwind }
1173attributes #1 = { nounwind readonly }
1174attributes #2 = { nounwind readnone }
1175