[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