1# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass=prologepilog %s -o - | FileCheck -check-prefixes=CHECK,GCN64,MUBUF %s
2# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -mattr=+wavefrontsize32,-wavefrontsize64 -verify-machineinstrs -run-pass=prologepilog %s -o - | FileCheck -check-prefixes=CHECK,GCN32,MUBUF %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -amdgpu-enable-flat-scratch -run-pass=prologepilog %s -o - | FileCheck -check-prefixes=CHECK,GCN64,FLATSCR %s
4
5
6# CHECK-LABEL: name: check_spill
7
8# FLATSCR: $sgpr33 = S_MOV_B32 0
9# FLATSCR: $flat_scr_lo = S_ADD_U32 $sgpr0, $sgpr11, implicit-def $scc
10# FLATSCR: $flat_scr_hi = S_ADDC_U32 $sgpr1, 0, implicit-def $scc, implicit $scc
11
12# S32 with kill
13# CHECK: V_WRITELANE
14# CHECK: $sgpr12 = S_MOV_B32 $exec_lo
15# CHECK: $exec_lo = S_MOV_B32 1
16# MUBUF:   BUFFER_STORE_DWORD_OFFSET killed $vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 4
17# FLATSCR: SCRATCH_STORE_DWORD_SADDR killed $vgpr{{[0-9]+}}, $sgpr33, 4
18# CHECK: $exec_lo = S_MOV_B32 killed $sgpr12
19
20# S32 without kill
21# CHECK: V_WRITELANE
22# CHECK: $sgpr12 = S_MOV_B32 $exec_lo
23# CHECK: $exec_lo = S_MOV_B32 1
24# MUBUF:   BUFFER_STORE_DWORD_OFFSET $vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 4
25# FLATSCR: SCRATCH_STORE_DWORD_SADDR $vgpr{{[0-9]+}}, $sgpr33, 4
26# CHECK: $sgpr12 = V_READLANE
27
28# S64 with kill
29# CHECK: V_WRITELANE
30# CHECK: V_WRITELANE
31# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
32# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
33# GCN32: $exec_lo = S_MOV_B32 3
34# GCN64: $exec = S_MOV_B64 3
35# MUBUF:   BUFFER_STORE_DWORD_OFFSET killed $vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 8
36# FLATSCR: SCRATCH_STORE_DWORD_SADDR killed $vgpr{{[0-9]+}}, $sgpr33, 8
37# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
38# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
39
40# S64 without kill
41# CHECK: V_WRITELANE
42# CHECK: V_WRITELANE
43# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
44# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
45# GCN32: $exec_lo = S_MOV_B32 3
46# GCN64: $exec = S_MOV_B64 3
47# MUBUF:   BUFFER_STORE_DWORD_OFFSET $vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 8
48# FLATSCR: SCRATCH_STORE_DWORD_SADDR $vgpr{{[0-9]+}}, $sgpr33, 8
49# GCN32: $exec_lo = S_MOV_B32 $sgpr12
50# GCN64: $exec = S_MOV_B64 $sgpr12_sgpr13
51# GCN64: $sgpr13 = V_READLANE
52# CHECK: $sgpr12 = V_READLANE
53
54# S96
55# CHECK: V_WRITELANE
56# CHECK: V_WRITELANE
57# CHECK: V_WRITELANE
58# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
59# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
60# GCN32: $exec_lo = S_MOV_B32 7
61# GCN64: $exec = S_MOV_B64 7
62# MUBUF:   BUFFER_STORE_DWORD_OFFSET killed $vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 16
63# FLATSCR: SCRATCH_STORE_DWORD_SADDR killed $vgpr{{[0-9]+}}, $sgpr33, 16
64# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
65# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
66
67# S128
68# CHECK: V_WRITELANE
69# CHECK: V_WRITELANE
70# CHECK: V_WRITELANE
71# CHECK: V_WRITELANE
72# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
73# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
74# GCN32: $exec_lo = S_MOV_B32 15
75# GCN64: $exec = S_MOV_B64 15
76# MUBUF:   BUFFER_STORE_DWORD_OFFSET killed $vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 28
77# FLATSCR: SCRATCH_STORE_DWORD_SADDR killed $vgpr{{[0-9]+}}, $sgpr33, 28
78# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
79# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
80
81# S160
82# CHECK: V_WRITELANE
83# CHECK: V_WRITELANE
84# CHECK: V_WRITELANE
85# CHECK: V_WRITELANE
86# CHECK: V_WRITELANE
87# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
88# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
89# GCN32: $exec_lo = S_MOV_B32 31
90# GCN64: $exec = S_MOV_B64 31
91# MUBUF:   BUFFER_STORE_DWORD_OFFSET {{(killed )?}}$vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 44
92# FLATSCR: SCRATCH_STORE_DWORD_SADDR {{(killed )?}}$vgpr{{[0-9]+}}, $sgpr33, 44
93# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
94# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
95
96# S256
97# CHECK: V_WRITELANE
98# CHECK: V_WRITELANE
99# CHECK: V_WRITELANE
100# CHECK: V_WRITELANE
101# CHECK: V_WRITELANE
102# CHECK: V_WRITELANE
103# CHECK: V_WRITELANE
104# CHECK: V_WRITELANE
105# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
106# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
107# GCN32: $exec_lo = S_MOV_B32 255
108# GCN64: $exec = S_MOV_B64 255
109# MUBUF:   BUFFER_STORE_DWORD_OFFSET {{(killed )?}}$vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 64
110# FLATSCR: SCRATCH_STORE_DWORD_SADDR {{(killed )?}}$vgpr{{[0-9]+}}, $sgpr33, 64
111# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
112# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
113
114# S512
115# CHECK: V_WRITELANE
116# CHECK: V_WRITELANE
117# CHECK: V_WRITELANE
118# CHECK: V_WRITELANE
119# CHECK: V_WRITELANE
120# CHECK: V_WRITELANE
121# CHECK: V_WRITELANE
122# CHECK: V_WRITELANE
123# CHECK: V_WRITELANE
124# CHECK: V_WRITELANE
125# CHECK: V_WRITELANE
126# CHECK: V_WRITELANE
127# CHECK: V_WRITELANE
128# CHECK: V_WRITELANE
129# CHECK: V_WRITELANE
130# CHECK: V_WRITELANE
131# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
132# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
133# GCN32: $exec_lo = S_MOV_B32 65535
134# GCN64: $exec = S_MOV_B64 65535
135# MUBUF:   BUFFER_STORE_DWORD_OFFSET {{(killed )?}}$vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 96
136# FLATSCR: SCRATCH_STORE_DWORD_SADDR {{(killed )?}}$vgpr{{[0-9]+}}, $sgpr33, 96
137# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
138# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
139
140# S1024
141# CHECK: V_WRITELANE
142# CHECK: V_WRITELANE
143# CHECK: V_WRITELANE
144# CHECK: V_WRITELANE
145# CHECK: V_WRITELANE
146# CHECK: V_WRITELANE
147# CHECK: V_WRITELANE
148# CHECK: V_WRITELANE
149# CHECK: V_WRITELANE
150# CHECK: V_WRITELANE
151# CHECK: V_WRITELANE
152# CHECK: V_WRITELANE
153# CHECK: V_WRITELANE
154# CHECK: V_WRITELANE
155# CHECK: V_WRITELANE
156# CHECK: V_WRITELANE
157# CHECK: V_WRITELANE
158# CHECK: V_WRITELANE
159# CHECK: V_WRITELANE
160# CHECK: V_WRITELANE
161# CHECK: V_WRITELANE
162# CHECK: V_WRITELANE
163# CHECK: V_WRITELANE
164# CHECK: V_WRITELANE
165# CHECK: V_WRITELANE
166# CHECK: V_WRITELANE
167# CHECK: V_WRITELANE
168# CHECK: V_WRITELANE
169# CHECK: V_WRITELANE
170# CHECK: V_WRITELANE
171# CHECK: V_WRITELANE
172# CHECK: V_WRITELANE
173# GCN32: $sgpr64 = S_MOV_B32 $exec_lo
174# GCN64: $sgpr64_sgpr65 = S_MOV_B64 $exec
175# GCN32: $exec_lo = S_MOV_B32 4294967295
176# GCN64: $exec = S_MOV_B64 4294967295
177# MUBUF:   BUFFER_STORE_DWORD_OFFSET {{(killed )?}}$vgpr{{[0-9]+}}, ${{(sgpr[0-9_]+)*}}, $sgpr33, 160
178# FLATSCR: SCRATCH_STORE_DWORD_SADDR {{(killed )?}}$vgpr{{[0-9]+}}, $sgpr33, 160
179# GCN32: $exec_lo = S_MOV_B32 killed $sgpr64
180# GCN64: $exec = S_MOV_B64 killed $sgpr64_sgpr65
181
182--- |
183
184  define amdgpu_kernel void @check_spill() #0 {
185    ret void
186  }
187
188  define amdgpu_kernel void @check_reload() #0 {
189    ret void
190  }
191
192  attributes #0 = {  "frame-pointer"="all" }
193...
194---
195name:            check_spill
196tracksRegLiveness: true
197liveins:
198  - { reg: '$sgpr4_sgpr5' }
199  - { reg: '$sgpr6_sgpr7' }
200  - { reg: '$sgpr8' }
201frameInfo:
202  maxAlignment:    4
203stack:
204  - { id: 0, type: spill-slot, size: 4, alignment: 4 }
205  - { id: 1, type: spill-slot, size: 8, alignment: 4 }
206  - { id: 2, type: spill-slot, size: 12, alignment: 4 }
207  - { id: 3, type: spill-slot, size: 16, alignment: 4 }
208  - { id: 4, type: spill-slot, size: 20, alignment: 4 }
209  - { id: 5, type: spill-slot, size: 32, alignment: 4 }
210  - { id: 6, type: spill-slot, size: 64, alignment: 4 }
211  - { id: 7, type: spill-slot, size: 128, alignment: 4 }
212machineFunctionInfo:
213  explicitKernArgSize: 660
214  maxKernArgAlign: 4
215  isEntryFunction: true
216  waveLimiter:     true
217  scratchRSrcReg:  '$sgpr96_sgpr97_sgpr98_sgpr99'
218  stackPtrOffsetReg: '$sgpr32'
219  frameOffsetReg: '$sgpr33'
220  argumentInfo:
221    flatScratchInit: { reg: '$sgpr0_sgpr1' }
222    dispatchPtr:     { reg: '$sgpr2_sgpr3' }
223    privateSegmentBuffer: { reg: '$sgpr4_sgpr5_sgpr6_sgpr7' }
224    kernargSegmentPtr: { reg: '$sgpr8_sgpr9' }
225    workGroupIDX:    { reg: '$sgpr10' }
226    privateSegmentWaveByteOffset: { reg: '$sgpr11' }
227body:             |
228  bb.0:
229    liveins: $sgpr8, $sgpr4_sgpr5, $sgpr6_sgpr7
230
231    renamable $sgpr12 = IMPLICIT_DEF
232    SI_SPILL_S32_SAVE killed $sgpr12, %stack.0, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
233
234    renamable $sgpr12 = IMPLICIT_DEF
235    SI_SPILL_S32_SAVE $sgpr12, %stack.0, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
236
237    renamable $sgpr12_sgpr13 = IMPLICIT_DEF
238    SI_SPILL_S64_SAVE killed $sgpr12_sgpr13, %stack.1, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
239
240    renamable $sgpr12_sgpr13 = IMPLICIT_DEF
241    SI_SPILL_S64_SAVE $sgpr12_sgpr13, %stack.1, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
242
243    renamable $sgpr12_sgpr13_sgpr14 = IMPLICIT_DEF
244    SI_SPILL_S96_SAVE killed $sgpr12_sgpr13_sgpr14, %stack.2, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
245
246    renamable $sgpr12_sgpr13_sgpr14_sgpr15 = IMPLICIT_DEF
247    SI_SPILL_S128_SAVE killed $sgpr12_sgpr13_sgpr14_sgpr15, %stack.3, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
248
249    renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16 = IMPLICIT_DEF
250    SI_SPILL_S160_SAVE killed $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16, %stack.4, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
251
252    renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = IMPLICIT_DEF
253    SI_SPILL_S256_SAVE killed $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19, %stack.5, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
254
255    renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27 = IMPLICIT_DEF
256    SI_SPILL_S512_SAVE killed $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27, %stack.6, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
257
258    renamable $sgpr64_sgpr65_sgpr66_sgpr67_sgpr68_sgpr69_sgpr70_sgpr71_sgpr72_sgpr73_sgpr74_sgpr75_sgpr76_sgpr77_sgpr78_sgpr79_sgpr80_sgpr81_sgpr82_sgpr83_sgpr84_sgpr85_sgpr86_sgpr87_sgpr88_sgpr89_sgpr90_sgpr91_sgpr92_sgpr93_sgpr94_sgpr95 = IMPLICIT_DEF
259    SI_SPILL_S1024_SAVE killed $sgpr64_sgpr65_sgpr66_sgpr67_sgpr68_sgpr69_sgpr70_sgpr71_sgpr72_sgpr73_sgpr74_sgpr75_sgpr76_sgpr77_sgpr78_sgpr79_sgpr80_sgpr81_sgpr82_sgpr83_sgpr84_sgpr85_sgpr86_sgpr87_sgpr88_sgpr89_sgpr90_sgpr91_sgpr92_sgpr93_sgpr94_sgpr95, %stack.7, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
260
261
262# CHECK-LABEL: name: check_reload
263
264# FLATSCR: $sgpr33 = S_MOV_B32 0
265# FLATSCR: $flat_scr_lo = S_ADD_U32 $sgpr0, $sgpr11, implicit-def $scc
266# FLATSCR: $flat_scr_hi = S_ADDC_U32 $sgpr1, 0, implicit-def $scc, implicit $scc
267
268# S32
269# CHECK: $sgpr12 = S_MOV_B32 $exec_lo
270# CHECK: $exec_lo = S_MOV_B32 1
271# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 4
272# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 4
273# CHECK: $exec_lo = S_MOV_B32 killed $sgpr12
274# CHECK: $sgpr12 = V_READLANE
275
276# S64
277# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
278# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
279# GCN32: $exec_lo = S_MOV_B32 3
280# GCN64: $exec = S_MOV_B64 3
281# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 8
282# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 8
283# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
284# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
285# CHECK: $sgpr12 = V_READLANE
286# CHECK: $sgpr13 = V_READLANE
287
288# S96
289# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
290# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
291# GCN32: $exec_lo = S_MOV_B32 7
292# GCN64: $exec = S_MOV_B64 7
293# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 16
294# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 16
295# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
296# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
297# CHECK: $sgpr12 = V_READLANE
298# CHECK: $sgpr13 = V_READLANE
299# CHECK: $sgpr14 = V_READLANE
300
301# S128
302# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
303# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
304# GCN32: $exec_lo = S_MOV_B32 15
305# GCN64: $exec = S_MOV_B64 15
306# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 28
307# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 28
308# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
309# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
310# CHECK: $sgpr12 = V_READLANE
311# CHECK: $sgpr13 = V_READLANE
312# CHECK: $sgpr14 = V_READLANE
313# CHECK: $sgpr15 = V_READLANE
314
315# S160
316# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
317# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
318# GCN32: $exec_lo = S_MOV_B32 31
319# GCN64: $exec = S_MOV_B64 31
320# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 44
321# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 44
322# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
323# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
324# CHECK: $sgpr12 = V_READLANE
325# CHECK: $sgpr13 = V_READLANE
326# CHECK: $sgpr14 = V_READLANE
327# CHECK: $sgpr15 = V_READLANE
328# CHECK: $sgpr16 = V_READLANE
329
330# S256
331# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
332# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
333# GCN32: $exec_lo = S_MOV_B32 255
334# GCN64: $exec = S_MOV_B64 255
335# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 64
336# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 64
337# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
338# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
339# CHECK: $sgpr12 = V_READLANE
340# CHECK: $sgpr13 = V_READLANE
341# CHECK: $sgpr14 = V_READLANE
342# CHECK: $sgpr15 = V_READLANE
343# CHECK: $sgpr16 = V_READLANE
344# CHECK: $sgpr17 = V_READLANE
345# CHECK: $sgpr18 = V_READLANE
346# CHECK: $sgpr19 = V_READLANE
347
348# S512
349# GCN32: $sgpr12 = S_MOV_B32 $exec_lo
350# GCN64: $sgpr12_sgpr13 = S_MOV_B64 $exec
351# GCN32: $exec_lo = S_MOV_B32 65535
352# GCN64: $exec = S_MOV_B64 65535
353# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 96
354# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 96
355# GCN32: $exec_lo = S_MOV_B32 killed $sgpr12
356# GCN64: $exec = S_MOV_B64 killed $sgpr12_sgpr13
357# CHECK: $sgpr12 = V_READLANE
358# CHECK: $sgpr13 = V_READLANE
359# CHECK: $sgpr14 = V_READLANE
360# CHECK: $sgpr15 = V_READLANE
361# CHECK: $sgpr16 = V_READLANE
362# CHECK: $sgpr17 = V_READLANE
363# CHECK: $sgpr18 = V_READLANE
364# CHECK: $sgpr19 = V_READLANE
365# CHECK: $sgpr20 = V_READLANE
366# CHECK: $sgpr21 = V_READLANE
367# CHECK: $sgpr22 = V_READLANE
368# CHECK: $sgpr23 = V_READLANE
369# CHECK: $sgpr24 = V_READLANE
370# CHECK: $sgpr25 = V_READLANE
371# CHECK: $sgpr26 = V_READLANE
372# CHECK: $sgpr27 = V_READLANE
373
374# S1024
375# GCN32: $sgpr64 = S_MOV_B32 $exec_lo
376# GCN64: $sgpr64_sgpr65 = S_MOV_B64 $exec
377# GCN32: $exec_lo = S_MOV_B32 4294967295
378# GCN64: $exec = S_MOV_B64 4294967295
379# MUBUF:   BUFFER_LOAD_DWORD_OFFSET ${{(sgpr[0-9_]+)*}}, $sgpr33, 160
380# FLATSCR: SCRATCH_LOAD_DWORD_SADDR $sgpr33, 160
381# GCN32: $exec_lo = S_MOV_B32 killed $sgpr64
382# GCN64: $exec = S_MOV_B64 killed $sgpr64_sgpr65
383# CHECK: $sgpr64 = V_READLANE
384# CHECK: $sgpr65 = V_READLANE
385# CHECK: $sgpr66 = V_READLANE
386# CHECK: $sgpr67 = V_READLANE
387# CHECK: $sgpr68 = V_READLANE
388# CHECK: $sgpr69 = V_READLANE
389# CHECK: $sgpr70 = V_READLANE
390# CHECK: $sgpr71 = V_READLANE
391# CHECK: $sgpr72 = V_READLANE
392# CHECK: $sgpr73 = V_READLANE
393# CHECK: $sgpr74 = V_READLANE
394# CHECK: $sgpr75 = V_READLANE
395# CHECK: $sgpr76 = V_READLANE
396# CHECK: $sgpr77 = V_READLANE
397# CHECK: $sgpr78 = V_READLANE
398# CHECK: $sgpr79 = V_READLANE
399# CHECK: $sgpr80 = V_READLANE
400# CHECK: $sgpr81 = V_READLANE
401# CHECK: $sgpr82 = V_READLANE
402# CHECK: $sgpr83 = V_READLANE
403# CHECK: $sgpr84 = V_READLANE
404# CHECK: $sgpr85 = V_READLANE
405# CHECK: $sgpr86 = V_READLANE
406# CHECK: $sgpr87 = V_READLANE
407# CHECK: $sgpr88 = V_READLANE
408# CHECK: $sgpr89 = V_READLANE
409# CHECK: $sgpr90 = V_READLANE
410# CHECK: $sgpr91 = V_READLANE
411# CHECK: $sgpr92 = V_READLANE
412# CHECK: $sgpr93 = V_READLANE
413# CHECK: $sgpr94 = V_READLANE
414# CHECK: $sgpr95 = V_READLANE
415
416---
417name:            check_reload
418tracksRegLiveness: true
419liveins:
420  - { reg: '$sgpr4_sgpr5' }
421  - { reg: '$sgpr6_sgpr7' }
422  - { reg: '$sgpr8' }
423frameInfo:
424  maxAlignment:    4
425stack:
426  - { id: 0, type: spill-slot, size: 4, alignment: 4 }
427  - { id: 1, type: spill-slot, size: 8, alignment: 4 }
428  - { id: 2, type: spill-slot, size: 12, alignment: 4 }
429  - { id: 3, type: spill-slot, size: 16, alignment: 4 }
430  - { id: 4, type: spill-slot, size: 20, alignment: 4 }
431  - { id: 5, type: spill-slot, size: 32, alignment: 4 }
432  - { id: 6, type: spill-slot, size: 64, alignment: 4 }
433  - { id: 7, type: spill-slot, size: 128, alignment: 4 }
434machineFunctionInfo:
435  explicitKernArgSize: 660
436  maxKernArgAlign: 4
437  isEntryFunction: true
438  waveLimiter:     true
439  scratchRSrcReg:  '$sgpr96_sgpr97_sgpr98_sgpr99'
440  stackPtrOffsetReg: '$sgpr32'
441  frameOffsetReg: '$sgpr33'
442  argumentInfo:
443    flatScratchInit: { reg: '$sgpr0_sgpr1' }
444    dispatchPtr:     { reg: '$sgpr2_sgpr3' }
445    privateSegmentBuffer: { reg: '$sgpr4_sgpr5_sgpr6_sgpr7' }
446    kernargSegmentPtr: { reg: '$sgpr8_sgpr9' }
447    workGroupIDX:    { reg: '$sgpr10' }
448    privateSegmentWaveByteOffset: { reg: '$sgpr11' }
449body:             |
450  bb.0:
451    liveins: $sgpr8, $sgpr4_sgpr5, $sgpr6_sgpr7
452
453    renamable $sgpr12 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
454
455    renamable $sgpr12_sgpr13 = SI_SPILL_S64_RESTORE %stack.1, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
456
457    renamable $sgpr12_sgpr13_sgpr14 = SI_SPILL_S96_RESTORE %stack.2, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
458
459    renamable $sgpr12_sgpr13_sgpr14_sgpr15 = SI_SPILL_S128_RESTORE %stack.3, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
460
461    renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16 = SI_SPILL_S160_RESTORE %stack.4, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
462
463    renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19 = SI_SPILL_S256_RESTORE %stack.5, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
464
465    renamable $sgpr12_sgpr13_sgpr14_sgpr15_sgpr16_sgpr17_sgpr18_sgpr19_sgpr20_sgpr21_sgpr22_sgpr23_sgpr24_sgpr25_sgpr26_sgpr27 = SI_SPILL_S512_RESTORE %stack.6, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
466
467    renamable $sgpr64_sgpr65_sgpr66_sgpr67_sgpr68_sgpr69_sgpr70_sgpr71_sgpr72_sgpr73_sgpr74_sgpr75_sgpr76_sgpr77_sgpr78_sgpr79_sgpr80_sgpr81_sgpr82_sgpr83_sgpr84_sgpr85_sgpr86_sgpr87_sgpr88_sgpr89_sgpr90_sgpr91_sgpr92_sgpr93_sgpr94_sgpr95 = SI_SPILL_S1024_RESTORE %stack.7, implicit $exec, implicit $sgpr96_sgpr97_sgpr98_sgpr99, implicit $sgpr32
468