* [PATCH] LTO: merge -flto=foo both from IL and linker cmdline
@ 2021-05-13 11:49 Martin Liška
2021-05-17 9:05 ` Richard Biener
0 siblings, 1 reply; 2+ messages in thread
From: Martin Liška @ 2021-05-13 11:49 UTC (permalink / raw)
To: gcc-patches
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?
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
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH] LTO: merge -flto=foo both from IL and linker cmdline
2021-05-13 11:49 [PATCH] LTO: merge -flto=foo both from IL and linker cmdline Martin Liška
@ 2021-05-17 9:05 ` Richard Biener
0 siblings, 0 replies; 2+ messages in thread
From: Richard Biener @ 2021-05-17 9:05 UTC (permalink / raw)
To: Martin Liška; +Cc: GCC Patches
On Thu, May 13, 2021 at 1:49 PM Martin Liška <mliska@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
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-05-17 9:05 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-13 11:49 [PATCH] LTO: merge -flto=foo both from IL and linker cmdline Martin Liška
2021-05-17 9:05 ` Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).