mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Document the new !tbaa.struct metadata.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164398 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b890e9fc66
commit
273a92eb0a
@ -103,6 +103,7 @@
|
||||
<li><a href="#metadata">Metadata Nodes and Metadata Strings</a>
|
||||
<ol>
|
||||
<li><a href="#tbaa">'<tt>tbaa</tt>' Metadata</a></li>
|
||||
<li><a href="#tbaa.struct">'<tt>tbaa.struct</tt>' Metadata</a></li>
|
||||
<li><a href="#fpmath">'<tt>fpmath</tt>' Metadata</a></li>
|
||||
<li><a href="#range">'<tt>range</tt>' Metadata</a></li>
|
||||
</ol>
|
||||
@ -3050,6 +3051,44 @@ call void @llvm.dbg.value(metadata !24, i64 0, metadata !25)
|
||||
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
<h4>
|
||||
<a name="tbaa.struct">'<tt>tbaa.struct</tt>' Metadata</a>
|
||||
</h4>
|
||||
|
||||
<div>
|
||||
|
||||
<p>The <a href="#int_memcpy"><tt>llvm.memcpy</tt></a> is often used to implement
|
||||
aggregate assignment operations in C and similar languages, however it is
|
||||
defined to copy a contiguous region of memory, which is more than strictly
|
||||
necessary for aggregate types which contain holes due to padding. Also, it
|
||||
doesn't contain any TBAA information about the fields of the aggregate.</p>
|
||||
|
||||
<p><tt>!tbaa.struct</tt> metadata can describe which memory subregions in a memcpy
|
||||
are padding and what the TBAA tags of the struct are.</p>
|
||||
|
||||
<p>The current metadata format is very simple. <tt>!tbaa.struct</tt> metadata nodes
|
||||
are a list of operands which are in conceptual groups of three. For each
|
||||
group of three, the first operand gives the byte offset of a field in address
|
||||
units, the second gives its size in address units, and the third gives its
|
||||
tbaa tag. e.g.:</p>
|
||||
|
||||
<div class="doc_code">
|
||||
<pre>
|
||||
!4 = metadata !{ i64 0, i64 4, metadata !1, i64 8, i64 4, metadata !2 }
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<p>This describes a struct with two fields. The first is at offset 0 address units
|
||||
with size 4 address units, and has tbaa tag !1. The second is at offset 8 address
|
||||
units and has size 4 address units and has tbaa tag !2.</p>
|
||||
|
||||
<p>Note that the fields need not be contiguous. In this example, there is a
|
||||
4 byte gap between the two fields. This gap represents padding which
|
||||
does not carry useful data and need not be preserved.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
<h4>
|
||||
<a name="fpmath">'<tt>fpmath</tt>' Metadata</a>
|
||||
|
Loading…
Reference in New Issue
Block a user