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
This commit is contained in:
Richard Henderson 2003-04-16 18:11:21 -07:00 committed by Richard Henderson
parent 60fa6660d8
commit 3568b0ef3d
3 changed files with 135 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2003-04-16 Richard Henderson <rth@redhat.com>
* 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 <aoliva@redhat.com>
* reload1.c (reload_cse_noop_set_p): Return false if mode of

View File

@ -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:

View File

@ -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