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