[LLVMdev] Executable file size comparison
Richard Pennington
rich at pennware.com
Fri Dec 9 03:24:40 PST 2011
On Friday, December 09, 2011 02:53:25 AM Csaba Raduly wrote:
> On Thu, Dec 8, 2011 at 11:46 PM, Richard Pennington wrote:
> > On Thursday, December 08, 2011 02:46:39 AM Csaba Raduly wrote:
> >> On Wed, Dec 7, 2011 at 9:43 PM, Richard Pennington wrote:
> >> > I compiled a program and standard library using clang/LLVM and found
> >> > the results interesting:
> >> >
> >> > text data bss dec hex filename
> >> > 141312 4076 16668 162056 27908 bzip2.arm
> >> > 131764 4076 16668 152508 253bc bzip2.armv7
> >> > 134748 4048 16624 155420 25f1c bzip2.i386
> >> > 259112 4028 16732 279872 44540 bzip2.microblaze
> >> > 168044 4040 16816 188900 2e1e4 bzip2.mips
> >> > 167860 4040 16816 188716 2e12c bzip2.mips32r2
> >> > 179032 4040 16816 199888 30cd0 bzip2.mips32r2elsf
> >> > 179008 4040 16816 199864 30cb8 bzip2.mips32r2sf
> >> > 168060 4040 16816 188916 2e1f4 bzip2.mipsel
> >> > 156312 4028 16784 177124 2b3e4 bzip2.ppc
> >> > 163572 10896 19280 193748 2f4d4 bzip2.ppc64
> >> > 145443 4696 19368 169507 29623 bzip2.x86_64
> >> >
> >> > The libraries were compiled with -O1 and the program was compiled with
> >> > -O2. The whole thing was statically linked. I verified that each
> >> > executable was correct by running the bzip2 test cases under QEMU.
> >> >
> >> > It is interesting to see how the architecture (and maybe maturity of
> >> > the code generator) affects code size.
> >>
> >> What could be so different in ppc64 that causes "data" to be more than
> >> twice the size than on any other platform?
> >>
> >> Csaba
> >
> > Csaba,
> >
> > It turns out that most of the data space used by the ppc64 is for a
> > little table created for each function defined in the program. The table
> > has two 64 bit pointers in it, one is the address of the function. This
> > is how Linux ppc64 executables are built: the table is used to
> > indirectly call functions. There are many of these little tables in the
> > program because it is statically linked with the standard library.
>
> Can you try with GCC? Does it present the same symptom (data more than
> 2x as large than other platforms)?
>
> Csaba
Csaba,
I'm setting up the library for a gcc build now (for a friend). When I get that
going, I'll try to find a ppc64 version of gcc to test it. The beauty of
clang/LLVM is that I only need to build it once and I get all the targets. :-)
-Rich
More information about the llvm-dev
mailing list