LTO: merge -flto=arg from object files.
gcc/ChangeLog: * lto-wrapper.c (merge_and_complain): Merge -flto=arg options. (run_gcc): Use -flto argument detection for merged fdecoded_options.
This commit is contained in:
parent
7d7d925d0d
commit
3835aa0eb9
1 changed files with 57 additions and 20 deletions
|
@ -425,6 +425,31 @@ merge_and_complain (vec<cl_decoded_option> decoded_options,
|
|||
case OPT_foffload_:
|
||||
decoded_options.safe_push (*foption);
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1490,6 +1515,37 @@ 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)
|
||||
{
|
||||
|
@ -1519,26 +1575,7 @@ run_gcc (unsigned argc, char *argv[])
|
|||
|
||||
case OPT_flto_:
|
||||
if (strcmp (option->arg, "jobserver") == 0)
|
||||
{
|
||||
parallel = 1;
|
||||
jobserver = 1;
|
||||
jobserver_requested = true;
|
||||
}
|
||||
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;
|
||||
jobserver_requested = true;
|
||||
break;
|
||||
|
||||
case OPT_flinker_output_:
|
||||
|
|
Loading…
Add table
Reference in a new issue