diff options
Diffstat (limited to 'contrib/gcc/doc/rtl.texi')
-rw-r--r-- | contrib/gcc/doc/rtl.texi | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/contrib/gcc/doc/rtl.texi b/contrib/gcc/doc/rtl.texi index 302957c..605aad0 100644 --- a/contrib/gcc/doc/rtl.texi +++ b/contrib/gcc/doc/rtl.texi @@ -608,9 +608,22 @@ Stored in the @code{integrated} field and printed as @samp{/i}. @cindex @code{concat} and @samp{/u} @cindex @code{unchanging}, in @code{reg} and @code{mem} @item RTX_UNCHANGING_P (@var{x}) -Nonzero in a @code{reg}, @code{mem}, or @code{concat} if the memory -is set at most once, -anywhere. This does not mean that it is function invariant. +Nonzero in a @code{reg}, @code{mem}, or @code{concat} if the register or +memory is set at most once, anywhere. This does not mean that it is +function invariant. + +GCC uses this flag to determine whether two references conflict. As +implemented by @code{true_dependence} in @file{alias.c} for memory +references, unchanging memory can't conflict with non-unchanging memory; +a non-unchanging read can conflict with a non-unchanging write; an +unchanging read can conflict with an unchanging write (since there may +be a single store to this address to initialize it); and an unchanging +store can conflict with a non-unchanging read. This means we must make +conservative assumptions when choosing the value of this flag for a +memory reference to an object containing both unchanging and +non-unchanging fields: we must set the flag when writing to the object +and clear it when reading from the object. + Stored in the @code{unchanging} field and printed as @samp{/u}. @findex SCHED_GROUP_P @@ -687,13 +700,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 +713,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: @@ -2195,9 +2212,9 @@ the operands of these. @item (set @var{lval} @var{x}) Represents the action of storing the value of @var{x} into the place represented by @var{lval}. @var{lval} must be an expression -representing a place that can be stored in: @code{reg} (or @code{subreg} -or @code{strict_low_part}), @code{mem}, @code{pc}, @code{parallel}, or -@code{cc0}. +representing a place that can be stored in: @code{reg} (or @code{subreg}, +@code{strict_low_part} or @code{zero_extract}), @code{mem}, @code{pc}, +@code{parallel}, or @code{cc0}. If @var{lval} is a @code{reg}, @code{subreg} or @code{mem}, it has a machine mode; then @var{x} must be valid for that mode. @@ -2210,10 +2227,10 @@ rest of the register receives an undefined value. Likewise, if the mode of the register, the rest of the register can be changed in an undefined way. -If @var{lval} is a @code{strict_low_part} of a @code{subreg}, then the -part of the register specified by the machine mode of the -@code{subreg} is given the value @var{x} and the rest of the register -is not changed. +If @var{lval} is a @code{strict_low_part} or @code{zero_extract} +of a @code{subreg}, then the part of the register specified by the +machine mode of the @code{subreg} is given the value @var{x} and +the rest of the register is not changed. If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may be either a @code{compare} expression or a value that may have any mode. |