1# RUN: llc -mtriple=amdgcn-amd-amdhsa -run-pass=none -verify-machineinstrs %s -o - | FileCheck -check-prefixes=FULL,ALL %s
2# RUN: llc -mtriple=amdgcn-amd-amdhsa -run-pass=none -simplify-mir -verify-machineinstrs %s -o - | FileCheck -check-prefixes=SIMPLE,ALL %s
3
4
5---
6# ALL-LABEL: name: kernel0
7# FULL: machineFunctionInfo:
8# FULL-NEXT: explicitKernArgSize: 128
9# FULL-NEXT: maxKernArgAlign: 64
10# FULL-NEXT: ldsSize: 2048
11# FULL-NEXT: isEntryFunction: true
12# FULL-NEXT: noSignedZerosFPMath: false
13# FULL-NEXT: memoryBound:     true
14# FULL-NEXT: waveLimiter:     true
15# FULL-NEXT: scratchRSrcReg:  '$sgpr8_sgpr9_sgpr10_sgpr11'
16# FULL-NEXT: scratchWaveOffsetReg:  '$sgpr12'
17# FULL-NEXT: frameOffsetReg:  '$sgpr12'
18# FULL-NEXT: stackPtrOffsetReg:  '$sgpr13'
19# FULL-NEXT: argumentInfo:
20# FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
21# FULL-NEXT: kernargSegmentPtr: { reg: '$sgpr4_sgpr5' }
22# FULL-NEXT: workGroupIDX: { reg: '$sgpr6' }
23# FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr7' }
24# FULL-NEXT: workItemIDX: { reg: '$vgpr0' }
25# FULL-NEXT: mode:
26# FULL-NEXT: ieee: true
27# FULL-NEXT: dx10-clamp: true
28# FULL-NEXT: fp32-denormals: true
29# FULL-NEXT: fp64-fp16-denormals: true
30# FULL-NEXT:  highBitsOf32BitAddress: 0
31# FULL-NEXT: body:
32
33# SIMPLE: machineFunctionInfo:
34# SIMPLE-NEXT: explicitKernArgSize: 128
35# SIMPLE-NEXT: maxKernArgAlign: 64
36# SIMPLE-NEXT: ldsSize: 2048
37# SIMPLE-NEXT: isEntryFunction: true
38# SIMPLE-NEXT: memoryBound: true
39# SIMPLE-NEXT: waveLimiter: true
40# SIMPLE-NEXT: scratchRSrcReg: '$sgpr8_sgpr9_sgpr10_sgpr11'
41# SIMPLE-NEXT: scratchWaveOffsetReg:  '$sgpr12'
42# SIMPLE-NEXT: frameOffsetReg:  '$sgpr12'
43# SIMPLE-NEXT: stackPtrOffsetReg:  '$sgpr13'
44# SIMPLE-NEXT: argumentInfo:
45# SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
46# SIMPLE-NEXT: kernargSegmentPtr: { reg: '$sgpr4_sgpr5' }
47# SIMPLE-NEXT: workGroupIDX: { reg: '$sgpr6' }
48# SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr7' }
49# SIMPLE-NEXT: workItemIDX: { reg: '$vgpr0' }
50# SIMPLE-NEXT: body:
51name: kernel0
52machineFunctionInfo:
53  explicitKernArgSize: 128
54  maxKernArgAlign: 64
55  ldsSize: 2048
56  isEntryFunction: true
57  noSignedZerosFPMath: false
58  memoryBound:     true
59  waveLimiter:     true
60  scratchRSrcReg:  '$sgpr8_sgpr9_sgpr10_sgpr11'
61  scratchWaveOffsetReg:  '$sgpr12'
62  frameOffsetReg: '$sgpr12'
63  stackPtrOffsetReg:  '$sgpr13'
64  argumentInfo:
65    privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
66    kernargSegmentPtr: { reg: '$sgpr4_sgpr5' }
67    workGroupIDX:    { reg: '$sgpr6' }
68    privateSegmentWaveByteOffset: { reg: '$sgpr7' }
69    workItemIDX:     { reg: '$vgpr0' }
70body:             |
71  bb.0:
72    S_ENDPGM 0
73
74...
75
76# FIXME: Should be able to not print section for simple
77---
78# ALL-LABEL: name: no_mfi
79# FULL: machineFunctionInfo:
80# FULL-NEXT: explicitKernArgSize: 0
81# FULL-NEXT: maxKernArgAlign: 1
82# FULL-NEXT: ldsSize: 0
83# FULL-NEXT: isEntryFunction: false
84# FULL-NEXT: noSignedZerosFPMath: false
85# FULL-NEXT: memoryBound:     false
86# FULL-NEXT: waveLimiter:     false
87# FULL-NEXT: scratchRSrcReg:  '$private_rsrc_reg'
88# FULL-NEXT: scratchWaveOffsetReg:  '$scratch_wave_offset_reg'
89# FULL-NEXT: frameOffsetReg:  '$fp_reg'
90# FULL-NEXT: stackPtrOffsetReg:  '$sp_reg'
91# FULL-NEXT: argumentInfo:
92# FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
93# FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
94# FULL-NEXT: mode:
95# FULL-NEXT: ieee: true
96# FULL-NEXT: dx10-clamp: true
97# FULL-NEXT: fp32-denormals: true
98# FULL-NEXT: fp64-fp16-denormals: true
99# FULL-NEXT:  highBitsOf32BitAddress: 0
100# FULL-NEXT: body:
101
102# SIMPLE: machineFunctionInfo:
103# SIMPLE-NEXT: maxKernArgAlign: 1
104# SIMPLE-NEXT: argumentInfo:
105# SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
106# SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
107# SIMPLE-NEXT: body:
108
109name: no_mfi
110body:             |
111  bb.0:
112    S_ENDPGM 0
113
114...
115
116---
117# ALL-LABEL: name: empty_mfi
118# FULL: machineFunctionInfo:
119# FULL-NEXT: explicitKernArgSize: 0
120# FULL-NEXT: maxKernArgAlign: 1
121# FULL-NEXT: ldsSize: 0
122# FULL-NEXT: isEntryFunction: false
123# FULL-NEXT: noSignedZerosFPMath: false
124# FULL-NEXT: memoryBound:     false
125# FULL-NEXT: waveLimiter:     false
126# FULL-NEXT: scratchRSrcReg:  '$private_rsrc_reg'
127# FULL-NEXT: scratchWaveOffsetReg:  '$scratch_wave_offset_reg'
128# FULL-NEXT: frameOffsetReg:  '$fp_reg'
129# FULL-NEXT: stackPtrOffsetReg:  '$sp_reg'
130# FULL-NEXT: argumentInfo:
131# FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
132# FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
133# FULL-NEXT: mode:
134# FULL-NEXT: ieee: true
135# FULL-NEXT: dx10-clamp: true
136# FULL-NEXT: fp32-denormals: true
137# FULL-NEXT: fp64-fp16-denormals: true
138# FULL-NEXT:  highBitsOf32BitAddress: 0
139# FULL-NEXT: body:
140
141# SIMPLE: machineFunctionInfo:
142# SIMPLE-NEXT: maxKernArgAlign: 1
143# SIMPLE-NEXT: argumentInfo:
144# SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
145# SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
146# SIMPLE-NEXT: body:
147
148name: empty_mfi
149machineFunctionInfo:
150body:             |
151  bb.0:
152    S_ENDPGM 0
153
154...
155
156---
157# ALL-LABEL: name: empty_mfi_entry_func
158# FULL: machineFunctionInfo:
159# FULL-NEXT: explicitKernArgSize: 0
160# FULL-NEXT: maxKernArgAlign: 1
161# FULL-NEXT: ldsSize: 0
162# FULL-NEXT: isEntryFunction: true
163# FULL-NEXT: noSignedZerosFPMath: false
164# FULL-NEXT: memoryBound:     false
165# FULL-NEXT: waveLimiter:     false
166# FULL-NEXT: scratchRSrcReg:  '$private_rsrc_reg'
167# FULL-NEXT: scratchWaveOffsetReg:  '$scratch_wave_offset_reg'
168# FULL-NEXT: frameOffsetReg:  '$fp_reg'
169# FULL-NEXT: stackPtrOffsetReg:  '$sp_reg'
170# FULL-NEXT: argumentInfo:
171# FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
172# FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
173# FULL-NEXT: mode:
174# FULL-NEXT: ieee: true
175# FULL-NEXT: dx10-clamp: true
176# FULL-NEXT: fp32-denormals: true
177# FULL-NEXT: fp64-fp16-denormals: true
178# FULL-NEXT:  highBitsOf32BitAddress: 0
179# FULL-NEXT: body:
180
181# SIMPLE: machineFunctionInfo:
182# SIMPLE-NEXT: maxKernArgAlign: 1
183# SIMPLE-NEXT: isEntryFunction: true
184# SIMPLE-NEXT: argumentInfo:
185# SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
186# SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
187# SIMPLE-NEXT: body:
188
189name: empty_mfi_entry_func
190machineFunctionInfo:
191  isEntryFunction: true
192body:             |
193  bb.0:
194    S_ENDPGM 0
195
196...
197
198---
199# ALL-LABEL: name: default_regs_mfi
200
201# FULL: scratchRSrcReg:  '$private_rsrc_reg'
202# FULL-NEXT: scratchWaveOffsetReg:  '$scratch_wave_offset_reg'
203# FULL-NEXT: frameOffsetReg:  '$fp_reg'
204# FULL-NEXT: stackPtrOffsetReg:  '$sp_reg'
205
206# SIMPLE-NOT: scratchRSrcReg
207# SIMPLE-NOT: scratchWaveOffsetReg
208# SIMPLE-NOT:: stackPtrOffsetReg
209name: default_regs_mfi
210machineFunctionInfo:
211  scratchRSrcReg:  '$private_rsrc_reg'
212
213body:             |
214  bb.0:
215    S_ENDPGM 0
216
217...
218
219---
220# ALL-LABEL: name: fake_stack_arginfo
221
222# FULL: argumentInfo:
223# FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
224# FULL-NEXT: flatScratchInit: { offset: 4 }
225# FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
226# FULL-NEXT: workItemIDY: { reg: '$vgpr0', mask: 65280 }
227
228# SIMPLE: argumentInfo:
229# SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
230# SIMPLE-NEXT: flatScratchInit: { offset: 4 }
231# SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
232# SIMPLE-NEXT: workItemIDY: { reg: '$vgpr0', mask: 65280 }
233name: fake_stack_arginfo
234machineFunctionInfo:
235  argumentInfo:
236    flatScratchInit: { offset: 4 }
237    workItemIDY:     { reg: '$vgpr0' , mask: 0xff00 }
238
239body:             |
240  bb.0:
241    S_ENDPGM 0
242
243...
244
245---
246# ALL-LABEL: name: parse_mode
247# ALL: mode:
248# ALL-NEXT: ieee: false
249# ALL-NEXT: dx10-clamp: false
250# ALL-NEXT: fp32-denormals: false
251# ALL-NEXT: fp64-fp16-denormals: false
252
253name: parse_mode
254machineFunctionInfo:
255  mode:
256    ieee: false
257    dx10-clamp: false
258    fp32-denormals: false
259    fp64-fp16-denormals: false
260
261body:             |
262  bb.0:
263    S_ENDPGM 0
264
265...
266