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