Describe which dependencies are relevant to noalias, and document how

AliasAnalyses have the choice to respect noalias.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107544 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-07-02 23:46:54 +00:00
parent 03560600b4
commit efca7f9681
2 changed files with 11 additions and 1 deletions

View File

@ -201,6 +201,11 @@ freed and reallocated between accesses through one pointer and accesses through
the other -- in this case, there is a dependence, but it's mediated by the free
and reallocation.</p>
<p>As an exception to this is with the
<a href="LangRef.html#noalias"><tt>noalias</tt></a> keyword. AliasAnalysis
implementations may choose to ignore the "irrelevant" dependencies, provided
their clients do not need to be aware of these dependencies for correctness.</p>
<p>The MayAlias response is used whenever the two pointers might refer to the
same object. If the two memory objects overlap, but do not start at the same
location, return MayAlias.</p>

View File

@ -1053,7 +1053,12 @@ declare signext i8 @returns_signed_char()
<dt><tt><b><a name="noalias">noalias</a></b></tt></dt>
<dd>This indicates that pointer values
<a href="#pointeraliasing"><i>based</i></a> on the argument or return
value do not alias pointer values which are not <i>based</i> on it.
value do not alias pointer values which are not <i>based</i> on it,
ignoring certain "irrelevant" dependencies.
For a call to the parent function, dependencies between memory
references from before or after the call and from those during the call
are "irrelevant" to the <tt>noalias</tt> keyword for the arguments and
return value used in that call.
The caller shares the responsibility with the callee for ensuring that
these requirements are met.
For further details, please see the discussion of the NoAlias response in