<div dir="auto"><div><br><div class="gmail_extra"><br><div class="gmail_quote">On May 2, 2017 09:25, "Teresa Johnson" <<a href="mailto:tejohnson@google.com">tejohnson@google.com</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><div class="quoted-text">On Tue, May 2, 2017 at 8:42 AM, Duncan P. N. Exon Smith <span dir="ltr"><<a href="mailto:dexonsmith@apple.com" target="_blank">dexonsmith@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">+Teresa, Mehdi<div><br><div><span><blockquote type="cite"><div>On May 2, 2017, at 08:31, James Henderson <<a href="mailto:jh7370.2008@my.bristol.ac.uk" target="_blank">jh7370.2008@my.bristol.ac.uk</a>> wrote:</div><br class="m_-2457043182847611683m_-73454230778062926Apple-interchange-newline"><div><div dir="ltr"><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText">Hi,</p><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText">We have been investigating an issue when running LTO with
our proprietary linker, which links against libLTO dynamically. The issue is
that when we pass -time-passes via the lto_codegen_debug_options function in the
LTO C API, no time information is produced during compilation. The reason for
this is that time information is stored in state owned by a ManagedStatic
instance, and is only printed when the state is destroyed. This in turn only
happens when ManagedStatics are cleaned up, via the llvm_shutdown function. As
we do not link against LLVM (except libLTO dynamically), we have no access to
llvm_shutdown, which in turn means we are not able to clean up ManagedStatic
instances and thus no timing information is produced.</p><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText">We have considered a few options and have come up with
the following suggestions, and would appreciate some feedback:</p><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText" style="margin-left:36pt"><span><span>1)<span style="font:7pt "times new roman"">      </span></span></span>Add
llvm_shutdown (or rather likely some wrapper function that does the same job)
to the C interface of libLTO. This should be called when we are done with the
library.</p></div></div></blockquote></span><div>This seems pretty reasonable to me.  I'm not sure what others think.</div></div></div></div></blockquote><div><br></div></div><div>Not a C api user, but this seems like the best option to me.</div></div></div></div></blockquote></div></div></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="quoted-text"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><span><blockquote type="cite"><div><div dir="ltr"><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText" style="margin-left:36pt"><span><span>2)<span style="font:7pt "times new roman"">      </span></span></span>Add
a “full-shutdown” command-line option to LLVM - that can be passed via
lto_codegen_debug_options - which causes ManagedStatic-owned state to be
destroyed on shutdown. This could even be more widely useful outside the LTO
case.</p></div></div></blockquote></span></div></div></div></blockquote></div></div></div></div></blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">I would prefer this option. I do not want to add any more stable API surface to the legacy c API, and in any case this is a debugging feature so it does not deserve stable API.</div><div dir="auto"><br></div><div dir="auto">Peter</div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div class="quoted-text"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><span><blockquote type="cite"><div><div dir="ltr"><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText" style="margin-left:36pt"><span><span>3)<span style="font:7pt "times new roman"">      </span></span></span>Call
llvm_shutdown() immediately after compilation as part of the compile function.</p><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText" style="margin-left:36pt"><span><span>4)<span style="font:7pt "times new roman"">      </span></span></span>None
of the above, because there’s a better way that I am unaware of to clean up
this state.</p></div></div></blockquote></span><div>Perhaps this timing stuff should live in the LLVMContext instead?  And then you get timing-per-LLVMContext?</div></div></div></div></blockquote><div><br></div></div><div>We've talked about something like this so that we get more meaningful timing info for ThinLTO backends which run in parallel, but haven't had the bandwidth to address yet.</div><div><br></div><div>Teresa</div><div class="quoted-text"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div><span><blockquote type="cite"><div><div dir="ltr"><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText">I have a marginal preference for 1), but does anybody have any other preferences or suggestions?<br></p><p class="m_-2457043182847611683m_-73454230778062926gmail-MsoPlainText">Regards,</p>



<span style="font-size:11pt;font-family:"calibri",sans-serif">James</span></div>
</div></blockquote></span></div><br></div></div></blockquote></div></div><font color="#888888"><br><br clear="all"><div><br></div>-- <br><div class="m_-2457043182847611683gmail_signature" data-smartmail="gmail_signature"><span style="font-family:Times;font-size:medium"><table cellspacing="0" cellpadding="0"><tbody><tr style="color:rgb(85,85,85);font-family:sans-serif;font-size:small"><td nowrap style="border-top-style:solid;border-top-color:rgb(213,15,37);border-top-width:2px">Teresa Johnson |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(51,105,232);border-top-width:2px"> Software Engineer |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(0,153,57);border-top-width:2px"> <a href="mailto:tejohnson@google.com" target="_blank">tejohnson@google.com</a> |</td><td nowrap style="border-top-style:solid;border-top-color:rgb(238,178,17);border-top-width:2px"> <a href="tel:(408)%20460-2413" value="+14084602413" target="_blank">408-460-2413</a></td></tr></tbody></table></span></div>
</font></div></div>
</blockquote></div><br></div></div></div>