[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