<div dir="ltr">That link says "<span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px">currently supported on x86/x86-64 and PowerPC". The purpose of the current patch appears to be adding support for this flag for Thumb-1?</span><div><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px">(with the implication that it is already supported for Thumb-2 and ARM32 and the documentation is out of date)</span></div><div><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px"><br></span></div><div><span style="color:rgb(0,0,0);font-family:'Lucida Grande','Lucida Sans Unicode',Geneva,Verdana,sans-serif;font-size:14px;line-height:21px">I could, of course, be confused.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 13, 2015 at 11:55 PM, John Brawn <span dir="ltr"><<a href="mailto:john.brawn@arm.com" target="_blank">john.brawn@arm.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-GB" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Forcing tailcalls, even when it isn’t profitable in terms of performance (or space in the case of<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">-Os, though I can’t off the top of my head think of any case where a faster tail call would also<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">be larger), is what the -tailcallopt option is for: see<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><a href="http://llvm.org/docs/CodeGenerator.html#tail-call-optimization" target="_blank">http://llvm.org/docs/CodeGenerator.html#tail-call-optimization</a><u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">John<u></u><u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p><div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt"><div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm"><p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:bruce.hoult@gmail.com" target="_blank">bruce.hoult@gmail.com</a> [mailto:<a href="mailto:bruce.hoult@gmail.com" target="_blank">bruce.hoult@gmail.com</a>] <b>On Behalf Of </b>Bruce Hoult<br><b>Sent:</b> 13 January 2015 00:01<br><b>To:</b> John Brawn<br><b>Subject:</b> Re: [LLVMdev] [RFC] [PATCH] add tail call optimization to thumb1-only targets<u></u><u></u></span></p></div></div><div><div class="h5"><p class="MsoNormal"><u></u> <u></u></p><div><div><div><p class="MsoNormal">On Tue, Jan 13, 2015 at 3:50 AM, John Brawn <<a href="mailto:john.brawn@arm.com" target="_blank">john.brawn@arm.com</a>> wrote:<u></u><u></u></p><p class="MsoNormal">> During epilog generation, spill register restoring will be done within<br>> the emit epilogue function.<br>> If LR happens to be spilled on the stack by the prologue, it's restored<br>> by use of a scratch register<br>> just before restoring the other registers.<br><br>POP is 1+N cycles whereas LDR is 2 cycles. If we need to LDR lr from the<br>stack then POP r4 then that's 2 (LDR) + 1+1 (POP) + 1 (MOV to lr) + 1<br>(ADD sp) = 6 cycles, but a POP {r4,lr} is just 3 cycles.<u></u><u></u></p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">You appear to be using speed as the figure of merit, but that is not the point of tail call optimisation (except incidentally).<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">TCO is to minimise the use of precious stack space, and in fact to allow certain algorithms and program transformations to run in constant stack space.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">If a programmer assumes that TCO is available and writes their program using continuation-passing style, and then TCO does not actually happen, that is a correctness issue and the program will overflow the stack and crash very quickly.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">A few register loads or spills is a distant second consideration.<u></u><u></u></p></div><div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div></div></div></div></div><span class="HOEnZb"><font color="#888888"><br>-- 
<br>This message has been scanned for viruses and
<br>dangerous content by
<a href="http://www.mailscanner.info/" target="_blank"><b>MailScanner</b></a>, and is
<br>believed to be clean.
</font></span></div>
</blockquote></div><br></div>