On Tue, 4 Mar 2014, Jan Hubicka wrote: > > > > The following patch addresses the common (?) issue of people > > omitting -flto from the linker command-line which gets more > > severe with GCC 4.9 where slim LTO objects are emitted by > > default. The patch simply _always_ arranges for the linker > > plugin to be used, so if there are any (slim) LTO objects > > on the link LTO will be done on them. Similarly the > > non-linker-plugin path in collect2 is adjusted. > > > > You can still disable this by specifying -fno-lto on the > > linker command-line. > > > > One side-effect of enabling the linker-plugin by default > > (for HAVE_LTO_PLUGIN == 2) is that collect2 will then > > use the configured plugin ld rather than the default ld. > > Not sure if that is desired. > > > > Comments? > > I like it; it was on my TODO list, but I was only worried about > --with-plugin-ld and did not find time, yet, to look into the consequences. > These days, I do not think we need to worry much aboud --with-plugin-ld.
Yeah, I think we should eventually remove that capability. Now as of the two patches (compute a default link-time optimization level and this patch, make considering LTO at link-time the default), they only make sense together (at least the default opt level at link-time doesn't improve real-world situations without also considering all links to be possibly -flto). So the question remains if we want to have both patches at this stage or if we want to wait with them for 4.10 (we do have the user-visible change of slim-lto objects by default with 4.9 already). Thanks, Richard. > Honza > > > > Thanks, > > Richard. > > > > 2014-03-04 Richard Biener <rguent...@suse.de> > > > > * gcc.c (PLUGIN_COND): Always enable unless -fno-use-linker-plugin > > or -fno-lto is specified and the linker has full plugin support. > > * collect2.c (lto_mode): Default to LTO_MODE_WHOPR if LTO is > > enabled. > > (main): Remove -flto processing, adjust lto_mode using > > use_plugin late. > > > > Index: gcc/gcc.c > > =================================================================== > > --- gcc/gcc.c (revision 208310) > > +++ gcc/gcc.c (working copy) > > @@ -695,7 +695,7 @@ proper position among the other output f > > #if HAVE_LTO_PLUGIN > 0 > > /* The linker used has full plugin support, use LTO plugin by default. */ > > #if HAVE_LTO_PLUGIN == 2 > > -#define PLUGIN_COND > > "!fno-use-linker-plugin:%{flto|flto=*|fuse-linker-plugin" > > +#define PLUGIN_COND "!fno-use-linker-plugin:%{!fno-lto" > > #define PLUGIN_COND_CLOSE "}" > > #else > > /* The linker used has limited plugin support, use LTO plugin with explicit > > Index: gcc/collect2.c > > =================================================================== > > --- gcc/collect2.c (revision 208310) > > +++ gcc/collect2.c (working copy) > > @@ -192,7 +192,11 @@ enum lto_mode_d { > > }; > > > > /* Current LTO mode. */ > > +#ifdef ENABLE_LTO > > +static enum lto_mode_d lto_mode = LTO_MODE_WHOPR; > > +#else > > static enum lto_mode_d lto_mode = LTO_MODE_NONE; > > +#endif > > > > bool debug; /* true if -debug */ > > bool helpflag; /* true if --help */ > > @@ -1018,15 +1022,11 @@ main (int argc, char **argv) > > debug = true; > > else if (! strcmp (argv[i], "-flto-partition=none")) > > no_partition = true; > > - else if ((! strncmp (argv[i], "-flto=", 6) > > - || ! strcmp (argv[i], "-flto")) && ! use_plugin) > > - lto_mode = LTO_MODE_WHOPR; > > else if (!strncmp (argv[i], "-fno-lto", 8)) > > lto_mode = LTO_MODE_NONE; > > else if (! strcmp (argv[i], "-plugin")) > > { > > use_plugin = true; > > - lto_mode = LTO_MODE_NONE; > > if (selected_linker == USE_DEFAULT_LD) > > selected_linker = USE_PLUGIN_LD; > > } > > @@ -1056,6 +1056,8 @@ main (int argc, char **argv) > > } > > vflag = debug; > > find_file_set_debug (debug); > > + if (use_plugin) > > + lto_mode = LTO_MODE_NONE; > > if (no_partition && lto_mode == LTO_MODE_WHOPR) > > lto_mode = LTO_MODE_LTO; > > } > > -- Richard Biener <rguent...@suse.de> SUSE / SUSE Labs SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 GF: Jeff Hawn, Jennifer Guild, Felix Imend"orffer