GCC Middle and Back End API Reference
alias.h File Reference

Go to the source code of this file.

Macros

#define ALIAS_SET_MEMORY_BARRIER   ((alias_set_type) -1)
 

Functions

alias_set_type new_alias_set (void)
 
alias_set_type get_alias_set (tree)
 
alias_set_type get_deref_alias_set (tree)
 
alias_set_type get_varargs_alias_set (void)
 
alias_set_type get_frame_alias_set (void)
 
tree component_uses_parent_alias_set_from (const_tree)
 
bool ends_tbaa_access_path_p (const_tree)
 
bool alias_set_subset_of (alias_set_type, alias_set_type)
 
void record_alias_subset (alias_set_type, alias_set_type)
 
void record_component_aliases (tree)
 
bool alias_sets_conflict_p (alias_set_type, alias_set_type)
 
bool alias_sets_must_conflict_p (alias_set_type, alias_set_type)
 
bool objects_must_conflict_p (tree, tree)
 
bool nonoverlapping_memrefs_p (const_rtx, const_rtx, bool)
 
void dump_alias_stats_in_alias_c (FILE *s)
 
tree reference_alias_ptr_type (tree)
 
tree reference_alias_ptr_type_1 (tree *)
 
bool alias_ptr_types_compatible_p (tree, tree)
 
int compare_base_decls (tree, tree)
 
bool refs_same_for_tbaa_p (tree, tree)
 
bool mems_same_for_tbaa_p (rtx, rtx)
 
bool view_converted_memref_p (tree)
 

Macro Definition Documentation

◆ ALIAS_SET_MEMORY_BARRIER

#define ALIAS_SET_MEMORY_BARRIER   ((alias_set_type) -1)
This alias set can be used to force a memory to conflict with all other memories, creating a barrier across which no memory reference can move. Note that there are other legacy ways to create such memory barriers, including an address of SCRATCH.

Referenced by check_mem_read_rtx(), get_builtin_sync_mem(), may_alias_p(), read_dependence(), true_dependence_1(), and write_dependence_p().

Function Documentation

◆ alias_ptr_types_compatible_p()

bool alias_ptr_types_compatible_p ( tree t1,
tree t2 )
Return whether the pointer-types T1 and T2 used to determine two alias sets of two references will yield the same answer from get_deref_alias_set.

References get_deref_alias_set(), ref_all_alias_ptr_type_p(), TREE_TYPE, and TYPE_MAIN_VARIANT.

Referenced by ao_compare::compare_ao_refs(), and operand_compare::operand_equal_p().

◆ alias_set_subset_of()

◆ alias_sets_conflict_p()

◆ alias_sets_must_conflict_p()

bool alias_sets_must_conflict_p ( alias_set_type set1,
alias_set_type set2 )
extern
Return true if the two specified alias sets will always conflict.

References alias_stats.

Referenced by alias_sets_conflict_p(), and objects_must_conflict_p().

◆ compare_base_decls()

int compare_base_decls ( tree base1,
tree base2 )
BASE1 and BASE2 are decls. Return 1 if they refer to same object, 0 if they refer to different objects and -1 if we cannot decide.

References DECL_ASSEMBLER_NAME_RAW, DECL_ASSEMBLER_NAME_SET_P, DECL_HARD_REGISTER, decl_in_symtab_p(), DECL_P, symtab_node::equal_address_to(), gcc_checking_assert, symtab_node::get(), and VAR_P.

Referenced by compare_base_symbol_refs(), decl_refs_may_alias_p(), nonoverlapping_memrefs_p(), and ptr_deref_may_alias_decl_p().

◆ component_uses_parent_alias_set_from()

tree component_uses_parent_alias_set_from ( const_tree t)
extern
Return the outermost parent of component present in the chain of component references handled by get_inner_reference in T with the following property: - the component is non-addressable or NULL_TREE if no such parent exists. In the former cases, the alias set of this parent is the alias set that must be used for T itself.

