On Thu, May 13, 2021 at 1:49 PM Martin Liška <mli...@suse.cz> wrote: > > Hello. > > In g:3835aa0eb90292d652dd6b200f302f3cac7e643f, I changed logic that the output > -flto=foo argument is taken from IL file command lines. However, it should be > also > merged with linker command line. One can use -flto for compilation and > -flto=16 for linking. > > Ready after it finishes tests?
OK. Richard. > Thanks, > Martin > > gcc/ChangeLog: > > * lto-wrapper.c (merge_flto_options): Factor out a new function. > (merge_and_complain): Use it. > (run_gcc): Merge also linker command line -flto=foo argument > with IL files. > --- > gcc/lto-wrapper.c | 118 +++++++++++++++++++++++++--------------------- > 1 file changed, 65 insertions(+), 53 deletions(-) > > diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c > index a71d6147152..1c2643984f9 100644 > --- a/gcc/lto-wrapper.c > +++ b/gcc/lto-wrapper.c > @@ -189,6 +189,37 @@ find_option (vec<cl_decoded_option> &options, > cl_decoded_option *option) > return find_option (options, option->opt_index); > } > > +/* Merge -flto FOPTION into vector of DECODED_OPTIONS. */ > + > +static void > +merge_flto_options (vec<cl_decoded_option> &decoded_options, > + cl_decoded_option *foption) > +{ > + int existing_opt = find_option (decoded_options, foption); > + if (existing_opt == -1) > + decoded_options.safe_push (*foption); > + else > + { > + if (strcmp (foption->arg, decoded_options[existing_opt].arg) != 0) > + { > + /* -flto=auto is preferred. */ > + if (strcmp (decoded_options[existing_opt].arg, "auto") == 0) > + ; > + else if (strcmp (foption->arg, "auto") == 0 > + || strcmp (foption->arg, "jobserver") == 0) > + decoded_options[existing_opt].arg = foption->arg; > + else if (strcmp (decoded_options[existing_opt].arg, > + "jobserver") != 0) > + { > + int n = atoi (foption->arg); > + int original_n = atoi (decoded_options[existing_opt].arg); > + if (n > original_n) > + decoded_options[existing_opt].arg = foption->arg; > + } > + } > + } > +} > + > /* Try to merge and complain about options FDECODED_OPTIONS when applied > ontop of DECODED_OPTIONS. */ > > @@ -427,28 +458,7 @@ merge_and_complain (vec<cl_decoded_option> > decoded_options, > break; > > case OPT_flto_: > - if (existing_opt == -1) > - decoded_options.safe_push (*foption); > - else > - { > - if (strcmp (foption->arg, decoded_options[existing_opt].arg) != > 0) > - { > - /* -flto=auto is preferred. */ > - if (strcmp (decoded_options[existing_opt].arg, "auto") == 0) > - ; > - else if (strcmp (foption->arg, "auto") == 0 > - || strcmp (foption->arg, "jobserver") == 0) > - decoded_options[existing_opt].arg = foption->arg; > - else if (strcmp (decoded_options[existing_opt].arg, > - "jobserver") != 0) > - { > - int n = atoi (foption->arg); > - int original_n = atoi > (decoded_options[existing_opt].arg); > - if (n > original_n) > - decoded_options[existing_opt].arg = foption->arg; > - } > - } > - } > + merge_flto_options (decoded_options, foption); > break; > } > } > @@ -1515,37 +1525,6 @@ run_gcc (unsigned argc, char *argv[]) > append_compiler_options (&argv_obstack, fdecoded_options); > append_linker_options (&argv_obstack, decoded_options); > > - /* Process LTO-related options on merged options. */ > - for (j = 1; j < fdecoded_options.length (); ++j) > - { > - cl_decoded_option *option = &fdecoded_options[j]; > - switch (option->opt_index) > - { > - case OPT_flto_: > - if (strcmp (option->arg, "jobserver") == 0) > - { > - parallel = 1; > - jobserver = 1; > - } > - else if (strcmp (option->arg, "auto") == 0) > - { > - parallel = 1; > - auto_parallel = 1; > - } > - else > - { > - parallel = atoi (option->arg); > - if (parallel <= 1) > - parallel = 0; > - } > - /* Fallthru. */ > - > - case OPT_flto: > - lto_mode = LTO_MODE_WHOPR; > - break; > - } > - } > - > /* Scan linker driver arguments for things that are of relevance to us. > */ > for (j = 1; j < decoded_options.length (); ++j) > { > @@ -1574,6 +1553,8 @@ run_gcc (unsigned argc, char *argv[]) > break; > > case OPT_flto_: > + /* Merge linker -flto= option with what we have in IL files. */ > + merge_flto_options (fdecoded_options, option); > if (strcmp (option->arg, "jobserver") == 0) > jobserver_requested = true; > break; > @@ -1596,6 +1577,37 @@ run_gcc (unsigned argc, char *argv[]) > } > } > > + /* Process LTO-related options on merged options. */ > + for (j = 1; j < fdecoded_options.length (); ++j) > + { > + cl_decoded_option *option = &fdecoded_options[j]; > + switch (option->opt_index) > + { > + case OPT_flto_: > + if (strcmp (option->arg, "jobserver") == 0) > + { > + parallel = 1; > + jobserver = 1; > + } > + else if (strcmp (option->arg, "auto") == 0) > + { > + parallel = 1; > + auto_parallel = 1; > + } > + else > + { > + parallel = atoi (option->arg); > + if (parallel <= 1) > + parallel = 0; > + } > + /* Fallthru. */ > + > + case OPT_flto: > + lto_mode = LTO_MODE_WHOPR; > + break; > + } > + } > + > /* Output lto-wrapper invocation command. */ > if (verbose) > { > -- > 2.31.1 >