diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp --- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp @@ -1061,15 +1061,15 @@ auto parseAndCheckArgument = [&](const Optional &A, const TargetRegisterClass &RC, - ArgDescriptor &Arg) { + ArgDescriptor &Arg, unsigned UserSGPRs = 0, + unsigned SystemSGPRs = 0) { // Skip parsing if it's not present. if (!A) return false; if (A->IsRegister) { unsigned Reg; - if (parseNamedRegisterReference(PFS, Reg, A->RegisterName.Value, - Error)) { + if (parseNamedRegisterReference(PFS, Reg, A->RegisterName.Value, Error)) { SourceRange = A->RegisterName.SourceRange; return true; } @@ -1082,51 +1082,53 @@ if (A->Mask) Arg = ArgDescriptor::createArg(Arg, A->Mask.getValue()); + MFI->NumUserSGPRs += UserSGPRs; + MFI->NumSystemSGPRs += SystemSGPRs; return false; }; if (YamlMFI.ArgInfo && (parseAndCheckArgument(YamlMFI.ArgInfo->PrivateSegmentBuffer, AMDGPU::SReg_128RegClass, - MFI->ArgInfo.PrivateSegmentBuffer) || + MFI->ArgInfo.PrivateSegmentBuffer, 4, 0) || parseAndCheckArgument(YamlMFI.ArgInfo->DispatchPtr, - AMDGPU::SReg_64RegClass, - MFI->ArgInfo.DispatchPtr) || + AMDGPU::SReg_64RegClass, MFI->ArgInfo.DispatchPtr, + 2, 0) || parseAndCheckArgument(YamlMFI.ArgInfo->QueuePtr, AMDGPU::SReg_64RegClass, - MFI->ArgInfo.QueuePtr) || + MFI->ArgInfo.QueuePtr, 2, 0) || parseAndCheckArgument(YamlMFI.ArgInfo->KernargSegmentPtr, AMDGPU::SReg_64RegClass, - MFI->ArgInfo.KernargSegmentPtr) || + MFI->ArgInfo.KernargSegmentPtr, 2, 0) || parseAndCheckArgument(YamlMFI.ArgInfo->DispatchID, - AMDGPU::SReg_64RegClass, - MFI->ArgInfo.DispatchID) || + AMDGPU::SReg_64RegClass, MFI->ArgInfo.DispatchID, + 2, 0) || parseAndCheckArgument(YamlMFI.ArgInfo->FlatScratchInit, AMDGPU::SReg_64RegClass, - MFI->ArgInfo.FlatScratchInit) || + MFI->ArgInfo.FlatScratchInit, 2, 0) || parseAndCheckArgument(YamlMFI.ArgInfo->PrivateSegmentSize, AMDGPU::SGPR_32RegClass, MFI->ArgInfo.PrivateSegmentSize) || parseAndCheckArgument(YamlMFI.ArgInfo->WorkGroupIDX, - AMDGPU::SGPR_32RegClass, - MFI->ArgInfo.WorkGroupIDX) || + AMDGPU::SGPR_32RegClass, MFI->ArgInfo.WorkGroupIDX, + 0, 1) || parseAndCheckArgument(YamlMFI.ArgInfo->WorkGroupIDY, - AMDGPU::SGPR_32RegClass, - MFI->ArgInfo.WorkGroupIDY) || + AMDGPU::SGPR_32RegClass, MFI->ArgInfo.WorkGroupIDY, + 0, 1) || parseAndCheckArgument(YamlMFI.ArgInfo->WorkGroupIDZ, - AMDGPU::SGPR_32RegClass, - MFI->ArgInfo.WorkGroupIDZ) || + AMDGPU::SGPR_32RegClass, MFI->ArgInfo.WorkGroupIDZ, + 0, 1) || parseAndCheckArgument(YamlMFI.ArgInfo->WorkGroupInfo, AMDGPU::SGPR_32RegClass, - MFI->ArgInfo.WorkGroupInfo) || + MFI->ArgInfo.WorkGroupInfo, 0, 1) || parseAndCheckArgument(YamlMFI.ArgInfo->PrivateSegmentWaveByteOffset, AMDGPU::SGPR_32RegClass, - MFI->ArgInfo.PrivateSegmentWaveByteOffset) || + MFI->ArgInfo.PrivateSegmentWaveByteOffset, 0, 1) || parseAndCheckArgument(YamlMFI.ArgInfo->ImplicitArgPtr, AMDGPU::SReg_64RegClass, MFI->ArgInfo.ImplicitArgPtr) || parseAndCheckArgument(YamlMFI.ArgInfo->ImplicitBufferPtr, AMDGPU::SReg_64RegClass, - MFI->ArgInfo.ImplicitBufferPtr) || + MFI->ArgInfo.ImplicitBufferPtr, 2, 0) || parseAndCheckArgument(YamlMFI.ArgInfo->WorkItemIDX, AMDGPU::VGPR_32RegClass, MFI->ArgInfo.WorkItemIDX) ||