[llvm] r183552 - Add a backend option to warn on a given stack size limit.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Fri Jun 7 14:58:57 PDT 2013


looks like this is failing on some bots:

http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-debian-fast

On 7 June 2013 16:18, Quentin Colombet <qcolombet at apple.com> wrote:
> Author: qcolombet
> Date: Fri Jun  7 15:18:12 2013
> New Revision: 183552
>
> URL: http://llvm.org/viewvc/llvm-project?rev=183552&view=rev
> Log:
> Add a backend option to warn on a given stack size limit.
> Option: -mllvm -warn-stack-size=<limit>
> Output (if limit is exceeded):
> warning: Stack size limit exceeded (<actual size>) in <functionName>.
>
> The longer term plan is to hook that to a clang warning.
> PR:4072
> <rdar://problem/13987214>
>
> Added:
>     llvm/trunk/test/CodeGen/ARM/warn-stack.ll
>     llvm/trunk/test/CodeGen/X86/warn-stack.ll
> Modified:
>     llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
>
> Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=183552&r1=183551&r2=183552&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Fri Jun  7 15:18:12 2013
> @@ -35,6 +35,7 @@
>  #include "llvm/Support/CommandLine.h"
>  #include "llvm/Support/Compiler.h"
>  #include "llvm/Support/Debug.h"
> +#include "llvm/Support/raw_ostream.h"
>  #include "llvm/Target/TargetFrameLowering.h"
>  #include "llvm/Target/TargetInstrInfo.h"
>  #include "llvm/Target/TargetMachine.h"
> @@ -46,6 +47,11 @@ using namespace llvm;
>  char PEI::ID = 0;
>  char &llvm::PrologEpilogCodeInserterID = PEI::ID;
>
> +static cl::opt<uint64_t>
> +WarnStackSize("warn-stack-size", cl::Hidden,
> +              cl::desc("Warn for stack size bigger than the given"
> +                       " number"));
> +
>  INITIALIZE_PASS_BEGIN(PEI, "prologepilog",
>                  "Prologue/Epilogue Insertion", false, false)
>  INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
> @@ -128,6 +134,13 @@ bool PEI::runOnMachineFunction(MachineFu
>    // Clear any vregs created by virtual scavenging.
>    Fn.getRegInfo().clearVirtRegs();
>
> +  // Warn on stack size when we exceeds the given limit.
> +  MachineFrameInfo *MFI = Fn.getFrameInfo();
> +  if (WarnStackSize.getNumOccurrences() > 0 &&
> +      WarnStackSize < MFI->getStackSize())
> +    errs() << "warning: Stack size limit exceeded (" << MFI->getStackSize()
> +           << ") in " << Fn.getName()  << ".\n";
> +
>    delete RS;
>    clearAllSets();
>    return true;
>
> Added: llvm/trunk/test/CodeGen/ARM/warn-stack.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/warn-stack.ll?rev=183552&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/ARM/warn-stack.ll (added)
> +++ llvm/trunk/test/CodeGen/ARM/warn-stack.ll Fri Jun  7 15:18:12 2013
> @@ -0,0 +1,24 @@
> +; RUN: llc -march arm -warn-stack-size=80 < %s 2>&1 >/dev/null | FileCheck %s
> +; Check the internal option that warns when the stack size exceeds the
> +; given amount.
> +; <rdar://13987214>
> +
> +; CHECK-NOT: nowarn
> +define void @nowarn() nounwind ssp {
> +entry:
> +  %buffer = alloca [12 x i8], align 1
> +  %arraydecay = getelementptr inbounds [12 x i8]* %buffer, i64 0, i64 0
> +  call void @doit(i8* %arraydecay) nounwind
> +  ret void
> +}
> +
> +; CHECK: warning: Stack size limit exceeded (92) in warn.
> +define void @warn() nounwind ssp {
> +entry:
> +  %buffer = alloca [80 x i8], align 1
> +  %arraydecay = getelementptr inbounds [80 x i8]* %buffer, i64 0, i64 0
> +  call void @doit(i8* %arraydecay) nounwind
> +  ret void
> +}
> +
> +declare void @doit(i8*)
>
> Added: llvm/trunk/test/CodeGen/X86/warn-stack.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/warn-stack.ll?rev=183552&view=auto
> ==============================================================================
> --- llvm/trunk/test/CodeGen/X86/warn-stack.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/warn-stack.ll Fri Jun  7 15:18:12 2013
> @@ -0,0 +1,24 @@
> +; RUN: llc -march x86 -warn-stack-size=80 < %s 2>&1 >/dev/null | FileCheck %s
> +; Check the internal option that warns when the stack size exceeds the
> +; given amount.
> +; <rdar://13987214>
> +
> +; CHECK-NOT: nowarn
> +define void @nowarn() nounwind ssp {
> +entry:
> +  %buffer = alloca [12 x i8], align 1
> +  %arraydecay = getelementptr inbounds [12 x i8]* %buffer, i64 0, i64 0
> +  call void @doit(i8* %arraydecay) nounwind
> +  ret void
> +}
> +
> +; CHECK: warning: Stack size limit exceeded (92) in warn.
> +define void @warn() nounwind ssp {
> +entry:
> +  %buffer = alloca [80 x i8], align 1
> +  %arraydecay = getelementptr inbounds [80 x i8]* %buffer, i64 0, i64 0
> +  call void @doit(i8* %arraydecay) nounwind
> +  ret void
> +}
> +
> +declare void @doit(i8*)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list