From 3568b0ef3daa7aabadde5d9124a1a85668b0bc7e Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 16 Apr 2003 18:11:21 -0700 Subject: [PATCH] rtl.h (MEM_ALIAS_SET): Update documentation. * rtl.h (MEM_ALIAS_SET): Update documentation. * doc/rtl.texi (Special Accessors): New node. (SYMBOL_REF_FLAG): Note relationship with SYMBOL_REF_FLAGS. From-SVN: r65714 --- gcc/ChangeLog | 6 +++ gcc/doc/rtl.texi | 133 ++++++++++++++++++++++++++++++++++++++++++++--- gcc/rtl.h | 9 ++-- 3 files changed, 135 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a34da4061a7..644f928fd26 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-04-16 Richard Henderson + + * rtl.h (MEM_ALIAS_SET): Update documentation. + * doc/rtl.texi (Special Accessors): New node. + (SYMBOL_REF_FLAG): Note relationship with SYMBOL_REF_FLAGS. + 2003-04-16 Alexandre Oliva * reload1.c (reload_cse_noop_set_p): Return false if mode of diff --git a/gcc/doc/rtl.texi b/gcc/doc/rtl.texi index da92b467f5f..79594f0ed86 100644 --- a/gcc/doc/rtl.texi +++ b/gcc/doc/rtl.texi @@ -23,6 +23,7 @@ form uses nested parentheses to indicate the pointers in the internal form. * RTL Objects:: Expressions vs vectors vs strings vs integers. * RTL Classes:: Categories of RTL expression objects, and their structure. * Accessors:: Macros to access expression operands or vector elts. +* Special Accessors:: Macros to access specific annotations on RTL. * Flags:: Other flags in an RTL expression. * Machine Modes:: Describing the size and format of a datum. * Constants:: Expressions with constant values. @@ -368,6 +369,120 @@ All the macros defined in this section expand into lvalues and therefore can be used to assign the operands, lengths and vector elements as well as to access them. +@node Special Accessors +@section Access to Special Operands +@cindex access to special operands + +Some RTL nodes have special annotations associated with them. + +@table @code +@item MEM +@table @code +@findex MEM_ALIAS_SET +@item MEM_ALIAS_SET (@var{x}) +If 0, @var{x} is not in any alias set, and may alias anything. Otherwise, +@var{x} can only alias @code{MEM}s 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 @code{alias_sets_conflict_p}. + +@findex MEM_EXPR +@item MEM_EXPR (@var{x}) +If this register is known to hold the value of some user-level +declaration, this is that tree node. It may also be a +@code{COMPONENT_REF}, in which case this is some field reference, +and @code{TREE_OPERAND (@var{x}, 0)} contains the declaration, +or another @code{COMPONENT_REF}, or null if there is no compile-time +object associated with the reference. + +@findex MEM_OFFSET +@item MEM_OFFSET (@var{x}) +The offset from the start of @code{MEM_EXPR} as a @code{CONST_INT} rtx. + +@findex MEM_SIZE +@item MEM_SIZE (@var{x}) +The size in bytes of the memory reference as a @code{CONST_INT} rtx. +This is mostly relevant for @code{BLKmode} references as otherwise +the size is implied by the mode. + +@findex MEM_ALIGN +@item MEM_ALIGN (@var{x}) +The known alignment in bits of the memory reference. +@end table + +@item REG +@table @code +@findex ORIGINAL_REGNO +@item ORIGINAL_REGNO (@var{x}) +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. + +@findex REG_EXPR +@item REG_EXPR (@var{x}) +If this register is known to hold the value of some user-level +declaration, this is that tree node. + +@findex REG_OFFSET +@item REG_OFFSET (@var{x}) +If this register is known to hold the value of some user-level +declaration, this is the offset into that logical storage. +@end table + +@item SYMBOL_REF +@table @code +@findex SYMBOL_REF_DECL +@item SYMBOL_REF_DECL (@var{x}) +If the @code{symbol_ref} @var{x} was created for a @code{VAR_DECL} or +a @code{FUNCTION_DECL}, that tree is recorded here. If this value is +null, then @var{x} was created by back end code generation routines, +and so there is no associated front end symbol table entry. + +@findex SYMBOL_REF_FLAGS +@item SYMBOL_REF_FLAGS (@var{x}) +In a @code{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: + +@table @code +@findex SYMBOL_REF_FUNCTION_P +@findex SYMBOL_FLAG_FUNCTION +@item SYMBOL_FLAG_FUNCTION +Set if the symbol refers to a function. + +@findex SYMBOL_REF_LOCAL_P +@findex SYMBOL_FLAG_LOCAL +@item SYMBOL_FLAG_LOCAL +Set if the symbol is local to this ``module''. +See @code{TARGET_BINDS_LOCAL_P}. + +@findex SYMBOL_REF_EXTERNAL_P +@findex SYMBOL_FLAG_EXTERNAL +@item SYMBOL_FLAG_EXTERNAL +Set if this symbol is not defined in this translation unit. +Note that this is not the inverse of @code{SYMBOL_FLAG_LOCAL}. + +@findex SYMBOL_REF_SMALL_P +@findex SYMBOL_FLAG_SMALL +@item SYMBOL_FLAG_SMALL +Set if the symbol is located in the small data section. +See @code{TARGET_IN_SMALL_DATA_P}. + +@findex SYMBOL_FLAG_TLS_SHIFT +@findex SYMBOL_REF_TLS_MODEL +@item SYMBOL_REF_TLS_MODEL (@var{x}) +This is a multi-bit field accessor that returns the @code{tls_model} +to be used for a thread-local storage symbol. It returns zero for +non-thread-local symbols. +@end table + +Bits beginning with @code{SYMBOL_FLAG_MACH_DEP} are available for +the target's use. +@end table +@end table + @node Flags @section Flags in an RTL Expression @cindex flags in RTL expression @@ -687,13 +802,6 @@ Promoted variables are always either sign- or zero-extended to the wider mode on every assignment. Stored in the @code{in_struct} field and printed as @samp{/s}. -@findex SYMBOL_REF_FLAG -@cindex @code{symbol_ref} and @samp{/v} -@cindex @code{volatil}, in @code{symbol_ref} -@item SYMBOL_REF_FLAG (@var{x}) -In a @code{symbol_ref}, this is used as a flag for machine-specific purposes. -Stored in the @code{volatil} field and printed as @samp{/v}. - @findex SYMBOL_REF_USED @cindex @code{used}, in @code{symbol_ref} @item SYMBOL_REF_USED (@var{x}) @@ -707,6 +815,17 @@ once. Stored in the @code{used} field. @item SYMBOL_REF_WEAK (@var{x}) In a @code{symbol_ref}, indicates that @var{x} has been declared weak. Stored in the @code{integrated} field and printed as @samp{/i}. + +@findex SYMBOL_REF_FLAG +@cindex @code{symbol_ref} and @samp{/v} +@cindex @code{volatil}, in @code{symbol_ref} +@item SYMBOL_REF_FLAG (@var{x}) +In a @code{symbol_ref}, this is used as a flag for machine-specific purposes. +Stored in the @code{volatil} field and printed as @samp{/v}. + +Most uses of @code{SYMBOL_REF_FLAG} are historic and may be subsumed +by @code{SYMBOL_REF_FLAGS}. Certainly use of @code{SYMBOL_REF_FLAGS} +is mandatory if the target requires more than one bit of storage. @end table These are the fields to which the above macros refer: diff --git a/gcc/rtl.h b/gcc/rtl.h index f1b40a21c25..096e429d4b2 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -1133,13 +1133,10 @@ do { \ /* For a MEM rtx, the alias set. If 0, this MEM is not in any alias set, and may alias anything. Otherwise, the MEM can only alias - MEMs in the same alias set. This value is set in a + 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. These set numbers are tested for zero, - and compared for equality; they have no other significance. 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. */ + altered in the back-end. These set numbers are tested with + alias_sets_conflict_p. */ #define MEM_ALIAS_SET(RTX) (MEM_ATTRS (RTX) == 0 ? 0 : MEM_ATTRS (RTX)->alias) /* For a MEM rtx, the decl it is known to refer to, if it is known to -- 2.30.2