On Thu, 29 Jan 2026, Michal Jires wrote:

> This patch adds documentation for flto-toplevel-asm-heuristics
> and mentions it in Remarks in Basic Asm.

OK.

> gcc/ChangeLog:
> 
>       * common.opt.urls: Regenerate.
>       * doc/extend.texi: Mention flto-toplevel-asm-heuristics.
>       * doc/invoke.texi: Add flto-toplevel-asm-heuristics.
> ---
>  gcc/common.opt.urls |  3 +++
>  gcc/doc/extend.texi |  5 +++++
>  gcc/doc/invoke.texi | 22 +++++++++++++++++++++-
>  3 files changed, 29 insertions(+), 1 deletion(-)
> 
> diff --git a/gcc/common.opt.urls b/gcc/common.opt.urls
> index 6c094776187..93e730f2f5d 100644
> --- a/gcc/common.opt.urls
> +++ b/gcc/common.opt.urls
> @@ -1044,6 +1044,9 @@ 
> UrlSuffix(gcc/Optimize-Options.html#index-flto-incremental-cache-size)
>  flto-partition=
>  UrlSuffix(gcc/Optimize-Options.html#index-flto-partition)
>  
> +flto-toplevel-asm-heuristics
> +UrlSuffix(gcc/Optimize-Options.html#index-flto-toplevel-asm-heuristics)
> +
>  flto-compression-level=
>  UrlSuffix(gcc/Optimize-Options.html#index-flto-compression-level)
>  
> diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
> index ac86a2e1484..5e481126069 100644
> --- a/gcc/doc/extend.texi
> +++ b/gcc/doc/extend.texi
> @@ -11507,6 +11507,11 @@ with extended @code{asm}.  See
>  from basic asm to extended asm} for information about how to perform this
>  conversion.
>  
> +LTO typically requires rewriting top-level basic @code{asm} statements to
> +extended @code{asm}.  Otherwise you will likely encounter missing symbol
> +errors by linker.  Alternatively you may use
> +@option{-flto-toplevel-asm-heuristics}.
> +
>  The compiler copies the assembler instructions in a basic @code{asm} 
>  verbatim to the assembly language output file, without 
>  processing dialects or any of the @samp{%} operators that are available with
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index d690305a890..6ea59a2ea57 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -646,7 +646,8 @@ Objective-C and Objective-C++ Dialects}.
>  -floop-unroll-and-jam  -floop-nest-optimize
>  -floop-parallelize-all  -flra-remat  -flto  -flto-compression-level
>  -flto-partition=@var{alg} -flto-incremental=@var{path}
> --flto-incremental-cache-size=@var{n} -fmalloc-dce -fmerge-all-constants
> +-flto-incremental-cache-size=@var{n} -flto-toplevel-asm-heuristics
> +-fmalloc-dce -fmerge-all-constants
>  -fmerge-constants  -fmodulo-sched  -fmodulo-sched-allow-regmoves
>  -fmove-loop-invariants  -fmove-loop-stores  -fno-branch-count-reg
>  -fno-defer-pop  -fno-function-cse
> @@ -15811,6 +15812,25 @@ Multiple GCC instances can use the same cache in 
> parallel.
>  Specifies number of cache entries in incremental LTO after which to prune
>  old entries. This is a soft limit, temporarily there may be more entries.
>  
> +@opindex flto-toplevel-asm-heuristics
> +@item -flto-toplevel-asm-heuristics
> +Enables heuristics to find symbols used in top-level basic @code{asm}.
> +This will restrict link-time optimizations that could cause renaming
> +or deletion of such symbols which would result in missing symbol errors by
> +linker.
> +
> +This flag is intended for projects that have not converted to using top-level
> +extended @code{asm} (@pxref{Extended Asm}), which specify the usage directly
> +without any false positives.
> +
> +The heuristics are simple and do not parse the assembly.
> +The heuristics scan through top-level assembly for all possible identifiers;
> +if an identifier is found among declared symbols, the symbol will be marked 
> to
> +restrict link-time optimizations.  Static symbols disable more optimizations.
> +Identifiers followed by ':' disable more optimizations as well, because they
> +might be a locally defined symbol in assembly, even when the declaration
> +is marked 'extern'.
> +
>  @opindex flto-compression-level
>  @item -flto-compression-level=@var{n}
>  This option specifies the level of compression used for intermediate
> 

-- 
Richard Biener <[email protected]>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to