diff options
author | Dan Gohman <gohman@apple.com> | 2009-07-27 18:07:55 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2009-07-27 18:07:55 +0000 |
commit | 556ca272fb3e9264fe96b92329e80ffb9b85a1e3 (patch) | |
tree | 206f97e5782b1c7d3b652199d83e9a2172363d93 /docs/LangRef.html | |
parent | be7b97b773529cdf60da9868586c89271476c625 (diff) | |
download | external_llvm-556ca272fb3e9264fe96b92329e80ffb9b85a1e3.zip external_llvm-556ca272fb3e9264fe96b92329e80ffb9b85a1e3.tar.gz external_llvm-556ca272fb3e9264fe96b92329e80ffb9b85a1e3.tar.bz2 |
Following discussion on llvm-dev ("proposed new rule for getelementptr"),
add a new "Pointer Aliasing Rules" section.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77216 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/LangRef.html')
-rw-r--r-- | docs/LangRef.html | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index 9ab62c0..7858e63 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -48,6 +48,7 @@ <li><a href="#gc">Garbage Collector Names</a></li> <li><a href="#moduleasm">Module-Level Inline Assembly</a></li> <li><a href="#datalayout">Data Layout</a></li> + <li><a href="#pointeraliasing">Pointer Aliasing Rules</a></li> </ol> </li> <li><a href="#typesystem">Type System</a> @@ -1243,6 +1244,54 @@ target datalayout = "<i>layout specification</i>" </div> +<!-- ======================================================================= --> +<div class="doc_subsection"> + <a name="pointeraliasing">Pointer Aliasing Rules</a> +</div> + +<div class="doc_text"> + +<p>Any memory access must be done though a pointer value associated +with with address range of the memory access, otherwise the behavior +is undefined. Pointer values are associated with address ranges +according to the following rules:</p> + +<ul> + <li>A pointer value formed from a <tt>getelementptr</tt> instruction is + associated with the addresses associated with the first operand of + the <tt>getelementptr</tt>.</li> + <li>An addresses of a global variable is associated with the address + range of the variable's storage.</li> + <li>The result value of an allocation instruction is associated with + the address range of the allocated storage.</li> + <li>A null pointer in the default address-space is associated with + no addresses.</li> + <li>A pointer value formed by an <tt>inttoptr</tt> is associated with + all address ranges of all pointer values that contribute (directly + or indirectly) to the computation of the pointer's value.</li> + <li>The result value of a <tt>bitcast</tt> is associated with all + addresses associated with the operand of the <tt>bitcast</tt>.</li> + <li>An integer constant other than zero or a pointer value returned + from a function not defined within LLVM may be associated with address + ranges allocated through mechanisms other than those provided by + LLVM. Such ranges shall not overlap with any ranges of address + allocated by mechanisms provided by LLVM.</li> + </ul> + +<p>LLVM IR does not associate types with memory. The result type of a +<tt>load</tt> merely indicates the size and alignment of the memory from +which to load, as well as the interpretation of the value. The first +operand of a <tt>store</tt> similarly only indicates the size and +alignment of the store.</p> + +<p>Consequently, type-based alias analysis, aka TBAA, aka +<tt>-fstrict-aliasing</tt>, is not applicable to general unadorned +LLVM IR. <a href="#metadata">Metadata</a> may be used to encode +additional information which specialized optimization passes may use +to implement type-based alias analysis.</p> + +</div> + <!-- *********************************************************************** --> <div class="doc_section"> <a name="typesystem">Type System</a> </div> <!-- *********************************************************************** --> |