• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX9 %s
3; RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10 %s
4
5define amdgpu_ps void @store_f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
6; GFX9-LABEL: store_f32_1d:
7; GFX9:       ; %bb.0: ; %main_body
8; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x1 unorm a16
9; GFX9-NEXT:    s_endpgm
10;
11; GFX10-LABEL: store_f32_1d:
12; GFX10:       ; %bb.0: ; %main_body
13; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_1D unorm a16
14; GFX10-NEXT:    s_endpgm
15main_body:
16  %x = extractelement <2 x i16> %coords, i32 0
17  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 1, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
18  ret void
19}
20
21define amdgpu_ps void @store_v2f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
22; GFX9-LABEL: store_v2f32_1d:
23; GFX9:       ; %bb.0: ; %main_body
24; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x3 unorm a16
25; GFX9-NEXT:    s_endpgm
26;
27; GFX10-LABEL: store_v2f32_1d:
28; GFX10:       ; %bb.0: ; %main_body
29; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_1D unorm a16
30; GFX10-NEXT:    s_endpgm
31main_body:
32  %x = extractelement <2 x i16> %coords, i32 0
33  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 3, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
34  ret void
35}
36
37define amdgpu_ps void @store_v3f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
38; GFX9-LABEL: store_v3f32_1d:
39; GFX9:       ; %bb.0: ; %main_body
40; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x7 unorm a16
41; GFX9-NEXT:    s_endpgm
42;
43; GFX10-LABEL: store_v3f32_1d:
44; GFX10:       ; %bb.0: ; %main_body
45; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_1D unorm a16
46; GFX10-NEXT:    s_endpgm
47main_body:
48  %x = extractelement <2 x i16> %coords, i32 0
49  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 7, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
50  ret void
51}
52
53define amdgpu_ps void @store_v4f32_1d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
54; GFX9-LABEL: store_v4f32_1d:
55; GFX9:       ; %bb.0: ; %main_body
56; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0xf unorm a16
57; GFX9-NEXT:    s_endpgm
58;
59; GFX10-LABEL: store_v4f32_1d:
60; GFX10:       ; %bb.0: ; %main_body
61; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_1D unorm a16
62; GFX10-NEXT:    s_endpgm
63main_body:
64  %x = extractelement <2 x i16> %coords, i32 0
65  call void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float> %val, i32 15, i16 %x, <8 x i32> %rsrc, i32 0, i32 0)
66  ret void
67}
68
69define amdgpu_ps void @store_f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
70; GFX9-LABEL: store_f32_2d:
71; GFX9:       ; %bb.0: ; %main_body
72; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x1 unorm a16
73; GFX9-NEXT:    s_endpgm
74;
75; GFX10-LABEL: store_f32_2d:
76; GFX10:       ; %bb.0: ; %main_body
77; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_2D unorm a16
78; GFX10-NEXT:    s_endpgm
79main_body:
80  %x = extractelement <2 x i16> %coords, i32 0
81  %y = extractelement <2 x i16> %coords, i32 1
82  call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 1, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
83  ret void
84}
85
86define amdgpu_ps void @store_v2f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
87; GFX9-LABEL: store_v2f32_2d:
88; GFX9:       ; %bb.0: ; %main_body
89; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x3 unorm a16
90; GFX9-NEXT:    s_endpgm
91;
92; GFX10-LABEL: store_v2f32_2d:
93; GFX10:       ; %bb.0: ; %main_body
94; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_2D unorm a16
95; GFX10-NEXT:    s_endpgm
96main_body:
97  %x = extractelement <2 x i16> %coords, i32 0
98  %y = extractelement <2 x i16> %coords, i32 1
99  call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 3, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
100  ret void
101}
102
103define amdgpu_ps void @store_v3f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
104; GFX9-LABEL: store_v3f32_2d:
105; GFX9:       ; %bb.0: ; %main_body
106; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x7 unorm a16
107; GFX9-NEXT:    s_endpgm
108;
109; GFX10-LABEL: store_v3f32_2d:
110; GFX10:       ; %bb.0: ; %main_body
111; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_2D unorm a16
112; GFX10-NEXT:    s_endpgm
113main_body:
114  %x = extractelement <2 x i16> %coords, i32 0
115  %y = extractelement <2 x i16> %coords, i32 1
116  call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 7, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
117  ret void
118}
119
120define amdgpu_ps void @store_v4f32_2d(<8 x i32> inreg %rsrc, <2 x i16> %coords, <4 x float> %val) {
121; GFX9-LABEL: store_v4f32_2d:
122; GFX9:       ; %bb.0: ; %main_body
123; GFX9-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0xf unorm a16
124; GFX9-NEXT:    s_endpgm
125;
126; GFX10-LABEL: store_v4f32_2d:
127; GFX10:       ; %bb.0: ; %main_body
128; GFX10-NEXT:    image_store v[1:4], v0, s[0:7] dmask:0xf dim:SQ_RSRC_IMG_2D unorm a16
129; GFX10-NEXT:    s_endpgm
130main_body:
131  %x = extractelement <2 x i16> %coords, i32 0
132  %y = extractelement <2 x i16> %coords, i32 1
133  call void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float> %val, i32 15, i16 %x, i16 %y, <8 x i32> %rsrc, i32 0, i32 0)
134  ret void
135}
136
137define amdgpu_ps void @store_f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) {
138; GFX9-LABEL: store_f32_3d:
139; GFX9:       ; %bb.0: ; %main_body
140; GFX9-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0x1 unorm a16
141; GFX9-NEXT:    s_endpgm
142;
143; GFX10-LABEL: store_f32_3d:
144; GFX10:       ; %bb.0: ; %main_body
145; GFX10-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0x1 dim:SQ_RSRC_IMG_3D unorm a16
146; GFX10-NEXT:    s_endpgm
147main_body:
148  %x = extractelement <2 x i16> %coords_lo, i32 0
149  %y = extractelement <2 x i16> %coords_lo, i32 1
150  %z = extractelement <2 x i16> %coords_hi, i32 0
151  call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 1, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
152  ret void
153}
154
155define amdgpu_ps void @store_v2f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) {
156; GFX9-LABEL: store_v2f32_3d:
157; GFX9:       ; %bb.0: ; %main_body
158; GFX9-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0x3 unorm a16
159; GFX9-NEXT:    s_endpgm
160;
161; GFX10-LABEL: store_v2f32_3d:
162; GFX10:       ; %bb.0: ; %main_body
163; GFX10-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0x3 dim:SQ_RSRC_IMG_3D unorm a16
164; GFX10-NEXT:    s_endpgm
165main_body:
166  %x = extractelement <2 x i16> %coords_lo, i32 0
167  %y = extractelement <2 x i16> %coords_lo, i32 1
168  %z = extractelement <2 x i16> %coords_hi, i32 0
169  call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 3, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
170  ret void
171}
172
173define amdgpu_ps void @store_v3f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) {
174; GFX9-LABEL: store_v3f32_3d:
175; GFX9:       ; %bb.0: ; %main_body
176; GFX9-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0x7 unorm a16
177; GFX9-NEXT:    s_endpgm
178;
179; GFX10-LABEL: store_v3f32_3d:
180; GFX10:       ; %bb.0: ; %main_body
181; GFX10-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0x7 dim:SQ_RSRC_IMG_3D unorm a16
182; GFX10-NEXT:    s_endpgm
183main_body:
184  %x = extractelement <2 x i16> %coords_lo, i32 0
185  %y = extractelement <2 x i16> %coords_lo, i32 1
186  %z = extractelement <2 x i16> %coords_hi, i32 0
187  call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 7, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
188  ret void
189}
190
191define amdgpu_ps void @store_v4f32_3d(<8 x i32> inreg %rsrc, <2 x i16> %coords_lo, <2 x i16> %coords_hi, <4 x float> %val) {
192; GFX9-LABEL: store_v4f32_3d:
193; GFX9:       ; %bb.0: ; %main_body
194; GFX9-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0xf unorm a16
195; GFX9-NEXT:    s_endpgm
196;
197; GFX10-LABEL: store_v4f32_3d:
198; GFX10:       ; %bb.0: ; %main_body
199; GFX10-NEXT:    image_store v[2:5], v[0:1], s[0:7] dmask:0xf dim:SQ_RSRC_IMG_3D unorm a16
200; GFX10-NEXT:    s_endpgm
201main_body:
202  %x = extractelement <2 x i16> %coords_lo, i32 0
203  %y = extractelement <2 x i16> %coords_lo, i32 1
204  %z = extractelement <2 x i16> %coords_hi, i32 0
205  call void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float> %val, i32 15, i16 %x, i16 %y, i16 %z, <8 x i32> %rsrc, i32 0, i32 0)
206  ret void
207}
208
209declare void @llvm.amdgcn.image.store.1d.v4f32.i16(<4 x float>, i32, i16, <8 x i32>, i32, i32) #2
210declare void @llvm.amdgcn.image.store.2d.v4f32.i16(<4 x float>, i32, i16, i16, <8 x i32>, i32, i32) #2
211declare void @llvm.amdgcn.image.store.3d.v4f32.i16(<4 x float>, i32, i16, i16, i16, <8 x i32>, i32, i32) #2
212
213attributes #0 = { nounwind }
214attributes #1 = { nounwind readonly }
215