doc: Explain flto-toplevel-asm-heuristics

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

gcc/ChangeLog:

	* doc/extend.texi: Mention flto-toplevel-asm-heuristics.
	* doc/invoke.texi: Add flto-toplevel-asm-heuristics.
This commit is contained in:
Michal Jires
2026-01-29 15:07:49 +01:00
parent f28f4ddcfd
commit bf9abf065e
2 changed files with 21 additions and 3 deletions

View File

@@ -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

View File

@@ -16088,9 +16088,22 @@ a default balanced compression setting is used.
@opindex flto-toplevel-asm-heuristics
@item -flto-toplevel-asm-heuristics
Enable heuristics to recognize symbol identifiers in top-level basic asm
(@pxref{Basic Asm}), and prevent them from being mangled or deleted during
link-time optimization.
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 fuse-linker-plugin
@item -fuse-linker-plugin