<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='color:#1F497D'>FYI, Object size threshold for lifetime marker insertion has been removed @ r219303.<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Cheers,<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'>Arnaud<o:p></o:p></span></p><p class=MsoNormal><span style='color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='margin-left:36.0pt'><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif";mso-fareast-language:EN-GB'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif";mso-fareast-language:EN-GB'> Arnaud A. de Grandmaison [mailto:arnaud.degrandmaison@arm.com] <br><b>Sent:</b> 07 October 2014 19:03<br><b>To:</b> llvm cfe; Commit Messages and Patches for LLVM<br><b>Cc:</b> 'Chandler Carruth'<br><b>Subject:</b> Heads-up: object size threshold for lifetime markers insertion will go away<o:p></o:p></span></p></div></div><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><p class=MsoNormal style='margin-left:36.0pt'>[Sorry for the cross-posting, but this future change in clang can affect llvm optimization passes]<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><p class=MsoNormal style='margin-left:36.0pt'>Language frontends can insert lifetime.start / lifetime.end markers for objects allocated on the stack, providing the optimization passes in LLVM with lifetime information so that they can share stack slots and reduce stack usage of the generated code. Today, those lifetime markers are only inserted for objects > 32 bytes. This threshold was set to prevent  impacting compile time. Lifetime markers have been in use for a long time now, and some passes got fixed to deal gracefully with them.<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><p class=MsoNormal style='margin-left:36.0pt'>I intend to commit soon a patch removing this threshold, unless someone objects or raise concerns. Removing the threshold can only improve stack size usage of the generated code, but there is a risk that some specific code base trigger some corner case bugs, thus this heads-up.<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><p class=MsoNormal style='margin-left:36.0pt'>I checked that compile time was not impacted by building llvm+clang+lldb with a clang with various thresholds, and here are the results (user time in seconds for a build from scratch, averaged over 5 builds). Note that the reported  threshold is inclusive: 33 (the current threshold) means all object whose size >= 33 bytes will be marked for example.<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 width=208 style='width:155.85pt;margin-left:35.25pt;border-collapse:collapse'><tr style='height:15.0pt'><td width=74 nowrap valign=bottom style='width:55.45pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>Threshold<o:p></o:p></p></td><td width=63 nowrap valign=bottom style='width:47.4pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>Average<o:p></o:p></p></td><td width=71 nowrap valign=bottom style='width:53.0pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>Variance<o:p></o:p></p></td></tr><tr style='height:15.0pt'><td width=74 nowrap valign=bottom style='width:55.45pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>33<o:p></o:p></p></td><td width=63 nowrap valign=bottom style='width:47.4pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>4652.67<o:p></o:p></p></td><td width=71 nowrap valign=bottom style='width:53.0pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>4.51<o:p></o:p></p></td></tr><tr style='height:15.0pt'><td width=74 nowrap valign=bottom style='width:55.45pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>32<o:p></o:p></p></td><td width=63 nowrap valign=bottom style='width:47.4pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>4677.02<o:p></o:p></p></td><td width=71 nowrap valign=bottom style='width:53.0pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>2.71<o:p></o:p></p></td></tr><tr style='height:15.0pt'><td width=74 nowrap valign=bottom style='width:55.45pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>16<o:p></o:p></p></td><td width=63 nowrap valign=bottom style='width:47.4pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>4681.50<o:p></o:p></p></td><td width=71 nowrap valign=bottom style='width:53.0pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>11.06<o:p></o:p></p></td></tr><tr style='height:15.0pt'><td width=74 nowrap valign=bottom style='width:55.45pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>8<o:p></o:p></p></td><td width=63 nowrap valign=bottom style='width:47.4pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>4660.23<o:p></o:p></p></td><td width=71 nowrap valign=bottom style='width:53.0pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>12.47<o:p></o:p></p></td></tr><tr style='height:15.0pt'><td width=74 nowrap valign=bottom style='width:55.45pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>0<o:p></o:p></p></td><td width=63 nowrap valign=bottom style='width:47.4pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>4667.47<o:p></o:p></p></td><td width=71 nowrap valign=bottom style='width:53.0pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt'><p class=MsoNormal>8.63<o:p></o:p></p></td></tr></table><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><p class=MsoNormal style='margin-left:36.0pt'>There are some minor fluctuations that I cannot explain, but we just have no compromise to make there: always insert the lifetime markers .<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p><p class=MsoNormal style='margin-left:36.0pt'>Thanks for your attention,<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt'><span style='mso-fareast-language:EN-GB'>--<o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><span style='mso-fareast-language:EN-GB'>Arnaud A. de Grandmaison<o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><o:p> </o:p></p></div></body></html>