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:
parent
60fa6660d8
commit
3568b0ef3d
3 changed files with 135 additions and 13 deletions
|
@ -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
|
||||
|
|
133
gcc/doc/rtl.texi
133
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:
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue