aeubanks created this revision. aeubanks added a reviewer: dblaikie. Herald added subscribers: foad, dexonsmith, kerbowa, hiraditya, tpr, nhaehnle, jvesely, arsenm. aeubanks requested review of this revision. Herald added projects: clang, LLVM. Herald added subscribers: llvm-commits, cfe-commits.
And always print it. This makes some LLVM diagnostics match up better with Clang's diagnostics. Updated some AMDGPU uses of DiagnosticInfoResourceLimit and now we print better diagnostics for those. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D110204 Files: clang/test/Misc/backend-resource-limit-diagnostics.cl clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp llvm/include/llvm/IR/DiagnosticInfo.h llvm/lib/CodeGen/PrologEpilogInserter.cpp llvm/lib/IR/DiagnosticInfo.cpp llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp llvm/test/CodeGen/AMDGPU/stack-size-overflow.ll
Index: llvm/test/CodeGen/AMDGPU/stack-size-overflow.ll =================================================================== --- llvm/test/CodeGen/AMDGPU/stack-size-overflow.ll +++ llvm/test/CodeGen/AMDGPU/stack-size-overflow.ll @@ -3,7 +3,7 @@ declare void @llvm.memset.p5i8.i32(i8 addrspace(5)* nocapture, i8, i32, i32, i1) #1 -; ERROR: error: stack frame size (131061) exceeds limit in function 'stack_size_limit_wave64' +; ERROR: error: stack frame size (131061) exceeds limit (131056) in function 'stack_size_limit_wave64' ; GCN: ; ScratchSize: 131061 define amdgpu_kernel void @stack_size_limit_wave64() #0 { entry: @@ -13,7 +13,7 @@ ret void } -; ERROR: error: stack frame size (262117) exceeds limit in function 'stack_size_limit_wave32' +; ERROR: error: stack frame size (262117) exceeds limit (262112) in function 'stack_size_limit_wave32' ; GCN: ; ScratchSize: 262117 define amdgpu_kernel void @stack_size_limit_wave32() #1 { entry: Index: llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp =================================================================== --- llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp +++ llvm/lib/Target/AMDGPU/AMDGPUAsmPrinter.cpp @@ -678,7 +678,8 @@ GCNSubtarget::MaxWaveScratchSize / STM.getWavefrontSize(); if (ProgInfo.ScratchSize > MaxScratchPerWorkitem) { DiagnosticInfoStackSize DiagStackSize(MF.getFunction(), - ProgInfo.ScratchSize, DS_Error); + ProgInfo.ScratchSize, + MaxScratchPerWorkitem, DS_Error); MF.getFunction().getContext().diagnose(DiagStackSize); } @@ -697,11 +698,9 @@ if (ProgInfo.NumSGPR > MaxAddressableNumSGPRs) { // This can happen due to a compiler bug or when using inline asm. LLVMContext &Ctx = MF.getFunction().getContext(); - DiagnosticInfoResourceLimit Diag(MF.getFunction(), - "addressable scalar registers", - ProgInfo.NumSGPR, DS_Error, - DK_ResourceLimit, - MaxAddressableNumSGPRs); + DiagnosticInfoResourceLimit Diag( + MF.getFunction(), "addressable scalar registers", ProgInfo.NumSGPR, + MaxAddressableNumSGPRs, DS_Error, DK_ResourceLimit); Ctx.diagnose(Diag); ProgInfo.NumSGPR = MaxAddressableNumSGPRs - 1; } @@ -745,11 +744,9 @@ // This can happen due to a compiler bug or when using inline asm to use // the registers which are usually reserved for vcc etc. LLVMContext &Ctx = MF.getFunction().getContext(); - DiagnosticInfoResourceLimit Diag(MF.getFunction(), - "scalar registers", - ProgInfo.NumSGPR, DS_Error, - DK_ResourceLimit, - MaxAddressableNumSGPRs); + DiagnosticInfoResourceLimit Diag(MF.getFunction(), "scalar registers", + ProgInfo.NumSGPR, MaxAddressableNumSGPRs, + DS_Error, DK_ResourceLimit); Ctx.diagnose(Diag); ProgInfo.NumSGPR = MaxAddressableNumSGPRs; ProgInfo.NumSGPRsForWavesPerEU = MaxAddressableNumSGPRs; @@ -766,14 +763,16 @@ if (MFI->getNumUserSGPRs() > STM.getMaxNumUserSGPRs()) { LLVMContext &Ctx = MF.getFunction().getContext(); DiagnosticInfoResourceLimit Diag(MF.getFunction(), "user SGPRs", - MFI->getNumUserSGPRs(), DS_Error); + MFI->getNumUserSGPRs(), + STM.getMaxNumUserSGPRs(), DS_Error); Ctx.diagnose(Diag); } if (MFI->getLDSSize() > static_cast<unsigned>(STM.getLocalMemorySize())) { LLVMContext &Ctx = MF.getFunction().getContext(); DiagnosticInfoResourceLimit Diag(MF.getFunction(), "local memory", - MFI->getLDSSize(), DS_Error); + MFI->getLDSSize(), + STM.getLocalMemorySize(), DS_Error); Ctx.diagnose(Diag); } Index: llvm/lib/IR/DiagnosticInfo.cpp =================================================================== --- llvm/lib/IR/DiagnosticInfo.cpp +++ llvm/lib/IR/DiagnosticInfo.cpp @@ -70,10 +70,8 @@ } void DiagnosticInfoResourceLimit::print(DiagnosticPrinter &DP) const { - DP << getResourceName() << " (" << getResourceSize() << ") exceeds limit"; - if (getResourceLimit() != 0) - DP << " (" << getResourceLimit() << ')'; - DP << " in function '" << getFunction() << '\''; + DP << getResourceName() << " (" << getResourceSize() << ") exceeds limit (" + << getResourceLimit() << ") in function '" << getFunction() << '\''; } void DiagnosticInfoDebugMetadataVersion::print(DiagnosticPrinter &DP) const { Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp =================================================================== --- llvm/lib/CodeGen/PrologEpilogInserter.cpp +++ llvm/lib/CodeGen/PrologEpilogInserter.cpp @@ -285,7 +285,7 @@ (void)Failed; } if (StackSize > Threshold) { - DiagnosticInfoStackSize DiagStackSize(F, StackSize, DS_Warning, Threshold); + DiagnosticInfoStackSize DiagStackSize(F, StackSize, Threshold, DS_Warning); F.getContext().diagnose(DiagStackSize); } ORE->emit([&]() { Index: llvm/include/llvm/IR/DiagnosticInfo.h =================================================================== --- llvm/include/llvm/IR/DiagnosticInfo.h +++ llvm/include/llvm/IR/DiagnosticInfo.h @@ -195,10 +195,9 @@ /// \p The function that is concerned by this stack size diagnostic. /// \p The computed stack size. DiagnosticInfoResourceLimit(const Function &Fn, const char *ResourceName, - uint64_t ResourceSize, + uint64_t ResourceSize, uint64_t ResourceLimit, DiagnosticSeverity Severity = DS_Warning, - DiagnosticKind Kind = DK_ResourceLimit, - uint64_t ResourceLimit = 0) + DiagnosticKind Kind = DK_ResourceLimit) : DiagnosticInfo(Kind, Severity), Fn(Fn), ResourceName(ResourceName), ResourceSize(ResourceSize), ResourceLimit(ResourceLimit) {} @@ -219,10 +218,10 @@ void anchor() override; public: DiagnosticInfoStackSize(const Function &Fn, uint64_t StackSize, - DiagnosticSeverity Severity = DS_Warning, - uint64_t StackLimit = 0) - : DiagnosticInfoResourceLimit(Fn, "stack frame size", StackSize, Severity, - DK_StackSize, StackLimit) {} + uint64_t StackLimit, + DiagnosticSeverity Severity = DS_Warning) + : DiagnosticInfoResourceLimit(Fn, "stack frame size", StackSize, + StackLimit, Severity, DK_StackSize) {} uint64_t getStackSize() const { return getResourceSize(); } uint64_t getStackLimit() const { return getResourceLimit(); } Index: clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp =================================================================== --- clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp +++ clang/test/Misc/backend-stack-frame-diagnostics-fallback.cpp @@ -13,7 +13,7 @@ }; // CHECK: warning: stack frame size ([[#]]) exceeds limit ([[#]]) in function 'frameSizeThunkWarning::B::f' - // CHECK: warning: stack frame size ([[#]]) exceeds limit in function '_ZTv0_n12_N21frameSizeThunkWarning1B1fEv' + // CHECK: warning: stack frame size ([[#]]) exceeds limit ([[#]]) in function '_ZTv0_n12_N21frameSizeThunkWarning1B1fEv' void B::f() { volatile int x = 0; // Ensure there is stack usage. } Index: clang/test/Misc/backend-resource-limit-diagnostics.cl =================================================================== --- clang/test/Misc/backend-resource-limit-diagnostics.cl +++ clang/test/Misc/backend-resource-limit-diagnostics.cl @@ -1,7 +1,7 @@ // REQUIRES: amdgpu-registered-target // RUN: not %clang_cc1 -emit-codegen-only -triple=amdgcn-- %s 2>&1 | FileCheck %s -// CHECK: error: local memory (480000) exceeds limit in function 'use_huge_lds' +// CHECK: error: local memory (480000) exceeds limit (32768) in function 'use_huge_lds' kernel void use_huge_lds() { volatile local int huge[120000];
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits