diff options
Diffstat (limited to 'docs/CodeGenerator.html')
-rw-r--r-- | docs/CodeGenerator.html | 47 |
1 files changed, 46 insertions, 1 deletions
diff --git a/docs/CodeGenerator.html b/docs/CodeGenerator.html index ad6222d..dcfe794 100644 --- a/docs/CodeGenerator.html +++ b/docs/CodeGenerator.html @@ -86,6 +86,7 @@ <li><a href="#targetimpls">Target-specific Implementation Notes</a> <ul> <li><a href="#tailcallopt">Tail call optimization</a></li> + <li><a href="#sibcallopt">Sibling call optimization</a></li> <li><a href="#x86">The X86 backend</a></li> <li><a href="#ppc">The PowerPC backend</a> <ul> @@ -1734,6 +1735,50 @@ define fastcc i32 @tailcaller(i32 %in1, i32 %in2) { </div> <!-- ======================================================================= --> <div class="doc_subsection"> + <a name="sibcallopt">Sibling call optimization</a> +</div> + +<div class="doc_text"> + +<p>Sibling call optimization is a restricted form of tail call optimization. + Unlike tail call optimization described in the previous section, it can be + performed automatically on any tail calls when <tt>-tailcallopt</tt> option + is not specified.</p> + +<p>Sibling call optimization is currently performed on x86/x86-64 when the + following constraints are met:</p> + +<ul> + <li>Caller and callee have the same calling convention. It can be either + <tt>c</tt> or <tt>fastcc</tt>. + + <li>The call is a tail call - in tail position (ret immediately follows call + and ret uses value of call or is void).</li> + + <li>Caller and callee have matching return type or the callee result is not + used. + + <li>If any of the callee arguments are being passed in stack, they must be + available in caller's own incoming argument stack and the frame offsets + must be the same. +</ul> + +<p>Example:</p> +<div class="doc_code"> +<pre> +declare i32 @bar(i32, i32) + +define i32 @foo(i32 %a, i32 %b, i32 %c) { +entry: + %0 = tail call i32 @bar(i32 %a, i32 %b) + ret i32 %0 +} +</pre> +</div> + +</div> +<!-- ======================================================================= --> +<div class="doc_subsection"> <a name="x86">The X86 backend</a> </div> @@ -2116,7 +2161,7 @@ MOVSX32rm16 -> movsx, 32-bit register, 16-bit memory <a href="mailto:sabre@nondot.org">Chris Lattner</a><br> <a href="http://llvm.org">The LLVM Compiler Infrastructure</a><br> - Last modified: $Date: 2010-03-02 02:11:08 +0100 (Tue, 02 Mar 2010) $ + Last modified: $Date: 2010-03-08 22:05:02 +0100 (Mon, 08 Mar 2010) $ </address> </body> |