1 ; RUN: llc -O0 -mtriple=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VGPR %s
2 ; RUN: llc -O0 -mtriple=amdgcn -mcpu=fiji -amdgpu-spill-sgpr-to-vgpr=0 -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VMEM %s
4 ; GCN-LABEL: {{^}}spill_sgpr_x2:
6 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 0
7 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 1
10 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 0
11 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 1
14 ; VMEM: buffer_store_dword
15 ; VMEM: s_cbranch_scc1
17 ; VMEM: buffer_load_dword
18 define amdgpu_kernel void @spill_sgpr_x2(ptr addrspace(1) %out, i32 %in) #0 {
19 %wide.sgpr = call <2 x i32> asm sideeffect "; def $0", "=s" () #0
20 %cmp = icmp eq i32 %in, 0
21 br i1 %cmp, label %bb0, label %ret
24 call void asm sideeffect "; use $0", "s"(<2 x i32> %wide.sgpr) #0
31 ; GCN-LABEL: {{^}}spill_sgpr_x3:
33 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 0
34 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 1
35 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 2
36 ; VGPR: s_cbranch_scc1
38 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 0
39 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 1
40 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 2
43 ; VMEM: buffer_store_dword
44 ; VMEM: s_cbranch_scc1
46 ; VMEM: buffer_load_dword
47 define amdgpu_kernel void @spill_sgpr_x3(ptr addrspace(1) %out, i32 %in) #0 {
48 %wide.sgpr = call <3 x i32> asm sideeffect "; def $0", "=s" () #0
49 %cmp = icmp eq i32 %in, 0
50 br i1 %cmp, label %bb0, label %ret
53 call void asm sideeffect "; use $0", "s"(<3 x i32> %wide.sgpr) #0
60 ; GCN-LABEL: {{^}}spill_sgpr_x4:
62 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 0
63 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 1
64 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 2
65 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 3
66 ; VGPR: s_cbranch_scc1
68 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 0
69 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 1
70 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 2
71 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 3
74 ; VMEM: buffer_store_dword
75 ; VMEM: s_cbranch_scc1
77 ; VMEM: buffer_load_dword
78 define amdgpu_kernel void @spill_sgpr_x4(ptr addrspace(1) %out, i32 %in) #0 {
79 %wide.sgpr = call <4 x i32> asm sideeffect "; def $0", "=s" () #0
80 %cmp = icmp eq i32 %in, 0
81 br i1 %cmp, label %bb0, label %ret
84 call void asm sideeffect "; use $0", "s"(<4 x i32> %wide.sgpr) #0
91 ; GCN-LABEL: {{^}}spill_sgpr_x5:
93 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 0
94 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 1
95 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 2
96 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 3
97 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 4
98 ; VGPR: s_cbranch_scc1
100 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 0
101 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 1
102 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 2
103 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 3
104 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 4
107 ; VMEM: buffer_store_dword
108 ; VMEM: s_cbranch_scc1
110 ; VMEM: buffer_load_dword
111 define amdgpu_kernel void @spill_sgpr_x5(ptr addrspace(1) %out, i32 %in) #0 {
112 %wide.sgpr = call <5 x i32> asm sideeffect "; def $0", "=s" () #0
113 %cmp = icmp eq i32 %in, 0
114 br i1 %cmp, label %bb0, label %ret
117 call void asm sideeffect "; use $0", "s"(<5 x i32> %wide.sgpr) #0
124 ; GCN-LABEL: {{^}}spill_sgpr_x8:
126 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 0
127 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 1
128 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 2
129 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 3
130 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 4
131 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 5
132 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 6
133 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 7
134 ; VGPR: s_cbranch_scc1
136 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 0
137 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 1
138 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 2
139 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 3
140 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 4
141 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 5
142 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 6
143 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 7
145 ; VMEM: buffer_store_dword
146 ; VMEM: s_cbranch_scc1
148 ; VMEM: buffer_load_dword
149 define amdgpu_kernel void @spill_sgpr_x8(ptr addrspace(1) %out, i32 %in) #0 {
150 %wide.sgpr = call <8 x i32> asm sideeffect "; def $0", "=s" () #0
151 %cmp = icmp eq i32 %in, 0
152 br i1 %cmp, label %bb0, label %ret
155 call void asm sideeffect "; use $0", "s"(<8 x i32> %wide.sgpr) #0
162 ; GCN-LABEL: {{^}}spill_sgpr_x16:
164 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 0
165 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 1
166 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 2
167 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 3
168 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 4
169 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 5
170 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 6
171 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 7
172 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 8
173 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 9
174 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 10
175 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 11
176 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 12
177 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 13
178 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 14
179 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 15
180 ; VGPR: s_cbranch_scc1
182 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 0
183 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 1
184 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 2
185 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 3
186 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 4
187 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 5
188 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 6
189 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 7
190 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 8
191 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 9
192 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 10
193 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 11
194 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 12
195 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 13
196 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 14
197 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 15
199 ; VMEM: buffer_store_dword
200 ; VMEM: s_cbranch_scc1
202 ; VMEM: buffer_load_dword
203 define amdgpu_kernel void @spill_sgpr_x16(ptr addrspace(1) %out, i32 %in) #0 {
204 %wide.sgpr = call <16 x i32> asm sideeffect "; def $0", "=s" () #0
205 %cmp = icmp eq i32 %in, 0
206 br i1 %cmp, label %bb0, label %ret
209 call void asm sideeffect "; use $0", "s"(<16 x i32> %wide.sgpr) #0
216 ; GCN-LABEL: {{^}}spill_sgpr_x32:
218 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 0
219 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 1
220 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 2
221 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 3
222 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 4
223 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 5
224 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 6
225 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 7
226 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 8
227 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 9
228 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 10
229 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 11
230 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 12
231 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 13
232 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 14
233 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 15
234 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 16
235 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 17
236 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 18
237 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 19
238 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 20
239 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 21
240 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 22
241 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 23
242 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 24
243 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 25
244 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 26
245 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 27
246 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 28
247 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 29
248 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 30
249 ; VGPR: v_writelane_b32 v{{[0-9]+}}, s{{[0-9]+}}, 31
250 ; VGPR: s_cbranch_scc1
252 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 0
253 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 1
254 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 2
255 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 3
256 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 4
257 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 5
258 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 6
259 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 7
260 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 8
261 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 9
262 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 10
263 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 11
264 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 12
265 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 13
266 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 14
267 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 15
268 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 16
269 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 17
270 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 18
271 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 19
272 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 20
273 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 21
274 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 22
275 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 23
276 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 24
277 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 25
278 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 26
279 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 27
280 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 28
281 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 29
282 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 30
283 ; VGPR: v_readlane_b32 s{{[0-9]+}}, v{{[0-9]+}}, 31
285 ; VMEM: buffer_store_dword
286 ; VMEM: s_cbranch_scc1
288 ; VMEM: buffer_load_dword
289 define amdgpu_kernel void @spill_sgpr_x32(ptr addrspace(1) %out, i32 %in) #0 {
290 %wide.sgpr = call <32 x i32> asm sideeffect "; def $0", "=s" () #0
291 %cmp = icmp eq i32 %in, 0
292 br i1 %cmp, label %bb0, label %ret
295 call void asm sideeffect "; use $0", "s"(<32 x i32> %wide.sgpr) #0
302 attributes #0 = { nounwind }