[llvm] r183552 - Add a backend option to warn on a given stack size limit.
Quentin Colombet
qcolombet at apple.com
Fri Jun 7 15:02:32 PDT 2013
Yes, I am looking into it.
The strange thing here is that it looks like the option does not parse correctly for ARM:
llc: for the -warn-stack-size option: Cannot find option named '80'!
Whereas it works perfectly for X86.
Any ideas?
-Quentin
On Jun 7, 2013, at 2:58 PM, Rafael EspĂndola <rafael.espindola at gmail.com> wrote:
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130607/e6cc4822/attachment.html>
More information about the llvm-commits
mailing list