diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-11-14 20:33:14 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-11-14 20:33:14 +0000 |
commit | 9ba465a972512b8227a24464fe0466b158bbb781 (patch) | |
tree | 5fbcbf5f71140707ea4fbed705e130484282f122 /llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp | |
parent | 5f4373a2fcbae30db6a194409144d7fa77d44162 (diff) | |
download | bcm5719-llvm-9ba465a972512b8227a24464fe0466b158bbb781.tar.gz bcm5719-llvm-9ba465a972512b8227a24464fe0466b158bbb781.zip |
AMDGPU: Error on stack size overflow
llvm-svn: 318189
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp index ae4890a614d..c595e71b551 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -262,7 +262,7 @@ void AMDGPUAsmPrinter::readPALMetadata(Module &M) { void AMDGPUAsmPrinter::emitCommonFunctionComments( uint32_t NumVGPR, uint32_t NumSGPR, - uint32_t ScratchSize, + uint64_t ScratchSize, uint64_t CodeSize) { OutStreamer->emitRawComment(" codeLenInByte = " + Twine(CodeSize), false); OutStreamer->emitRawComment(" NumSgprs: " + Twine(NumSGPR), false); @@ -600,7 +600,7 @@ AMDGPUAsmPrinter::SIFunctionResourceInfo AMDGPUAsmPrinter::analyzeResourceUsage( int32_t MaxVGPR = -1; int32_t MaxSGPR = -1; - uint32_t CalleeFrameSize = 0; + uint64_t CalleeFrameSize = 0; for (const MachineBasicBlock &MBB : MF) { for (const MachineInstr &MI : MBB) { @@ -718,7 +718,7 @@ AMDGPUAsmPrinter::SIFunctionResourceInfo AMDGPUAsmPrinter::analyzeResourceUsage( MaxSGPR = std::max(MaxSGPR, MaxSGPRGuess); MaxVGPR = std::max(MaxVGPR, 23); - CalleeFrameSize = std::max(CalleeFrameSize, 16384u); + CalleeFrameSize = std::max(CalleeFrameSize, UINT64_C(16384)); Info.UsesVCC = true; Info.UsesFlatScratch = ST.hasFlatAddressSpace(); Info.HasDynamicallySizedStack = true; @@ -763,6 +763,12 @@ void AMDGPUAsmPrinter::getSIProgramInfo(SIProgramInfo &ProgInfo, ProgInfo.FlatUsed = Info.UsesFlatScratch; ProgInfo.DynamicCallStack = Info.HasDynamicallySizedStack || Info.HasRecursion; + if (!isUInt<32>(ProgInfo.ScratchSize)) { + DiagnosticInfoStackSize DiagStackSize(*MF.getFunction(), + ProgInfo.ScratchSize, DS_Error); + MF.getFunction()->getContext().diagnose(DiagStackSize); + } + const SISubtarget &STM = MF.getSubtarget<SISubtarget>(); const SIMachineFunctionInfo *MFI = MF.getInfo<SIMachineFunctionInfo>(); const SIInstrInfo *TII = STM.getInstrInfo(); |