What's new in GCC 4.5?
Posted May 12, 2010 21:26 UTC (Wed) by nix (subscriber, #2304)
Posted May 14, 2010 18:13 UTC (Fri) by giraffedata (subscriber, #1954)
the individual object files are driven all the way to assembler
What does that mean?
Posted May 14, 2010 19:21 UTC (Fri) by nix (subscriber, #2304)
When linking with -flto, only the GIMPLE form is used and the native code in the .o files (and .a files if gold(1) is in use) is thrown away; when linking without it, only the non-GIMPLE form is used, and the GIMPLE in the .o files is thrown away.
(IIRC, of course. I haven't been paying enough attention to GCC development for the last year or so for this to be more authoritative than the ramblings of any passing madman. I should really have waited for jwakely to answer more authoritatively...)
Posted May 14, 2010 21:18 UTC (Fri) by giraffedata (subscriber, #1954)
I suppose the objective is not just to let someone choose a non-LTO link, but for the .o file to be useful by a linker that doesn't even know what LTO is.
I was going to say the time to write the GIMPLE shouldn't be enough to be a consideration against using -lto, but then I remembered that I once avoided compiling with debugging information because I was using NFS and writing the .o files took significantly longer with -g.
Posted May 14, 2010 21:45 UTC (Fri) by nix (subscriber, #2304)
Posted May 14, 2010 22:51 UTC (Fri) by giraffedata (subscriber, #1954)
First, to be clear, I'm using the term "linker" in the same sense as the phrase "link time" in the name LTO, which means the linker is GCC. GCC is the program to which you feed .o files and get an executable out.
If instead of using GCC to link my .o files I use GNU 'ld', it will still work, right? And it looks like 'ld' doesn't know what LTO is.
Even GCC doesn't always know what LTO is. GCC 3 doesn't.
LTO could have been designed so that 'ld' and GCC 3 could not link the .o files created by gcc -flto, but it looks to me like it was a design objective that they be able to.
Posted May 14, 2010 22:43 UTC (Fri) by stevenb (guest, #11536)
So the GIMPLE goes through the compiler pipeline twice: during compilation to an object file, and during link time optimizations. That is where the extra cost comes from.
We have our smartest people working on a solution for this... ;-)
Posted May 15, 2010 2:13 UTC (Sat) by jwakely (guest, #60262)
I only focus on the C++ library so I'm not up to speed on LTO either, but stevenb is :-)
Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds