I'm sending slightly updated version of the patch where I allow -flto=auto in common_handle_option.
Martin
>From cc04dfc9dbf2ed91a021093d1d27b81848ea726b Mon Sep 17 00:00:00 2001 From: Martin Liska <mli...@suse.cz> Date: Mon, 5 Aug 2019 06:44:25 +0200 Subject: [PATCH] Add -flto=auto option value. gcc/ChangeLog: 2019-08-05 Martin Liska <mli...@suse.cz> * doc/invoke.texi: Document the option value. * lto-wrapper.c (run_gcc): Set auto_parallel only with -flto=auto. gcc/testsuite/ChangeLog: 2019-08-05 Martin Liska <mli...@suse.cz> * g++.dg/lto/devirt-19_0.C: Add -flto=auto. --- gcc/doc/invoke.texi | 8 ++++++-- gcc/lto-wrapper.c | 18 ++++++++---------- gcc/opts.c | 1 + gcc/testsuite/g++.dg/lto/devirt-19_0.C | 2 +- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 01aab60f895..ba9cca9de84 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -10415,8 +10415,7 @@ If you specify the optional @var{n}, the optimization and code generation done at link time is executed in parallel using @var{n} parallel jobs by utilizing an installed @command{make} program. The environment variable @env{MAKE} may be used to override the program -used. The default value for @var{n} is automatically detected based -on number of cores. +used. You can also specify @option{-flto=jobserver} to use GNU make's job server mode to determine the number of parallel jobs. This @@ -10425,6 +10424,11 @@ You must prepend a @samp{+} to the command recipe in the parent Makefile for this to work. This option likely only works if @env{MAKE} is GNU make. +One can also use @option{-flto=auto} to either use GNU make's +job server mode to determine the number of parallel jobs, if available. +Or the default value for @var{n} is automatically detected based +on number of cores. + @item -flto-partition=@var{alg} @opindex flto-partition Specify the partitioning algorithm used by the link-time optimizer. diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index f1253cdc91c..84f59cf1a1f 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -1252,8 +1252,7 @@ run_gcc (unsigned argc, char *argv[]) char *list_option_full = NULL; const char *linker_output = NULL; const char *collect_gcc, *collect_gcc_options; - /* Make linking parallel by default. */ - int parallel = 1; + int parallel = 0; int jobserver = 0; int auto_parallel = 0; bool no_partition = false; @@ -1380,6 +1379,11 @@ run_gcc (unsigned argc, char *argv[]) case OPT_flto_: if (strcmp (option->arg, "jobserver") == 0) jobserver = 1; + else if (strcmp (option->arg, "auto") == 0) + { + parallel = 1; + auto_parallel = 1; + } else { parallel = atoi (option->arg); @@ -1423,14 +1427,8 @@ run_gcc (unsigned argc, char *argv[]) auto_parallel = 0; parallel = 0; } - else if (!jobserver && parallel) - { - /* If there's no explicit usage of jobserver and - parallel is enabled, then automatically detect - jobserver or number of cores. */ - auto_parallel = 1; - jobserver = jobserver_active_p (); - } + else if (!jobserver && auto_parallel) + jobserver = jobserver_active_p (); if (linker_output) { diff --git a/gcc/opts.c b/gcc/opts.c index a0a77893448..bb0d8b5e7db 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -2825,6 +2825,7 @@ common_handle_option (struct gcc_options *opts, case OPT_flto_: if (strcmp (arg, "none") != 0 && strcmp (arg, "jobserver") != 0 + && strcmp (arg, "auto") != 0 && atoi (arg) == 0) error_at (loc, "unrecognized argument to %<-flto=%> option: %qs", arg); diff --git a/gcc/testsuite/g++.dg/lto/devirt-19_0.C b/gcc/testsuite/g++.dg/lto/devirt-19_0.C index 696d8c0fc83..b43527e324e 100644 --- a/gcc/testsuite/g++.dg/lto/devirt-19_0.C +++ b/gcc/testsuite/g++.dg/lto/devirt-19_0.C @@ -1,5 +1,5 @@ /* { dg-lto-do link } */ /* { dg-lto-options { "-O2 -fdump-ipa-cp -Wno-return-type -flto -r -nostdlib" } } */ -/* { dg-extra-ld-options "-flinker-output=nolto-rel" } */ +/* { dg-extra-ld-options "-flinker-output=nolto-rel -flto=auto" } */ #include "../ipa/devirt-19.C" /* { dg-final { scan-wpa-ipa-dump-times "Discovered a virtual call to a known target" 1 "cp" } } */ -- 2.22.0