[llvm-dev] [LTO] -time-passes and libLTO

Rafael Avila de Espindola via llvm-dev llvm-dev at lists.llvm.org
Tue May 2 08:49:53 PDT 2017


James Henderson <jh7370.2008 at my.bristol.ac.uk> writes:

> Hi,
>
> 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.

Using lto_codegen_debug_options is a bit of a hack, but probably
appropriate for -time-passes. We would also have the same issue with a
non hackish way of passing that option.

> We have considered a few options and have come up with the following
> suggestions, and would appreciate some feedback:
>
> 1)      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.

Adding a lto_shutdown sounds reasonable.

> 2)      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.

I would probably avoid that as it requires using lto_codegen_debug_options.

> 3)      Call llvm_shutdown() immediately after compilation as part of the
> compile function.

That would be a small behavior change, which is normally avoided with
the C api.

> 4)      None of the above, because there’s a better way that I am unaware
> of to clean up this state.
>
> I have a marginal preference for 1), but does anybody have any other
> preferences or suggestions?

I think adding a lto_shutdown is the best one, but Duncan and/or Mehdi
have more recent experience with the C api.

Cheers,
Rafael


More information about the llvm-dev mailing list