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