Refine last change.
authorRichard Kenner <kenner@gcc.gnu.org>
Mon, 21 Apr 2003 22:39:26 +0000 (18:39 -0400)
committerRichard Kenner <kenner@gcc.gnu.org>
Mon, 21 Apr 2003 22:39:26 +0000 (18:39 -0400)
From-SVN: r65915

gcc/doc/rtl.texi

index 33057c3b7a84d0c105c6a5b3f5f093387d2cbf09..8368b49f39c642e20e5a371c2316ea33680d467a 100644 (file)
@@ -725,10 +725,21 @@ Stored in the @code{integrated} field and printed as @samp{/i}.
 @item RTX_UNCHANGING_P (@var{x})
 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.  This flag is used to determine whether two
-references conflict.  See @code{tree_dependence} in @file{alias.c} for
-more details.  Stored in the @code{unchanging} field and printed as
-@samp{/u}.
+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 chosing 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
 @cindex @code{insn} and @samp{/s}