Some RTL nodes have special annotations associated with them.
If 0, x is not in any alias set, and may alias anything. Otherwise,
x can only alias
MEMs in a conflicting alias set. This value
is set in a language-dependent manner in the front-end, and should not be
altered in the back-end. In some front-ends, these numbers may correspond
in some way to types, or other language-level entities, but they need not,
and the back-end makes no such assumptions.
These set numbers are tested with
If this register is known to hold the value of some user-level
declaration, this is that tree node. It may also be a
COMPONENT_REF, in which case this is some field reference,
TREE_OPERAND (x, 0) contains the declaration,
COMPONENT_REF, or null if there is no compile-time
object associated with the reference.
True if the offset of the memory reference from
MEM_EXPR is known.
‘MEM_OFFSET (x)’ provides the offset if so.
The offset from the start of
MEM_EXPR. The value is only valid if
‘MEM_OFFSET_KNOWN_P (x)’ is true.
True if the size of the memory reference is known. ‘MEM_SIZE (x)’ provides its size if so.
The size in bytes of the memory reference.
This is mostly relevant for
BLKmode references as otherwise
the size is implied by the mode. The value is only valid if
‘MEM_SIZE_KNOWN_P (x)’ is true.
The known alignment in bits of the memory reference.
The address space of the memory reference. This will commonly be zero for the generic address space.
This field holds the number the register “originally” had; for a pseudo register turned into a hard reg this will hold the old pseudo register number.
If this register is known to hold the value of some user-level declaration, this is that tree node.
If this register is known to hold the value of some user-level declaration, this is the offset into that logical storage.
symbol_ref x was created for a
FUNCTION_DECL, that tree is recorded here. If this value is
null, then x was created by back end code generation routines,
and there is no associated front end symbol table entry.
SYMBOL_REF_DECL may also point to a tree of class
that is, some sort of constant. In this case, the
is an entry in the per-file constant pool; again, there is no associated
front end symbol table entry.
If ‘CONSTANT_POOL_ADDRESS_P (x)’ is true, this is the constant pool entry for x. It is null otherwise.
A field of opaque type used to store
symbol_ref, this is used to communicate various predicates
about the symbol. Some of these are common enough to be computed by
common code, some are specific to the target. The common bits are:
Set if the symbol refers to a function.
Set if the symbol is local to this “module”.
Set if this symbol is not defined in this translation unit.
Note that this is not the inverse of
Set if the symbol is located in the small data section.
This is a multi-bit field accessor that returns the
to be used for a thread-local storage symbol. It returns zero for
Set if the symbol has
Set if the symbol is used as a section anchor. “Section anchors”
are symbols that have a known position within an
and that can be used to access nearby members of that block.
They are used to implement -fsection-anchors.
If this flag is set, then
SYMBOL_FLAG_HAS_BLOCK_INFO will be too.
Bits beginning with
SYMBOL_FLAG_MACH_DEP are available for
the target’s use.
If ‘SYMBOL_REF_HAS_BLOCK_INFO_P (x)’, this is the
‘object_block’ structure to which the symbol belongs,
NULL if it has not been assigned a block.
If ‘SYMBOL_REF_HAS_BLOCK_INFO_P (x)’, this is the offset of x from the first object in ‘SYMBOL_REF_BLOCK (x)’. The value is negative if x has not yet been assigned to a block, or it has not been given an offset within that block.