[LLVMdev] Stack usage analysis using LLVM

John Criswell criswell at illinois.edu
Thu Sep 5 12:04:28 PDT 2013

On 9/3/13 1:27 PM, Snehasish Kumar wrote:
> Hi
> I was wondering if someone knows about any effort within the LLVM 
> community to perform stack usage analysis per function similar to 
> GCC's "-fstack-usage 
> <http://gcc.gnu.org/onlinedocs/gnat_ugn_unw/Static-Stack-Usage-Analysis.html>" 
> option?

I am not familiar with the -fstack-usage option in GCC, but as far as I 
know, LLVM does not have a FunctionPass or MachineFunctionPass which 
performs the calculations described below.  You could, of course, 
quickly test this by running the clang -fstack-usage and see what 
happens.  LLVM and the DragonEgg plugin for GCC is more likely to 
support the feature.

That said, writing such as pass would be very easy to do.  If you're 
only concerned about the size of stack-allocated objects, you can write 
an LLVM pass that looks for alloca instructions, determine that they are 
not in loops, and then sums up the sizes of the allocatoed memory using 
the DataLayout pass.

If you want something that includes stack-spill slots and the like, then 
you'd need to write a MachineFunction Pass and examine the generated 
machine instructions.  Alternatively, there might be a way in a 
MachineFunctionPass to get a pointer to a MachineFrame object and to 
query its size.

-- John T.

> In short, with fstack-usage, gcc prints out the maximum stack usage 
> per function (in bytes) which it can determine as a) static (no calls 
> to alloca in source) b) bounded (calls to alloca with constants) c) 
> unbounded (calls to alloca with variables). A more detailed 
> description can be found in this pdf 
> <http://ols.fedoraproject.org/GCC/Reprints-2005/hainque-Reprint.pdf>.
> Thanks,
> Snehasish Kumar
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130905/05e008de/attachment.html>

More information about the llvm-dev mailing list