References ends_tbaa_access_path_p(), handled_component_p(), NULL_TREE, and TREE_OPERAND.

Referenced by reference_alias_ptr_type_1(), and set_mem_attributes_minus_bitpos().

◆ dump_alias_stats_in_alias_c()

void dump_alias_stats_in_alias_c ( FILE * s)
extern

References alias_stats.

Referenced by dump_alias_stats().

◆ ends_tbaa_access_path_p()

bool ends_tbaa_access_path_p ( const_tree t)
extern

◆ get_alias_set()

alias_set_type get_alias_set ( tree t)
extern
Return the alias set for T, which may be either a type or an expression. Call language-specific routine for help, if needed.

References AGGREGATE_TYPE_P, build_pointer_type(), build_reference_type(), canonical_type_used_p(), COMPLETE_TYPE_P, DECL_RTL, DECL_RTL_SET_P, error_mark_node, gcc_checking_assert, get_alias_set(), lang_hooks::get_alias_set, get_alias_set_entry(), get_deref_alias_set(), alias_set_entry::has_pointer, init_alias_set_entry(), alias_set_entry::is_pointer, MEM_ALIAS_SET, MEM_P, new_alias_set(), NULL, odr_type_p(), POINTER_TYPE_P, prevailing_odr_type(), ptr_type_node, record_component_aliases(), reference_alias_ptr_type_1(), STRIP_NOPS, TREE_CODE, TREE_TYPE, TYPE_ALIAS_SET, TYPE_ALIAS_SET_KNOWN_P, TYPE_CANONICAL, TYPE_MAIN_VARIANT, TYPE_NONALIASED_COMPONENT, TYPE_P, TYPE_STRUCTURAL_EQUALITY_P, TYPE_TYPELESS_STORAGE, type_with_alias_set_p(), and VAR_P.

Referenced by ao_ref_alias_set(), ao_ref_base_alias_set(), assign_stack_temp_for_type(), check_scan_store(), dr_may_alias_p(), dump_lto_records(), expand_assignment(), expand_builtin_va_copy(), get_alias_set(), get_deref_alias_set(), ipa_polymorphic_call_context::get_dynamic_type(), get_group_alias_ptr_type(), gimple_get_alias_set(), gimplify_init_constructor(), gimplify_init_ctor_preeval_1(), make_bit_field_ref(), objects_must_conflict_p(), record_component_aliases(), record_component_aliases(), safe_from_p(), same_type_for_tbaa(), set_mem_attributes_minus_bitpos(), store_constructor(), vect_analyze_data_ref_dependence(), vect_create_data_ref_ptr(), vectorizable_load(), and vectorizable_store().

◆ get_deref_alias_set()

alias_set_type get_deref_alias_set ( tree t)
extern
Return the alias set for the memory pointed to by T, which may be either a type or an expression.

References get_alias_set(), get_deref_alias_set_1(), TREE_TYPE, and TYPE_P.

Referenced by alias_ptr_types_compatible_p(), call_may_clobber_ref_p_1(), get_alias_set(), ipa_icf::sem_item_optimizer::read_section(), ref_maybe_used_by_call_p_1(), and vn_reference_lookup_3().

◆ get_frame_alias_set()

◆ get_varargs_alias_set()

alias_set_type get_varargs_alias_set ( void )
extern

◆ mems_same_for_tbaa_p()

bool mems_same_for_tbaa_p ( rtx earlier,
rtx later )
Similar to refs_same_for_tbaa_p() but for use on MEM rtxs.

References alias_set_subset_of(), gcc_assert, MEM_ALIAS_SET, MEM_EXPR, MEM_P, and refs_same_for_tbaa_p().

Referenced by cselib_redundant_set_p(), record_store(), and store_expr().

◆ new_alias_set()

alias_set_type new_alias_set ( void )
extern
Exported functions from alias.cc Copyright (C) 2004-2025 Free Software Foundation, Inc. This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Return a brand-new alias set.

References alias_sets, NULL, and vec_safe_push().

