[LLVMdev] LLVM project binary size

Chris Lattner sabre at nondot.org
Tue May 27 23:01:33 PDT 2008


On May 25, 2008, at 11:29 PM, Nicolas Capens wrote:

> Hi all,
>
> I’m a little bit worried about the sheer size of the resulting  
> binaries of a project using LLVM. The medium large project for which  
> I’m planning to use it (which currently uses a custom dynamic code  
> generator), produces a compact 1.6 MB binary. When I compile LLVM’s  
> simple ‘Fibonacci’ example project the executable is 2.6 MB…
>
> I realize LLVM is a complex and feature rich project but could  
> anyone give me a rough idea of where most of the executable size is  
> coming from, and maybe give some ideas on how to reduce it if  
> possible?
>
> It’s not like 2.6 MB is huge but it just seems disproportionate and  
> I’d like to keep my project lightweight (it could be used for  
> embedded systems one day). Note that I’m basically only using the  
> IRBuilder, JIT, and a few common optimization passes. Removing the  
> optimizations doesn’t seem to affect the executable size at all, so  
> I’m starting to wonder whether there are a lot of other unused  
> features ending up in the binary (I’m using Visual C++ 2005 by the  
> way, which is supposed to be quite good at reducing code size).  
> Maybe there is some way to explicitly disable unused features (not  
> compile them or use stubs)? I’m also under the impression that LLVM  
> uses a lot of static (pre-generated) tables, and maybe they could be  
> somewhat smaller when making some extra assumptions?
>

Hi Nicholas,

As others have mentioned, the first step is to find out what is  
consuming the size.  We have done some work to reduce code size, but  
there is still a lot that we can do.  For example, we know that  
killing off the last few uses or RTTI info will shrink generated code  
size by 5-10% or so.

There are other refactorings that can be done to reduce executable  
size.  Specifically, if you're using a JIT, there is no reason to link  
in the code to do .s file printing (and X86 has two versions of this  
code).  This code is non-trivial and pulls in some big string tables.   
Getting this out of the JIT code footprint would require refactoring  
the asmprinter stuff so that it isn't accessible via the X86 target's  
vtable.  This is very doable, but noone has stepped up to do it yet.

I'm sure that there are a ton of other similar things that can be done  
to squeeze it down.

-Chris 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080527/02651190/attachment.html>


More information about the llvm-dev mailing list