Files
gcc-reflection/gcc/ipa.cc
Michal Jires 4003b752f7 ipa: Add flag ref_by_asm to symtab_node
ref_by_asm will be used by toplevel assembly to mark symbols that cannot
be removed.
It largely overlaps with force_output. Main difference is that ref_by_asm
is meaningful on declarations by not removing them. force_output with
declaration is ignored, which cannot be easily changed, since several
places depend on this behavior.

Global ref_by_asm should not be localized, because they cannot benefit
from it. It would only result in complications, for example by renaming
the symbol.

Notes on different solutions in unreachability analysis:
First unreachability analysis is done in analyze_functions. Marking
ref_by_asm declarations as needed from the start would require reprocessing,
because some declarations may gain definition during the analysis.
Since at this point declarations do not need adding any other symbol,
we can check for ref_by_asm at the end, next to referred_to_p check.

Second unreachability analysis is in remove_unreachable_nodes. Here
declarations (or symbols in_other_partition) may require an alias.
So there we need to add the declarations from the start.

gcc/ChangeLog:

	* cgraph.cc (cgraph_node_cannot_be_local_p_1): Check ref_by_asm.
	(cgraph_node::verify_node): Likewise.
	* cgraph.h (cgraph_node::only_called_directly_or_aliased_p):
	Likewise.
	(cgraph_node::can_remove_if_no_direct_calls_and_refs_p):
	Likewise.
	(varpool_node::can_remove_if_no_refs_p): Likewise.
	(varpool_node::all_refs_explicit_p): Likewise.
	* cgraphunit.cc (symtab_node::needed_p): Likewise.
	(analyze_functions): Likewise.
	* gimple-ssa-pta-constraints.cc (refered_from_nonlocal_fn):
	Likewise.
	(refered_from_nonlocal_var): Likewise.
	(ipa_create_global_variable_infos): Likewise.
	* ipa-comdats.cc (ipa_comdats): Likewise.
	* ipa-visibility.cc (cgraph_externally_visible_p): Likewise.
	(varpool_node::externally_visible_p): Likewise.
	* ipa.cc (symbol_table::remove_unreachable_nodes): Likewise.
	* lto-cgraph.cc (lto_output_node): Output ref_by_asm.
	(lto_output_varpool_node): Likewise.
	(input_overwrite_node): Input ref_by_asm.
	(input_varpool_node): Likewise.
	* symtab.cc (address_matters_1): Check ref_by_asm.

gcc/lto/ChangeLog:

	* lto-symtab.cc (lto_cgraph_replace_node): Propagate ref_by_asm.
	(lto_varpool_replace_node): Propagate ref_by_asm.
2026-01-11 22:48:53 +01:00

47 KiB