Index: llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.h =================================================================== --- llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.h +++ llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.h @@ -281,6 +281,8 @@ bool NoSignedZerosFPMath = false; bool MemoryBound = false; bool WaveLimiter = false; + bool HasSpilledSGPRs = false; + bool HasSpilledVGPRs = false; uint32_t HighBitsOf32BitAddress = 0; StringValue ScratchRSrcReg = "$private_rsrc_reg"; @@ -308,6 +310,8 @@ YamlIO.mapOptional("noSignedZerosFPMath", MFI.NoSignedZerosFPMath, false); YamlIO.mapOptional("memoryBound", MFI.MemoryBound, false); YamlIO.mapOptional("waveLimiter", MFI.WaveLimiter, false); + YamlIO.mapOptional("hasSpilledSGPRs", MFI.HasSpilledSGPRs, false); + YamlIO.mapOptional("hasSpilledVGPRs", MFI.HasSpilledVGPRs, false); YamlIO.mapOptional("scratchRSrcReg", MFI.ScratchRSrcReg, StringValue("$private_rsrc_reg")); YamlIO.mapOptional("frameOffsetReg", MFI.FrameOffsetReg, Index: llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp =================================================================== --- llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp +++ llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp @@ -546,6 +546,8 @@ NoSignedZerosFPMath(MFI.hasNoSignedZerosFPMath()), MemoryBound(MFI.isMemoryBound()), WaveLimiter(MFI.needsWaveLimiter()), + HasSpilledSGPRs(MFI.hasSpilledSGPRs()), + HasSpilledVGPRs(MFI.hasSpilledVGPRs()), HighBitsOf32BitAddress(MFI.get32BitAddressHighBits()), ScratchRSrcReg(regToString(MFI.getScratchRSrcReg(), TRI)), FrameOffsetReg(regToString(MFI.getFrameOffsetReg(), TRI)), @@ -567,6 +569,8 @@ NoSignedZerosFPMath = YamlMFI.NoSignedZerosFPMath; MemoryBound = YamlMFI.MemoryBound; WaveLimiter = YamlMFI.WaveLimiter; + HasSpilledSGPRs = YamlMFI.HasSpilledSGPRs; + HasSpilledVGPRs = YamlMFI.HasSpilledVGPRs; return false; } Index: llvm/test/CodeGen/MIR/AMDGPU/machine-function-info-no-ir.mir =================================================================== --- llvm/test/CodeGen/MIR/AMDGPU/machine-function-info-no-ir.mir +++ llvm/test/CodeGen/MIR/AMDGPU/machine-function-info-no-ir.mir @@ -12,6 +12,8 @@ # FULL-NEXT: noSignedZerosFPMath: false # FULL-NEXT: memoryBound: true # FULL-NEXT: waveLimiter: true +# FULL-NEXT: hasSpilledSGPRs: false +# FULL-NEXT: hasSpilledVGPRs: false # FULL-NEXT: scratchRSrcReg: '$sgpr8_sgpr9_sgpr10_sgpr11' # FULL-NEXT: frameOffsetReg: '$sgpr12' # FULL-NEXT: stackPtrOffsetReg: '$sgpr13' @@ -83,6 +85,8 @@ # FULL-NEXT: noSignedZerosFPMath: false # FULL-NEXT: memoryBound: false # FULL-NEXT: waveLimiter: false +# FULL-NEXT: hasSpilledSGPRs: false +# FULL-NEXT: hasSpilledVGPRs: false # FULL-NEXT: scratchRSrcReg: '$private_rsrc_reg' # FULL-NEXT: frameOffsetReg: '$fp_reg' # FULL-NEXT: stackPtrOffsetReg: '$sp_reg' @@ -121,6 +125,8 @@ # FULL-NEXT: noSignedZerosFPMath: false # FULL-NEXT: memoryBound: false # FULL-NEXT: waveLimiter: false +# FULL-NEXT: hasSpilledSGPRs: false +# FULL-NEXT: hasSpilledVGPRs: false # FULL-NEXT: scratchRSrcReg: '$private_rsrc_reg' # FULL-NEXT: frameOffsetReg: '$fp_reg' # FULL-NEXT: stackPtrOffsetReg: '$sp_reg' @@ -160,6 +166,8 @@ # FULL-NEXT: noSignedZerosFPMath: false # FULL-NEXT: memoryBound: false # FULL-NEXT: waveLimiter: false +# FULL-NEXT: hasSpilledSGPRs: false +# FULL-NEXT: hasSpilledVGPRs: false # FULL-NEXT: scratchRSrcReg: '$private_rsrc_reg' # FULL-NEXT: frameOffsetReg: '$fp_reg' # FULL-NEXT: stackPtrOffsetReg: '$sp_reg' @@ -259,3 +267,21 @@ S_ENDPGM 0 ... + + +--- +# ALL-LABEL: name: parse_spilled_regs +# ALL: machineFunctionInfo: +# ALL: hasSpilledSGPRs: true +# ALL-NEXT: hasSpilledVGPRs: true + +name: parse_spilled_regs +machineFunctionInfo: + hasSpilledSGPRs: true + hasSpilledVGPRs: true + +body: | + bb.0: + S_ENDPGM 0 + +... Index: llvm/test/CodeGen/MIR/AMDGPU/machine-function-info.ll =================================================================== --- llvm/test/CodeGen/MIR/AMDGPU/machine-function-info.ll +++ llvm/test/CodeGen/MIR/AMDGPU/machine-function-info.ll @@ -15,6 +15,8 @@ ; CHECK-NEXT: noSignedZerosFPMath: false ; CHECK-NEXT: memoryBound: false ; CHECK-NEXT: waveLimiter: false +; CHECK-NEXT: hasSpilledSGPRs: false +; CHECK-NEXT: hasSpilledVGPRs: false ; CHECK-NEXT: scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99' ; CHECK-NEXT: frameOffsetReg: '$fp_reg' ; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32' @@ -48,6 +50,8 @@ ; CHECK-NEXT: noSignedZerosFPMath: false ; CHECK-NEXT: memoryBound: false ; CHECK-NEXT: waveLimiter: false +; CHECK-NEXT: hasSpilledSGPRs: false +; CHECK-NEXT: hasSpilledVGPRs: false ; CHECK-NEXT: scratchRSrcReg: '$sgpr96_sgpr97_sgpr98_sgpr99' ; CHECK-NEXT: frameOffsetReg: '$fp_reg' ; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32' @@ -76,6 +80,8 @@ ; CHECK-NEXT: noSignedZerosFPMath: false ; CHECK-NEXT: memoryBound: false ; CHECK-NEXT: waveLimiter: false +; CHECK-NEXT: hasSpilledSGPRs: false +; CHECK-NEXT: hasSpilledVGPRs: false ; CHECK-NEXT: scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3' ; CHECK-NEXT: frameOffsetReg: '$sgpr33' ; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32' @@ -103,6 +109,8 @@ ; CHECK-NEXT: noSignedZerosFPMath: true ; CHECK-NEXT: memoryBound: false ; CHECK-NEXT: waveLimiter: false +; CHECK-NEXT: hasSpilledSGPRs: false +; CHECK-NEXT: hasSpilledVGPRs: false ; CHECK-NEXT: scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3' ; CHECK-NEXT: frameOffsetReg: '$sgpr33' ; CHECK-NEXT: stackPtrOffsetReg: '$sgpr32'