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
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' }
26 # FULL-NEXT: ieee: true
27 # FULL-NEXT: dx10-clamp: true
28 # FULL-NEXT: highBitsOf32BitAddress: 0
31 # SIMPLE: machineFunctionInfo:
32 # SIMPLE-NEXT: explicitKernArgSize: 128
33 # SIMPLE-NEXT: maxKernArgAlign: 64
34 # SIMPLE-NEXT: ldsSize: 2048
35 # SIMPLE-NEXT: isEntryFunction: true
36 # SIMPLE-NEXT: memoryBound: true
37 # SIMPLE-NEXT: waveLimiter: true
38 # SIMPLE-NEXT: scratchRSrcReg: '$sgpr8_sgpr9_sgpr10_sgpr11'
39 # SIMPLE-NEXT: scratchWaveOffsetReg: '$sgpr12'
40 # SIMPLE-NEXT: frameOffsetReg: '$sgpr12'
41 # SIMPLE-NEXT: stackPtrOffsetReg: '$sgpr13'
42 # SIMPLE-NEXT: argumentInfo:
43 # SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
44 # SIMPLE-NEXT: kernargSegmentPtr: { reg: '$sgpr4_sgpr5' }
45 # SIMPLE-NEXT: workGroupIDX: { reg: '$sgpr6' }
46 # SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr7' }
47 # SIMPLE-NEXT: workItemIDX: { reg: '$vgpr0' }
51 explicitKernArgSize: 128
55 noSignedZerosFPMath: false
58 scratchRSrcReg: '$sgpr8_sgpr9_sgpr10_sgpr11'
59 scratchWaveOffsetReg: '$sgpr12'
60 frameOffsetReg: '$sgpr12'
61 stackPtrOffsetReg: '$sgpr13'
63 privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
64 kernargSegmentPtr: { reg: '$sgpr4_sgpr5' }
65 workGroupIDX: { reg: '$sgpr6' }
66 privateSegmentWaveByteOffset: { reg: '$sgpr7' }
67 workItemIDX: { reg: '$vgpr0' }
74 # FIXME: Should be able to not print section for simple
76 # ALL-LABEL: name: no_mfi
77 # FULL: machineFunctionInfo:
78 # FULL-NEXT: explicitKernArgSize: 0
79 # FULL-NEXT: maxKernArgAlign: 0
80 # FULL-NEXT: ldsSize: 0
81 # FULL-NEXT: isEntryFunction: false
82 # FULL-NEXT: noSignedZerosFPMath: false
83 # FULL-NEXT: memoryBound: false
84 # FULL-NEXT: waveLimiter: false
85 # FULL-NEXT: scratchRSrcReg: '$private_rsrc_reg'
86 # FULL-NEXT: scratchWaveOffsetReg: '$scratch_wave_offset_reg'
87 # FULL-NEXT: frameOffsetReg: '$fp_reg'
88 # FULL-NEXT: stackPtrOffsetReg: '$sp_reg'
89 # FULL-NEXT: argumentInfo:
90 # FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
91 # FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
93 # FULL-NEXT: ieee: true
94 # FULL-NEXT: dx10-clamp: true
95 # FULL-NEXT: highBitsOf32BitAddress: 0
98 # SIMPLE: machineFunctionInfo:
99 # SIMPLE-NEXT: argumentInfo:
100 # SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
101 # SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
112 # ALL-LABEL: name: empty_mfi
113 # FULL: machineFunctionInfo:
114 # FULL-NEXT: explicitKernArgSize: 0
115 # FULL-NEXT: maxKernArgAlign: 0
116 # FULL-NEXT: ldsSize: 0
117 # FULL-NEXT: isEntryFunction: false
118 # FULL-NEXT: noSignedZerosFPMath: false
119 # FULL-NEXT: memoryBound: false
120 # FULL-NEXT: waveLimiter: false
121 # FULL-NEXT: scratchRSrcReg: '$private_rsrc_reg'
122 # FULL-NEXT: scratchWaveOffsetReg: '$scratch_wave_offset_reg'
123 # FULL-NEXT: frameOffsetReg: '$fp_reg'
124 # FULL-NEXT: stackPtrOffsetReg: '$sp_reg'
125 # FULL-NEXT: argumentInfo:
126 # FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
127 # FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
129 # FULL-NEXT: ieee: true
130 # FULL-NEXT: dx10-clamp: true
131 # FULL-NEXT: highBitsOf32BitAddress: 0
134 # SIMPLE: machineFunctionInfo:
135 # SIMPLE-NEXT: argumentInfo:
136 # SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
137 # SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
149 # ALL-LABEL: name: empty_mfi_entry_func
150 # FULL: machineFunctionInfo:
151 # FULL-NEXT: explicitKernArgSize: 0
152 # FULL-NEXT: maxKernArgAlign: 0
153 # FULL-NEXT: ldsSize: 0
154 # FULL-NEXT: isEntryFunction: true
155 # FULL-NEXT: noSignedZerosFPMath: false
156 # FULL-NEXT: memoryBound: false
157 # FULL-NEXT: waveLimiter: false
158 # FULL-NEXT: scratchRSrcReg: '$private_rsrc_reg'
159 # FULL-NEXT: scratchWaveOffsetReg: '$scratch_wave_offset_reg'
160 # FULL-NEXT: frameOffsetReg: '$fp_reg'
161 # FULL-NEXT: stackPtrOffsetReg: '$sp_reg'
162 # FULL-NEXT: argumentInfo:
163 # FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
164 # FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
166 # FULL-NEXT: ieee: true
167 # FULL-NEXT: dx10-clamp: true
168 # FULL-NEXT: highBitsOf32BitAddress: 0
171 # SIMPLE: machineFunctionInfo:
172 # SIMPLE-NEXT: isEntryFunction: true
173 # SIMPLE-NEXT: argumentInfo:
174 # SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
175 # SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
178 name: empty_mfi_entry_func
180 isEntryFunction: true
188 # ALL-LABEL: name: default_regs_mfi
190 # FULL: scratchRSrcReg: '$private_rsrc_reg'
191 # FULL-NEXT: scratchWaveOffsetReg: '$scratch_wave_offset_reg'
192 # FULL-NEXT: frameOffsetReg: '$fp_reg'
193 # FULL-NEXT: stackPtrOffsetReg: '$sp_reg'
195 # SIMPLE-NOT: scratchRSrcReg
196 # SIMPLE-NOT: scratchWaveOffsetReg
197 # SIMPLE-NOT:: stackPtrOffsetReg
198 name: default_regs_mfi
200 scratchRSrcReg: '$private_rsrc_reg'
209 # ALL-LABEL: name: fake_stack_arginfo
211 # FULL: argumentInfo:
212 # FULL-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
213 # FULL-NEXT: flatScratchInit: { offset: 4 }
214 # FULL-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
215 # FULL-NEXT: workItemIDY: { reg: '$vgpr0', mask: 65280 }
217 # SIMPLE: argumentInfo:
218 # SIMPLE-NEXT: privateSegmentBuffer: { reg: '$sgpr0_sgpr1_sgpr2_sgpr3' }
219 # SIMPLE-NEXT: flatScratchInit: { offset: 4 }
220 # SIMPLE-NEXT: privateSegmentWaveByteOffset: { reg: '$sgpr33' }
221 # SIMPLE-NEXT: workItemIDY: { reg: '$vgpr0', mask: 65280 }
222 name: fake_stack_arginfo
225 flatScratchInit: { offset: 4 }
226 workItemIDY: { reg: '$vgpr0' , mask: 0xff00 }
235 # ALL-LABEL: name: parse_mode
237 # ALL-NEXT: ieee: false
238 # ALL-NEXT: dx10-clamp: false