summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-08-28 22:12:25 +0000
committerChris Lattner <sabre@nondot.org>2003-08-28 22:12:25 +0000
commitb3ceec21174933dbc0db1f57840f4833e120484e (patch)
treee01df63873a849de41752192b3dd2d2c76db2852 /docs
parenta0a0a03946648a58d263912d4d72029799c9f71e (diff)
downloadllvm-b3ceec21174933dbc0db1f57840f4833e120484e.tar.gz
llvm-b3ceec21174933dbc0db1f57840f4833e120484e.tar.bz2
llvm-b3ceec21174933dbc0db1f57840f4833e120484e.tar.xz
Document the llvm.unwind intrinsic.
Clarify the documentation for the invoke instruction git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8196 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r--docs/LangRef.html64
1 files changed, 46 insertions, 18 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html
index 79cb30eaeb..4b5b9c2cab 100644
--- a/docs/LangRef.html
+++ b/docs/LangRef.html
@@ -81,6 +81,7 @@
<li><a href="#i_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
<li><a href="#i_va_end" >'<tt>llvm.va_end</tt>' Intrinsic</a>
<li><a href="#i_va_copy" >'<tt>llvm.va_copy</tt>' Intrinsic</a>
+ <li><a href="#i_unwind" >'<tt>llvm.unwind</tt>' Intrinsic</a>
</ol>
</ol>
@@ -741,13 +742,14 @@ conditional branches, or with a lookup table.<p>
<h5>Overview:</h5>
-The '<tt>invoke</tt>' instruction is used to cause control flow to transfer to a
-specified function, with the possibility of control flow transfer to either the
-'<tt>normal label</tt>' label or the '<tt>exception label</tt>'. The '<tt><a
-href="#i_call">call</a></tt>' instruction is closely related, but guarantees
-that control flow either never returns from the called function, or that it
-returns to the instruction following the '<tt><a href="#i_call">call</a></tt>'
-instruction.<p>
+The '<tt>invoke</tt>' instruction causes control to transfer to a specified
+function, with the possibility of control flow transfer to either the
+'<tt>normal label</tt>' label or the '<tt>exception label</tt>'. If the callee
+function invokes the "<tt><a href="#i_ret">ret</a></tt>" instruction, control
+flow will return to the "normal" label. If the callee (or any indirect callees)
+calls the "<a href="#i_unwind"><tt>llvm.unwind</tt></a>" intrinsic, control is
+interrupted, and continued at the "except" label.<p>
+
<h5>Arguments:</h5>
@@ -757,7 +759,7 @@ This instruction requires several arguments:<p>
<li>'<tt>ptr to function ty</tt>': shall be the signature of the pointer to
function value being invoked. In most cases, this is a direct function
invocation, but indirect <tt>invoke</tt>s are just as possible, branching off
-an arbitrary pointer to function value.<p>
+an arbitrary pointer to function value.
<li>'<tt>function ptr val</tt>': An LLVM value containing a pointer to a
function to be invoked.
@@ -769,26 +771,26 @@ accepts a variable number of arguments, the extra arguments can be specified.
<li>'<tt>normal label</tt>': the label reached when the called function executes
a '<tt><a href="#i_ret">ret</a></tt>' instruction.
-<li>'<tt>exception label</tt>': the label reached when an exception is thrown.
+<li>'<tt>exception label</tt>': the label reached when a callee calls the <a
+href="#i_unwind"><tt>llvm.unwind</tt></a> intrinsic.
</ol>
<h5>Semantics:</h5>
This instruction is designed to operate as a standard '<tt><a
href="#i_call">call</a></tt>' instruction in most regards. The primary
-difference is that it associates a label with the function invocation that may
-be accessed via the runtime library provided by the execution environment. This
-instruction is used in languages with destructors to ensure that proper cleanup
-is performed in the case of either a <tt>longjmp</tt> or a thrown exception.
-Additionally, this is important for implementation of '<tt>catch</tt>' clauses
-in high-level languages that support them.<p>
+difference is that it establishes an association with a label, which is used by the runtime library to unwind the stack.<p>
-<!-- For a more comprehensive explanation of how this instruction is used, look in the llvm/docs/2001-05-18-ExceptionHandling.txt document.<p> -->
+This instruction is used in languages with destructors to ensure that proper
+cleanup is performed in the case of either a <tt>longjmp</tt> or a thrown
+exception. Additionally, this is important for implementation of
+'<tt>catch</tt>' clauses in high-level languages that support them.<p>
<h5>Example:</h5>
<pre>
%retval = invoke int %Test(int 15)
- to label %Continue except label %TestCleanup <i>; {int}:retval set</i>
+ to label %Continue
+ except label %TestCleanup <i>; {int}:retval set</i>
</pre>
@@ -1801,6 +1803,32 @@ because the <tt><a href="i_va_begin">llvm.va_begin</a></tt> intrinsic may be
arbitrarily complex and require memory allocation, for example.<p>
+<!-- _______________________________________________________________________ -->
+</ul><a name="i_unwind"><h4><hr size=0>'<tt>llvm.unwind</tt>' Intrinsic</h4><ul>
+
+<h5>Syntax:</h5>
+<pre>
+ call void (void)* %llvm.unwind()
+</pre>
+
+<h5>Overview:</h5>
+
+The '<tt>llvm.unwind</tt>' intrinsic unwinds the stack, continuing control flow
+at the first callee in the dynamic call stack which used an <a
+href="#i_invoke"><tt>invoke</tt></a> instruction to perform the call. This is
+primarily used to implement exception handling.
+
+<h5>Semantics:</h5>
+
+The '<tt>llvm.unwind</tt>' intrinsic causes execution of the current function to
+immediately halt. The dynamic call stack is then searched for the first <a
+href="#i_invoke"><tt>invoke</tt></a> instruction on the call stack. Once found,
+execution continues at the "exceptional" destination block specified by the
+invoke instruction. If there is no <tt>invoke</tt> instruction in the dynamic
+call chain, undefined behavior results.
+
+
+
<!-- *********************************************************************** -->
</ul>
<!-- *********************************************************************** -->
@@ -1811,7 +1839,7 @@ arbitrarily complex and require memory allocation, for example.<p>
<address><a href="mailto:sabre@nondot.org">Chris Lattner</a></address>
<!-- Created: Tue Jan 23 15:19:28 CST 2001 -->
<!-- hhmts start -->
-Last modified: Mon Jul 14 12:12:22 CDT 2003
+Last modified: Thu Aug 28 17:11:50 CDT 2003
<!-- hhmts end -->
</font>
</body></html>