Hi, this patch switches the default for fat-lto-objects as was documented for a while. -ffat-lto-objects doubles compilation time and often makes users to not notice that LTO was not used at all (because they forgot to use gcc-ar/gcc-nm plugins).
Sadly I had to add -ffat-lto-objects to bootstrap. This is because I do not know how to convince our build machinery to use gcc-ar/gcc-nm during the stage2+ ltobootstrapped/regtested ppc64-linux, OK? Honza * config/bootstrap-lto.mk: Use -ffat-lto-objects. * common.opt (ffat-lto-objects): Disable by default. * doc/invoke.texi (fat-lto-objects): Update documentation. * opts.c: Enable fat-lto-objects on lto plugin disable setups. Index: config/bootstrap-lto.mk =================================================================== *** config/bootstrap-lto.mk (revision 204971) --- config/bootstrap-lto.mk (working copy) *************** *** 1,5 **** # This option enables LTO for stage2 and stage3. ! STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1 ! STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1 STAGEprofile_CFLAGS += -fno-lto --- 1,7 ---- # This option enables LTO for stage2 and stage3. + # FIXME: Our build system is not yet able to use gcc-ar wrapper, so we need + # to go with -ffat-lto-objects. ! STAGE2_CFLAGS += -flto=jobserver -frandom-seed=1 -ffat-lto-objects ! STAGE3_CFLAGS += -flto=jobserver -frandom-seed=1 -ffat-lto-objects STAGEprofile_CFLAGS += -fno-lto Index: gcc/common.opt =================================================================== *** gcc/common.opt (revision 204971) --- gcc/common.opt (working copy) *************** ffast-math *** 1156,1162 **** Common ffat-lto-objects ! Common Var(flag_fat_lto_objects) Init(1) Output lto objects containing both the intermediate language and binary output. ffinite-math-only --- 1156,1162 ---- Common ffat-lto-objects ! Common Var(flag_fat_lto_objects) Output lto objects containing both the intermediate language and binary output. ffinite-math-only Index: gcc/doc/invoke.texi =================================================================== *** gcc/doc/invoke.texi (revision 204971) --- gcc/doc/invoke.texi (working copy) *************** need to support linker plugins to allow *** 8588,8596 **** @command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options to these tools. With non fat LTO makefiles need to be modified to use them. ! The default is @option{-ffat-lto-objects} but this default is intended to ! change in future releases when linker plugin enabled environments become more ! common. @item -fcompare-elim @opindex fcompare-elim --- 8588,8595 ---- @command{gcc-nm}, @command{gcc-ranlib} wrappers to pass the right options to these tools. With non fat LTO makefiles need to be modified to use them. ! The default is @option{-fno-fat-lto-objects} on targets with linker plugin ! support. @item -fcompare-elim @opindex fcompare-elim Index: gcc/opts.c =================================================================== *** gcc/opts.c (revision 204971) --- gcc/opts.c (working copy) *************** finish_options (struct gcc_options *opts *** 806,813 **** error_at (loc, "LTO support has not been enabled in this configuration"); #endif if (!opts->x_flag_fat_lto_objects && !HAVE_LTO_PLUGIN) ! error_at (loc, "-fno-fat-lto-objects are supported only with linker plugin."); ! } if ((opts->x_flag_lto_partition_balanced != 0) + (opts->x_flag_lto_partition_1to1 != 0) + (opts->x_flag_lto_partition_none != 0) >= 1) { --- 806,817 ---- error_at (loc, "LTO support has not been enabled in this configuration"); #endif if (!opts->x_flag_fat_lto_objects && !HAVE_LTO_PLUGIN) ! { ! if (opts_set->x_flag_fat_lto_objects) ! error_at (loc, "-fno-fat-lto-objects are supported only with linker plugin."); ! opts->x_flag_fat_lto_objects = 1; ! } ! } if ((opts->x_flag_lto_partition_balanced != 0) + (opts->x_flag_lto_partition_1to1 != 0) + (opts->x_flag_lto_partition_none != 0) >= 1) {