summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorNuno Lopes <nunoplopes@sapo.pt>2012-06-18 16:04:04 +0000
committerNuno Lopes <nunoplopes@sapo.pt>2012-06-18 16:04:04 +0000
commitfa7494306bc6fbe16cc82a67b93e762241b26777 (patch)
treebc87b64fbaa757a52d4a23c4558dcfd002d3085c /docs
parent96ef284da415cccd60cf5066929a4683dec5dd79 (diff)
downloadllvm-fa7494306bc6fbe16cc82a67b93e762241b26777.tar.gz
llvm-fa7494306bc6fbe16cc82a67b93e762241b26777.tar.bz2
llvm-fa7494306bc6fbe16cc82a67b93e762241b26777.tar.xz
add the 'alloc' metadata node to represent the size of offset of buffers pointed to by pointers.
This metadata can be attached to any instruction returning a pointer git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158660 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r--docs/LangRef.html44
1 files changed, 44 insertions, 0 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html
index 9cb7e6392a..2b81279b6e 100644
--- a/docs/LangRef.html
+++ b/docs/LangRef.html
@@ -105,6 +105,7 @@
<li><a href="#tbaa">'<tt>tbaa</tt>' Metadata</a></li>
<li><a href="#fpmath">'<tt>fpmath</tt>' Metadata</a></li>
<li><a href="#range">'<tt>range</tt>' Metadata</a></li>
+ <li><a href="#alloc">'<tt>alloc</tt>' Metadata</a></li>
</ol>
</li>
</ol>
@@ -3077,6 +3078,49 @@ call void @llvm.dbg.value(metadata !24, i64 0, metadata !25)
</pre>
</div>
</div>
+
+<!-- _______________________________________________________________________ -->
+<h4>
+ <a name="alloc">'<tt>alloc</tt>' Metadata</a>
+</h4>
+
+<div>
+
+<p><tt>alloc</tt> metadata may be attached to any instruction returning a
+ pointer. It can be used to express the size and offset relative to the
+ beginning of the buffer pointed by.</p>
+
+<blockquote>
+
+<p>The first parameter is a function that returns the size of the buffer, and
+ the second (optional) parameter is a function that returns the offset from
+ the beginning of the buffer. If the second parameter is not present or null,
+ the offset is assumed to be null. Both functions must be either readonly or
+ readnone.</p>
+<p><tt>alloc</tt> metadata can have additional parameters, which are passed to
+ the size and offset functions when they are evaluated. Therefore the size and
+ offset functions must have the same signature.</p>
+
+</blockquote>
+
+
+<p>Examples:</p>
+<div class="doc_code">
+<pre>
+ ; size of buffer allocated by this call is my_malloc_size(%s), and offset=0
+ %a = call my_malloc(%s), !alloc !{i32 (i32)* @my_malloc_size, null, i32 %s}
+
+ ; size of the buffer pointed by *ptr is size(%x), and offset=offset(%x)
+ %b = load i8** %foo, !alloc !{i32 (i32)* @size, i32 (i32)* @offset, i32 %x}
+
+ ; size of buffer allocated by this call is foo_size(), and offset=0
+ %a = call alloc_foo(%s), !alloc !0
+...
+!0 = metadata {i32 ()* @foo_size}
+</pre>
+</div>
+</div>
+
</div>
</div>