mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-28 09:31:03 +00:00
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
This commit is contained in:
parent
32a43cc0fc
commit
249d953ed7
@ -594,10 +594,10 @@ idx3 = (char*) &MyVar + 8
|
|||||||
because LLVM has no restrictions on mixing types in addressing, loads or
|
because LLVM has no restrictions on mixing types in addressing, loads or
|
||||||
stores.</p>
|
stores.</p>
|
||||||
|
|
||||||
<p>It would be possible to add special annotations to the IR, probably using
|
<p>LLVM's type-based alias analysis pass uses metadata to describe a different
|
||||||
metadata, to describe a different type system (such as the C type system),
|
type system (such as the C type system), and performs type-based aliasing
|
||||||
and do type-based aliasing on top of that. This is a much bigger
|
on top of that. Further details are in the
|
||||||
undertaking though.</p>
|
<a href="LangRef.html#tbaa">language reference</a>.</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -100,7 +100,11 @@
|
|||||||
<li><a href="#othervalues">Other Values</a>
|
<li><a href="#othervalues">Other Values</a>
|
||||||
<ol>
|
<ol>
|
||||||
<li><a href="#inlineasm">Inline Assembler Expressions</a></li>
|
<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>
|
</ol>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#intrinsic_globals">Intrinsic Global Variables</a>
|
<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>
|
</pre>
|
||||||
</div>
|
</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>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user