diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2011-10-27 19:19:07 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2011-10-27 19:19:07 +0000 |
commit | 249d953ed7b850446fdfc600992ffb221da2f9d3 (patch) | |
tree | fc80fa69369a683449554351b470f6c5aca5ef92 /docs/LangRef.html | |
parent | 32a43cc0fc3cd42702d7859eaa58dd42f561a54d (diff) | |
download | llvm-249d953ed7b850446fdfc600992ffb221da2f9d3.tar.gz llvm-249d953ed7b850446fdfc600992ffb221da2f9d3.tar.bz2 llvm-249d953ed7b850446fdfc600992ffb221da2f9d3.tar.xz |
Document tbaa metadata in LangRef (documentation largely based on
comments at top of TypeBasedAliasAnalysis.cpp).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143134 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs/LangRef.html')
-rw-r--r-- | docs/LangRef.html | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index f937ae6ef9..8dca415172 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -100,7 +100,11 @@ <li><a href="#othervalues">Other Values</a> <ol> <li><a href="#inlineasm">Inline Assembler Expressions</a></li> - <li><a href="#metadata">Metadata Nodes and Metadata Strings</a></li> + <li><a href="#metadata">Metadata Nodes and Metadata Strings</a> + <ol> + <li><a href="#tbaa">'<tt>tbaa</tt>' Metadata</a></li> + </ol> + </li> </ol> </li> <li><a href="#intrinsic_globals">Intrinsic Global Variables</a> @@ -2915,6 +2919,53 @@ call void @llvm.dbg.value(metadata !24, i64 0, metadata !25) </pre> </div> +<p>More information about specific metadata nodes recognized by the optimizers + and code generator is found below.</p> + +<h4> + <a name="tbaa">'<tt>tbaa</tt>' Metadata</a> +</h4> + +<div> + +<p>In LLVM IR, memory does not have types, so LLVM's own type system is not + suitable for doing TBAA. Instead, metadata is added to the IR to describe + a type system of a higher level language. This can be used to implement + typical C/C++ TBAA, but it can also be used to implement custom alias + analysis behavior for other languages.</p> + +<p>The current metadata format is very simple. TBAA metadata nodes have up to + three fields, e.g.:</p> + +<div class="doc_code"> +<pre> +!0 = metadata !{ metadata !"an example type tree" } +!1 = metadata !{ metadata !"int", metadata !0 } +!2 = metadata !{ metadata !"float", metadata !0 } +!3 = metadata !{ metadata !"const float", metadata !2, i64 1 } +</pre> +</div> + +<p>The first field is an identity field. It can be any value, usually + a metadata string, which uniquely identifies the type. The most important + name in the tree is the name of the root node. Two trees with + different root node names are entirely disjoint, even if they + have leaves with common names.</p> + +<p>The second field identifies the type's parent node in the tree, or + is null or omitted for a root node. A type is considered to alias + all of its descendants and all of its ancestors in the tree. Also, + a type is considered to alias all types in other trees, so that + bitcode produced from multiple front-ends is handled conservatively.</p> + +<p>If the third field is present, it's an integer which if equal to 1 + indicates that the type is "constant" (meaning + <tt>pointsToConstantMemory</tt> should return true; see + <a href="AliasAnalysis.html#OtherItfs">other useful + <tt>AliasAnalysis</tt> methods</a>).</p> + +</div> + </div> </div> |