[LTO][PATCH] Add lang-hooks for LTO operation modes.

Diego Novillo dnovillo@google.com
Fri Sep 19 13:54:00 GMT 2008


Doug Kwan (關振德) wrote:
> This the second attempt.  I eliminated the lang-hooks.   Now the
> driver takes 4 LTO options.
> 
>  -flto
>  -flto-single
>  -fwpa
>  -fltran

Excellent, I like this version better, thanks.

> 2008-09-18  Doug Kwan  <dougkwan@google.com>
> 
>         * gcc.c (gcc_lto_option_t): New type.
>         (current_lto_option): New variable.
>         (lto_single_spec_function): Remove and is replaced by ..
>         (lto_option_spec_function): New function.
>         (LINK_COMMAND_SPEC): Use link_lto_option spec instead of just
>         passing the -flto flag.
>         (cc1_options): Separate non-LTO related parts into ..
>         (cc1_non_lto_options): Non-LTO related options shared by all FEs.
>         (lto1_options): New spec for lto FE.
>         (link_lto_options): New spec for handling LTO flags in linker.
>         (invoke_lto_single): Re-format to fit in 80 column.  Replace
>         lto-single with lto-option.
>         (static_specs): Add cc1_non_lto_options, lto1_options and
>         link_lto_options.
>         (static_spec_function): Replace lto-single with lto-option.
>         (process_command): Handle -flto, -flto-single, -fwpa and -fltran
>         by setting current_lto_option and not passing it to subprocess
>         unconditionally..
>         * ipa-inline.c (cgraph_decide_inlining): Do not remove hook if
>         LTO is running in WPA mode.
>         * opts.c (common_handle_option): Handle -flto, -fltran and -fwpa.
>         * common.opt: (flto): Reject negative.
>         (fltran): New option.
>         (fwpa): Reject negative. Update description.
>         * doc/invoke.text (fwpa): Update.
>         (fltran): New flag.
> 
> lto/ChangeLog:
> 
> 2008-09-18  Doug Kwan  <dougkwan@google.com>
> 
>         lto.c (lto_main): Remove unsued wrapper code.
>         lang-specs.h (@lto): Use lto1_options instead of cc1_options.

> -Disable by default.
> +Disable by default.  This options is only supported by the LTO frontend.

s/Disable/Disabled/

> +
> +@item -fltran
> +@opindex fltran
> +This option runs the link-time optimizer in the local-transformation (LTRAN)

s/ltran/ltrans/
s/LTRAN/LTRANS/

Happens in several other places as well.

> +mode, which reads in output from a previous run of the LTO in WPA mode.
> +In the LTRAN mode, LTO optimizes an object and produces the final assembly.

s/In the LTRAN/In LTRANS/

> +/* LTO state.  The LTO options are related and not all combination are
> +   meaningful.  Treat each LTO option as a state and only use the last
> +   specificied option.  The option may be modified before the driver passes

s/specificied/specified/

> +/* NB: This is shared amongst all front-ends except lto1.  */
> +/* FIXME lto: -O2 is needed as a temporary workaround.  Remove.  */
> +static const char *cc1_options =
> +"%(cc1_non_lto_options)\
> + %{!?lto-option(none): -O2 -flto} ";

I *think* we should be able to remove -O2 now, since -O0 is now 
operating in unit-at-a-time, but this is for another patch.

> -  return ((lto_single) ? "lto-single" : NULL);
> +  /* We could use array element designators here but that would not
> +     be compilable on a C++ compiler.  */

Hmm?  This should work:

static const char *const names[] = { "none", "lto", "lto-single", "wpa", 
"ltran" };


OK with those changes.


Diego.



More information about the Gcc-patches mailing list