Referenced by asan_init_shadow_ptr_types(), expand_builtin_longjmp(), expand_builtin_setjmp_setup(), get_alias_set(), get_frame_alias_set(), get_spill_slot_decl(), get_varargs_alias_set(), and rt_bb_visited::rt_bb_visited().

◆ nonoverlapping_memrefs_p()

bool nonoverlapping_memrefs_p ( const_rtx x,
const_rtx y,
bool loop_invariant )
extern

◆ objects_must_conflict_p()

bool objects_must_conflict_p ( tree t1,
tree t2 )
extern
Return true if any MEM object of type T1 will always conflict (using the dependency routines in this file) with any MEM object of type T2. This is used when allocating temporary storage. If T1 and/or T2 are NULL_TREE, it means we know nothing about the storage.

References alias_sets_must_conflict_p(), alias_stats, get_alias_set(), and TYPE_VOLATILE.

Referenced by assign_stack_temp_for_type().

◆ record_alias_subset()

void record_alias_subset ( alias_set_type superset,
alias_set_type subset )
extern
Indicate that things in SUBSET can alias things in SUPERSET, but that not everything that aliases SUPERSET also aliases SUBSET. For example, in C, a store to an `int' can alias a load of a structure containing an `int', and vice versa. But it can't alias a load of a 'double' member of the same structure. Here, the structure would be the SUPERSET and `int' the SUBSET. This relationship is also described in the comment at the beginning of this file. This function should be called only once per SUPERSET/SUBSET pair. It is illegal for SUPERSET to be zero; everything is implicitly a subset of alias set zero.

References hash_map< KeyId, Value, Traits >::begin(), alias_set_entry::children, hash_map< KeyId, Value, Traits >::create_ggc(), hash_map< KeyId, Value, Traits >::end(), gcc_assert, get_alias_set_entry(), alias_set_entry::has_pointer, alias_set_entry::has_zero_child, init_alias_set_entry(), and hash_map< KeyId, Value, Traits >::put().

Referenced by record_component_aliases().

◆ record_component_aliases()

void record_component_aliases ( tree type)
extern
Record that component types of TYPE, if any, are part of that type for aliasing purposes. For record types, we only record component types for fields that are not marked non-addressable. For array types, we only record the component type if it is not marked non-aliased.

References get_alias_set(), and record_component_aliases().

◆ reference_alias_ptr_type()

◆ reference_alias_ptr_type_1()

tree reference_alias_ptr_type_1 ( tree * t)
Return the pointer-type relevant for TBAA purposes from the memory reference tree *T or NULL_TREE in which case *T is adjusted to point to the outermost component reference that can be used for assigning an alias set.

References component_uses_parent_alias_set_from(), handled_component_p(), INDIRECT_REF_P, NULL_TREE, ref_all_alias_ptr_type_p(), TMR_OFFSET, TREE_CODE, TREE_OPERAND, TREE_TYPE, TYPE_MAIN_VARIANT, and view_converted_memref_p().

Referenced by get_alias_set(), and reference_alias_ptr_type().

◆ refs_same_for_tbaa_p()

bool refs_same_for_tbaa_p ( tree earlier,
tree later )
Return true if the ref EARLIER behaves the same as LATER with respect to TBAA for every memory reference that might follow LATER.

References alias_set_subset_of(), ao_ref_alias_set(), ao_ref_base_alias_set(), and ao_ref_init().

Referenced by cse_insn(), mems_same_for_tbaa_p(), and dom_opt_dom_walker::optimize_stmt().

◆ view_converted_memref_p()

bool view_converted_memref_p ( tree base)
Return true if access with BASE is view converted. Base must not be stripped from inner MEM_REF (&decl) which is done by ao_ref_base and thus one extra walk of handled components is needed.

References same_type_for_tbaa(), TREE_CODE, TREE_OPERAND, and TREE_TYPE.

Referenced by ao_compare::compare_ao_refs(), and reference_alias_ptr_type_1().